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

Send comments, questions, and bug reports to libruin-devel@nongnu.org

Each release reports the NEWS in the following sections:

* Changes to the distribution
* Changes to the C interface
* Changes to layout and rendering
* Changes to the Scheme interface


Changes since 0.1.4 development release:

* Changes to the distribution

** New license: GPLv3

libRUIN is now licensed under the GNU General Public License v3.0. The 
COPYING file and the headers of the relevant source files have been updated to
reflect this.

** ruinview behavior

The build for the example application, 'ruinview', has been modified to build
against libcurl if it is available (via the '--with-curl' argument to 
'configure').  When built with libcurl, 'ruinview' can retrieve documents for
rendering using any of libcurl's supported URL schemes (e.g., 'http' and 
'file').  When built without libcurl, the file loading behavior in 'ruinview'
is consistent with previous releases.

** Changes to library dependencies

libRUIN now depends on the GNU Guile 2.0.x release series.  This release of
libRUIN has an additional dependency on the GNU GLib 2.x series.

** Upgrades to Scheme core modules

The latest versions of SCSS (0.4.2) and SDOM (0.5.1) are included in this
release.

** Cleanup of unused Scheme modules

The `(sxml ssax)' module is included in Guile's standard libraries and is thus
no longer part of the libRUIN distribution.  The following modules, included
to support SXML, have consequently also been removed: `(debugging assert)',
`(debugging time)', `(scheme documentation)', `(scheme session)'.

** New C test suite

libRUIN now has a proper suite of unit tests in C that use GLib's unit testing
framework. There is currently partial test coverage across several modules of
the system.

* Changes to the C interface

* Changes to layout and rendering

** Introduction of a first class table model

A separate module for table analysis and layout has been created, in order to
clean up the logic around table layout. Among other things, this means that 
table layout algorithms that perform analysis of different potential content 
widths (like the automatic table layout algorithm described in the W3C CSS 2.1
recommendation) can do so without dirtying the state of the layout tree.

** Introduction of a first class box model

The layout and rendering engines of libRUIN have been completely rewritten to
use an explicit box model for layout operations (whereas before the layout tree
was treated as being one-to-one with the document tree).  This change brings 
libRUIN into much closer alighment with the CSS recommendation, and has a 
number of consequences across the library, some of which are discussed below.

** Improved handling of multi-line text flow

libRUIN now sports a first class model for line boxes, which allows inline
elements to be properly broken across lines, even when text content is nested
within several levels of other style-passing inline parent elements or has 
sibling elements with different associated style rules.

** Improved layout accuracy for elements that generate multiple boxes

...such as elements that display as list items and generate a marker box in
addition to a primary content box. The boxes generated by these elements can 
now be sized and positioned more flexibly.

* Changes to the Scheme interface


Changes since 0.1.3 development release:

* Changes to the distribution

** Tests

A few new tests from the new revision of the W3C's CSS2.1 test suite have been
added, with a focus on stylesheet parsing, to the distribution under 
examples/xhtml/.

** ruinview behavior

The example application, 'ruinview', has been modified so that it can load and
render more than one document during a single execution. Specify the
documents on the command line and use the 'n' key to progress through the list
of documents during rendering.

** Upgrades to Scheme core modules

The latest versions of SCSS (0.2.3) and SDOM (0.4.1) are included in this
release, along with the contingent benefits of improved speed and correcteness
these newer versions provide.

* Changes to the C interface

** Automatic XML dialect detection

The new version of SDOM provides support for XML documents containing Document 
Type Definitions, allowing libRUIN to determine the type of a document
automatically. As such, the "ruin_xml_dialect" enumeration has been removed
from the API. (If document type cannot be determined, libRUIN will attempt to
render the document as XHTML.)

* Changes to layout and rendering

** Table layout

New in this release is the addition of working support for the automatic table
layout algorithm. The table width allocation algorithm is based on the one used
by KHTML. It's not perfect yet, but even some fairly complicated stuff like
nested tables and column-spanning cells works.

** Proper cascade inheritance

CSS cascade lookups now proceed using the inheritance stack, not the structure
of the document itself, to better facilitate context-based lookups, such as
ones involving table-columns.

** Fixed rendering corruption issues

The CSS lookup caching system was refactor to resolve a race against Guile's
garbage collector leading to non-deterministic value lookup behavior for 
certain properties.

** Respect for terminal window edges

libRUIN now makes a few half-hearted attempts not to draw off the bottom of the
terminal window, preventing occasionally garbled output.

** Prevention of zero-width borders

While it's okay for things like padding and margins that start out with non-
zero computed width to wind up with used width set to zero, but that's not true
of borders. libRUIN now forces borders to a width of 1em in cases like these.

* Changes to the Scheme interface


Changes since 0.1.2 development release:

* Changes to the distribution

** Tests

XHTML examples from the W3C's CSS2.1 conformance test suite (distributed with
permission) are now included properly -- they were accidentally left out of
the last release.  They can be found under examples/xhtml. The subset of the
test suite included is dependent upon CSS features which are supported by
libRUIN and will grow as functionality improves.

** OS X support

Some minor fixes have been made to allow libRUIN to build on OS X (10.4).

** Guile 1.6 / 1.8 support

Some refactoring has been done to allow libRUIN to build against either the 1.6
or 1.8 releases of GNU Guile.

* Changes to the C interface

* Changes to layout and rendering

** CSS inheritance correctness

This release includes the latest version of SCSS, which features a number of
significant improvements to the correctness of style lookups. libRUIN itself
also features the following improvements: Automatic inheritance of relevant
style by anonymous inline boxes; correct inheritance of explicit style
(specified in "style" attributes).

** Handling for window resize events

libRUIN now automatically installs a handler for SIGWINCH and will redraw the
window when the terminal is resized.

** Pseudo-class support

There is now (preliminary) support for CSS pseudo-classes, e.g., :focus, :link.
Since these depend to some degree on integration with a user agent, which
libRUIN isn't, really, so this support is provisional and may change.

** Focus handling

Focus is no longer automatically sent to the first focusable element when
rendering is complete. The old focus toggle handlers (which inverted the color
of the focused element) have been removed.

** Rendering of inline elements

A couple of slight improvements: Left and right margins for inline elements are
now supported. Wrapping of lines, particularly those containing words that are
wider than the terminal, should look a bit better.

* Changes to the Scheme interface


Changes since 0.1.1 development release:

* Changes to the distribution

** libRUIN no longer includes guile-lib modules

configure now checks for the presence of the required modules; libRUIN still
includes the SDOM and SCSS Scheme modules, since it is currently unlikely that
users will have these installed.

* Changes to the C interface

* Changes to the Scheme interface

** New Scheme functions ruin:get-style and ruin:set-style!

These functions can be used, respectively, to set explicit style properties on
elements in the document tree. Both functions manipulate the style values that
are actually used during rendering -- i.e., the style information with the
highest precedence. 

ruin:set-style! does not change the element itself; properties set using this
function are stored in internal libRUIN data structures.


Changes since recent CVS:

* Changes to the distribution

** libRUIN includes source selections from guile-lib 

libRUIN incudes the 'assert' and 'time' modules from the 'debugging' tree, and
the 'documentation' and 'session' modules from the 'scheme' tree. This is
mostly to support the source distribution of SXML that is included.

* Changes to the C interface

** ruin_get_width and ruin_get_height have been removed

libruin.h no longer exposes ruin_get_width or ruin_get_height, and both
functions have been removed from the source. There's really no reason either
should have been made available to the user; they're not even really useful
for debugging purposes.

* Changes to the Scheme interface


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:
