37 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			37 KiB
		
	
	
	
	
	
	
	
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
 
 - Added 
 
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
 
 - Package provides 
 - Definition syntax
- Renamed 
grammarintodefinitionSyntax(named per spec) - Added 
compactoption togenerate()method to avoid formatting (spaces) when possible 
 - Renamed 
 - Lexer
- Changed 
dump()method to produce syntaxes in compact form by default 
 - Changed 
 
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 
 - Added 
 - 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) 
 - Fixed low priority productions matching in long 
 
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
 
 - Removed type removals from 
 - 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 
- Added 
 - 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> 
 - Related to token types: 
 - 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 
 - Removed 
 
 
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 
 - Added 
 - 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
 
 - Method takes an 
 
 - Changed grammar tree format:
 
 - Tokenizer
- Renamed 
Atruleconst toAtKeyword 
 - Renamed 
 
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
 
 - Changed node's 
 - 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) 
 - Changed 
 - 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 
 - Added 
 - 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 
 - 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 
 - Changed 
 - Added 
vendorPrefix()method - Added 
isCustomProperty()method 
 - List
 
1.0.0-alpha.26 (November 9, 2017)
- Tokenizer
- Added 
Tokenizer#isBalanceEdge()method - Removed 
Tokenizer.endsWith()method 
 - Added 
 - 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 
 - Changed 
 
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 
 - Hanging semicolon inside declaration blocks raise an error or turns into a 
 - 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)
 
 - Removed 
 
 - Added fallback node as argument to 
 - 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) 
 - Fixed performance issue with 
 - 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 
 - Renamed 
 
 - Renamed rule's 
 - 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 →AtrulePreludeAtrule.expressionfield →Atrule.preludeparseAtruleExpressionparser's option →parseAtrulePreludeatruleExpressionparse context →atrulePreludeatruleExpressionwalk 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) 
 - Fixed exception on parsing of unclosed 
 - 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') 
 - Changed generator to produce 
 - Walker
- Added standalone entry point, i.e. default walkers can be used via 
require('css-tree/lib/walker')(#47) 
 - Added standalone entry point, i.e. default walkers can be used via 
 - Lexer
- Added 
defaultkeyword to the list of invalid values for<custom-ident>(since it reversed per spec) 
 - Added 
 - 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 
 - Added 
 - 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) 
 - Added 
 - Lexer
- Fixed comma match node for 
#multiplier - Added reference name to 
SyntaxReferenceError 
 - Fixed comma match node for 
 - 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() 
 - Added 
 - 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 
 - Added initial implementation of tollerant mode (turn on by passing 
 - 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) 
 - Replaced 
 
 - Changed 
 - 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) 
 - Changed 
 - 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 
 - Changed main 
 - 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 
 - Allowed fractal values as a 
 - Changed important clause parsing
- Allowed any identifier for important (to support hacks like 
!ie) - Store 
trueforimportantfield in case identifier equals toimportantand string otherwise 
 - Allowed any identifier for important (to support hacks like 
 - 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 
 - Implemented 
 - 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) 
 - Add missing 
 - 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->IdSelectorClass->ClassSelectorType->TypeSelectorAttribute->AttributeSelectorPseudoClass->PseudoClassSelectorPseudoElement->PseudoElementSelectorHash->HexColorSpace->WhiteSpaceAn+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
 
 - Consume declaration value as balanced 
 - 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 
 - Changed property to store mismatch offset to 
 
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.childrenSelectorList.selectors->SelectorList.childrenBlock.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 
 - Implemented 
 - Changed the way to store locations
- Renamed 
infonode property toloc - Changed format of 
locto storestartandendpositions 
 - Renamed 
 
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.