
Configuration Backwards-Compatibility Breaks

In version 4.0.0, the configuration subsystem (composed of the outwards
facing Config class, as well as the ConfigSchema and ConfigSchema_Interchange
subsystems), was significantly revamped to make use of property lists.
While most of the changes are internal, some internal APIs were changed for the
sake of clarity. HTMLPurifier_Config was kept completely backwards compatible,
although some of the functions were retrofitted with an unambiguous alternate
syntax. Both of these changes are discussed in this document.



1. Outwards Facing Changes
--------------------------------------------------------------------------------

The HTMLPurifier_Config class now takes an alternate syntax. The general rule
is:

    If you passed $namespace, $directive, pass "$namespace.$directive"
    instead.

An example:

    $config->set('HTML', 'Allowed', 'p');

becomes:

    $config->set('HTML.Allowed', 'p');

New configuration options may have more than one namespace, they might
look something like %Filter.YouTube.Blacklist. While you could technically
set it with ('HTML', 'YouTube.Blacklist'), the logical extension
('HTML', 'YouTube', 'Blacklist') does not work.

The old API will still work, but will emit E_USER_NOTICEs.



2. Internal API Changes
--------------------------------------------------------------------------------

Some overarching notes: we've completely eliminated the notion of namespace;
it's now an informal construct for organizing related configuration directives.

Also, the validation routines for keys (formerly "$namespace.$directive")
have been completely relaxed. I don't think it really should be necessary.

2.1 HTMLPurifier_ConfigSchema

First off, if you're interfacing with this class, you really shouldn't.
HTMLPurifier_ConfigSchema_Builder_ConfigSchema is really the only class that
should ever be creating HTMLPurifier_ConfigSchema, and HTMLPurifier_Config the
only class that should be reading it.

All namespace related methods were removed; they are completely unnecessary
now. Any $namespace, $name arguments must be replaced with $key (where
$key == "$namespace.$name"), including for addAlias().

The $info and $defaults member variables are no longer indexed as
[$namespace][$name]; they are now indexed as ["$namespace.$name"].

All deprecated methods were finally removed, after having yelled at you as
an E_USER_NOTICE for a while now.

2.2 HTMLPurifier_ConfigSchema_Interchange

Member variable $namespaces was removed.

2.3 HTMLPurifier_ConfigSchema_Interchange_Id

Member variable $namespace and $directive removed; member variable $key added.
Any method that took $namespace, $directive now takes $key.

2.4 HTMLPurifier_ConfigSchema_Interchange_Namespace

Removed.

    vim: et sw=4 sts=4
