Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/fourtyone11/origin-hugo-theme.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'assets/node_modules/gonzales-pe/README.md')
-rw-r--r--assets/node_modules/gonzales-pe/README.md808
1 files changed, 808 insertions, 0 deletions
diff --git a/assets/node_modules/gonzales-pe/README.md b/assets/node_modules/gonzales-pe/README.md
new file mode 100644
index 0000000..028be03
--- /dev/null
+++ b/assets/node_modules/gonzales-pe/README.md
@@ -0,0 +1,808 @@
+# Gonzales PE @dev
+
+[![NPM version][npm-img]][npm]
+[![Build Status][travis-img]][travis]
+[![AppVeyor Build Status][appveyor-img]][appveyor]
+
+[npm-img]: https://img.shields.io/npm/v/gonzales-pe.svg
+[npm]: https://www.npmjs.com/package/gonzales-pe
+[travis-img]: https://travis-ci.org/tonyganch/gonzales-pe.svg
+[travis]: https://travis-ci.org/tonyganch/gonzales-pe
+[appveyor-img]: https://ci.appveyor.com/api/projects/status/m29jphtrqt398v2o/branch/dev?svg=true
+[appveyor]: https://ci.appveyor.com/project/tonyganch/gonzales-pe/branch/dev
+
+Gonzales PE is a CSS parser which plays nicely with preprocessors.
+Currently those are supported: SCSS, Sass, LESS.
+Try out Gonzales PE online: [Gonzales PE Playground](http://tonyganch.io/gonzales-pe/).
+
+## Install
+
+(1) To install command-line tool globally:
+
+```bash
+npm install -g git://github.com/tonyganch/gonzales-pe.git#dev
+```
+
+(2) To install parser as a project dependency:
+
+```bash
+npm install --save git://github.com/tonyganch/gonzales-pe.git#dev
+```
+
+(3) If for some reason you want to build files yourself:
+
+```bash
+# Clone the repo.
+git clone git@github.com:tonyganch/gonzales-pe.git
+# Go to dev branch.
+git checkout dev
+# Install project dependencies.
+npm install
+# Install git hooks and build files.
+npm run init
+```
+
+## API
+
+Basically there are a few things you can do:
+
+1. parse css string and get a parse tree in return;
+2. modify tree nodes;
+3. remove tree nodes;
+4. add new nodes to the tree;
+5. convert modified tree back to a string.
+
+The different type of tree nodes can be found in [docs/node-types.md](https://github.com/tonyganch/gonzales-pe/blob/dev/docs/node-types.md).
+
+In examples below I assume that `gonzales` is a parser module and `parseTree`
+is some parsed css:
+
+```js
+let gonzales = require('gonzales-pe');
+let parseTree = gonzales.parse(css);
+```
+
+### gonzales.createNode(options)
+
+##### Description
+
+Creates a new node. Useful when you need to add something to a tree.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>options</td>
+ <td>Options to pass to a `Node` constructor.</td>
+ </tr>
+ <tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>A new node.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let css = 'a {color: tomato}';
+let parseTree = gonzales.parse(css);
+let node = gonzales.createNode({ type: 'animal', content: 'panda' });
+parseTree.content.push(node);
+```
+
+
+### gonzales.parse(css[, options])
+
+##### Description
+
+Parses a css string.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>css</td>
+ <td>A string to parse.</td>
+ </tr>
+ <tr>
+ <td><i>{Object=}</i></td>
+ <td>options</td>
+ <td>Optional. Additional options:
+ <ul>
+ <li>
+ <code>{string} syntax</code> — any of the following: <code>css</code>,
+ <code>less</code>, <code>sass</code>, <code>scss</code>.
+ Default one is <code>css</code>.
+ </li>
+ <li>
+ <code>{string} context</code> — root node's type. For a list of available
+ values see <a href="docs/node-types.md">"Node types"</a>. Default
+ one is <code>stylesheet</code>.
+ </li>
+ <li>
+ <code>{number} tabSize</code> — size of a tab character in spaces.
+ Default one is 1.
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>Parse tree.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let css = 'a {color: tomato}';
+let parseTree = gonzales.parse(css);
+```
+
+```js
+let less = 'a {$color: tomato}';
+let parseTree = gonzales.parse(less, {syntax: 'less'});
+```
+
+```js
+let less = '$color: tomato';
+let parseTree = gonzales.parse(less, {syntax: 'less', rule: 'declaration'});
+```
+
+### parseTree.contains(type)
+
+##### Description
+
+Checks whether there is a child node of given type.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>type</td>
+ <td>
+ Node type we're looking for. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{boolean}</i></td>
+ <td>
+ <code>true</code> if a tree contains a child node of a given type,
+ <code>false</code> otherwise.
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+if (parseTree.contains('space')) {
+ doSomething();
+}
+```
+
+### parseTree.content
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{string|Array}</i></td>
+ <td>Node's content (child nodes or a string).</td>
+ </tr>
+</table>
+
+### parseTree.eachFor([type, ]callback)
+
+##### Description
+
+Calls a function for every child node in tree. If `type` parameter is passed,
+calls a function only for child nodes of a given type. The main difference from
+`parseTree.forEach()` is that this method loops through node list from the end
+to beginning.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string=}</i></td>
+ <td>type</td>
+ <td>
+ Optional. A node type by which to filter child nodes before applying
+ a callback function. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+ <tr>
+ <td><i>{Function}</i></td>
+ <td>callback</td>
+ <td>
+ Function to call for every child node. Accepts following parameters:
+ <ul>
+ <li><code>{Object}</code> — a child node;</li>
+ <li><code>{number}</code> — index of the child node in node list;</li>
+ <li>
+ <code>{Object}</code> — parent node (equals to <code>parseTree</code>).
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+parseTree.eachFor(function(childNode) {
+ doSomething(childNode);
+});
+```
+
+```js
+// Remove all child spaces.
+parseTree.eachFor('space', function(spaceNode, i) {
+ parseTree.removeChild(i);
+});
+```
+
+### parseTree.end
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>
+ End position of the node. Contains following info:
+ <ul>
+ <li>
+ <code>{number} line</code> — last symbol's line number
+ (1-based index);
+ </li>
+ <li>
+ <code>{number} column</code> — last symbol's column number
+ (1-based index).
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+### parseTree.first([type])
+
+##### Description
+
+Gets the first child node. If `type` parameter is passed, gets the first child
+node of a given type. If no node has been found, returns `null`.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string=}</i></td>
+ <td>type</td>
+ <td>
+ Optional. Node type to look for. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{?Object}</i></td>
+ <td>A node.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let node = parseTree.first();
+node.content = 'panda';
+```
+
+```js
+let node = parseTree.first('multilineComment');
+node.content = 'panda';
+```
+
+### parseTree.forEach([type, ]callback)
+
+##### Description
+
+Calls a function for every child node in tree. If `type` parameter is passed,
+calls a function only for child nodes of a given type. The main difference from
+`parseTree.eachFor()` is that this method loops through node list from the
+beginnig to end.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string=}</i></td>
+ <td>type</td>
+ <td>
+ Optional. A node type by which to filter child nodes before applying
+ a callback function. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+ <tr>
+ <td><i>{Function}</i></td>
+ <td>callback</td>
+ <td>
+ Function to call for every child node. Accepts following parameters:
+ <ul>
+ <li><code>{Object}</code> — a child node;</li>
+ <li><code>{number}</code> — index of the child node in node list;</li>
+ <li>
+ <code>{Object}</code> — parent node (equals to <code>parseTree</code>).
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+parseTree.forEach(function(childNode) {
+ doSomething();
+});
+```
+
+```js
+parseTree.forEach('space', function(spaceNode) {
+ doSomething();
+});
+```
+
+### parseTree.get(index)
+
+##### Description
+
+Gets *nth* child of the `parseTree`. If no node has been found, returns `null`.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{number}</i></td>
+ <td>index</td>
+ <td>Index number of node which we're looking for.</td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{?Object}</i></td>
+ <td>A node.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+var node = parseTree.get(2);
+doSomething(node);
+```
+
+### parseTree.insert(index, node)
+
+##### Description
+
+Inserts a node to a given position in `parseTree`.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{number}</i></td>
+ <td>index</td>
+ <td>Index of position where to insert the node.</td>
+ </tr>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>node</td>
+ <td>A node to insert.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let node = gonzales.createNode({type: 'animal', content: 'panda'});
+parseTree.insert(2, node);
+```
+
+### parseTree.is(type)
+
+##### Description
+
+Checks whether the node is of given type.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>type</td>
+ <td>
+ A node type against which to check type of <code>parseTree</code>.
+ For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{boolean}</i></td>
+ <td>
+ <code>true</code> if types are equal, <code>false</code> otherwise.
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+if (node.is('space')) {
+ node.content = '';
+}
+```
+
+### parseTree.last(type)
+
+Gets the last child node. If `type` parameter is passed, gets the last child
+node of a given type. If no node has been found, returns `null`.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string=}</i></td>
+ <td>type</td>
+ <td>
+ Optional. Node type to look for. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{?Object}</i></td>
+ <td>A node.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let node = parseTree.last();
+node.content = 'panda';
+```
+
+```js
+let node = parseTree.last('multilineComment');
+node.content = 'panda';
+```
+
+### parseTree.length
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{number}</i></td>
+ <td>Number of child nodes.</td>
+ </tr>
+</table>
+
+### parseTree.removeChild(index)
+
+##### Description
+
+Removes a child node at a given position.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{number}</i></td>
+ <td>index</td>
+ <td>Index of a child node we need to remove.</td>
+ </tr>
+</table>
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>Removed node.</td>
+ </tr>
+</table>
+##### Examples
+
+```js
+// Swap nodes.
+var node = parseTree.removeChild(1);
+parseTree.insert(0, node);
+```
+
+### parseTree.start
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>
+ Start position of the node. Contains following info:
+ <ul>
+ <li>
+ <code>{number} line</code> — first symbol's line number
+ (1-based index);
+ </li>
+ <li>
+ <code>{number} column</code> — first symbol's column number
+ (1-based index).
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+
+### parseTree.syntax
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>Syntax of original parsed string.</td>
+ </tr>
+</table>
+
+### parseTree.toJson()
+
+##### Description
+
+Converts parse tree to JSON. Useful for printing.
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{Object}</i></td>
+ <td>Parse tree in JSON</td>
+ </tr>
+</table>
+
+### parseTree.toString()
+
+##### Description
+
+Converts parse tree back to string according to original syntax.
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>A compiled string.</td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+let css = parseTree.toString();
+```
+
+### parseTree.traverse(callback)
+
+##### Description
+
+Calls the function for every node in a tree including `parseTree` itself.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{Function}</i></td>
+ <td>callback</td>
+ <td>
+ Function to apply to every node. Accepts following parameters:
+ <ul>
+ <li><code>{Object}</code> — a node to which we apply callback;</li>
+ <li><code>{number}</code> — node's index number inside its parent;</li>
+ <li><code>{Object}</code> — a node's parent;</li>
+ <li>
+ <code>{number}</code> — node's nesting level relative to its parent.
+ </li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+parseTree.traverse(function(node, index, parent) {
+ if (node.is('multilineComment')) {
+ parent.removeChild(index);
+ } else if (node.is('space')) {
+ node.content = ' ';
+ }
+});
+```
+
+### parseTree.traverseByType(type, callback)
+
+##### Description
+
+This method should be called for a root node, because calling it for a child
+will be more time consuming.
+Calls the function for every node of a given type. This means not just child
+nodes, but grandchilds and so on.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>type</td>
+ <td>
+ Node type. For a list of available values please see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+ <tr>
+ <td><i>{Function}</i></td>
+ <td>callback</td>
+ <td>
+ Function to apply to every node of a given type.
+ Accepts following parameters:
+ <ul>
+ <li><code>{Object}</code> — a node to which we apply callback;</li>
+ <li><code>{number}</code> — node's index number inside its parent;</li>
+ <li><code>{Object}</code> — a node's parent.</li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+// Remove all comments.
+parseTree.traverseByType('multilineComment', function(node, index, parent) {
+ parent.removeChild(index);
+});
+```
+
+### parseTree.traverseByTypes(types, callback)
+
+##### Description
+
+This method should be called for a root node, because calling it for a child
+will be more time consuming.
+Calls the function for every node of given types. This means not just child
+nodes, but grandchilds and so on.
+
+##### Parameters
+
+<table>
+ <tr>
+ <td><i>{Array.string}</i></td>
+ <td>types</td>
+ <td>
+ List of node types. For a list of available values please see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+ <tr>
+ <td><i>{Function}</i></td>
+ <td>callback</td>
+ <td>
+ Function to apply to every node of given types.
+ Accepts following parameters:
+ <ul>
+ <li><code>{Object}</code> — a node to which we apply callback;</li>
+ <li><code>{number}</code> — node's index number inside its parent;</li>
+ <li><code>{Object}</code> — a node's parent.</li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+##### Examples
+
+```js
+// Remove all comments and spaces.
+let types = ['multilineComment', 'space'];
+parseTree.traverseByTypes(types, function(node, index, parent) {
+ parent.removeChild(index);
+});
+```
+
+### parseTree.type
+
+##### Returns
+
+<table>
+ <tr>
+ <td><i>{string}</i></td>
+ <td>
+ Node type. For a list of available values see
+ <a href="docs/node-types.md">"Node types"</a>.
+ </td>
+ </tr>
+</table>
+
+
+## Test
+
+To run tests:
+
+ npm test
+
+This command will build library files from sources and run tests on all files
+in syntax directories.
+
+Every test has 3 files: source stylesheet, expected parse tree and expected
+string compiled back from parse tree to css.
+
+If some tests fail, you can find information in test logs:
+
+- `log/test.log` contains all information from stdout;
+- `log/expected.txt` contains only expected text;
+- `log/result.txt` contains only result text.
+
+The last two are made for your convenience: you can use any diff app to see
+the defference between them.
+
+If you want to test one specific string or get a general idea of how Gonzales
+works, you can use `test/ast.js` file.
+Simply change the first two strings (`css` and `syntax` vars) and run:
+
+ node test/single-test.js
+
+## Report
+
+If you find a bug or want to add a feature, welcome to [Issues](https://github.com/tonyganch/gonzales-pe/issues).
+
+If you are shy but have a question, feel free to [drop me a
+line](mailto:tonyganch+gonzales@gmail.com).