\begin{quote}
Snapdragon utility for creating a new AST node in custom code, such as plugins. \end{quote}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27429}{}\doxysection{Install}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27429}
Install with \href{https://www.npmjs.com/}{\texttt{ npm}}\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\$ npm install -\/-\/save snapdragon-\/node }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27430}{}\doxysection{Usage}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27430}
With \href{https://github.com/jonschlinkert/snapdragon}{\texttt{ snapdragon}} v0.\+9.\+0 and higher you can use {\ttfamily this.\+node()} to create a new {\ttfamily Node}, whenever it makes sense.


\begin{DoxyCode}{0}
\DoxyCodeLine{var Node = require('snapdragon-\/node');}
\DoxyCodeLine{var Snapdragon = require('snapdragon');}
\DoxyCodeLine{var snapdragon = new Snapdragon();}
\DoxyCodeLine{}
\DoxyCodeLine{// example usage inside a parser visitor function}
\DoxyCodeLine{snapdragon.parser.set('foo', function() \{}
\DoxyCodeLine{  // get the current "{}start"{} position}
\DoxyCodeLine{  var pos = this.position();}
\DoxyCodeLine{}
\DoxyCodeLine{  // returns the match if regex matches the substring }
\DoxyCodeLine{  // at the current position on `parser.input`}
\DoxyCodeLine{  var match = this.match(/foo/);}
\DoxyCodeLine{  if (match) \{}
\DoxyCodeLine{    // call "{}pos"{} on the node, to set the start and end }
\DoxyCodeLine{    // positions, and return the node to push it onto the AST}
\DoxyCodeLine{    // (snapdragon will push the node onto the correct}
\DoxyCodeLine{    // nodes array, based on the stack)}
\DoxyCodeLine{    return pos(new Node(\{type: 'bar', val: match[0]\}));}
\DoxyCodeLine{  \}}
\DoxyCodeLine{\}); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27431}{}\doxysection{API}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27431}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27432}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L22\char`\"{}$>$\+Node$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27432}
Create a new AST {\ttfamily Node} with the given {\ttfamily val} and {\ttfamily type}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily val} $\ast$$\ast$\{String$\vert$\+Object\}$\ast$$\ast$\+: Pass a matched substring, or an object to merge onto the node.
\item {\ttfamily type} $\ast$$\ast$\{String\}$\ast$$\ast$\+: The node type to use when {\ttfamily val} is a string.
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: node instance
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node('*', 'Star');}
\DoxyCodeLine{var node = new Node(\{type: 'star', val: '*'\}); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27433}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L61\char`\"{}$>$.\+is\+Node$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27433}
Returns true if the given value is a node.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily node} $\ast$$\ast$\{Object\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Boolean\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var Node = require('snapdragon-\/node');}
\DoxyCodeLine{var node = new Node(\{type: 'foo'\});}
\DoxyCodeLine{console.log(Node.isNode(node)); //=> true}
\DoxyCodeLine{console.log(Node.isNode(\{\})); //=> false }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27434}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L80\char`\"{}$>$.\+define$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27434}
Define a non-\/enumberable property on the node instance. Useful for adding properties that shouldn\textquotesingle{}t be extended or visible during debugging.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily name} $\ast$$\ast$\{String\}$\ast$$\ast$
\item {\ttfamily val} $\ast$$\ast$\{any\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: returns the node instance
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node();}
\DoxyCodeLine{node.define('foo', 'something non-\/enumerable'); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27435}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L100\char`\"{}$>$.\+is\+Empty$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27435}
Returns true if {\ttfamily node.\+val} is an empty string, or {\ttfamily node.\+nodes} does not contain any non-\/empty text nodes.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily fn} $\ast$$\ast$\{Function\}$\ast$$\ast$\+: (optional) Filter function that is called on {\ttfamily node} and/or child nodes. {\ttfamily is\+Empty} will return false immediately when the filter function returns false on any nodes.
\item {\ttfamily returns} $\ast$$\ast$\{Boolean\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node(\{type: 'text'\});}
\DoxyCodeLine{node.isEmpty(); //=> true}
\DoxyCodeLine{node.val = 'foo';}
\DoxyCodeLine{node.isEmpty(); //=> false }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27436}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L118\char`\"{}$>$.\+push$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27436}
Given node {\ttfamily foo} and node {\ttfamily bar}, push node {\ttfamily bar} onto {\ttfamily foo.\+nodes}, and set {\ttfamily foo} as {\ttfamily bar.\+parent}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily node} $\ast$$\ast$\{Object\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Number\}$\ast$$\ast$\+: Returns the length of {\ttfamily node.\+nodes}
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{foo.push(bar); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27437}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L140\char`\"{}$>$.\+unshift$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27437}
Given node {\ttfamily foo} and node {\ttfamily bar}, unshift node {\ttfamily bar} onto {\ttfamily foo.\+nodes}, and set {\ttfamily foo} as {\ttfamily bar.\+parent}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily node} $\ast$$\ast$\{Object\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Number\}$\ast$$\ast$\+: Returns the length of {\ttfamily node.\+nodes}
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{foo.unshift(bar); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27438}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L167\char`\"{}$>$.\+pop$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27438}
Pop a node from {\ttfamily node.\+nodes}.


\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Number\}$\ast$$\ast$\+: Returns the popped {\ttfamily node}
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node(\{type: 'foo'\});}
\DoxyCodeLine{node.push(new Node(\{type: 'a'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'b'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'c'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'd'\}));}
\DoxyCodeLine{console.log(node.nodes.length);}
\DoxyCodeLine{//=> 4}
\DoxyCodeLine{node.pop();}
\DoxyCodeLine{console.log(node.nodes.length);}
\DoxyCodeLine{//=> 3 }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27439}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L190\char`\"{}$>$.\+shift$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27439}
Shift a node from {\ttfamily node.\+nodes}.


\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: Returns the shifted {\ttfamily node}
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node(\{type: 'foo'\});}
\DoxyCodeLine{node.push(new Node(\{type: 'a'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'b'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'c'\}));}
\DoxyCodeLine{node.push(new Node(\{type: 'd'\}));}
\DoxyCodeLine{console.log(node.nodes.length);}
\DoxyCodeLine{//=> 4}
\DoxyCodeLine{node.shift();}
\DoxyCodeLine{console.log(node.nodes.length);}
\DoxyCodeLine{//=> 3 }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27440}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L205\char`\"{}$>$.\+remove$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27440}
Remove {\ttfamily node} from {\ttfamily node.\+nodes}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily node} $\ast$$\ast$\{Object\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: Returns the removed node.
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{node.remove(childNode); }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27441}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L231\char`\"{}$>$.\+find$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27441}
Get the first child node from {\ttfamily node.\+nodes} that matches the given {\ttfamily type}. If {\ttfamily type} is a number, the child node at that index is returned.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily type} $\ast$$\ast$\{String\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: Returns a child node or undefined.
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var child = node.find(1); //<= index of the node to get}
\DoxyCodeLine{var child = node.find('foo'); //<= node.type of a child node}
\DoxyCodeLine{var child = node.find(/\string^(foo|bar)\$/); //<= regex to match node.type}
\DoxyCodeLine{var child = node.find(['foo', 'bar']); //<= array of node.type(s) }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27442}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L249\char`\"{}$>$.\+is\+Type$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27442}
Return true if the node is the given {\ttfamily type}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily type} $\ast$$\ast$\{String\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Boolean\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var node = new Node(\{type: 'bar'\});}
\DoxyCodeLine{cosole.log(node.isType('foo'));          // false}
\DoxyCodeLine{cosole.log(node.isType(/\string^(foo|bar)\$/));  // true}
\DoxyCodeLine{cosole.log(node.isType(['foo', 'bar'])); // true }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27443}{}\doxysubsection{$<$a href=\char`\"{}index.\+js\#\+L270\char`\"{}$>$.\+has\+Type$<$/a$>$}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27443}
Return true if the {\ttfamily node.\+nodes} has the given {\ttfamily type}.

{\bfseries{Params}}


\begin{DoxyItemize}
\item {\ttfamily type} $\ast$$\ast$\{String\}$\ast$$\ast$
\item {\ttfamily returns} $\ast$$\ast$\{Boolean\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{}
\DoxyCodeLine{cosole.log(foo.hasType('qux'));          // false}
\DoxyCodeLine{cosole.log(foo.hasType(/\string^(qux|bar)\$/));  // true}
\DoxyCodeLine{cosole.log(foo.hasType(['qux', 'bar'])); // true }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Array\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(bar.siblings.length) // 2}
\DoxyCodeLine{console.log(baz.siblings.length) // 2 }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Number\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{var qux = new Node(\{type: 'qux'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{foo.unshift(qux);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(bar.index) // 1}
\DoxyCodeLine{console.log(baz.index) // 2}
\DoxyCodeLine{console.log(qux.index) // 0 }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(baz.prev.type) // 'bar' }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(bar.siblings.length) // 2}
\DoxyCodeLine{console.log(baz.siblings.length) // 2 }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: The first node, or undefiend
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{var qux = new Node(\{type: 'qux'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{foo.push(qux);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(foo.first.type) // 'bar' }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: The last node, or undefiend
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{var qux = new Node(\{type: 'qux'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{foo.push(qux);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(foo.last.type) // 'qux' }

\end{DoxyCode}



\begin{DoxyItemize}
\item {\ttfamily returns} $\ast$$\ast$\{Object\}$\ast$$\ast$\+: The last node, or undefiend
\end{DoxyItemize}

{\bfseries{Example}}


\begin{DoxyCode}{0}
\DoxyCodeLine{var foo = new Node(\{type: 'foo'\});}
\DoxyCodeLine{var bar = new Node(\{type: 'bar'\});}
\DoxyCodeLine{var baz = new Node(\{type: 'baz'\});}
\DoxyCodeLine{var qux = new Node(\{type: 'qux'\});}
\DoxyCodeLine{foo.push(bar);}
\DoxyCodeLine{foo.push(baz);}
\DoxyCodeLine{foo.push(qux);}
\DoxyCodeLine{}
\DoxyCodeLine{console.log(foo.last.type) // 'qux' }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27444}{}\doxysection{Release history}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27444}
Changelog entries are classified using the following labels from \href{https://github.com/olivierlacan/keep-a-changelog}{\texttt{ keep-\/a-\/changelog}}\+:


\begin{DoxyItemize}
\item {\ttfamily added}\+: for new features
\item {\ttfamily changed}\+: for changes in existing functionality
\item {\ttfamily deprecated}\+: for once-\/stable features removed in upcoming releases
\item {\ttfamily removed}\+: for deprecated features removed in this release
\item {\ttfamily fixed}\+: for any bug fixes
\end{DoxyItemize}

Custom labels used in this changelog\+:


\begin{DoxyItemize}
\item {\ttfamily dependencies}\+: bumps dependencies
\item {\ttfamily housekeeping}\+: code re-\/organization, minor edits, or other changes that don\textquotesingle{}t fit in one of the other categories.
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27445}{}\doxysubsection{\mbox{[}2.\+0.\+0\mbox{]} -\/ 2017-\/05-\/01}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27445}
{\bfseries{Changed}}


\begin{DoxyItemize}
\item {\ttfamily .unshift\+Node} was renamed to \href{\#unshift}{\texttt{ .unshift}}
\item {\ttfamily .push\+Node} was renamed to \href{\#push}{\texttt{ .push}}
\item {\ttfamily .get\+Node} was renamed to \href{\#find}{\texttt{ .find}}
\end{DoxyItemize}

{\bfseries{Added}}


\begin{DoxyItemize}
\item \href{\#isNode}{\texttt{ .is\+Node}}
\item \href{\#isEmpty}{\texttt{ .is\+Empty}}
\item \href{\#pop}{\texttt{ .pop}}
\item \href{\#shift}{\texttt{ .shift}}
\item \href{\#remove}{\texttt{ .remove}}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27446}{}\doxysubsection{\mbox{[}0.\+1.\+0\mbox{]}}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27446}
First release.\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27447}{}\doxysection{About}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27447}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27448}{}\doxysubsection{Related projects}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27448}

\begin{DoxyItemize}
\item \href{https://www.npmjs.com/package/breakdance}{\texttt{ breakdance}}\+: Breakdance is a node.\+js library for converting HTML to markdown. Highly pluggable, flexible and easy… \href{http://breakdance.io}{\texttt{ more}} $\vert$ \href{http://breakdance.io}{\texttt{ homepage}}
\item \href{https://www.npmjs.com/package/snapdragon-capture}{\texttt{ snapdragon-\/capture}}\+: Snapdragon plugin that adds a capture method to the parser instance. $\vert$ \href{https://github.com/jonschlinkert/snapdragon-capture}{\texttt{ homepage}}
\item \href{https://www.npmjs.com/package/snapdragon-cheerio}{\texttt{ snapdragon-\/cheerio}}\+: Snapdragon plugin for converting a cheerio AST to a snapdragon AST. $\vert$ \href{https://github.com/jonschlinkert/snapdragon-cheerio}{\texttt{ homepage}}
\item \href{https://www.npmjs.com/package/snapdragon-util}{\texttt{ snapdragon-\/util}}\+: Utilities for the snapdragon parser/compiler. $\vert$ \href{https://github.com/jonschlinkert/snapdragon-util}{\texttt{ homepage}}
\item \href{https://www.npmjs.com/package/snapdragon}{\texttt{ snapdragon}}\+: Easy-\/to-\/use plugin system for creating powerful, fast and versatile parsers and compilers, with built-\/in source-\/map… \href{https://github.com/jonschlinkert/snapdragon}{\texttt{ more}} $\vert$ \href{https://github.com/jonschlinkert/snapdragon}{\texttt{ homepage}}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27449}{}\doxysubsection{Contributing}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27449}
Pull requests and stars are always welcome. For bugs and feature requests, \href{../../issues/new}{\texttt{ please create an issue}}.

Please read the contributing guide for advice on opening issues, pull requests, and coding standards.\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27450}{}\doxysubsection{Building docs}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27450}
\+\_\+(This project\textquotesingle{}s readme.\+md is generated by \href{https://github.com/verbose/verb-generate-readme}{\texttt{ verb}}, please don\textquotesingle{}t edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)\+\_\+

To generate the readme, run the following command\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\$ npm install -\/g verbose/verb\#dev verb-\/generate-\/readme \&\& verb }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27451}{}\doxysubsection{Running tests}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27451}
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\$ npm install \&\& npm test }

\end{DoxyCode}
\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27452}{}\doxysubsection{Author}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27452}
{\bfseries{Jon Schlinkert}}


\begin{DoxyItemize}
\item \href{https://github.com/jonschlinkert}{\texttt{ github/jonschlinkert}}
\item \href{https://twitter.com/jonschlinkert}{\texttt{ twitter/jonschlinkert}}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27453}{}\doxysubsection{License}\label{md_sfcode_node_modules_snapdragon_node_README_autotoc_md27453}
Copyright © 2017, \href{https://github.com/jonschlinkert}{\texttt{ Jon Schlinkert}}. Released under the \mbox{[}MIT License\mbox{]}(LICENSE).

\DoxyHorRuler{0}


{\itshape This file was generated by \href{https://github.com/verbose/verb-generate-readme}{\texttt{ verb-\/generate-\/readme}}, v0.\+6.\+0, on June 25, 2017.} 