1.1.3 (March 31, 2021)
 
 
 - Fixed matching on CSS wide keywords for at-rule's prelude and descriptors
- Added fit-contenttowidthproperty patch as browsers are supported it as a keyword (nonstandard), but spec defines it as a function
- Fixed parsing a value contains parentheses or brackets and parseValueoption is set tofalse, in that case!importantwas included into a value but must not (#155)
1.1.2 (November 26, 2020)
 
 
 - Rolled back to use spread syntax in object literals since it not supported by nodejs < 8.3 (#145)
1.1.1 (November 18, 2020)
 
 
 - Fixed edge cases in mismatch location computation for SyntaxMatchError
1.1.0 (November 17, 2020)
 
 
 - Bumped mdn-datato 2.0.14
- Extended fork()method to allow append syntax instead of overriding fortypes,propertiesandatrules, e.g.csstree.fork({ types: { color: '| foo | bar' } })
- Extended lexer API for validation 
   
   - Added Lexer#checkAtruleName(atruleName),Lexer#checkAtrulePrelude(atruleName, prelude),Lexer#checkAtruleDescriptorName(atruleName, descriptorName)andLexer#checkPropertyName(propertyName)
- Added Lexer#getAtrule(atruleName, fallbackBasename)method
- Extended Lexer#getAtrulePrelude()andLexer#getProperty()methods to takefallbackBasenameparameter
- Improved SyntaxMatchErrorlocation details
- Changed error messages
 
1.0.1 (November 11, 2020)
 
 
 - Fixed edge cases for parsing of custom property value with a single whitespace when parseCustomProperty:true
1.0.0 (October 27, 2020)
 
 
 - Added onCommentoption to parser config
- Added support for breakandskipvalues inwalk()to control traversal
- Added List#reduce()andList#reduceRight()methods
- Bumped mdn-datato 2.0.12
- Exposed version of the lib (i.e. import { version } from 'css-tree')
- Fixed Lexer#dump()to dump atrules syntaxes as well
- Fixed matching comma separated <urange>list (#135)
- Renamed HexColornode type intoHash
- Removed element()specific parsing rules
- Removed dist/default-syntax.jsonfrom package
1.0.0-alpha.39 (December 5, 2019)
 
 
 - Fixed walker with visit: "Declaration"to iterateDeclarationList(#114)
1.0.0-alpha.38 (November 25, 2019)
 
 
 - Bumped mdn-datato2.0.6
- Added initial implmentation for at-rule matching via Lexer#matchAtrulePrelude()andLexer#matchAtruleDescriptor()methods
- Added -moz-control-character-visibility,-ms-grid-columns,-ms-grid-rowsand-ms-hyphenate-limit-lastproperties to patch (#111)
- Added flow,flow-rootandtable-captionvalues to patcheddisplay(#112)
1.0.0-alpha.37 (October 22, 2019)
 
 
 - Bumped source-mapversion to^0.6.1to fix source map generation inconsistency across node.js versions due to mappings sorting bug and v8 moving to a stable Array#sort (fix commit insource-map)
1.0.0-alpha.36 (October 13, 2019)
 
 
 - Dropped support for Node < 8
- Updated dev deps (fixed npm auditissues)
- Reworked build pipeline 
   
   - Package provides dist/csstree.jsanddist/csstree.min.jsnow (instead of singledist/csstree.jsthat was a min version)
- Bundle size (min version) reduced from 191Kb to 158Kb due to some optimisations
 
- Definition syntax 
   
   - Renamed grammarintodefinitionSyntax(named per spec)
- Added compactoption togenerate()method to avoid formatting (spaces) when possible
 
- Lexer 
   
   - Changed dump()method to produce syntaxes in compact form by default
 
1.0.0-alpha.35 (October 7, 2019)
 
 
 - Walker 
   
   - Changed implementation to avoid runtime compilation due to CSP issues (see #91, #109)
- Added find(),findLast()andfindAll()methods (e.g.csstree.find(ast, node => node.type === 'ClassSelector'))
 
1.0.0-alpha.34 (July 27, 2019)
 
 
 - Tokenizer 
   
   - Added isBOM()function
- Added charCodeCategory()function
- Removed firstCharOffset()function (useisBOM()instead)
- Removed CHARCODEdictionary
- Removed INPUT_STREAM_CODE*dictionaries
 
- Lexer 
   
   - Allowed comments in matching value (just ignore them like whitespaces)
- Increased iteration count in value matching from 10k up to 15k
- Fixed missed debugger(#104)
 
1.0.0-alpha.33 (July 11, 2019)
 
 
 - Lexer 
   
   - Fixed low priority productions matching by changing an approach for robust one (#103)
 
1.0.0-alpha.32 (July 11, 2019)
 
 
 - Lexer 
   
   - Fixed low priority productions matching in long ||-and&&-groups (#103)
 
1.0.0-alpha.31 (July 11, 2019)
 
 
 - Bumped mdn/datato2.0.4(#99)
- Lexer 
   
   - Added bracketed range notation support and related refactoring
- Removed <number-zero-one>,<number-one-or-greater>and<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
- Added support for multiple token string matching
- Improved <custom-ident>production matching to claim the keyword only if no other unfulfilled production can claim it (#101)
- Improved <length>production matching to claim "unitless zero" only if no other unfulfilled production can claim it
- Changed lexer's constructor to prevent generic types override when used
- Fixed large ||- and&&-group matching, matching continues from the beginning on term match (#85)
- Fixed checking that value has var()occurrences when value is a string (such values can't be matched on syntax currently and fail with specific error that can be used for ignorance in validation tools)
- Fixed <declaration-value>and<any-value>matching when a value contains a function, parentheses or braces
 
1.0.0-alpha.30 (July 3, 2019)
 
 
 - Bumped mdn/datato~2.0.3 
   - Removed type removals from mdn/datadue to lack of some generic types and specific lexer restictions (since lexer was reworked, see below)
- Reduced and updated patches
 
- Tokenizer 
   
   - Reworked tokenizer itself to compliment CSS Syntax Module Level 3
- Tokenizerclass splitted into several abstractions:-  
     - Added TokenStreamclass
- Added OffsetToLocationclass
- Added tokenize()function that createsTokenStreaminstance for given string or updates aTokenStreaminstance passed as second parameter
- Removed Tokenizerclass
 
- Removed Rawtoken type
- Renamed Identifiertoken type toIdent
- Added token types: Hash,BadString,BadUrl,Delim,Percentage,Dimension,Colon,Semicolon,Comma,LeftSquareBracket,RightSquareBracket,LeftParenthesis,RightParenthesis,LeftCurlyBracket,RightCurlyBracket
- Replaced PunctuatorwithDelimtoken type, that excludes specific characters with its own token type likeColon,Semicolonetc
- Removed findCommentEnd,findStringEnd,findDecimalNumberEnd,findNumberEnd,findEscapeEnd,findIdentifierEndandfindUrlRawEndhelper function
- Removed SYMBOL_TYPE,PUNCTUATIONandSTOP_URL_RAWdictionaries
- Added isDigit,isHexDigit,isUppercaseLetter,isLowercaseLetter,isLetter,isNonAscii,isNameStart,isName,isNonPrintable,isNewline,isWhiteSpace,isValidEscape,isIdentifierStart,isNumberStart,consumeEscaped,consumeName,consumeNumberandconsumeBadUrlRemnantshelper functions
 
- Parser 
   
   - Changed parsing algorithms to work with new token type set
- Changed HexColorconsumption in way to relax checking a value, i.e. nowvalueis a sequence of one or more name chars
- Added &as a property hack
- Relaxed var()parsing to only check that a first arguments is an identifier (not a custom property name as before)
 
- Lexer 
   
   - Reworked syntax matching to relay on token set only (having AST is optional now)
- Extended Lexer#match(),Lexer#matchType()andLexer#matchProperty()methods to take a string as value, beside AST as a value
- Extended Lexer#match()method to take a string as a syntax, beside of syntax descriptor
- Reworked generic types: 
     
     - Removed <attr()>,<url>(moved to patch) and<progid>types
- Added types: 
       
       - Related to token types: <ident-token>,<function-token>,<at-keyword-token>,<hash-token>,<string-token>,<bad-string-token>,<url-token>,<bad-url-token>,<delim-token>,<number-token>,<percentage-token>,<dimension-token>,<whitespace-token>,<CDO-token>,<CDC-token>,<colon-token>,<semicolon-token>,<comma-token>,<[-token>,<]-token>,<(-token>,<)-token>,<{-token>and<}-token>
- Complex types: <an-plus-b>,<urange>,<custom-property-name>,<declaration-value>,<any-value>and<zero>
 
- Renamed <unicode-range>to<urange>as per spec
- Renamed <expression>(IE legacy extension) to<-ms-legacy-expression>and may to be removed in next releases
 
 
1.0.0-alpha.29 (May 30, 2018)
 
 
 - Lexer 
   
   - Syntax matching was completely reworked. Now it'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's became token-based instead of node-based.
- Grammar 
     
     - Changed grammar tree format: 
       
       - Added Tokennode type to represent a single code point (<delim-token>)
- Added Multiplierthat wraps a single node (termproperty)
- Added AtKeywordto represent<at-keyword-token>
- Removed SlashandPercentnode types, they are replaced for a node withTokentype
- Changed Functionto represent<function-token>with no children
- Removed multiplierproperty fromGroup
 
- Changed generate()method: 
       - Method takes an optionsas second argument now (generate(node, forceBraces, decorator)->generate(node, options)). Two options are supported:forceBracesanddecorator
- When a second parameter is a function it treats as decorateoption value, i.e.generate(node, fn)->generate(node, { decorate: fn })
- Decorate function invokes with additional parameter – a reference to a node
 
 
 
- Tokenizer 
   
   - Renamed Atruleconst toAtKeyword
 
1.0.0-alpha.28 (February 19, 2018)
 
 
 - Renamed lexer.grammar.translate()method intogenerate()
- Fixed <'-webkit-font-smoothing'>and<'-moz-osx-font-smoothing'>syntaxes (#75)
- Added vendor keywords for <'overflow'>property syntax (#76)
- Pinned mdn-datato~1.1.0and fixed issues with some updated property syntaxes
1.0.0-alpha.27 (January 14, 2018)
 
 
 - Generator 
   
   - Changed node's generate()methods invocation, methods now take a node as a single argument and context (i.e.this) that have methods:chunk(),node()andchildren()
- Renamed translate()togenerate()and changed to takeoptionsargument
- Removed translateMarkup(ast, enter, leave)method, usegenerate(ast, { decorator: (handlers) => { ... }})instead
- Removed translateWithSourceMap(ast), usegenerate(ast, { sourceMap: true })instead
- Changed to support for children as an array
 
- Walker 
   
   - Changed walk()to take anoptionsargument instead of handler, withenter,leave,visitandreverseoptions (walk(ast, fn)is still works and equivalent towalk(ast, { enter: fn }))
- Removed walkUp(ast, fn), usewalk(ast, { leave: fn })
- Removed walkRules(ast, fn), usewalk(ast, { visit: 'Rule', enter: fn })instead
- Removed walkRulesRight(ast, fn), usewalk(ast, { visit: 'Rule', reverse: true, enter: fn })instead
- Removed walkDeclarations(ast, fn), usewalk(ast, { visit: 'Declaration', enter: fn })instead
- Changed to support for children as array in most cases (reverse: truewill fail on arrays since they have noforEachRight()method)
 
- Misc 
   
   - List 
     
     - Added List#forEach()method
- Added List#forEachRight()method
- Added List#filter()method
- Changed List#map()method to return aListinstance instead ofArray
- Added List#push()method, similar toList#appendData()but returns nothing
- Added List#pop()method
- Added List#unshift()method, similar toList#prependData()but returns nothing
- Added List#shift()method
- Added List#prependList()method
- Changed List#insert(),List#insertData(),List#appendList()andList#insertList()methods to return a list that performed an operation
 
- Changed keyword()method 
     - Changed namefield to include a vendor prefix
- Added basenamefield to contain a name without a vendor prefix
- Added customfield that contain atruewhen keyword is a custom property reference
 
- Changed property()method 
     - Changed namefield to include a vendor prefix
- Added basenamefield to contain a name without any prefixes, i.e. a hack and a vendor prefix
 
- Added vendorPrefix()method
- Added isCustomProperty()method
 
1.0.0-alpha.26 (November 9, 2017)
 
 
 - Tokenizer 
   
   - Added Tokenizer#isBalanceEdge()method
- Removed Tokenizer.endsWith()method
 
- Parser 
   
   - Made the parser tolerant to errors by default
- Removed tolerantparser option (no parsing modes anymore)
- Removed propertyparser option (a value parsing does not depend on property name anymore)
- Canceled error for a handing semicolon in a block
- Canceled error for unclosed Brackets,FunctionandParentheseswhen EOF is reached
- Fixed error when prelude ends with a comment for at-rules with custom prelude consumer
- Relaxed at-rule parsing: 
     
     - Canceled error when EOF is reached after a prelude
- Canceled error for an at-rule with custom block consumer when at-rule has no block (just don't apply consumer in that case)
- Canceled error on at-rule parsing when it occurs outside prelude or block (at-rule is converting to Rawnode)
- Allowed for any at-rule to have a prelude and a block, even if it's invalid per at-rule syntax (the responsibility for this check is moved to lexer, since it's possible to construct a AST with such errors)
 
- Made a declaration value a safe parsing point (i.e. error on value parsing lead to a value is turning into Rawnode, not a declaration as before)
- Excluded surrounding white spaces and comments from a Rawnode that represents a declaration value
- Changed Valueparse handler to return a node only with typeValue(previously it returned aRawnode in some cases)
- Fixed issue with onParseError()is not invoked for errors occured on selector or declaration value parsing in some cases
- Changed using of onParseError()to stop parsing if handler throws an exception
 
- Lexer 
   
   - Changed grammar.walk()to invoke passed handler on entering to node rather than on leaving the node
- Improved grammar.walk()to take a walk handler pair as an object, i.e.walk(node, { enter: fn, leave: fn })
- Changed Lexer#match*()methods to take a node of any type, but with achildrenfield
- Added Lexer#match(syntax, node)method
- Fixed Lexer#matchType()method to stop return a positive result for the CSS wide keywords
 
1.0.0-alpha25 (October 9, 2017)
 
 
 - Parser 
   
   - Added fallback node as argument to onParseError()handler
- Fixed raw consuming in tolerant mode when selector is invalid (greedy consuming and redundant warnings)
- Fixed exception in tolerant mode caused by unknown at-rule with unclosed block
- Changed handling of semicolons: 
     
     - Hanging semicolon inside declaration blocks raise an error or turns into a Rawnode in tolerant mode instead of being ignored
- Semicolon outside of declaration blocks opens a Rulenode as part of selector instead of being ignored
 
- Aligned parseAtrulePreludebehaviour toparseRulePrelude 
     - Removed Rawnode wraping intoAtrulePreludewhenparseAtrulePreludeis disabled
- Removed error emitting when at-rule has a custom prelude customer but no prelude is found (it should be validated by a lexer later)
 
 
- Generator 
   
   - Fixed performance issue with translateWithSourceMap(), flattening the string (because of mixing building string and indexing into it) turned it into a quadratic algorithm (approximate numbers can be found in the quiz created by this case)
 
- Added support for a single solidus hack for property()
- Minor fixes for custom errors
1.0.0-alpha24 (September 14, 2017)
 
 
 - Improved CSSTree to be stable for standart build-in objects extension (#58)
- Parser 
   
   - Renamed rule's selectortoprelude. The reasons: spec names this part so, and this branch can contain not only a selector (SelectorList) but also a raw payload (Raw). What's changed: 
     - Renamed Rule.selectortoRule.prelude
- Renamed parseSelectorparser option toparseRulePrelude
- Removed option for selector parse in SelectorList
 
 
- Lexer 
   
   - Fixed undefined positions in a error when match a syntax to empty or white space only value
- Improved Lexer#checkStructure() 
     - Return a warning as an object with node reference and message
- No exception on unknown node type, return a warning instead
 
 
1.0.0-alpha23 (September 10, 2017)
 
 
 - Fixed Tokenizer#getRawLength()'s false positive balance match to the end of input in some cases (#56)
- Rename walker's entry point methods to be the same as CSSTree exposed methods (i.e. walk(),walkUp()etc)
- Rename at-rule's expressiontoprelude(since spec names it so) 
   - AtruleExpressionnode type →- AtrulePrelude
- Atrule.expressionfield →- Atrule.prelude
- parseAtruleExpressionparser's option →- parseAtrulePrelude
- atruleExpressionparse context →- atrulePrelude
- atruleExpressionwalk context reference →- atrulePrelude
 
1.0.0-alpha22 (September 8, 2017)
 
 
 - Parser 
   
   - Fixed exception on parsing of unclosed {}-blockin tolerant mode
- Added tolerant mode support for DeclarationList
- Added standalone entry point, i.e. default parser can be used via require('css-tree/lib/parser')(#47)
 
- Generator 
   
   - Changed generator to produce +nwhenAnPlusB.ais+1to be "round-trip" with parser
- Added standalone entry point, i.e. default generators can be used via require('css-tree/lib/generator')
 
- Walker 
   
   - Added standalone entry point, i.e. default walkers can be used via require('css-tree/lib/walker')(#47)
 
- Lexer 
   
   - Added defaultkeyword to the list of invalid values for<custom-ident>(since it reversed per spec)
 
- Convertors (toPlainObject()andfromPlainObject()) moved tolib/convertor(entry point isrequire('css-tree/lib/convertor'))
1.0.0-alpha21 (September 5, 2017)
 
 
 - Tokenizer 
   
   - Added Rawtoken type
- Improved tokenization of url()with raw as url to be more spec complient
- Added Tokenizer#balancearray computation on token layout
- Added Tokenizer#getRawLength()to compute a raw length with respect of block balance
- Added Tokenizer#getTokenStart(offset)method to get token start offset by token index
- Added idxandbalancefields to each token ofTokenizer#dump()method result
 
- Parser 
   
   - Added onParseErroroption
- Reworked node parsers that consume a Rawnode to use a new approach. Since now aRawnode builds inparser#Raw()function only
- Changed semantic of parser#Raw(), it takes 5 parameters now (it might to be changed in future)
- Changed parser#tolerantParse()to pass a start token index to fallback function instead of source offset
- Fixed AtruleExpressionconsuming in tolerant mode
- Atrule handler to convert an empty AtruleExpressionnode intonull
- Changed AtruleExpressionhandler to always return a node (before it could return anullin some cases)
 
- Lexer 
   
   - Fixed comma match node for #multiplier
- Added reference name to SyntaxReferenceError
 
- Additional fixes on custom errors
- Reduced possible corruption of base config by syntax.fork()
1.0.0-alpha20 (August 28, 2017)
 
 
 - Tokenizer 
   
   - Added Atruletoken type (<at-rule-token>per spec)
- Added Functiontoken type (<function-token>per spec)
- Added Urltoken type
- Replaced Tokenizer#getTypes()method withTokenizer#dump()to get all tokens as an array
- Renamed Tokenizer.TYPE.WhitespacetoTokenizer.TYPE.WhiteSpace
- Renamed Tokenizer.findWhitespaceEnd()toTokenizer.findWhiteSpaceEnd()
 
- Parser 
   
   - Added initial implementation of tollerant mode (turn on by passing tolerant: trueoption). In this mode parse errors are never occour and any invalid part of CSS turns into aRawnode. Current safe points:Atrule,AtruleExpression,Rule,SelectorandDeclaration. Feature is experimental and further improvements are planned.
- Changed Atrule.expressionto contain aAtruleExpressionnode ornullonly (other node types is wrapping into aAtruleExpressionnode)
- Renamed AttributeSelector.operatortoAttributeSelector.matcher
 
- Generator 
   
   - 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.
 
- Lexer 
   
   - Used mdn/data package as source of lexer's grammar instead of local dictionaries
- Added xunit to<resolution>generic type
- Improved match tree: 
     
     - Omited Group (sequences) match nodes
- Omited empty match nodes (for terms with zero or moremultipliers)
- Added ASTNodenode type to contain a reference to AST node
- Fixed node duplication (uncompleted match were added to tree)
- Added AST node reference in match nodes
- Added comma match node by #multiplier
 
- Grammar 
     
     - Changed 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 example
- Added SyntaxParseErrorto grammar export
- Reworked group and multipliers representation in syntax tree: 
       
       - Replaced SequenceforGroupnode type (Sequencenode type removed)
- Added explicitboolean property forGroup
- Only groups can have a multiplier now (other node types is wrapping into a single term implicit group when multiplier is applied)
- Renamed nonEmptyGroup's property todisallowEmpty
- Added optimisation for syntax tree by dropping redundant root Groupwhen it contains a singleGroupterm (return thisGroupas a result)
 
 
- Changed lexer's match functionality 
     
     - Changed Lexer#matchProperty()andLexer#matchType()to return an object instead of match tree. A match tree stores inmatchedfield when AST is matched to grammar successfully, otherwise an error inerrorfield. The result object also has some methods to test AST node against a match tree:getTrace(),isType(),isProperty()andisKeyword()
- Added Lexer#matchDeclaration()method
- Removed Lexer#lastMatchError(error stores in match result object inerrorfield)
 
- Added initial implementation of search for AST segments (new lexer methods: Lexer#findValueSegments(),Lexer#findDeclarationValueSegments()andLexer#findAllSegments)
- Implemented SyntaxReferenceErrorfor unknown property and type references
 
- Renamed field in resulting object of property()function:variable→custom
- Fixed issue with readonly properties (e.g. lineandcolumn) ofErrorand exception on attempt to write in iOS Safari
1.0.0-alpha19 (April 24, 2017)
 
 
 - Extended Listclass with new methods: 
   - List#prepend(item)
- List#prependData(data)
- List#insertData(data)
- List#insertList(list)
- List#replace(item, itemOrList)
 
1.0.0-alpha18 (April 3, 2017)
 
 
 - Added atrulewalk context (#39)
- Changed a result of generate method for AnPlusB,AttributeSelector,Function,MediaFeatureandRatio(1e95877)
- Fixed typo in Listexception messages (@strarsis, #42)
- Improved tokenizer to convert an input to a string
1.0.0-alpha17 (March 13, 2017)
 
 
 - Implemented new concept of syntax 
   - Changed main exportsto expose a default syntax
- Defined initial CSS syntax
- Implemented createSyntax()method to create a new syntax from scratch
- Implemented fork()method to create a new syntax based on given via extension
 
- Parser 
   
   - Implemented mediaQueryListandmediaQueryparsing contexts
- Implemented CDOandCDCnode types
- Implemented additional declaration property prefix hacks (#and+)
- Added support for UTF-16LE BOM
- Added support for @font-faceat-rule
- Added chroma()to legacy IE filter functions
- Improved HexColorto consume hex only
- Improved support for \0and\9hacks (#2)
- Relaxed number check for Ratioterms 
     - Allowed fractal values as a Ratioterm
- Disallowed zero number as a Ratioterm
 
- Changed important clause parsing 
     
     - Allowed any identifier for important (to support hacks like !ie)
- Store trueforimportantfield in case identifier equals toimportantand string otherwise
 
- Fixed parse error formatted message rendering to take into account tabs
- Removed exposing of Parserclass
- Removed readSelectorSequence(),readSequenceFallback()andreadSelectorSequenceFallbackmethods
- Used single universal sequence consumer for AtruleExpression,SelectorandValue
 
- Generator 
   
   - Reworked generator to use auto-generated functions based on syntax definition (additional work to be done in next releases)
- Implemented translateMarkup(ast, before, after)method for complex cases
- Reworked translateWithSourceMapto be more flexible (based ontranslateMarkup, additional work to be done in next releases)
 
- Walker 
   
   - Reworked walker to use auto-generated function based on syntax definition (additional work to be done in next releases)
 
- Lexer 
   
   - Prepared for better extensibility (additional work to be done in next releases)
- Implemented checkStructure(ast)method to check AST structure based on syntax definition
- Update syntax dictionaries to latest mdn/data 
     - Add missing <'offset-position'>syntax
- Extended <position>property with-webkit-sticky(@sergejmueller, #37)
 
- Improved mismatch error position
 
- Implemented script (gen:syntax) to generate AST format reference page (docs/ast.md) using syntax definition
1.0.0-alpha16 (February 12, 2017)
 
 
 - Exposed Parserclass
- Added startOffsetoption toTokenizer(constructor andsetSource()method)
- Added fallback functions for default (readSequenceFallback) and selector (readSelectorSequenceFallback) sequence readers
- Fixed edge cases for AnPlusB
- Fixed wrong whitespace ignoring in Selectorconsumer
1.0.0-alpha15 (February 8, 2017)
 
 
 - Fixed broken atruleExpressioncontext
- Fixed vendor prefix detection in keyword()andproperty()
- Fixed property()to not lowercase custom property names
- Added variableboolean flag inproperty()result
- Renamed scannerintotokenizer
- Ranamed syntaxintolexer
- Moved docs/*.htmlfiles to csstree/docs repo
- Added element()function forValuecontext (-moz-element()supported as well)
- Merged Universalnode type intoType
- Renamed node types: 
   
   - Id->- IdSelector
- Class->- ClassSelector
- Type->- TypeSelector
- Attribute->- AttributeSelector
- PseudoClass->- PseudoClassSelector
- PseudoElement->- PseudoElementSelector
- Hash->- HexColor
- Space->- WhiteSpace
- An+B->- AnPlusB
 
- Removed Progidnode type
- Relaxed MediaQueryconsumer to not validate syntax on parse and to include whitespaces in children sequence as is
- Added WhiteSpace.valueproperty to store whitespace sequence
- Implemented parser options to specify what should be parsed in details (when option is falsesome part of CSS represents as balancedRaw): 
   - parseAtruleExpression– to parse at-rule expressions (- trueby default)
- parseSelector– to parse rule's selector (- trueby default)
- parseValue- to parse declaration's value (- trueby default)
- parseCustomProperty– to parse value and fallback of custom property (- falseby default)
 
- Changed tokenization to stick leading hyphen minus to identifier token
- Changed selector parsing: 
   
   - Don't convert spaces into descendant combinator
- Don't validate selector structure on parsing (selectors may be checked by lexer later)
 
- Initial refactoring of docs
- Various improvements and fixes
1.0.0-alpha14 (February 3, 2017)
 
 
 - Implemented DeclarationList,MediaQueryList,MediaQuery,MediaFeatureandRationode types
- Implemented declarationListcontext (useful to parse HTMLstyleattribute content)
- Implemented custom consumers for @import,@media,@pageand@supportsat-rules
- Implemented atruleoption forparse()config, is used foratruleExpessioncontext to specify custom consumer for at-rule if any
- Added Scanner#skipWS(),Scanner#eatNonWS(),Scanner#consume()andScanner#consumeNonWS()helper methods
- Added custom consumers for known functional-pseudos, consume unknown functional-pseudo content as balanced Raw
- Allowed any PseudoElementto be a functional-pseudo (#33)
- Improved walker implementations to reduce GC thrashing by reusing cursors
- Changed Atrule.blockto contain aBlocknode type only if any
- Changed Block.locpositions to include curly brackets
- Changed Atrule.expressionto store anullif no expression
- Changed parser to use StyleSheetnode type only for top level node (when context isstylesheet, that's by default)
- Changed Parentheses,BracketsandFunctionconsumers to use passed sequence reader instead of its own
- Changed ValueandAtruleExpressionconsumers to use common sequence reader (that reader was used byValueconsumer before)
- Changed default sequence reader to exclude storage of spaces around Comma
- Changed processing of custom properties: 
   
   - Consume declaration value as balanced Raw
- Consume var()fallback value as balancedRaw
- Validate first argument of var()starts with double dash
- Custom property's value and fallback includes spaces around
 
- Fixed Nthto have alocproperty
- Fixed SelectorList.locandSelector.locpositions to exclude spaces
- Fixed issue Browserify build fail with default-syntax.jsonis not found error (#32, @philschatz)
- Disallowed Typeselector starting with dash (parser throws an error in this case now)
- Disallowed empty selectors for Rule(not sure if it's correct but looks reasonable)
- Removed >>combinator support until any browser support (no signals about that yet)
- Removed PseudoElement.legacyproperty
- Removed special case for :before,:after,:first-letterand:first-lineto represent them asPseudoElement, now those pseudos are represented asPseudoClassnodes
- Removed deprecated Syntax#match()method
- Parser was splitted into modules and related changes, one step closer to an extensible parser
- Various fixes and improvements, all changes have negligible impact on performance
1.0.0-alpha13 (January 19, 2017)
 
 
 - Changed location storing in SyntaxMatchError 
   - Changed property to store mismatch offset to mismatchOffset
- Changed offsetproperty to store bad node offset in source CSS if any
- Added locproperty that stores bad nodelocif any
 
1.0.0-alpha12 (January 19, 2017)
 
 
 - Fixed Syntax#matchProperty()method to always return a positive result for custom properties since syntax is never defined for them (#31)
- Implemented fromPlainObject()andtoPlainObject()to convert plain object to AST or AST to plain object (currently convertsList<->Array)
1.0.0-alpha11 (January 18, 2017)
 
 
 - Added support for :matches(<selector-list>)(#28)
- Added support for :has(<relative-selector-list>)
- Added support for ::slotted(<compound-selector>)
- Implemented Bracketsnode type
- Implemented basic support for at-rule inside rule block (#24)
- Renamed Selectornode type toSelectorList
- Renamed SimpleSelectornode type toSelector
- Renamed UnicodeRange.nameproperty toUnicodeRange.value
- Replaced Negationnode type for regularPseudoClass
- Unified name of node property to store nested nodes, it always childrennow: 
   - StyleSheet.rules->- StyleSheet.children
- SelectorList.selectors->- SelectorList.children
- Block.declarations->- Block.children
- *.sequence->- *.children
 
- Fixed edge cases in parsing HexandUnicodeRangewhen number not an integer
- Changed nth-pseudos parsing 
   - Implemented An+Bnode type to represent expressions like2n + 1or-3n
- Fixed edge cases when aorbis not an integer
- Changed oddandevenkeywords processing, keywords are storing asIdentifiernode type now
- Changed Nthnode type format to store anth-query and an optionalselector
- Implemented ofclause fornth-pseudos (a.e.:nth-child(2n + 1 of li, img))
- Limited Nthparsing rules to:nth-child(),:nth-last-child(),:nth-of-type()and:nth-last-of-type()pseudos
 
- Changed the way to store locations 
   
   - Renamed infonode property toloc
- Changed format of locto storestartandendpositions
 
1.0.0-alpha10 (January 11, 2017)
 
 
 - Reworked Scannerto be a single point to its functionality
- Exposed Scannerclass to be useful for external projects
- Changed walk()function behaviour to traverse AST nodes in natural order
- Implemented walkUp()function to traverse AST nodes from deepest to parent (behaves aswalk()before)
1.0.0-alpha9 (December 21, 2016)
 
 
 - Fixed <angle>generic according to specs that allow a<number>equals to zero to be used as valid value (#30)
1.0.0-alpha8 (November 11, 2016)
 
 
 - Fixed Scanner#skip()issue method when cursor is moving to the end of source
- Simplified Progidnode
- Changed behaviour for bad selector processing, now parsing fails instead of selector ignoring
- Fixed <id-selector>generic syntax
- Added qunit for<length>generic syntax
- Refactored syntax parser (performance)
- Reduced startup time by implementing lazy syntax parsing (default syntax doesn't parse on module load)
- Updated syntax dictionaries and used mdn/datainstead ofTemplate:CSSData
- Renamed syntax.stringify()method tosyntax.translate()
- Simplified generic syntax functions, those functions receive a single AST node for checking and should return trueorfalse
- Added exception for values that contains var(), those values are always valid for now
- Added more tests and increase code coverage to 98.5%
1.0.0-alpha7 (October 7, 2016)
 
 
 - Added support for explicit descendant combinator (>>)
- Implemented TypeandUniversaltype nodes
- Improved Numberparsing by including sign and exponent (#26)
- Parse before,after,first-letterandfirst-linepseudos with single colon asPseudoElement
- Changed FunctionalPseudonode type toPseudoClass
- Fixed attribute selector name parsing (namespace edge cases)
- Fixed location calculation for specified offset when eofis reached
- Added more non-standard colors (#25)
- Removed obsolete Syntax#getAll()method
- Fixed various edge cases, code clean up and performance improvements
1.0.0-alpha6 (September 23, 2016)
 
 
 - More accurate positions for syntax mismatch errors
- Added applespecific font keywords (#20)
- Changed Propertynode stucture from object to string
- Renamed Rulesetnode type toRule
- Removed Argumentnode type
- Fixed DimensionandPercentageposition computation
- Fixed bad selector parsing (temporary solution)
- Fixed location computation for CSS with very long lines that may lead to really long parsing with positions:true(even freeze)
- Fixed lineandcolumncomputation forSyntaxMatcherror
- Improved performance of parsing and translation. Now CSSTree is under 10ms in PostCSS benchmark.