SCSS NEWS --- history of user-visible changes
Copyright (C) 2011 Julian Graham
See the end for copying conditions.


Changes since development release 0.4.1

** API changes

The `scss:selected-value-source' function is now exported by the `(scss scss)'
library. It returns a symbol indicating the source (within the cascade) of a
specified selected value: One of `user', `agent', or `author'.

The contract of the document interface's parent accessor function has changed.
In cases where an element has a parent node that is not itself an element -- 
e.g., the document element, whose parent is the document node -- the parent
accessor should return `#f'. The SDOM interface has been updated to reflect
this.

** Bugfixes

Several bugs have been fixed. Among them:

- Some cases in which descendent and adjacency selector tests were using
  legacy, SXML-based sibling identification functions instead of the portable
  document interface API have been fixed.
- A long-standing issue with the sort order of the results from the cascade
  has been resolved; the precedence and specificity sort is now stable.


Changes since development release 0.4.0

** Bugfixes

Several bugs have been fixed. Among them:

- The previous sibling function for the SDOM document interface now correctly
  uses the `sdom:previous-sibling' function.
- Some broken symbol references in `(scss scss)' and `(scss properties)' have
  been fixes.


Changes since development release 0.3.2

** R6RS compatibility

SCSS has been re-implemented as an R6RS library, making ports to individual
Scheme platforms unnecessary.  As a side effect, the custom SRFI-32 
implementation is also no longer necessary and has been removed.

** Major API changes

Instead of querying the cascade for the value of a specific property at a
particular node, the SCSS API now returns all of the properties that apply to
the node in the form of instances of the `scss:selected-value' record type,
which includes useful metadata about the property.  The `scss:select-value' 
family of functions has been replaced by `scss:select-values'.  This change
resolves a number of performance and correctness issues.

The mechanism by which SCSS introspects the source document has also changed
and made more modular: Instead of setting global functions to be used for
document traversal, users specify a bundle of introspection functions as part
of an instance of the `scss:document-interface' record type.  A sample document
interface that works with SDOM is provided for convenience.

See the manual for more information on the new API.


Changes since development release 0.3.1

** Homebrew parser based on WebKit

Compile-time generation of the parsing code (via lalr-scm) has been replaced
with a hand-written implementation, based on the parsing schema for the WebKit 
layout manager (http://www.webkit.org/), that is several times smaller and much
closer in compliance to the CSS recommendation, especially when it comes to
recovery from errors.  (It is also somewhat less efficient; this will be 
addressed in a future release.)

** Test suite

A simple set of parsing tests is now included in the distribution.  To run
through the test suite, load and execute the test.scm file.


Changes since development release 0.3.0

** Better pseudo-element support

The SCSS selection algorithm has been substantially rewritten to support more
efficient handling of CSS pseudo-elements.  Specifically, the system now
maintains separate tables of selection results, multiplexed on a bitmask of
active pseudo-elements, as determined by calls to the installed pseudo-element
handler.  Because multiple sets of selection results can now co-exist, the
`scss:clear-style-cache' function is no longer necessary as part of normal SCSS 
operation; it has been removed from the API.

** Interpreter compatibilty

In order to facilitate porting to other Scheme 
interpreters, all calls to Guile-specific functions have been replaced with 
calls to R5RS- and SRFI-defined functions.

** Homebrew lexer

As part of an overall cleanup of the codebase, compile-time generation of the
lexical analysis code (via SILex) has been replaced with a hand-written
implementation that is an order of magnitude smaller and marginally more
efficient.


Changes since development release 0.2.3

** New license: GPLv3

SCSS is now licensed under the GPLv3; the COPYING file and the headers of the
relevant source files have been updated to reflect this.

** Parser rewrite

The SCSS parser has been completely rewritten for this release, such that it is
now much closer to the definition in the CSS recommendation, and much better at
recovering from parsing errors. The error handling behavior is also closer to
the behavior described in the CSS recommendation -- the right portions of a
stylesheet are now ignored following an error, for example, and non-terminated
strings and blocks are properly closed.

** Parsing and query enhancement: Support for the @media rule

The parser and query system now recognize the @media rule and, as an extension
to the scss:select-value API, media types can be specified as part of a query
against the cascade.

** Parsing enhancement: Support for rgb-function color syntax

The parser now properly recognizes and formats colors specified in the "rgb()"
pseudo-function notation.

** Major format change

The format of SCSS's S-expr representation of stylesheets has undergone a
complete rewrite. It is now somewhat compatible with the format used by Jim 
Bender's WebIt! toolkit (http://celtic.benderweb.net/webit/), a Scheme library 
that provides useful APIs for working with XML, HTML, and CSS documents. CSS
documents given in the format described in the WebIt! specification can be used
directly by SCSS; documents created by SCSS can be used by WebIt!, provided
that only selectors and syntax covered by the CSS1 recommendation is used.

More information on the new format and its compatibility with WebIt! can be
found in the SCSS documentation.


Changes since development release 0.2.2

** Parsing enhancement: Support for Unicode

SCSS now transforms Unicode escape sequences to the appropriate Unicode
characters. Note that since Guile versions prior to 1.8 don't support Unicode, 
escapes that refer to characters over and above the first 256 characters won't 
be replaced in Guile 1.6 or earlier.

** Assorted minor bugfixes

Character backslash escapes without a special meaning should be replaced by the
character itself; the parser was failing to reject invalid values for certain
generalized properties (background, border, border-*, font, list-style, 
outline, and text-decoration).


Changes since development release 0.2.1

** Major cascade lookup bugfix

If the best selector match contains a rule for a property that is a more
general version than the property requested AND is inherited from an ancestor
node, SCSS will now correctly use this property.

** New API function: scss:clear-style-cache!

For greater efficiency in performing style lookups, SCSS maintains internal
\hashes mapping nodes to matching style information. scss:clear-style-cache! can
be used to clear this cache when it is necessary to perform a full lookup from
the cascade. See the SCSS documentation for more information.

** Assorted minor bugfixes

Formatting of imported stylesheets when there are multiple @import directives
has been fixed; requests for "border-color" will now properly generalize to
"color."


Changes since development release 0.2.0

** Vastly improved performance

As part of some fixes to query algorithm correctness, there is a welcome side-
effect: SCSS queries now take an order of magnitude less time to complete,
making SCSS a whole lot more useful as an embedded style-management system.

** Changes to internal stylesheet representation

Pursuant to the optimizations mentioned above, the stylesheet format has
changed; detailed information can be found in the documentation, but developers
relying on direct access to SCSS stylesheets will need to update their code.


Changes since development release 0.1

** Property generalization improvements and bugfixes

If the best selector match contains a rule for a property that is a more
general version than the property requested, such as "border" for a lookup of
"border-left-style," SCSS will now correctly use the more general property to
determine the value of the requested property.

** Assorted bugfixes

Among others, bugs related to the !important modifier, color-to-hexadecimal 
conversion, and stylesheet emitting have been fixed.

** Documentation is complete

The SCSS API should now be fully documented.


Copyright information:

Copyright (C) 2009 Julian Graham

   Permission is granted to anyone to make or distribute verbatim copies
   of this document as received, in any medium, provided that the
   copyright notice and this permission notice are preserved,
   thus giving the recipient permission to redistribute in turn.

   Permission is granted to distribute modified versions
   of this document, or of portions of it,
   under the above conditions, provided also that they
   carry prominent notices stating who last changed them.


Local variables:
mode: outline
paragraph-separate: "[ 	]*$"
end:
