%PDF- %PDF-
Direktori : /home/opti/workflow/node_modules/mensch/ |
Current File : /home/opti/workflow/node_modules/mensch/README.md |
# mensch [](http://travis-ci.org/brettstimmerman/mensch) A decent CSS parser. # usage ```sh npm install mensch ``` ```js var mensch = require('mensch'); var ast = mensch.parse('p { color: black; }'); var css = mensch.stringify(ast); console.log(css); // => p { color: black; } ``` # api ## parse(css, [options={}]) Convert a CSS string or an array of lexical tokens into a `stringify`-able AST. - `css` {String|Array} CSS string or array of lexical tokens - `[options]` {Object} - `[options.comments=false]` {Boolean} Allow comment nodes in the AST. - `[options.position=false]` {Boolean} Allow line/column position in the AST. When `{position: true}`, AST node will have a `position` property: ```js { type: 'comment', text: ' Hello World! ', position: { start: { line: 1, col: 1 }, end: { line 1, col: 18 } } } ``` ## stringify(ast, [options={}]) Convert a `stringify`-able AST into a CSS string. - `ast` {Object} A `stringify`-able AST - `[options]` {Object} - `[options.comments=false]` {Boolean} Allow comments in the stringified CSS. - `[options.indentation='']` {String} E.g., `indentation: ' '` will indent by two spaces. ## lex(css) Convert a CSS string to an array of lexical tokens for use with `.parse()`. - `css` {String} CSS # non-validating Mensch is a non-validating CSS parser. While it can handle the major language constructs just fine, and it can recover from gaffes like mis-matched braces and missing or extraneous semi-colons, mensch can't tell you when it finds invalid CSS like a misspelled property name or a misplaced `@import`. # comments Unlike most CSS parsers, mensch allows comments to be represented in the AST and subsequently stringified with the `{comments: true}` option. ```js var options = { comments: true }; ``` ```js var ast = mensch.parse('.red { color: red; /* Natch. */ }', options); var css = mensch.stringify(ast, options); console.log(css); //=> .red { color: red; /* Natch. */ } ``` However, comments within the context of a selector, property, etc., will be ignored. These comments are difficult to represent in the AST. ```js var ast = mench.parse('.red /*1*/ { color /*2*/: /*3*/ red /*4*/; }', options); var css = mesch.stringify(ast, options); console.log(css); //=> .red { color: red; } ``` # ast The structure of mensch's AST riffs on several existing CSS parsers, but it might not be 100% compatible with other CSS parsers. Here it is in a nutshell: ```js { type: 'stylesheet' stylesheet: { rules: [{ type: 'rule', selectors: ['.foo'], declarations: [{ type: 'property', name: 'color', value: 'black' }] }] } } ``` # credits Mensch is based on several existing CSS parsers, but [nzakas/parser-lib](https://github.com/nzakas/parser-lib) and [visionmedia/css](https://github.com/visionmedia/css) are notable influences. # known users [voidlabs/mosaico](https://github.com/voidlabs/mosaico) uses Mensch parser to parse custom-flavored CSS rules in email templates and make the template editable: positions, comment parsing, multiple declarations for the same property have been keys to the choice of Mensch! Please let us know if you use Mensch in your library!