
\begin{DoxyItemize}
\item Bumped {\ttfamily source-\/map} version to {\ttfamily $^\wedge$0.6.\+1} to fix source map generation inconsistency across node.\+js versions due to mappings sorting bug and v8 moving to \href{https://v8.dev/blog/array-sort}{\texttt{ a stable Array\+::sort}} (\href{https://github.com/mozilla/source-map/commit/f35a2e4212dd025cb5e1fc219e7ac8a4b96c2cc9}{\texttt{ fix commit}} in {\ttfamily source-\/map})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7234}{}\doxysection{1.\+0.\+0-\/alpha.\+36 (\+October 13, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7234}

\begin{DoxyItemize}
\item Dropped support for Node $<$ 8
\item Updated dev deps (fixed {\ttfamily npm audit} issues)
\item Reworked build pipeline
\begin{DoxyItemize}
\item Package provides {\ttfamily dist/csstree.\+js} and {\ttfamily dist/csstree.\+min.\+js} now (instead of single {\ttfamily dist/csstree.\+js} that was a min version)
\item Bundle size (min version) reduced from 191Kb to 158Kb due to some optimisations
\end{DoxyItemize}
\item Definition syntax
\begin{DoxyItemize}
\item Renamed {\ttfamily grammar} into {\ttfamily definition\+Syntax} (named per spec)
\item Added {\ttfamily compact} option to {\ttfamily generate()} method to avoid formatting (spaces) when possible
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Changed {\ttfamily dump()} method to produce syntaxes in compact form by default
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7235}{}\doxysection{1.\+0.\+0-\/alpha.\+35 (\+October 7, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7235}

\begin{DoxyItemize}
\item Walker
\begin{DoxyItemize}
\item Changed implementation to avoid runtime compilation due to CSP issues (see \#91, \#109)
\item Added {\ttfamily find()}, {\ttfamily find\+Last()} and {\ttfamily find\+All()} methods (e.\+g. `csstree.\+find(ast, node =$>$ node.\+type === \textquotesingle{}Class\+Selector')\`{})
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7236}{}\doxysection{1.\+0.\+0-\/alpha.\+34 (\+July 27, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7236}

\begin{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Added {\ttfamily is\+BOM()} function
\item Added {\ttfamily char\+Code\+Category()} function
\item Removed {\ttfamily first\+Char\+Offset()} function (use {\ttfamily is\+BOM()} instead)
\item Removed {\ttfamily CHARCODE} dictionary
\item Removed {\ttfamily INPUT\+\_\+\+STREAM\+\_\+\+CODE$\ast$} dictionaries
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Allowed comments in matching value (just ignore them like whitespaces)
\item Increased iteration count in value matching from 10k up to 15k
\item Fixed missed {\ttfamily debugger} (\#104)
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7237}{}\doxysection{1.\+0.\+0-\/alpha.\+33 (\+July 11, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7237}

\begin{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Fixed low priority productions matching by changing an approach for robust one (\#103)
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7238}{}\doxysection{1.\+0.\+0-\/alpha.\+32 (\+July 11, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7238}

\begin{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Fixed low priority productions matching in long {\ttfamily $\vert$$\vert$-\/} and {\ttfamily \&\&-\/} groups (\#103)
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7239}{}\doxysection{1.\+0.\+0-\/alpha.\+31 (\+July 11, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7239}

\begin{DoxyItemize}
\item Bumped {\ttfamily mdn/data} to {\ttfamily 2.\+0.\+4} (\#99)
\item Lexer
\begin{DoxyItemize}
\item Added \href{https://drafts.csswg.org/css-values-4/\#numeric-ranges}{\texttt{ bracketed range notation}} support and related refactoring
\item Removed {\ttfamily $<$number-\/zero-\/one$>$}, {\ttfamily $<$number-\/one-\/or-\/greater$>$} and {\ttfamily $<$positive-\/integer$>$} from generic types. In fact, types moved to patch, because those types can be expressed in a regular grammar due to bracketed range notation implemented
\item Added support for multiple token string matching
\item Improved {\ttfamily $<$custom-\/ident$>$} production matching to claim the keyword only if no other unfulfilled production can claim it (\#101)
\item Improved {\ttfamily $<$length$>$} production matching to claim \char`\"{}unitless zero\char`\"{} only if no other unfulfilled production can claim it
\item Changed lexer\textquotesingle{}s constructor to prevent generic types override when used
\item Fixed large {\ttfamily $\vert$$\vert$}-\/ and {\ttfamily \&\&}-\/group matching, matching continues from the beginning on term match (\#85)
\item Fixed checking that value has {\ttfamily var()} occurrences when value is a string (such values can\textquotesingle{}t be matched on syntax currently and fail with specific error that can be used for ignorance in validation tools)
\item Fixed {\ttfamily $<$declaration-\/value$>$} and {\ttfamily $<$any-\/value$>$} matching when a value contains a function, parentheses or braces
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7240}{}\doxysection{1.\+0.\+0-\/alpha.\+30 (\+July 3, 2019)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7240}

\begin{DoxyItemize}
\item Bumped {\ttfamily mdn/data} to {\ttfamily $\sim$2.0.\+3}
\begin{DoxyItemize}
\item Removed type removals from {\ttfamily mdn/data} due to lack of some generic types and specific lexer restictions (since lexer was reworked, see below)
\item Reduced and updated patches
\end{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Reworked tokenizer itself to compliment \href{https://drafts.csswg.org/css-syntax/\#tokenization}{\texttt{ CSS Syntax Module Level 3}}
\item {\ttfamily Tokenizer} class splitted into several abstractions\+:
\begin{DoxyItemize}
\item Added {\ttfamily Token\+Stream} class
\item Added {\ttfamily Offset\+To\+Location} class
\item Added {\ttfamily tokenize()} function that creates {\ttfamily Token\+Stream} instance for given string or updates a {\ttfamily Token\+Stream} instance passed as second parameter
\item Removed {\ttfamily Tokenizer} class
\end{DoxyItemize}
\item Removed {\ttfamily Raw} token type
\item Renamed {\ttfamily Identifier} token type to {\ttfamily Ident}
\item Added token types\+: {\ttfamily Hash}, {\ttfamily Bad\+String}, {\ttfamily Bad\+Url}, {\ttfamily Delim}, {\ttfamily Percentage}, {\ttfamily Dimension}, {\ttfamily Colon}, {\ttfamily Semicolon}, {\ttfamily Comma}, {\ttfamily Left\+Square\+Bracket}, {\ttfamily Right\+Square\+Bracket}, {\ttfamily Left\+Parenthesis}, {\ttfamily Right\+Parenthesis}, {\ttfamily Left\+Curly\+Bracket}, {\ttfamily Right\+Curly\+Bracket}
\item Replaced {\ttfamily Punctuator} with {\ttfamily Delim} token type, that excludes specific characters with its own token type like {\ttfamily Colon}, {\ttfamily Semicolon} etc
\item Removed {\ttfamily find\+Comment\+End}, {\ttfamily find\+String\+End}, {\ttfamily find\+Decimal\+Number\+End}, {\ttfamily find\+Number\+End}, {\ttfamily find\+Escape\+End}, {\ttfamily find\+Identifier\+End} and {\ttfamily find\+Url\+Raw\+End} helper function
\item Removed {\ttfamily SYMBOL\+\_\+\+TYPE}, {\ttfamily PUNCTUATION} and {\ttfamily STOP\+\_\+\+URL\+\_\+\+RAW} dictionaries
\item Added {\ttfamily is\+Digit}, {\ttfamily is\+Hex\+Digit}, {\ttfamily is\+Uppercase\+Letter}, {\ttfamily is\+Lowercase\+Letter}, {\ttfamily is\+Letter}, {\ttfamily is\+Non\+Ascii}, {\ttfamily is\+Name\+Start}, {\ttfamily is\+Name}, {\ttfamily is\+Non\+Printable}, {\ttfamily is\+Newline}, {\ttfamily is\+White\+Space}, {\ttfamily is\+Valid\+Escape}, {\ttfamily is\+Identifier\+Start}, {\ttfamily is\+Number\+Start}, {\ttfamily consume\+Escaped}, {\ttfamily consume\+Name}, {\ttfamily consume\+Number} and {\ttfamily consume\+Bad\+Url\+Remnants} helper functions
\end{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Changed parsing algorithms to work with new token type set
\item Changed {\ttfamily Hex\+Color} consumption in way to relax checking a value, i.\+e. now {\ttfamily value} is a sequence of one or more name chars
\item Added {\ttfamily \&} as a property hack
\item Relaxed {\ttfamily var()} parsing to only check that a first arguments is an identifier (not a custom property name as before)
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Reworked syntax matching to relay on token set only (having AST is optional now)
\item Extended {\ttfamily Lexer\#match()}, {\ttfamily Lexer\#match\+Type()} and {\ttfamily Lexer\#match\+Property()} methods to take a string as value, beside AST as a value
\item Extended {\ttfamily Lexer\#match()} method to take a string as a syntax, beside of syntax descriptor
\item Reworked generic types\+:
\begin{DoxyItemize}
\item Removed {\ttfamily $<$attr()$>$}, {\ttfamily $<$url$>$} (moved to patch) and {\ttfamily $<$progid$>$} types
\item Added types\+:
\begin{DoxyItemize}
\item Related to token types\+: {\ttfamily $<$ident-\/token$>$}, {\ttfamily $<$function-\/token$>$}, {\ttfamily $<$at-\/keyword-\/token$>$}, {\ttfamily $<$hash-\/token$>$}, {\ttfamily $<$string-\/token$>$}, {\ttfamily $<$bad-\/string-\/token$>$}, {\ttfamily $<$url-\/token$>$}, {\ttfamily $<$bad-\/url-\/token$>$}, {\ttfamily $<$delim-\/token$>$}, {\ttfamily $<$number-\/token$>$}, {\ttfamily $<$percentage-\/token$>$}, {\ttfamily $<$dimension-\/token$>$}, {\ttfamily $<$whitespace-\/token$>$}, {\ttfamily $<$CDO-\/token$>$}, {\ttfamily $<$CDC-\/token$>$}, {\ttfamily $<$colon-\/token$>$}, {\ttfamily $<$semicolon-\/token$>$}, {\ttfamily $<$comma-\/token$>$}, {\ttfamily $<$\mbox{[}-\/token$>$}, {\ttfamily $<$\mbox{]}-\/token$>$}, {\ttfamily $<$(-\/token$>$}, {\ttfamily $<$)-\/token$>$}, {\ttfamily $<$\{-\/token$>$} and {\ttfamily $<$\}-\/token$>$}
\item Complex types\+: {\ttfamily $<$an-\/plus-\/b$>$}, {\ttfamily $<$urange$>$}, {\ttfamily $<$custom-\/property-\/name$>$}, {\ttfamily $<$declaration-\/value$>$}, {\ttfamily $<$any-\/value$>$} and {\ttfamily $<$zero$>$}
\end{DoxyItemize}
\item Renamed {\ttfamily $<$unicode-\/range$>$} to {\ttfamily $<$urange$>$} as per spec
\item Renamed {\ttfamily $<$expression$>$} (IE legacy extension) to {\ttfamily $<$-\/ms-\/legacy-\/expression$>$} and may to be removed in next releases
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7241}{}\doxysection{1.\+0.\+0-\/alpha.\+29 (\+May 30, 2018)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7241}

\begin{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Syntax matching was completely reworked. Now it\textquotesingle{}s token-\/based and uses state machine. Public API has not changed. However, some internal data structures have changed. Most significal change in syntax match result tree structure, it\textquotesingle{}s became token-\/based instead of node-\/based.
\item Grammar
\begin{DoxyItemize}
\item Changed grammar tree format\+:
\begin{DoxyItemize}
\item Added {\ttfamily Token} node type to represent a single code point ({\ttfamily $<$delim-\/token$>$})
\item Added {\ttfamily Multiplier} that wraps a single node ({\ttfamily term} property)
\item Added {\ttfamily At\+Keyword} to represent {\ttfamily $<$at-\/keyword-\/token$>$}
\item Removed {\ttfamily Slash} and {\ttfamily Percent} node types, they are replaced for a node with {\ttfamily Token} type
\item Changed {\ttfamily Function} to represent {\ttfamily $<$function-\/token$>$} with no children
\item Removed {\ttfamily multiplier} property from {\ttfamily Group}
\end{DoxyItemize}
\item Changed {\ttfamily generate()} method\+:
\begin{DoxyItemize}
\item Method takes an {\ttfamily options} as second argument now ({\ttfamily generate(node, force\+Braces, decorator)} -\/$>$ {\ttfamily generate(node, options)}). Two options are supported\+: {\ttfamily force\+Braces} and {\ttfamily decorator}
\item When a second parameter is a function it treats as {\ttfamily decorate} option value, i.\+e. {\ttfamily generate(node, fn)} -\/$>$ {\ttfamily generate(node, \{ decorate\+: fn \})}
\item Decorate function invokes with additional parameter – a reference to a node
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Renamed {\ttfamily Atrule} const to {\ttfamily At\+Keyword}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7242}{}\doxysection{1.\+0.\+0-\/alpha.\+28 (\+February 19, 2018)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7242}

\begin{DoxyItemize}
\item Renamed {\ttfamily lexer.\+grammar.\+translate()} method into {\ttfamily generate()}
\item Fixed `$<$'-\/webkit-\/font-\/smoothing\textquotesingle{}$>${\ttfamily and}$<$\textquotesingle{}-\/moz-\/osx-\/font-\/smoothing\textquotesingle{}$>${\ttfamily syntaxes (\#75)}
\item {\ttfamily Added vendor keywords for}$<$\textquotesingle{}overflow\textquotesingle{}$>${\ttfamily property syntax (\#76)}
\item {\ttfamily Pinned}mdn-\/data{\ttfamily to}$\sim$1.1.\+0\`{} and fixed issues with some updated property syntaxes
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7243}{}\doxysection{1.\+0.\+0-\/alpha.\+27 (\+January 14, 2018)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7243}

\begin{DoxyItemize}
\item Generator
\begin{DoxyItemize}
\item Changed node\textquotesingle{}s {\ttfamily generate()} methods invocation, methods now take a node as a single argument and context (i.\+e. {\ttfamily this}) that have methods\+: {\ttfamily chunk()}, {\ttfamily node()} and {\ttfamily children()}
\item Renamed {\ttfamily translate()} to {\ttfamily generate()} and changed to take {\ttfamily options} argument
\item Removed {\ttfamily translate\+Markup(ast, enter, leave)} method, use {\ttfamily generate(ast, \{ decorator\+: (handlers) =$>$ \{ ... \}\})} instead
\item Removed {\ttfamily translate\+With\+Source\+Map(ast)}, use {\ttfamily generate(ast, \{ source\+Map\+: true \})} instead
\item Changed to support for children as an array
\end{DoxyItemize}
\item Walker
\begin{DoxyItemize}
\item Changed {\ttfamily walk()} to take an {\ttfamily options} argument instead of handler, with {\ttfamily enter}, {\ttfamily leave}, {\ttfamily visit} and {\ttfamily reverse} options ({\ttfamily walk(ast, fn)} is still works and equivalent to {\ttfamily walk(ast, \{ enter\+: fn \})})
\item Removed {\ttfamily walk\+Up(ast, fn)}, use {\ttfamily walk(ast, \{ leave\+: fn \})}
\item Removed {\ttfamily walk\+Rules(ast, fn)}, use `walk(ast, \{ visit\+: \textquotesingle{}Rule', enter\+: fn \}){\ttfamily instead}
\item {\ttfamily Removed}walk\+Rules\+Right(ast, fn){\ttfamily , use}walk(ast, \{ visit\+: \textquotesingle{}Rule\textquotesingle{}, reverse\+: true, enter\+: fn \}){\ttfamily instead}
\item {\ttfamily Removed}walk\+Declarations(ast, fn){\ttfamily , use}walk(ast, \{ visit\+: \textquotesingle{}Declaration\textquotesingle{}, enter\+: fn \}){\ttfamily instead}
\item {\ttfamily Changed to support for children as array in most cases (}reverse\+: true{\ttfamily will fail on arrays since they have no}for\+Each\+Right()\`{} method)
\end{DoxyItemize}
\item Misc
\begin{DoxyItemize}
\item List
\begin{DoxyItemize}
\item Added {\ttfamily List\#for\+Each()} method
\item Added {\ttfamily List\#for\+Each\+Right()} method
\item Added {\ttfamily List\#filter()} method
\item Changed {\ttfamily List\#map()} method to return a {\ttfamily List} instance instead of {\ttfamily Array}
\item Added {\ttfamily List\#push()} method, similar to {\ttfamily List\#append\+Data()} but returns nothing
\item Added {\ttfamily List\#pop()} method
\item Added {\ttfamily List\#unshift()} method, similar to {\ttfamily List\#prepend\+Data()} but returns nothing
\item Added {\ttfamily List\#shift()} method
\item Added {\ttfamily List\#prepend\+List()} method
\item Changed {\ttfamily List\#insert()}, {\ttfamily List\#insert\+Data()}, {\ttfamily List\#append\+List()} and {\ttfamily List\#insert\+List()} methods to return a list that performed an operation
\end{DoxyItemize}
\item Changed {\ttfamily keyword()} method
\begin{DoxyItemize}
\item Changed {\ttfamily name} field to include a vendor prefix
\item Added {\ttfamily basename} field to contain a name without a vendor prefix
\item Added {\ttfamily custom} field that contain a {\ttfamily true} when keyword is a custom property reference
\end{DoxyItemize}
\item Changed {\ttfamily property()} method
\begin{DoxyItemize}
\item Changed {\ttfamily name} field to include a vendor prefix
\item Added {\ttfamily basename} field to contain a name without any prefixes, i.\+e. a hack and a vendor prefix
\end{DoxyItemize}
\item Added {\ttfamily vendor\+Prefix()} method
\item Added {\ttfamily is\+Custom\+Property()} method
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7244}{}\doxysection{1.\+0.\+0-\/alpha.\+26 (\+November 9, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7244}

\begin{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Added {\ttfamily Tokenizer\#is\+Balance\+Edge()} method
\item Removed {\ttfamily Tokenizer.\+ends\+With()} method
\end{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Made the parser tolerant to errors by default
\item Removed {\ttfamily tolerant} parser option (no parsing modes anymore)
\item Removed {\ttfamily property} parser option (a value parsing does not depend on property name anymore)
\item Canceled error for a handing semicolon in a block
\item Canceled error for unclosed {\ttfamily Brackets}, {\ttfamily Function} and {\ttfamily Parentheses} when EOF is reached
\item Fixed error when prelude ends with a comment for at-\/rules with custom prelude consumer
\item Relaxed at-\/rule parsing\+:
\begin{DoxyItemize}
\item Canceled error when EOF is reached after a prelude
\item Canceled error for an at-\/rule with custom block consumer when at-\/rule has no block (just don\textquotesingle{}t apply consumer in that case)
\item Canceled error on at-\/rule parsing when it occurs outside prelude or block (at-\/rule is converting to {\ttfamily Raw} node)
\item Allowed for any at-\/rule to have a prelude and a block, even if it\textquotesingle{}s invalid per at-\/rule syntax (the responsibility for this check is moved to lexer, since it\textquotesingle{}s possible to construct a AST with such errors)
\end{DoxyItemize}
\item Made a declaration value a safe parsing point (i.\+e. error on value parsing lead to a value is turning into {\ttfamily Raw} node, not a declaration as before)
\item Excluded surrounding white spaces and comments from a {\ttfamily Raw} node that represents a declaration value
\item Changed {\ttfamily Value} parse handler to return a node only with type {\ttfamily Value} (previously it returned a {\ttfamily Raw} node in some cases)
\item Fixed issue with {\ttfamily on\+Parse\+Error()} is not invoked for errors occured on selector or declaration value parsing in some cases
\item Changed using of {\ttfamily on\+Parse\+Error()} to stop parsing if handler throws an exception
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Changed {\ttfamily grammar.\+walk()} to invoke passed handler on entering to node rather than on leaving the node
\item Improved {\ttfamily grammar.\+walk()} to take a walk handler pair as an object, i.\+e. {\ttfamily walk(node, \{ enter\+: fn, leave\+: fn \})}
\item Changed {\ttfamily Lexer\#match$\ast$()} methods to take a node of any type, but with a {\ttfamily children} field
\item Added {\ttfamily Lexer\#match(syntax, node)} method
\item Fixed {\ttfamily Lexer\#match\+Type()} method to stop return a positive result for the CSS wide keywords
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7245}{}\doxysection{1.\+0.\+0-\/alpha25 (\+October 9, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7245}

\begin{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Added fallback node as argument to {\ttfamily on\+Parse\+Error()} handler
\item Fixed raw consuming in tolerant mode when selector is invalid (greedy consuming and redundant warnings)
\item Fixed exception in tolerant mode caused by unknown at-\/rule with unclosed block
\item Changed handling of semicolons\+:
\begin{DoxyItemize}
\item Hanging semicolon inside declaration blocks raise an error or turns into a {\ttfamily Raw} node in tolerant mode instead of being ignored
\item Semicolon outside of declaration blocks opens a {\ttfamily Rule} node as part of selector instead of being ignored
\end{DoxyItemize}
\item Aligned {\ttfamily parse\+Atrule\+Prelude} behaviour to {\ttfamily parse\+Rule\+Prelude}
\begin{DoxyItemize}
\item Removed {\ttfamily Raw} node wraping into {\ttfamily Atrule\+Prelude} when {\ttfamily parse\+Atrule\+Prelude} is disabled
\item Removed error emitting when at-\/rule has a custom prelude customer but no prelude is found (it should be validated by a lexer later)
\end{DoxyItemize}
\end{DoxyItemize}
\item Generator
\begin{DoxyItemize}
\item Fixed performance issue with {\ttfamily translate\+With\+Source\+Map()}, flattening the string (because of mixing building string and indexing into it) turned it into a quadratic algorithm (approximate numbers can be found in \href{https://gist.github.com/lahmatiy/ea25d0e623d88ca9848384b5707d52d9}{\texttt{ the quiz created by this case}})
\end{DoxyItemize}
\item Added support for a single solidus hack for {\ttfamily property()}
\item Minor fixes for custom errors
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7246}{}\doxysection{1.\+0.\+0-\/alpha24 (\+September 14, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7246}

\begin{DoxyItemize}
\item Improved CSSTree to be stable for standart build-\/in objects extension (\#58)
\item Parser
\begin{DoxyItemize}
\item Renamed rule\textquotesingle{}s {\ttfamily selector} to {\ttfamily prelude}. The reasons\+: \href{https://www.w3.org/TR/css-syntax-3/\#qualified-rule}{\texttt{ spec names this part so}}, and this branch can contain not only a selector ({\ttfamily Selector\+List}) but also a raw payload ({\ttfamily Raw}). What\textquotesingle{}s changed\+:
\begin{DoxyItemize}
\item Renamed {\ttfamily Rule.\+selector} to {\ttfamily Rule.\+prelude}
\item Renamed {\ttfamily parse\+Selector} parser option to {\ttfamily parse\+Rule\+Prelude}
\item Removed option for selector parse in {\ttfamily Selector\+List}
\end{DoxyItemize}
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Fixed undefined positions in a error when match a syntax to empty or white space only value
\item Improved {\ttfamily Lexer\#check\+Structure()}
\begin{DoxyItemize}
\item Return a warning as an object with node reference and message
\item No exception on unknown node type, return a warning instead
\end{DoxyItemize}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7247}{}\doxysection{1.\+0.\+0-\/alpha23 (\+September 10, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7247}

\begin{DoxyItemize}
\item Fixed {\ttfamily Tokenizer\#get\+Raw\+Length()}\textquotesingle{}s false positive balance match to the end of input in some cases (\#56)
\item Rename walker\textquotesingle{}s entry point methods to be the same as CSSTree exposed methods (i.\+e. {\ttfamily walk()}, {\ttfamily walk\+Up()} etc)
\item Rename at-\/rule\textquotesingle{}s {\ttfamily expression} to {\ttfamily prelude} (since \href{https://www.w3.org/TR/css-syntax-3/\#at-rule}{\texttt{ spec names it so}})
\begin{DoxyItemize}
\item {\ttfamily Atrule\+Expression} node type → {\ttfamily Atrule\+Prelude}
\item {\ttfamily Atrule.\+expression} field → {\ttfamily Atrule.\+prelude}
\item {\ttfamily parse\+Atrule\+Expression} parser\textquotesingle{}s option → {\ttfamily parse\+Atrule\+Prelude}
\item {\ttfamily atrule\+Expression} parse context → {\ttfamily atrule\+Prelude}
\item {\ttfamily atrule\+Expression} walk context reference → {\ttfamily atrule\+Prelude}
\end{DoxyItemize}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7248}{}\doxysection{1.\+0.\+0-\/alpha22 (\+September 8, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7248}

\begin{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Fixed exception on parsing of unclosed {\ttfamily \{\}-\/block} in tolerant mode
\item Added tolerant mode support for {\ttfamily Declaration\+List}
\item Added standalone entry point, i.\+e. default parser can be used via `require(\textquotesingle{}css-\/tree/lib/parser')\`{} (\#47)
\end{DoxyItemize}
\item Generator
\begin{DoxyItemize}
\item Changed generator to produce {\ttfamily +n} when {\ttfamily An\+Plus\+B.\+a} is {\ttfamily +1} to be \char`\"{}round-\/trip\char`\"{} with parser
\item Added standalone entry point, i.\+e. default generators can be used via `require(\textquotesingle{}css-\/tree/lib/generator')\`{}
\end{DoxyItemize}
\item Walker
\begin{DoxyItemize}
\item Added standalone entry point, i.\+e. default walkers can be used via `require(\textquotesingle{}css-\/tree/lib/walker')\`{} (\#47)
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Added {\ttfamily default} keyword to the list of invalid values for {\ttfamily $<$custom-\/ident$>$} (since it reversed per \href{https://www.w3.org/TR/css-values/\#custom-idents}{\texttt{ spec}})
\end{DoxyItemize}
\item Convertors ({\ttfamily to\+Plain\+Object()} and {\ttfamily from\+Plain\+Object()}) moved to {\ttfamily lib/convertor} (entry point is `require(\textquotesingle{}css-\/tree/lib/convertor')\`{})
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7249}{}\doxysection{1.\+0.\+0-\/alpha21 (\+September 5, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7249}

\begin{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Added {\ttfamily Raw} token type
\item Improved tokenization of {\ttfamily url()} with raw as url to be more spec complient
\item Added {\ttfamily Tokenizer\#balance} array computation on token layout
\item Added {\ttfamily Tokenizer\#get\+Raw\+Length()} to compute a raw length with respect of block balance
\item Added {\ttfamily Tokenizer\#get\+Token\+Start(offset)} method to get token start offset by token index
\item Added {\ttfamily idx} and {\ttfamily balance} fields to each token of {\ttfamily Tokenizer\#dump()} method result
\end{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Added {\ttfamily on\+Parse\+Error} option
\item Reworked node parsers that consume a {\ttfamily Raw} node to use a new approach. Since now a {\ttfamily Raw} node builds in {\ttfamily parser\#Raw()} function only
\item Changed semantic of {\ttfamily parser\#Raw()}, it takes 5 parameters now (it might to be changed in future)
\item Changed {\ttfamily parser\#tolerant\+Parse()} to pass a start token index to fallback function instead of source offset
\item Fixed {\ttfamily Atrule\+Expression} consuming in tolerant mode
\item Atrule handler to convert an empty {\ttfamily Atrule\+Expression} node into {\ttfamily null}
\item Changed {\ttfamily Atrule\+Expression} handler to always return a node (before it could return a {\ttfamily null} in some cases)
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Fixed comma match node for {\ttfamily \#} multiplier
\item Added reference name to {\ttfamily Syntax\+Reference\+Error}
\end{DoxyItemize}
\item Additional fixes on custom errors
\item Reduced possible corruption of base config by {\ttfamily syntax.\+fork()}
\end{DoxyItemize}\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7250}{}\doxysection{1.\+0.\+0-\/alpha20 (\+August 28, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7250}

\begin{DoxyItemize}
\item Tokenizer
\begin{DoxyItemize}
\item Added {\ttfamily Atrule} token type ({\ttfamily $<$at-\/rule-\/token$>$} per spec)
\item Added {\ttfamily Function} token type ({\ttfamily $<$function-\/token$>$} per spec)
\item Added {\ttfamily Url} token type
\item Replaced {\ttfamily Tokenizer\#get\+Types()} method with {\ttfamily Tokenizer\#dump()} to get all tokens as an array
\item Renamed {\ttfamily Tokenizer.\+TYPE.\+Whitespace} to {\ttfamily Tokenizer.\+TYPE.\+White\+Space}
\item Renamed {\ttfamily Tokenizer.\+find\+Whitespace\+End()} to {\ttfamily Tokenizer.\+find\+White\+Space\+End()}
\end{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Added initial implementation of tollerant mode (turn on by passing {\ttfamily tolerant\+: true} option). In this mode parse errors are never occour and any invalid part of CSS turns into a {\ttfamily Raw} node. Current safe points\+: {\ttfamily Atrule}, {\ttfamily Atrule\+Expression}, {\ttfamily Rule}, {\ttfamily Selector} and {\ttfamily Declaration}. Feature is experimental and further improvements are planned.
\item Changed {\ttfamily Atrule.\+expression} to contain a {\ttfamily Atrule\+Expression} node or {\ttfamily null} only (other node types is wrapping into a {\ttfamily Atrule\+Expression} node)
\item Renamed {\ttfamily Attribute\+Selector.\+operator$<$/tt$>$ to {\ttfamily Attribute\+Selector.\+matcher}}
\end{DoxyItemize}
\item {\ttfamily Generator
\begin{DoxyItemize}
\item {\ttfamily translate()} method is now can take a function as second argument, that recieves every generated chunk. When no function is passed, default handler is used, it concats all the chunks and method returns a string.
\end{DoxyItemize}}
\item {\ttfamily Lexer
\begin{DoxyItemize}
\item Used \href{https://github.com/mdn/data}{\texttt{ mdn/data}} package as source of lexer\textquotesingle{}s grammar instead of local dictionaries
\item Added {\ttfamily x} unit to {\ttfamily $<$resolution$>$} generic type
\item Improved match tree\+:
\begin{DoxyItemize}
\item Omited Group (sequences) match nodes
\item Omited empty match nodes (for terms with {\ttfamily zero or more} multipliers)
\item Added {\ttfamily ASTNode} node type to contain a reference to AST node
\item Fixed node duplication (uncompleted match were added to tree)
\item Added AST node reference in match nodes
\item Added comma match node by {\ttfamily \#} multiplier
\end{DoxyItemize}
\item Grammar
\begin{DoxyItemize}
\item Changed {\ttfamily translate()} function to get a handler as third argument (optional). That handler recieves result of node traslation and can be used for decoration purposes. See \href{https://github.com/csstree/docs/blob/04c65af44477b5ea05feb373482898122b2a4528/docs/syntax.html\#L619-L627}{\texttt{ example}}
\item Added {\ttfamily Syntax\+Parse\+Error} to grammar export
\item Reworked group and multipliers representation in syntax tree\+:
\begin{DoxyItemize}
\item Replaced {\ttfamily Sequence} for {\ttfamily Group} node type ({\ttfamily Sequence} node type removed)
\item Added {\ttfamily explicit} boolean property for {\ttfamily Group}
\item Only groups can have a multiplier now (other node types is wrapping into a single term implicit group when multiplier is applied)
\item Renamed {\ttfamily non\+Empty} Group\textquotesingle{}s property to {\ttfamily disallow\+Empty}
\item Added optimisation for syntax tree by dropping redundant root {\ttfamily Group} when it contains a single {\ttfamily Group} term (return this {\ttfamily Group} as a result)
\end{DoxyItemize}
\end{DoxyItemize}
\item Changed lexer\textquotesingle{}s match functionality
\begin{DoxyItemize}
\item Changed {\ttfamily Lexer\#match\+Property()} and {\ttfamily Lexer\#match\+Type()} to return an object instead of match tree. A match tree stores in {\ttfamily matched} field when AST is matched to grammar successfully, otherwise an error in {\ttfamily error} field. The result object also has some methods to test AST node against a match tree\+: {\ttfamily get\+Trace()}, {\ttfamily is\+Type()}, {\ttfamily is\+Property()} and {\ttfamily is\+Keyword()}
\item Added {\ttfamily Lexer\#match\+Declaration()} method
\item Removed {\ttfamily Lexer\#last\+Match\+Error} (error stores in match result object in {\ttfamily error} field)
\end{DoxyItemize}
\item Added initial implementation of search for AST segments (new lexer methods\+: {\ttfamily Lexer\#find\+Value\+Segments()}, {\ttfamily Lexer\#find\+Declaration\+Value\+Segments()} and {\ttfamily Lexer\#find\+All\+Segments})
\item Implemented {\ttfamily Syntax\+Reference\+Error} for unknown property and type references
\end{DoxyItemize}}
\item {\ttfamily Renamed field in resulting object of {\ttfamily property()} function\+: {\ttfamily variable} → {\ttfamily custom}}
\item {\ttfamily Fixed issue with readonly properties (e.\+g. {\ttfamily line} and {\ttfamily column}) of {\ttfamily Error} and exception on attempt to write in i\+OS Safari}
\end{DoxyItemize}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7251}{}\doxysection{1.\+0.\+0-\/alpha19 (\+April 24, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7251}
{\ttfamily 
\begin{DoxyItemize}
\item Extended {\ttfamily List} class with new methods\+:
\begin{DoxyItemize}
\item {\ttfamily List\#prepend(item)}
\item {\ttfamily List\#prepend\+Data(data)}
\item {\ttfamily List\#insert\+Data(data)}
\item {\ttfamily List\#insert\+List(list)}
\item {\ttfamily List\#replace(item, item\+Or\+List)}
\end{DoxyItemize}
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7252}{}\doxysection{1.\+0.\+0-\/alpha18 (\+April 3, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7252}
{\ttfamily 
\begin{DoxyItemize}
\item Added {\ttfamily atrule} walk context (\#39)
\item Changed a result of generate method for {\ttfamily An\+PlusB}, {\ttfamily Attribute\+Selector}, {\ttfamily Function}, {\ttfamily Media\+Feature} and {\ttfamily Ratio} (\href{https://github.com/csstree/csstree/commit/1e9587710efa8e9338bcf0bc794b4b45f286231d}{\texttt{ 1e95877}})
\item Fixed typo in {\ttfamily List} exception messages (@strarsis, \#42)
\item Improved tokenizer to convert an input to a string
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7253}{}\doxysection{1.\+0.\+0-\/alpha17 (\+March 13, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7253}
{\ttfamily 
\begin{DoxyItemize}
\item Implemented new concept of {\ttfamily syntax}
\begin{DoxyItemize}
\item Changed main {\ttfamily exports} to expose a default syntax
\item Defined initial \href{lib/syntax/default.js}{\texttt{ CSS syntax}}
\item Implemented {\ttfamily create\+Syntax()} method to create a new syntax from scratch
\item Implemented {\ttfamily fork()} method to create a new syntax based on given via extension
\end{DoxyItemize}
\item Parser
\begin{DoxyItemize}
\item Implemented {\ttfamily media\+Query\+List} and {\ttfamily media\+Query} parsing contexts
\item Implemented {\ttfamily CDO} and {\ttfamily CDC} node types
\item Implemented additional declaration property prefix hacks ({\ttfamily \#} and {\ttfamily +})
\item Added support for UTF-\/16\+LE BOM
\item Added support for {\ttfamily @font-\/face} at-\/rule
\item Added {\ttfamily chroma()} to legacy IE filter functions
\item Improved {\ttfamily Hex\+Color} to consume hex only
\item Improved support for {\ttfamily \textbackslash{}0} and {\ttfamily \textbackslash{}9} hacks (\#2)
\item Relaxed number check for {\ttfamily Ratio} terms
\begin{DoxyItemize}
\item Allowed fractal values as a {\ttfamily Ratio} term
\item Disallowed zero number as a {\ttfamily Ratio} term
\end{DoxyItemize}
\item Changed important clause parsing
\begin{DoxyItemize}
\item Allowed any identifier for important (to support hacks like {\ttfamily !ie})
\item Store {\ttfamily true} for {\ttfamily important} field in case identifier equals to {\ttfamily important} and string otherwise
\end{DoxyItemize}
\item Fixed parse error formatted message rendering to take into account tabs
\item Removed exposing of {\ttfamily Parser} class
\item Removed {\ttfamily read\+Selector\+Sequence()}, {\ttfamily read\+Sequence\+Fallback()} and {\ttfamily read\+Selector\+Sequence\+Fallback} methods
\item Used single universal sequence consumer for {\ttfamily Atrule\+Expression}, {\ttfamily Selector} and {\ttfamily Value}
\end{DoxyItemize}
\item Generator
\begin{DoxyItemize}
\item Reworked generator to use auto-\/generated functions based on syntax definition (additional work to be done in next releases)
\item Implemented {\ttfamily translate\+Markup(ast, before, after)} method for complex cases
\item Reworked {\ttfamily translate\+With\+Source\+Map} to be more flexible (based on {\ttfamily translate\+Markup}, additional work to be done in next releases)
\end{DoxyItemize}
\item Walker
\begin{DoxyItemize}
\item Reworked walker to use auto-\/generated function based on syntax definition (additional work to be done in next releases)
\end{DoxyItemize}
\item Lexer
\begin{DoxyItemize}
\item Prepared for better extensibility (additional work to be done in next releases)
\item Implemented {\ttfamily check\+Structure(ast)} method to check AST structure based on syntax definition
\item Update syntax dictionaries to latest {\ttfamily mdn/data}
\begin{DoxyItemize}
\item Add missing `$<$\textquotesingle{}offset-\/position'$>${\ttfamily syntax}
\item {\ttfamily Extended}$<$position$>${\ttfamily property with}-\/webkit-\/sticky\`{} (@sergejmueller, \#37)
\end{DoxyItemize}
\item Improved mismatch error position
\end{DoxyItemize}
\item Implemented script ({\ttfamily gen\+:syntax}) to generate AST format reference page ({\ttfamily docs/ast.\+md}) using syntax definition
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7254}{}\doxysection{1.\+0.\+0-\/alpha16 (\+February 12, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7254}
{\ttfamily 
\begin{DoxyItemize}
\item Exposed {\ttfamily Parser} class
\item Added {\ttfamily start\+Offset} option to {\ttfamily Tokenizer} (constructor and {\ttfamily set\+Source()} method)
\item Added fallback functions for default ({\ttfamily read\+Sequence\+Fallback}) and selector ({\ttfamily read\+Selector\+Sequence\+Fallback}) sequence readers
\item Fixed edge cases for {\ttfamily An\+PlusB}
\item Fixed wrong whitespace ignoring in {\ttfamily Selector} consumer
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7255}{}\doxysection{1.\+0.\+0-\/alpha15 (\+February 8, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7255}
{\ttfamily 
\begin{DoxyItemize}
\item Fixed broken {\ttfamily atrule\+Expression} context
\item Fixed vendor prefix detection in {\ttfamily keyword()} and {\ttfamily property()}
\item Fixed {\ttfamily property()} to not lowercase custom property names
\item Added {\ttfamily variable} boolean flag in {\ttfamily property()} result
\item Renamed {\ttfamily scanner} into {\ttfamily tokenizer}
\item Ranamed {\ttfamily syntax} into {\ttfamily lexer}
\item Moved {\ttfamily docs/$\ast$.html} files to \href{https://github.com/csstree/docs}{\texttt{ csstree/docs}} repo
\item Added {\ttfamily element()} function for {\ttfamily Value} context ({\ttfamily -\/moz-\/element()} supported as well)
\item Merged {\ttfamily Universal} node type into {\ttfamily Type}
\item Renamed node types\+:
\begin{DoxyItemize}
\item {\ttfamily Id} -\/$>$ {\ttfamily Id\+Selector}
\item {\ttfamily Class} -\/$>$ {\ttfamily Class\+Selector}
\item {\ttfamily Type} -\/$>$ {\ttfamily Type\+Selector}
\item {\ttfamily Attribute} -\/$>$ {\ttfamily Attribute\+Selector}
\item {\ttfamily Pseudo\+Class} -\/$>$ {\ttfamily Pseudo\+Class\+Selector}
\item {\ttfamily Pseudo\+Element} -\/$>$ {\ttfamily Pseudo\+Element\+Selector}
\item {\ttfamily Hash} -\/$>$ {\ttfamily Hex\+Color}
\item {\ttfamily Space} -\/$>$ {\ttfamily White\+Space}
\item {\ttfamily An+B} -\/$>$ {\ttfamily An\+PlusB}
\end{DoxyItemize}
\item Removed {\ttfamily Progid} node type
\item Relaxed {\ttfamily Media\+Query} consumer to not validate syntax on parse and to include whitespaces in children sequence as is
\item Added {\ttfamily White\+Space.\+value} property to store whitespace sequence
\item Implemented parser options to specify what should be parsed in details (when option is {\ttfamily false} some part of CSS represents as balanced {\ttfamily Raw})\+:
\begin{DoxyItemize}
\item {\ttfamily parse\+Atrule\+Expression} – to parse at-\/rule expressions ({\ttfamily true} by default)
\item {\ttfamily parse\+Selector} – to parse rule\textquotesingle{}s selector ({\ttfamily true} by default)
\item {\ttfamily parse\+Value} -\/ to parse declaration\textquotesingle{}s value ({\ttfamily true} by default)
\item {\ttfamily parse\+Custom\+Property} – to parse value and fallback of custom property ({\ttfamily false} by default)
\end{DoxyItemize}
\item Changed tokenization to stick leading hyphen minus to identifier token
\item Changed selector parsing\+:
\begin{DoxyItemize}
\item Don\textquotesingle{}t convert spaces into descendant combinator
\item Don\textquotesingle{}t validate selector structure on parsing (selectors may be checked by lexer later)
\end{DoxyItemize}
\item Initial refactoring of \href{https://github.com/csstree/csstree/blob/master/docs}{\texttt{ docs}}
\item Various improvements and fixes
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7256}{}\doxysection{1.\+0.\+0-\/alpha14 (\+February 3, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7256}
{\ttfamily 
\begin{DoxyItemize}
\item Implemented {\ttfamily Declaration\+List}, {\ttfamily Media\+Query\+List}, {\ttfamily Media\+Query}, {\ttfamily Media\+Feature} and {\ttfamily Ratio} node types
\item Implemented {\ttfamily declaration\+List} context (useful to parse HTML {\ttfamily style} attribute content)
\item Implemented custom consumers for {\ttfamily @import}, {\ttfamily @media}, {\ttfamily @page} and {\ttfamily @supports} at-\/rules
\item Implemented {\ttfamily atrule} option for {\ttfamily parse()} config, is used for {\ttfamily atrule\+Expession} context to specify custom consumer for at-\/rule if any
\item Added {\ttfamily Scanner\#skip\+WS()}, {\ttfamily Scanner\#eat\+Non\+WS()}, {\ttfamily Scanner\#consume()} and {\ttfamily Scanner\#consume\+Non\+WS()} helper methods
\item Added custom consumers for known functional-\/pseudos, consume unknown functional-\/pseudo content as balanced {\ttfamily Raw}
\item Allowed any {\ttfamily Pseudo\+Element} to be a functional-\/pseudo (\#33)
\item Improved walker implementations to reduce GC thrashing by reusing cursors
\item Changed {\ttfamily Atrule.\+block} to contain a {\ttfamily Block} node type only if any
\item Changed {\ttfamily Block.\+loc} positions to include curly brackets
\item Changed {\ttfamily Atrule.\+expression} to store a {\ttfamily null} if no expression
\item Changed parser to use {\ttfamily Style\+Sheet} node type only for top level node (when context is {\ttfamily stylesheet}, that\textquotesingle{}s by default)
\item Changed {\ttfamily Parentheses}, {\ttfamily Brackets} and {\ttfamily Function} consumers to use passed sequence reader instead of its own
\item Changed {\ttfamily Value} and {\ttfamily Atrule\+Expression} consumers to use common sequence reader (that reader was used by {\ttfamily Value} consumer before)
\item Changed default sequence reader to exclude storage of spaces around {\ttfamily Comma}
\item Changed processing of custom properties\+:
\begin{DoxyItemize}
\item Consume declaration value as balanced {\ttfamily Raw}
\item Consume {\ttfamily var()} fallback value as balanced {\ttfamily Raw}
\item Validate first argument of {\ttfamily var()} starts with double dash
\item Custom property\textquotesingle{}s value and fallback includes spaces around
\end{DoxyItemize}
\item Fixed {\ttfamily Nth} to have a {\ttfamily loc} property
\item Fixed {\ttfamily Selector\+List.\+loc} and {\ttfamily Selector.\+loc} positions to exclude spaces
\item Fixed issue Browserify build fail with {\ttfamily default-\/syntax.\+json} is not found error (\#32, @philschatz)
\item Disallowed {\ttfamily Type} selector starting with dash (parser throws an error in this case now)
\item Disallowed empty selectors for {\ttfamily Rule} (not sure if it\textquotesingle{}s correct but looks reasonable)
\item Removed {\ttfamily $>$$>$} combinator support until any browser support (no signals about that yet)
\item Removed {\ttfamily Pseudo\+Element.\+legacy} property
\item Removed special case for {\ttfamily \+:before}, {\ttfamily \+:after}, {\ttfamily \+:first-\/letter} and {\ttfamily \+:first-\/line} to represent them as {\ttfamily Pseudo\+Element}, now those pseudos are represented as {\ttfamily Pseudo\+Class} nodes
\item Removed deprecated {\ttfamily Syntax\#match()} method
\item Parser was splitted into modules and related changes, one step closer to an extensible parser
\item Various fixes and improvements, all changes have negligible impact on performance
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7257}{}\doxysection{1.\+0.\+0-\/alpha13 (\+January 19, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7257}
{\ttfamily 
\begin{DoxyItemize}
\item Changed location storing in {\ttfamily Syntax\+Match\+Error}
\begin{DoxyItemize}
\item Changed property to store mismatch offset to {\ttfamily mismatch\+Offset}
\item Changed {\ttfamily offset} property to store bad node offset in source CSS if any
\item Added {\ttfamily loc} property that stores bad node {\ttfamily loc} if any
\end{DoxyItemize}
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7258}{}\doxysection{1.\+0.\+0-\/alpha12 (\+January 19, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7258}
{\ttfamily 
\begin{DoxyItemize}
\item Fixed {\ttfamily Syntax\#match\+Property()} method to always return a positive result for custom properties since syntax is never defined for them (\#31)
\item Implemented {\ttfamily from\+Plain\+Object()} and {\ttfamily to\+Plain\+Object()} to convert plain object to AST or AST to plain object (currently converts {\ttfamily List} $<$-\/$>$ {\ttfamily Array})
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7259}{}\doxysection{1.\+0.\+0-\/alpha11 (\+January 18, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7259}
{\ttfamily 
\begin{DoxyItemize}
\item Added support for {\ttfamily \+:matches($<$selector-\/list$>$)} (\#28)
\item Added support for {\ttfamily \+:has($<$relative-\/selector-\/list$>$)}
\item Added support for {\ttfamily \+::slotted($<$compound-\/selector$>$)}
\item Implemented {\ttfamily Brackets} node type
\item Implemented basic support for at-\/rule inside rule block (\#24)
\item Renamed {\ttfamily Selector} node type to {\ttfamily Selector\+List}
\item Renamed {\ttfamily Simple\+Selector} node type to {\ttfamily Selector}
\item Renamed {\ttfamily Unicode\+Range.\+name} property to {\ttfamily Unicode\+Range.\+value}
\item Replaced {\ttfamily Negation} node type for regular {\ttfamily Pseudo\+Class}
\item Unified name of node property to store nested nodes, it always {\ttfamily children} now\+:
\begin{DoxyItemize}
\item {\ttfamily Style\+Sheet.\+rules} -\/$>$ {\ttfamily Style\+Sheet.\+children}
\item {\ttfamily Selector\+List.\+selectors} -\/$>$ {\ttfamily Selector\+List.\+children}
\item {\ttfamily Block.\+declarations} -\/$>$ {\ttfamily Block.\+children}
\item {\ttfamily $\ast$.sequence} -\/$>$ {\ttfamily $\ast$.children}
\end{DoxyItemize}
\item Fixed edge cases in parsing {\ttfamily Hex} and {\ttfamily Unicode\+Range} when number not an integer
\item Changed {\ttfamily nth-\/} pseudos parsing
\begin{DoxyItemize}
\item Implemented {\ttfamily An+B} node type to represent expressions like {\ttfamily 2n + 1} or {\ttfamily -\/3n}
\item Fixed edge cases when {\ttfamily a} or {\ttfamily b} is not an integer
\item Changed {\ttfamily odd} and {\ttfamily even} keywords processing, keywords are storing as {\ttfamily Identifier} node type now
\item Changed {\ttfamily Nth} node type format to store a {\ttfamily nth}-\/query and an optional {\ttfamily selector}
\item Implemented {\ttfamily of} clause for {\ttfamily nth-\/} pseudos (a.\+e. {\ttfamily \+:nth-\/child(2n + 1 of li, img)})
\item Limited {\ttfamily Nth} parsing rules to {\ttfamily \+:nth-\/child()}, {\ttfamily \+:nth-\/last-\/child()}, {\ttfamily \+:nth-\/of-\/type()} and {\ttfamily \+:nth-\/last-\/of-\/type()} pseudos
\end{DoxyItemize}
\item Changed the way to store locations
\begin{DoxyItemize}
\item Renamed {\ttfamily info} node property to {\ttfamily loc}
\item Changed format of {\ttfamily loc} to store {\ttfamily start} and {\ttfamily end} positions
\end{DoxyItemize}
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7260}{}\doxysection{1.\+0.\+0-\/alpha10 (\+January 11, 2017)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7260}
{\ttfamily 
\begin{DoxyItemize}
\item Reworked {\ttfamily Scanner} to be a single point to its functionality
\item Exposed {\ttfamily Scanner} class to be useful for external projects
\item Changed {\ttfamily walk()} function behaviour to traverse AST nodes in natural order
\item Implemented {\ttfamily walk\+Up()} function to traverse AST nodes from deepest to parent (behaves as {\ttfamily walk()} before)
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7261}{}\doxysection{1.\+0.\+0-\/alpha9 (\+December 21, 2016)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7261}
{\ttfamily 
\begin{DoxyItemize}
\item Fixed {\ttfamily $<$angle$>$} generic according to specs that allow a {\ttfamily $<$number$>$} equals to zero to be used as valid value (\#30)
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7262}{}\doxysection{1.\+0.\+0-\/alpha8 (\+November 11, 2016)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7262}
{\ttfamily 
\begin{DoxyItemize}
\item Fixed {\ttfamily Scanner\#skip()} issue method when cursor is moving to the end of source
\item Simplified {\ttfamily Progid} node
\item Changed behaviour for bad selector processing, now parsing fails instead of selector ignoring
\item Fixed {\ttfamily $<$id-\/selector$>$} generic syntax
\item Added {\ttfamily q} unit for {\ttfamily $<$length$>$} generic syntax
\item Refactored syntax parser (performance)
\item Reduced startup time by implementing lazy syntax parsing (default syntax doesn\textquotesingle{}t parse on module load)
\item Updated syntax dictionaries and used \href{https://github.com/mdn/data}{\texttt{ {\ttfamily mdn/data}}} instead of {\ttfamily Template\+:CSSData}
\item Renamed {\ttfamily syntax.\+stringify()} method to {\ttfamily syntax.\+translate()}
\item Simplified generic syntax functions, those functions receive a single AST node for checking and should return {\ttfamily true} or {\ttfamily false}
\item Added exception for values that contains {\ttfamily var()}, those values are always valid for now
\item Added more tests and increase code coverage to {\ttfamily 98.\+5\%}
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7263}{}\doxysection{1.\+0.\+0-\/alpha7 (\+October 7, 2016)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7263}
{\ttfamily 
\begin{DoxyItemize}
\item Added support for explicit descendant combinator ({\ttfamily $>$$>$})
\item Implemented {\ttfamily Type} and {\ttfamily Universal} type nodes
\item Improved {\ttfamily Number} parsing by including sign and exponent (\#26)
\item Parse {\ttfamily before}, {\ttfamily after}, {\ttfamily first-\/letter} and {\ttfamily first-\/line} pseudos with single colon as {\ttfamily Pseudo\+Element}
\item Changed {\ttfamily Functional\+Pseudo} node type to {\ttfamily Pseudo\+Class}
\item Fixed attribute selector name parsing (namespace edge cases)
\item Fixed location calculation for specified offset when {\ttfamily eof} is reached
\item Added more non-\/standard colors (\#25)
\item Removed obsolete {\ttfamily Syntax\#get\+All()} method
\item Fixed various edge cases, code clean up and performance improvements
\end{DoxyItemize}}

{\ttfamily }\hypertarget{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7264}{}\doxysection{1.\+0.\+0-\/alpha6 (\+September 23, 2016)}\label{md_sfcode_node_modules_css_tree_CHANGELOG_autotoc_md7264}
{\ttfamily 
\begin{DoxyItemize}
\item More accurate positions for syntax mismatch errors
\item Added \href{https://webkit.org/blog/3709/using-the-system-font-in-web-content/}{\texttt{ {\ttfamily apple}}} specific font keywords (\#20)
\item Changed {\ttfamily Property} node stucture from object to string
\item Renamed {\ttfamily Ruleset} node type to {\ttfamily Rule}
\item Removed {\ttfamily Argument} node type
\item Fixed {\ttfamily Dimension} and {\ttfamily Percentage} position computation
\item Fixed bad selector parsing (temporary solution)
\item Fixed location computation for CSS with very long lines that may lead to really long parsing with {\ttfamily positions\+:true} (even freeze)
\item Fixed {\ttfamily line} and {\ttfamily column} computation for {\ttfamily Syntax\+Match} error
\item Improved performance of parsing and translation. Now CSSTree is under 10ms in \href{https://github.com/postcss/benchmark}{\texttt{ Post\+CSS benchmark}}. 
\end{DoxyItemize}}