<?xml version="1.0"?>
<document xmlns="http://maven.apache.org/changes/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Changes</title>
  </properties>

  <body>
    <release version="0.9.29" date="07.11.2020" description="more dimensions, new format option and bugfixes">
        <action type="add" dev="rbri" issue="6">
            New CSSFormat setting useSingleQuotes to force the usage of single quotes instead
            of double quotes.
        </action>
        <action type="add" dev="rbri">
            Support for the dimensions 'ch', 'vw', 'vh', 'vmin' and 'vmax' added (CSS3).
        </action>
        <action type="fix" dev="rbri">
            Minus sign no longer supported inside unknown dimensions (CSS3).
            This fixes a problem when parsing calc terms without whitespace around the
            minus like in calc(42vh-16.4em). 
        </action>
    </release>
    <release version="0.9.28" date="07.10.2020" description="calc() and var() support, java 1.8">
        <action type="update" dev="rbri" due-to="Christian Morgner">
            var() support added.
        </action>
        <action type="update" dev="rbri">
            JDK 1.8 is now required.
        </action>
        <action type="update" dev="rbri" due-to="Christian Morgner">
            calc() support added.
        </action>
    </release>
    <release version="0.9.27" date="23.03.2019" description="Bugfix">
        <action type="fix" dev="rbri" issue="86">
            Avoid scientific notation when converting float back to strings.
        </action>
    </release>
    <release version="0.9.26" date="22.07.2018" description="Code cleanup">
        <action type="update" dev="rbri">
            Some code cleanup done.
        </action>
    </release>
    <release version="0.9.25" date="27.01.2018" description="Code cleanup, performance, useSourceStringValues format option">
        <action type="update" dev="rbri">
            JavaCC updated to version 7.0.3.
        </action>
        <action type="add" dev="rbri" issue="85">
            New format option useSourceStringValues.
        </action>
        <action type="update" dev="rbri">
            Many of the instanceof/cast operations removed from the parser to improve performance
        </action>
    </release>
    <release version="0.9.24" date="31.10.2017" description="Bugfixes">
        <action type="update" dev="rbri">
            INCOMPATIBLE CHANGE: GeneralAdjacentSelectorImpl (~) type changed from
            SAC_ANY_NODE_SELECTOR to SAC_DIRECT_ADJACENT_SELECTOR
        </action>
        <action type="update" dev="rbri">
            Do not include maven meta information in the jar file.
        </action>
        <action type="add" dev="rbri">
            A first simple implementation of the CSS2Properties interface added to CSSStyleDeclarationImpl.
        </action>
    </release>
    <release version="0.9.23" date="01.06.2017" description="Bugfixes">
        <action type="fix" dev="rbri" issue="77">
            Preserve double colons used by pseudo selectors (CSS3).
        </action>
    </release>
    <release version="0.9.22" date="23.02.2017" description="Bugfixes">
        <action type="fix" dev="rbri">
            Rewritten handling of comma separated property values. No all types are processed correctly.
        </action>
        <action type="fix" dev="rbri" issue="73">
            Improved error handling; no longer skip the whole style sheet in case
            the first chars are not parsable (CSS3, CSS21).
        </action>
    </release>
    <release version="0.9.21" date="08.01.2017" description="Nested media rule support, bugfixes, documentation">
        <action type="update" dev="rbri">
            Introduce a common interface SACParser for all parsers.
        </action>
        <action type="fix" dev="rbri" issue="62">
            To improve tool support the parser now has an option to accept the infamous star hack.
            When switching this on, the star hack no longer generates an error. Instead of that
            the rule is processed (the rule has the star as part of the name!). For more details
            have a look at the com.steadystate.css.parser.SACParserCSS3Test.starHackSupport()
            test case (CSS3, CSS21).
        </action>
        <action type="fix" dev="rbri" issue="70">
            Improved error handling for declarations having unexpected
            content at end. The parser now skips the invalid content
            and processes the next declaration instead of skipping to
            the next rule (CSS3, CSS21).
        </action>
        <action type="fix" dev="rbri" issue="69">
            Improved handling of charset rules not placed at the beginning.
            There is now a dedicated error message for this situation
            and the parser skips only the charset rule (CSS3, CSS21).
        </action>
        <action type="fix" dev="rbri" issue="68">
            Missing unicode range support added (CSS3).
        </action>
        <action type="fix" dev="rbri" issue="67">
            Nested media rules are now supported (CSS3).
        </action>
    </release>
    <release version="0.9.20" date="23.07.2016" description="Bugfixes, documentation">
        <action type="fix" dev="rbri" issue="66">
            CSSValueImpl.getStringValue() no longer throws an exception for rgba values.
        </action>
        <action type="update" dev="rbri">
            Simplify the generated code for faster processing.
        </action>
        <action type="fix" dev="rbri" issue="64">
            Improved error handling for broken css files. The parser now skips in some cases only to the next
            rbrace instead of ignoring the whole rest of the document.
        </action>
        <action type="fix" dev="rbri" issue="61">
            Take care of line breaks in strings when building the text back from the model.
        </action>
    </release>
    <release version="0.9.19" date="24.05.2016" description="Apache2 license, Bugfixes, documentation">
        <action type="update" dev="rbri">
            Now licensed under the Apache License, Version 2.0.
        </action>
        <action type="fix" dev="rbri" issue="60">
            Page selector support added (CSS3).
        </action>
        <action type="fix" dev="rbri" issue="61">
            Units are no longer removed when parsing an unsupported at rule.
        </action>
        <action type="fix" dev="rbri" issue="49">
            Support old IE style gradient definitions (filter: progid:DXImageTransform.Microsoft.gradient(...)).
        </action>
        <action type="update" dev="rbri">
            JavaCC updated to version 6.1.2.
        </action>
        <action type="add" dev="rbri">
            New format option propertiesInSeparateLines.
        </action>
        <action type="update" dev="rbri">
            Rect definitions without comma are also valid.
        </action>
        <action type="fix" dev="rbri" issue="57">
            Incorrect Free Software Foundation address fixed.
        </action>
    </release>
    <release version="0.9.18" date="27.10.2015" description="Bugfixes, Improved output formating">
        <action type="update" dev="rbri">
            At some places the parser inserts synthetic universal selectors (*). Starting with this version a special
            class (SyntheticElementSelectorImpl) is used for these selectors.
            As a result, the output (toString, getCssText) no longer contains an extra '*' (if not explicit defined in the input)
        </action>
        <action type="fix" dev="rbri" issue="56">
            CSSStyleSheet.insertRule when taking the rule from an existing rule and the rule contains ':not'.
        </action>
        <action type="update" dev="rbri">
            MediaQuery.isOnly() and MediaQuery.isNot() added.
        </action>
        <action type="update" dev="rbri">
            MediaList.getMediaText now outputs the whole media query
        </action>
        <action type="update" dev="rbri">
            Colon is no longer part of the text output of empty properties.
        </action>
    </release>
    <release version="0.9.17" date="16.08.2015" description="Bugfixes">
        <action type="fix" dev="rbri">
            Encoding of the input stream was ignored when the input stream was set up with a byte stream.
        </action>
        <action type="update" dev="rbri">
            Minor parser code optimizations and more unit tests.
        </action>
    </release>
    <release version="0.9.16" date="03.06.2015" description="Formated output support, Bugfixes, improved UnitTest suite">
        <action type="add" dev="rbri" issue="54">
            Support for getCssText(CSSFormat) added to start supporting various output format options.
        </action>
        <action type="add" dev="rbri">
            Missing impl of com.steadystate.css.dom.CSSUnknownRuleImpl.setCssText(String) added.
        </action>
        <action type="fix" dev="rbri">
            Possible NPE in com.steadystate.css.dom.CSSImportRuleImpl.getCssText() fixed.
        </action>
        <action type="fix" dev="rbri">
            Possible NPE in com.steadystate.css.dom.CSSFontFaceRuleImpl.getCssText() fixed.
        </action>
        <action type="fix" dev="rbri">
            Wrong null handling in com.steadystate.css.dom.CSSCharsetRuleImpl.getCssText() fixed.
            getCssText() now returns also the semicolon, because this is part of the rule per spec.
        </action>
        <action type="fix" dev="rbri">
            Possible NPE in com.steadystate.css.dom.CSSPageRuleImpl.getCssText() fixed.
        </action>
        <action type="update" dev="rbri">
            Attribute 'ident' removed from class CSSPageRuleImpl.
        </action>
        <action type="update" dev="rbri">
            Minor updates to the documentation.
        </action>
        <action type="fix" dev="rbri" issue="51">
            If a rule contains the same property twice, the CSSStyleDeclarationImpl methods
            getPropertyDeclaration, getPropertyValue, getPropertyCSSValue, getPropertyPriority, and setProperty
            are now returning (or updating) the latter one instead of the first one.
        </action>
    </release>
    <release version="0.9.15" date="25.03.2015" description="Media query support, Bugfixes">
        <action type="new" dev="rbri">
            Simple 'Getting started' document added.
        </action>
        <action type="fix" dev="rbri" issue="40">
            CSS3 parser now supports media queries.
        </action>
        <action type="fix" dev="rbri" issue="50">
            No longer skip the following declarations if a css star hack (http://en.wikipedia.org/wiki/CSS_filter#Star_hack)
            was used (CSS21 and CSS3).
        </action>
        <action type="fix" dev="rbri">
            Bunch of fixes for the unicode handling implemented.
        </action>
        <action type="fix" dev="rbri">
            Some internal lexer cleanup for CSS21 and CSS3 parser.
        </action>
    </release>
    <release version="0.9.14" date="08.05.2014" description="Bugfixes and parser cleanup">
        <action type="fix" dev="rbri" issue="46">
            Fix the error processing for expression 'filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);'.
            This is an old IE6 syntax; CSSParser will handle this as error but the parsing
            will continue directly after this.
        </action>
        <action type="fix" dev="rbri">
            Fix the skipping of invalid rules. As a result, the parser now recognizes following
            expressions inside the same declaration instead of jumping to the next declaration.
        </action>
        <action type="fix" dev="rbri">
            Many small fixes for the parser; remove some unused variables and correct some
            statement order.
        </action>
    </release>
    <release version="0.9.13" date="20.01.2014" description="Bugfixes">
        <action type="fix" dev="rbri">
            Only simple selectors are valid as parameter for the :not pseudo class (CSS3).
        </action>
        <action type="fix" dev="rbri">
            Whitespace before the includes operator was not handled correctly (e.g.[rel ~=val]) (CSS3).
        </action>
        <action type="fix" dev="rbri" issue="45">
            Fix the toString method for functions to insert a blank at the right places (CSS3).
        </action>
    </release>
    <release version="0.9.12" date="07.01.2014" description="Bugfixes, rewritten function support for CSS3.">
        <action type="fix" dev="rbri" issue="44">
            Parsing of functions rewritten, now we have working support for functions with 
            parameters calculated by functions (CSS3).
        </action>
        <action type="fix" dev="rbri" issue="41">
            Processing of the rect(), counter(), counters() and rgb() function parameter fixed (CSS2, CSS21, CSS3).
        </action>
        <action type="fix" dev="rbri">
            Processing of the attr() function parameters fixed (CSS2, CSS21, CSS3).
        </action>
        <action type="fix" dev="rbri">
            NPE fixed if duplicate pseudo selector found (CSS2, CSS21, CSS3).
        </action>
        <action type="fix" dev="rbri" issue="42" due-to="Ahmed Ashour">
            Some NPE fixed for class CSSStyleDeclarationImpl. More unit tests written.
        </action>
    </release>
    <release version="0.9.11" date="08.10.2013" description="CSS parser bugfix for pseudo conditions.">
        <action type="fix" dev="rbri">
            CSS2/CSS21/CSS3: Fix selector parsing for more than one pseudo condition.
        </action>
    </release>
    <release version="0.9.10" date="13.09.2013" description="Release with more CSS3 parser bugfixes and the usual code cleanup.">
        <action type="fix" dev="rbri" issue="39">
            CSS2/CSS21/CSS3: Permit comments and whitespace before the @charset rule.
        </action>
        <action type="fix" dev="rbri">
            CSS3: Support dimensions (20px, 40deg) as function arguments.
        </action>
        <action type="fix" dev="rbri">
            Fix the string representation of many function arguments.
        </action>
        <action type="fix" dev="rbri" issue="37">
            CSS3: support double colon notation for pseudo selectors.
        </action>
        <action type="fix" dev="rbri">
            CSS3: When parsing pseudo function arguments now the (inner) whitespace is preserved.
        </action>
    </release>
    <release version="0.9.9" date="16.02.2013" description="Release with new CSS3 parser, some bugfixes and more code cleanup.">
        <action type="fix" dev="rbri">
            Simplified unit parsing for CSS21 and CSS3. Maybe this makes the parser a bit faster.
        </action>
        <action type="fix" dev="rbri">
            Parser.parseSelectors(InputSource) now handles leading whitespace properly.
        </action>
        <action type="fix" dev="rbri">
            Improved parsing of the lang selector.
        </action>
        <action type="add" dev="rbri">
            @font-face support added to CSS3.
        </action>
        <action dev="rbri" type="add">
            CSS3 parser added (patch from Ahmed Ashour).
        </action>
        <action type="fix" dev="rbri" issue="35">
            DescendantSelectorImpl#toString() takes PseudoElementSelectors into account.
        </action>
        <action type="fix" dev="rbri">
            com.steadystate.css.dom.CSSValueImpl.getPrimitiveType() returns wrong type for Hz and KHz.
        </action>
        <action type="cleanup" dev="rbri">
            Class CSS2Properties removed (spec: A conformant implementation of the CSS module is not required
            to implement the CSS2Properties interface).
        </action>
    </release>
    <release version="0.9.8" date="25.10.2012" description="Release with one bugfix and more code cleanup.">
        <action type="fix" dev="rbri">
            More code cleanup work done.
        </action>
        <action type="fix" dev="rbri">
            Minor pom.xml fixes.
        </action>
        <action type="fix" dev="rbri">
            AttributeconditionImpl.getSpecified() now returns false if no value specified (like '[rel]').
        </action>
        <action type="fix" dev="rbri">
            More unit tests added. Unused code removed.
        </action>
    </release>
    <release version="0.9.7" date="24.04.2012" description="Release with lots of bugfixes.">
        <action type="fix" dev="rbri">
            Fix handling of escaped colons in id selectors like '#form\:elem'.
        </action>
        <action type="fix" dev="rbri">
            Possible number format exception when parsing dimensions fixed.
        </action>
        <action type="update" dev="rbri">
            Result of LexicalUnit.toString() is now cached for performance.
        </action>
        <action type="fix" dev="rbri">
            Fix for some null handling in LexicalUnit.
        </action>
        <action type="add" dev="rbri">
            Many tests written for LexicalUnit.
        </action>
        <action type="fix" dev="rbri">
            RectImpl now expects and processes the four coordinates in the correct (top, right, bottom, left) order.
        </action>
        <action type="fix" dev="rbri">
            Some more fixes for sanity checks done in CSSStyleSheet.insertRule.
        </action>
        <action type="fix" dev="rbri">
            Improved message output in class DOMExceptionImpl.
        </action>
        <action type="fix" dev="rbri">
            CSSStyleSheet.deleteRule now throws a DOMException if the given index is out of bounds
            (instead of an IndexOutOfBoundsException).
        </action>
        <action type="fix" dev="rbri">
            CSSStyleSheet.insertRule now takes care of incorrect rules. If the rule (to be added) parsing
            failes, insertRule now throws an exception (instead of adding a null as rule).
        </action>
    </release>
    <release version="0.9.6" date="25.10.2011" description="Long-overdue release with lots of bugfixes.">
        <action type="fix" dev="rbri">
            CSS 2.1 parser now ignores any '@import' rule that occurs inside a block
            (see http://www.w3.org/TR/CSS2/syndata.html#at-rules). JUnit tests added.
        </action>
        <action type="fix" issue="32" dev="rbri">
            Parser hang with missing semicolon fixed.
        </action>
        <action type="fix" issue="24" dev="rbri">
            Method com.steadystate.css.parser.LexicalUnitImpl.createAttr(LexicalUnit, LexicalUnit) removed.
            The impl was broken. You can use the method
            com.steadystate.css.parser.LexicalUnitImpl.createAttr(LexicalUnit, String) instead.
        </action>
        <action type="fix" dev="rbri">
            Improved error handling for methods parseStyleDeclaration, parseRule,
            parseSelectors, parsePropertyValue, parsePriority and parseMedia in
            class AbstractSACParser. All CSSParseException are now catched and
            processed by the error handler.
        </action>
        <action type="fix" dev="rbri">
            Class TestCSSParseException removed.
        </action>
        <action type="fix" issue="29" dev="rbri">
            Another unescaping problem fixed.
        </action>
        <action type="update" dev="rbri">
            Class CSOMParser now takes care of the system property 'org.w3c.css.sac.parser'.
            The effect is, that the class uses the same parser as long as this property is unchanged.
            You can change the property from the outside (System.setProperty()) or by calling
            the CSOMParser(Parser) constructor.
        </action>
        <action type="update" dev="rbri">
            Default parser changed from CSS2 to CSS21.
        </action>
        <action type="fix" issue="27" dev="rbri">
            Always check for EOF if skipping something.
        </action>
        <action type="fix" issue="18" dev="rbri">
            Improved error handling for incorrect rules.
        </action>
        <action type="fix" issue="26" dev="rbri">
            Ignore leading and trailing whitespace in method com.steadystate.css.dom.CSSStyleSheetImpl.insertRule(String, int).
        </action>
        <action type="add" dev="waldbaer">
            Many more JUnit tests added.
        </action>
        <action type="add" dev="waldbaer">
            Locatable and friends added.
        </action>
        <action type="add" dev="waldbaer">
            Many equals and hashCode implementations added.
        </action>
        <action type="fix" issue="33" dev="waldbaer">
            String parser was too greedy.
        </action>
        <action type="fix" issue="22" dev="waldbaer">
            Wrong processing of some chars.
        </action>
        <action type="update" dev="waldbaer">
            Major updates on the grammars.
        </action>
        <action type="update" issue="33" dev="waldbaer">
            JavaCC (and the maven plugin) updated.
        </action>
    </release>
    <release version="0.9.5" date="27.03.2008" description="Long-overdue release with lots of bugfixes.">
      <action type="remove">
        Removed the deprecated classes com.steadystate.css.CSS2Parser, com.steadystate.css.RGBColorImpl
        and com.steadystate.css.HexColor.
      </action>
      <action type="fix" issue="11" dev="sdanig">
        Correctly unescape escaped characters in strings.
      </action>
      <action type="fix" issue="20" dev="sdanig">
        CSSStyleDeclarationImpl.getCssText() fixed to not return curly braces (as per the spec).
      </action>
      <action type="remove" issue="15" dev="sdanig">
        Removed unused class ParseException (one of two classes with this name).
      </action>
      <action type="update" dev="sdanig">
        Updated the minimum required Java version to Java 5.
      </action>
      <action type="remove" dev="sdanig">
        Removed the W3C DOM and SAC classes, using instead the classes in the JDK and the official SAC JAR.
      </action>
      <action type="update" dev="sdanig">
        Moved build system to Maven 2.
      </action>
      <action type="add" dev="sdanig">
        Added parseMedia() to SACParser.
      </action>
      <action type="update" dev="sdanig">
        Modified CSSOMParser to allow parser creation within the sandbox.
      </action>
      <action type="remove" dev="sdanig">
        JavaCC-generated files removed from the repository.
      </action>
      <action type="update" dev="sdanig">
        css2.jj renamed to SACParser.jj.
      </action>
      <action type="add" dev="sdanig">
        Initial JUnit tests added.
      </action>
    </release>
    <release version="0.9.4" date="22.11.2004">
      <action type="add" dev="davidsch">
        Ant buildfile added.
      </action>
    </release>
    <release version="0.9.3" date="?">
      <action type="fix">
        Fixed a bug in the '@page' rule where a space after an identifier or a pseudo page caused a parser exception.
      </action>
    </release>
    <release version="0.9.2" date="?">
      <action type="update">
        Made several modifications to provide JDK 1.1 compatability.
      </action>
      <action type="fix">
        Fixed a bug that caused negative floating-point values to be excessively trimmed.
      </action>
    </release>
    <release version="0.9.1" date="?">
      <action type="update">
        Updated the SAC to version 1.2.
      </action>
      <action type="update">
        Updated the CSSOM to comply with the W3C recommendation.
      </action>
      <action type="update">
        Made the CSSOM serializable.
      </action>
    </release>
    <release version="0.9.0" date="?">
      <action type="update">
        Implemented the SAC (Simple API for CSS).
      </action>
      <action type="update">
        Converted the CSS DOM to be implemented on top of the SAC.
      </action>
    </release>
    <release version="0.1.4" date="?">
      <action type="fix">
        Fixed case-sensitivity bug in ASTStyleDeclaration.
      </action>
      <action type="update">
        Renamed methods in ASTMediaList to bring it into line with CR-DOM-Level-2-20000510.
      </action>
      <action type="update">
        Reduced the number of states in the lexer to simplify matters and to aid with improved handling of invalid statements.
      </action>
    </release>
  </body>
</document>
