The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for HTML::Mason.

An HTML version of this file, complete with links to documentation, is
available at http://www.masonhq.com/changes.html.

** denotes an incompatible change

1.09_02

      [ INCOMPATIBLE CHANGES ]

    - The Component class's create_time method has been renamed as
      load_time.
    - Relative component paths in the $interp->exec() method are no longer
      resolved.  All component paths must be absolute.  Relative path
      resolution was added in 1.09_01 so this change is unlikely to affect
      most users.
    - Removed option to expire a component from the Apache::Status page.
      This option made little sense since components are cached per-process,
      and there's no guarantee that any particular process has cached a
      given component.  Again, this is a feature added in 1.09_01 so this
      change should not cause most people any problems.
    - Renamed CGIHandler's handle_cgi method to handle_comp.
    - Removed the dev_dirs feature from CGIHandler.
    - The default component root when not using ApacheHandler or
      CGIHandler is now the current working directory at the time the
      HTML::Mason::Resolver::File class is loaded.

      [ ENHANCEMENTS ]

    - All the modules included with Mason are now documented.
    - Various pieces of existing documentation have been tweaked and
      modified.
    - Added handle_cgi_object method to CGIHandler.
    - Mason works with the CVS version of mod_perl 2.0 when mod_perl 2.0's
      backwards compatibility layer is used.  AFAICT, the CVS version is
      close enough to what will be released as 2.0 that few, if any, changes
      should be required once 2.0 is out.
    - When running Mason with the ApacheHandler or CGIHandler modules, the
      Mason request object ($m) now has a "redirect" method, which can be
      used to send an HTTP redirect to the client.
      [ BUG FIXES ]

    - $m->flush_buffer was sending out '' to the buffer, even if no output
      existed.  This caused ApacheHandler to send headers, which broke
      redirects, for example.
    - Fix broken Apache::Status page  (reported by Thomas A. Lowery).
    - The lexing code now handles some weird edge case errors in a better
      way.  One of these involved a component starting with a invalid block
      name like <%foo>.
    - A component that compiles into Perl code that causes syntax errors
      seems to trigger a Perl bug when Mason attempts to eval it.  The
      symptom is that Mason simply hangs when it tries to eval the
      component's object file.  This bug is present in Perls before 5.7.3,
      but appears to be fixed in the development branch.  Mason will use
      alarm, if supported by the system, to work around this.
    - Output from subrequests was appearing _before_ other component
      output.  The new default is that this output appears "inline" in the
      calling component, which we think is most DWIM-ish.  Alternate
      behavior can be achieved by explicitly setting the subrequest's
      out_method parameter.
    - The $r object provided by CGIHandler.pm was not passing header
      values to CGI.pm in a way that CGI.pm liked.  Now we add a '-' to the
      front of the header name if necessary, and all headers are canonized
      to lower case in order to avoid having duplicates.
    - Mason only requires Apache::Request if you have mod_perl installed
      already.

1.09_01  April 4, 2002

      This is a big release and there are a lot of backwards
      incompatibilities.  Please make sure to read the UPGRADE document,
      which covers these in more detail.

      [ INCOMPATIBLE CHANGES ]

    - ** Errors now report line numbers from the component source file.
    - ** The Parser class has been removed entirely.  Its functionality
      has been split between the Lexer and Compiler objects.
    - ** The debug file feature has been removed.
    - ** The previewer has been removed.
    - ** The Interp use_reload_files parameter has been removed.  The new
      static_source parameter provides a useful, and conceptually simpler,
      replacement.
    - ** Mason's built in caching now uses Cache::Cache to do all the
      heavy lifting.  This means that parameters for both the $m->cache and
      $m->cache_self methods have changed.
    - ** The ApacheHandler's top_level_predicate parameter has been
      removed.
    - ** The mc_* commands have been removed entirely.
    - ** The Interp's taint_check parameter has been removed.  Mason now
      simply determines whether or not it is running in taint mode and acts
      appropriately without user intervention.
    - ** Mason now uses Apache::Request as its default argument processing
      module.  You can explicitly use CGI.pm if you prefer.
    - ** The ApacheHandler module no longers accepts parameters when
      imported.  Instead, you specify this parameter via the ApacheHandler
      constructor.
    - ** The ApacheHandler module now requires a minimum of mod_perl 1.22.
    - ** The Component's run_count() and first_time() methods have been
      removed.
    - ** The HTML::Mason::Config module is no longer needed, and is no
      longer generated during the installation process.
    - ** The Interp's autohandler_name and dhandler_name params no longer take
      undef as a valid value.
    - ** The Interp's use_autohandlers, use_dhandlers, and
      allow_recursive_autohandlers parameters have all been removed.
    - ** The $m->top_args and $m->top_comp methods have been renamed to
      $m->request_args and $m->request_comp.  The old methods are deprecated
      but will work until the 1.20 release.
    - ** Passing an Interp object to the ApacheHandler constructor (as in
      a handler.pl file) will no longer work unless you set the Interp's
      resolver_class parameter to
      'HTML::Mason::Resolver::File::ApacheHandler'.  However, you can now
      pass Interp constructor params directly to the ApacheHandler
      constructor, which will create the interp object internally. 
    - ** The MasonMultipleConfig httpd.conf parameter has been removed.
      Mason can now figure this out by itself.
    - ** The HTML::Mason::Interp time() method has gone away.
    - ** The base_comp is now changed for each component call, unless that
      component call uses a component object for its first argument, or the
      call starts with SELF: or PARENT:.

      [ ENHANCEMENTS AND NEW FEATURES ]

    - It is now possible to pass chunks of component content as part of a
      component call.
    - Mason now supports subrequests via the new $m->subexec and
      $m->make_subrequest methods.
    - Mason no longer requires you to specify a component root or data
      directory.  The component root now defaults to your document root in a
      web context, or your filesystem root in a standalone context.  The
      data directory will be a subdirectory of your server root under
      mod_perl, and Mason can work without any data directory at all in
      other contexts.
    - The Resolver class API has been redesigned and is documented for the
      first time.
    - The installation process will offer to help you setup Mason for use
      with mod_perl if it can find your Apache configuration file and it
      cannot find an existing Mason configuration.
    - The HTML::Mason::Request->instance method is now the officially
      supported way of getting at the current request object outside of a
      Mason component (suggested by John Siracusa).
    - The HTML::Mason::Interp->comp_exists method now checks for a
      component's existence without loading the component (suggested by
      Randal Schwartz).
    - Mason now includes a module called HTML::Mason::CGIHandler, which
      greatly simplifies the use of Mason via CGI scripts.
    - Mason now uses File::Spec for all filesystem operations.
    - All the .pod files have been merged into their corresponding .pm
      files, where appropriate.
    - Added the Component attr_if_exists method (suggested by Joe
      Frisbie).
    - We now use the HTML::Entities module's encode function for the 'h'
      substitution escape flag.  This module escapes high-ascii characters
      properly.
    - Calling a method via $m->comp('comp:method') works just like
      $comp->call_method('method').  Previously, ???
    - When an object contains other objects then the containing object's
      constructor accepts parameters intended for the contained objects.
      For example, the Interp object contains a Resolver object and Request
      objects.  The Interp's new method will accept constructor parameter
      for both the Resolver and Request objects.
    - The ApacheHandler args_method is now a per-object parameter.

      [ BUG FIXES ]

    - The <%args> section can now contain comments which contain the
      string '=>' (reported by Chris Hutchinson).
    - Fixed the longstanding bug that using print() or $r->print() causes
      output/headers to appear out of order.  You can now safely use these,
      though we still recommend that you use Mason to send output.
    - Filtered output now does appear when $m->abort() used.  However, an
      abort inside a component called via $m->scomp() still cause the output
      generated by that component to disappear.

      [ INTERNALS ]

    - Output buffering and filtering is handled by the new
      HTML::Mason::Buffer class.
    - All fatal errors thrown during component execution are exception
      objects in the HTML::Mason::Exception class hierarchy.
    - The CGI GET/POST argument processing code has been simplified
      (submitted by Ilmari Karonen).
    - ApacheHandler now uses a special Resolver subclass to translate URIs
      to component paths.
    - Parameters passed to "set" accessors are now validated in the same
      way as constructor parameters.
    - The component requested and the arguments it was passed are now
      properties of the Request object.

1.04  October 30, 2001

    - Fixed locale parser_version 0,8 problem. (submitted by Louis-David Mitterrand) 
    - Fixed inability to use '/' for comp_root. (reported by Doug Hunt) 
    - Fixed HTML::Mason::Parser::make_dirs dying when reload_file not
      defined. (reported by Ivan E. Panchenko)
    - Made error_process regexps more specific. (suggested by Vadim Belman) 
    - Fixed $m->count. (reported by David Wheeler) 
    - Fixed writing of object files in taint mode. (submitted by Barrie Slaymaker) 
    - Made it possible to run Makefile.PL without prompts. 

1.03  May 17, 2001

    - Made raw error message accessible from the new error display via
      an unobtrusive link.
    - Fixed Apache tests when started by a non-root user. (reported
      by Barrie Slaymaker)
    - Added short-circuits for Apache tests on Win32 and on systems with
      Apache configurations that cannot be properly parsed. (reported by
      Jindra Vavruska)

1.02  April 17, 2001

    - Completely redesigned error display. The new display includes a
      contextual source listing and readable stacktrace. You can access the
      old error behavior with the raw_html and raw_fatal error modes.
      (implemented by Matthew Lewinski)
    - Fixed $m->file to close its filehandle between uses. (reported by
      Matthew Lewinski)
    - Fixed bad interaction with Mason 1.01 and CPAN module, by adding
      version number to ApacheHandler.pm.
    - Fixed $m->top_comp to work as documented, and made documentation
      a bit more explicit. (reported by Gordon Henriksen)
    - Fixed specification of a component root as "foo => /foo" in
      httpd.conf. (reported by Chuck O'Donnell)
    - Added MasonDeclineDirs, accidentally omitted in 1.01. (reported by
      David Wheeler)
    - Changed sql examples in Devel.pod to use bind variables. (suggested
      by Austin S. Lin)

1.015 April 3, 2001

    - Fixed incompatibility with mod_perl < 1.21_01, introduced in 1.01.
    - Added 'use Apache.pm' to ApacheHandler.pm, necessary for some
      mod_perl installations.

1.01  March 27, 2001

    - Implemented configuration of Mason from httpd.conf via PerlSetVar
      directives.  This removes the need for a handler.pl file in many
      cases.
    - Revamped ApacheHandler tests to use a real Apache web server and
      mod_perl (assuming this is installed).  This allows for much better
      testing of Mason.  However, the test suite takes a bit longer to run
      as starting and stopping the server can take a second or two each
      time.
    - ** Fixed handling of POST requests with query strings via CGI.pm;
      the query string arguments were previously ignored, and are now merged
      with POST arguments. This is an incompatible change only for those
      whose code relied on the arguments missing.
    - Added basic validation of arguments to Parser, Interp,
      and ApacheHandler constructors.
    - Added interp->die_handler, allowing you to install your own
      subroutine as $SIG{__DIE__} to catch errors during component
      execution.  Alternately, you can simply turn the special error
      handling off.
    - Added interp->use_dhandlers and interp->use_autohandlers, more
      intuitive ways to turn on/off dhandlers and autohandlers.
    - Eliminated interp->verbose_compile_error, which is no longer needed
      and has not worked for some time.
    - Wrapped each component call in eval, allowing us to simplify the
      request stack code.  No visible user change.
    - Documented that you cannot call return() from a <%shared> or <%once>
      section.  (reported by Paolo Campanella)
    - Fixed documentation of escaped newline behavior.
    - Fixed incorrect code for using mod_perl args method in
      eg/session_handler.pl.

1.0  January 31, 2001

    - Identical to 0.896 except for version.

0.896  January 5, 2001

    - Fixed bug preventing Mason from working with PerlFreshRestart.
    - Fixed use_reload_file to work as documented and not stat() source files. (submitted by Benjamin John Turner)
    - Fixed display in Apache::Status.
    - Documented the significance of ordering in <%args> sections.
    - Fixed documentation of %ARGS with regards to hashes passed in query string. (suggested by Adam Stubbs)
    - Added version # to 'use Apache::Session::File' in session_handler.pl.
    - Fixed preloads documentation to match reality.

0.895  December 11, 2000

    - ** Removed ApacheHandler from Mason.pm. It is now necessary to
      explicitly 'use' the HTML::Mason::ApacheHandler module in your
      handler.pl file (or elsewhere).  This fixes an intermittent
      args_method bug and cleans up Mason.pod.
    - ** Changed $m->caller_args to return a hash reference in scalar
      context and a list/hash in list context. Older calls expecting a list
      reference will need to be changed.
    - Fixed Mason to work under Perl's tainting mode again.  Thanks to John
      Tobey for pointing us in the right direction.
    - Modified the definition of "next component" to depend on the current
      component, not merely the number of times $m->call_next has been
      called.  This allows $m->fetch_next to work as documented. Also
      added $m->fetch_next_all, which returns the rest of the wrapper chain.
    - Fixed bug with ../.. in component paths.  Versions 0.88 and 0.89
      would create multiple object files for a single component and would
      allow any filename to be treated as an internal component.  This was
      _not_ exploitable externally via Apache, however.  (reported by Pascal
      Eeftinck)
    - Implemented $m->top_comp and $m->top_args, and fixed documentation
      for $m->callers(-1).  (suggested by Kees Vonk)
    - Added full line comments to <%args> sections. (suggested by Matthew
      Lewinski)
    - Revamped test harness system with HTML::Mason::Tests, greatly
      simplifying the new test creation process.
    - Implemented partial compliance with Apache::Filter; Mason can now be
      used as a pre-filter but not yet as a post-filter. i.e. Configurations
      like "PerlHandler HTML::Mason Apache::Compress" will work.
    - Implemented logging of NOT FOUND errors to match plain Apache. Also
      issue special warnings for Mason-specific causes of NOT FOUND.
    - Documented Mason request object's aborted and aborted_value methods.
    - Documented the fact that any variable declared in the <%args>
      section must be a valid Perl variable name.  The parser will now give
      an error if it encounters an invalid name (such as $foo.x).
    - Eliminated upgrade of Apache request object to Apache::Request class
      if this were done previously.  (submitted by Shevek)
    - Removed FAQ from distribution. Users should seek out the most
      current FAQ, now maintained by Kwindla Kramer, on the web.
    - Fixed bug where an attempt to escape a substitution that contained a
      function operating on a list (like sort or map) ended up appending the
      escape flag characters to the list being operated on.
    - Fixed the test 08-ah to work with CGI versions >= 3.0. (reported by
      Alexei V. Barantsev)
    - Fixed a problem with the parser when running with a locale that used
      a comma as the decimal separator instead of a period. (reported by
      Louis-David Mitterrand)
    - Clarified the 'u' escape flag in docs.
    - Removed use of $r->finfo in Apachehandler.pm, which causes random
      core dumps in certain versions of mod_perl.
    - Updated eg/session_handler.pl code to match Apache::Session 1.50+.
    - Fixed various problems with debug files.
    - Fixed a bug sometimes seen when the parser failed to parse a
      component called by another component.
    - Fixed a bug that prevented the $m->cache_self method from returning
      anything.
    - Fixed documentation regarding 'months' and 'years' units in
      expire_in cache flag.
    - Fixed bug in HTML/Mason/Component/Subcomponent.pm create_time
      method.  (reported by Caleb Crome)
    - Fixed bug where Mason would try to escape undefined values in a
      substitution with an escape flag.  (submitted by Denis Shaposhnikov)

0.89  September 14, 2000

    - Fixed broken CGI args implementation from 0.88 (old arguments
      appearing in new requests)
    - Fixed system log bug from 0.88

0.88  August 30, 2000

    - Fixed broken Parser postprocessor code (broken since 0.85).  Added
      tests for this code path as well as the preprocessor feature.
      (reported by Tim Bishop)
    - Replaced lots of simple accessors with new HTML::Mason::MethodMaker
      (which just makes simple read-only and read-write accessor methods).
    - Removed all direct hash key access from one object into another.
    - Removed all unneeded uses of Exporter in various modules.
    - Added warning about using mod_perl as a DSO to README file.
    - Added 'cgi_object' method to HTML::Mason::Request::ApacheHandler.
      This method returns the CGI object Mason uses internally (unless
      you're using Apache::Request instead in which case its a fatal error).
      Added documentation for this. (suggested by many people).
    - Squashed warning in assignment to %ARGS in component sub body.
    - Fixed call_method and scall_method to take arbitrary list of args
      instead of hash.
    - Fixed expression escape flags to allow arbitrary following
      whitespace.  (reported by Mikhail Zabaluev)
    - Added FAQ on how to handle file uploads.
    - $m->cache returns the value stored on a successful store action.
    - Reduced memory usage by removing unneeded uses of various modules.
      On my box I see about a 500k or so reduction in memory use (Dave).
    - Removed all uses of the IO::* modules.
    - Mason seems to be working under a mod_perl DSO, at least under
      mod_perl 1.24 and Apache 1.3.12.  This probably has nothing to do with
      Mason but the very adventurous are encouraged to experiment with a
      mod_perl DSO and report back to the mason list.

0.87  May 24, 2000

    - Fixed multiple GET/POST argument glitch introduced in 0.86.
      (reported by Matt Hoskins)

0.86  May 18, 2000

    - Fixed multiple-<%perl>-section infinite loop bug introduced in 0.85.
    - (Re-)Fixed Apache hang on POST not-found bug.
    - Added $m->scall_method, analagous to $m->scomp. (suggested by Michael Shulman)
    - When using mod_perl args method, $r is upgraded to Apache::Request object.
      (suggested by Matt Hoskins)
    - Documented attr, methods, and flags in Component.pod.
    - Improved error msg for <%def> or <%method> lacking name.
    - Improved error msg for using invalid embedded tag in def or
      method. (submitted by Dave Rolsky)
    - Eliminated reliance on hash ordering in tests.
    - Changed test scripts to create separate data dirs for each test
      branch and clear data dir at start of test.
    - Added mixed case and repeated sections to <%perl> tests.
    - ** Removed mod_perl specific $m->http_input; can no longer be
      supported.
    - Fixed args processing loop to allow multiple file
      uploads. (submitted by Matt Hoskins)

0.85  May 7, 2000

    - Added object-oriented primitives to components. Components can
      define methods and attributes and inherit from parent components.
      Templates can access the current page's methods and attributes for
      greater flexibility.
    - ** Major improvements/changes to autohandler feature. Autohandlers
      are now recursive by default, and all applicable autohandlers for a
      given page get a chance to run. If you have multiple autohandlers in
      parent/child directories, or if you used autohandlers with
      allow_recursive_autohandlers=0, you will need to adjust for the new
      policy.
    - Integrated a revamped parse_component that is cleaner, more modular
      and easier to subclass. Courtesy of Dave Rolsky.
    - New <%shared> section contains code that executes once per request
      and whose declarations are visible from the main component, methods
      and subcomponents alike.
    - Added escape flags for <% %> output. Can now HTML-escape or
      URI-escape expressions on a site-wide or per-expression
      basis.
    - Added choice of CGI or Apache::Request when using
      ApacheHandler. (submitted by Dave Rolsky)
    - Documented $m->clear_buffer, which removes all pending output from
      the buffer.
    - Fixed keys and expires cache actions from m->cache
      interface. (suggested by Matt Hoskins)
    - dhandlers can now serve their own directory; added documentation
      about handling directories.
    - Fixed dhandler bug introduced in 0.81 whereby $m->dhandler_arg only
      contains the first branch of a multi-branch argument.
    - Removed memory leak in ApacheHandler::handle_request_1. (submitted
      by Pascal Eeftinck and Renzo Toma)
    - Changed parent_comp() to owner() for subcomponents/methods.
    - Increased maximum recurse level from 16 to 32.
    - Reorganized syntax section of developer's manual and added a "how to
      use this manual" section.
    - Added an UPGRADE guide to distribution.
    - Added section about securing top-level components to Admin.pod.
      (suggested by Sean Cazzell)
    - Added section about declining image requests to Admin.pod.
    - Eliminated "Subroutine status_mason redefined" warning when creating
      multiple ApacheHandlers.
    - Updated cookie expiration in CD-ME example. (reported by Renzo Toma)
    - Added a "-f" flag to rm in faq Makefile. (reported by Jeremy Taylor)

0.81  February 20, 2000

    - Fixed small 0.8 bugs with automatic header sending. Headers are now
      sent for blank pages and are not sent on an error status code.
    - Fixed bug with default system log file. (submitted by Renzo Toma)
    - Eliminated memory leak introduced in 0.8 for a few Linux platforms.
      (submitted by Renzo Toma and Pascal Eeftinck)
    - Fixed bug with component paths displaying two leading slashes.
    - Fixed $comp->source_file when multiple comp roots declared.
    - Fixed $m->decline in mod_perl mode.
    - Removed legacy dhandler code from ApacheHandler.
    - Replaced $r->filename with $r->finfo in ApacheHandler.
      (submitted by Dennis Watson)
    - Added dynamic virtual server configuration example to Admin.pod.
      (submitted by Caleb Crome)

0.8  January 23, 2000

    - New integrated request API. $m replaces $REQ as the global variable
      containing the current request object. All mc_ commands have been
      incorporated into $m methods: mc_comp becomes $m->comp, mc_file
      becomes $m->file, etc. The old commands still work for now.
    - The utility bin/convert0.8.pl converts existing components to use
      the new request API.
    - Autohandler methods have been renamed: from mc_auto_next to
      $m->call_next and mc_auto_comp to $m->fetch_next. This is in
      preparation for a more general component inheritance system.
      convert0.8.pl handles this change.
    - Can now specify multiple component roots in the spirit of @INC.
      (suggested by Ewan Edwards and others)
    - Simplified HTTP header behavior. Headers are sent at the end of the
      request (in batch mode) or just before the first non-whitespace output
      (in stream mode). suppress_http_header no longer needed.
    - New organization of Component class into subclasses
      Component::FileBased and Component::Subcomponent. No outward change.
    - Updated object file format. Mason should generally auto-detect
      and recompile old object files, but may not catch everything. Try
      removing your object directory if errors persist.
    - ** mc_suppress_http_header command still exists but does nothing.
      In most cases this should not cause a problem. The only
      incompatibility is if you have used mc_suppress_http_header to
      suppress headers completely (i.e. you don't want Mason to send headers
      at all); in this case pass auto_send_headers=>0 to ApacheHandler.
    - Output mode parameter was moved from ah->output_mode to
      interp->out_mode, to make it independent of mod_perl.
      ah->output_mode still works.
    - New in-memory code cache keeps track of component usage, and
      discards the most infrequently used components as needed.  You can
      specify the cache size with interp->max_code_cache_size.
    - ** Eliminated the now unnecessary interp->code_cache_mode.
    - ** Eliminated the "source references" optimization, a common source of
      bugs, no longer needed with the new code cache.
    - Allow arguments to be accessed via @_ as in regular subroutines; no
      longer required to be in hash form. (suggested by Ken Williams)
    - Added $m->scomp, which returns the output of the component call
      instead of printing it. This is a cleaner replacement for the STORE
      parameter, which still works but is no longer officially documented.
    - Added $m->flush_buffer, which forces the buffer to be sent to the
      client when in batch mode.
    - Added $m->caller_args, which returns the argument list for any point
      in the stack. (suggested by Lee Semel)
    - Added $m->decline, which passes control to the next dhandler.
      (suggested by Chuck O'Donnell)
    - Augmented $m->cache_self to cache return values as well as output.
      (suggested by Jon Frisby)
    - Changed data cache filenames from colon-separated to url-encode
      style for Win32 compatibility. (submitted by Ken Williams)
    - Added improved, separate session_handler.pl for session handling.
    - ** mc_comp_source no longer works for non-existent components.
    - ** Removed mc_date legacy command.
    - Many new test scripts.
    - Added warnings about using Mason with mod_perl DSO.
    - Added more site configuration examples to Admin.pod.
    - Split object parameter methods (interp->comp_root, etc.) into
      read/write and read-only as appropriate.
    - Fixed request stack corruption when die() or error from one
      component is caught by another component's eval.
    - Fixed doc_root / comp_root mismatch on case-insensitive O/S.
      (reported by John Arnold)
    - Fixed "directory not absolute" warning on "/" (reported by Joe Edmonds)
    - Fixed reload file scanning mechanism (submitted by Brian Holmes)
    - Added use_data_dumper_xs Config.pm item, which checks whether
      Data::Dumper::Dumpxs is available. (reported by Pelle Johnsen)
    - Added "code examples" section to README

0.72  October 15, 2000

    - Eliminated long-standing infinite-block bug when POSTing to a
      non-existent URL
    - Fixed "keys" cache action which never worked as documented
      (submitted by Scott Straley)
    - Fixed source references on Win32 platforms by using text mode when
      reading object file (submitted by Michael Shulman)
    - Fixed various methods in FakeApache
    - Remove final slash from system paths (component root, etc.) and
      check that those paths are absolute
    - Fixed all-text subcomponents, by bypassing the pure-text
      optimization
    - Quoted all hash strings in object file to reduce "Ambiguous use
      of ..." warnings (suggested by Paul Schilling)
    - Replaced */* with default-handler as recommended way to bypass Mason
      (suggested by Dirk Koopman)
    - Removed defunct pure text section in Administrators Guide (reported
      by Michael Shulman)

0.71  September 14, 2000

    - Logic of top_level_predicate was reversed in 0.7; fixed.
      (reported by Tom Hughes, Eric Hammond)
    - mc_suppress_http_header(0) was broken in 0.7; fixed.
      (reported by Michael Alan Dorman)
    - Fixed bug in parser section that determines whether % is at the
      beginning of a line.  (reported by Tom Hughes)
    - Parser no longer inadvertently accepts argument names with
      whitespace.  (reported by Phillip Gwyn)

0.7  September 1, 2000

    - Improved core implementation with two new classes,
      HTML::Mason::Request and HTML::Mason::Component.  Code is now cleaner
      and more scalable, and the new APIs give developers control and
      introspection over Mason's inner workings.
    - Added documentation to accommodate new classes: created
      Request.pod and Component.pod, and moved component developer's guide
      (previously at Components.pod) to Devel.pod to avoid
      confusion.
    - Object files have changed significantly (they now return a
      component object).  Pre-0.7 object files will be detected and
      automatically updated, unless you are running in reload file mode
      in which case you are responsible for generating new object files.
    - New <%def> section defines a subcomponent embedded inside a larger
      component.  This allows repeated code and HTML to be modularized
      without affecting the global component namespace.
    - <%args> section now accommodates optional comments for declarations
    - Improved Perl translation of <%args> section (submitted by Ken
      Williams)
    - Autohandler and dhandler file names are now configurable
    - Dhandlers, which formerly worked only in mod_perl mode, now work in
      stand-alone mode as well
    - Interp::exec is now re-entrant with all request specific information
      having been moved to Request class.
    - ** Reworked Parser API. parse is now called make_component, has a
      simplified set of options, and returns a component object
      directly. make is now called make_dirs.
    - Source references now read from the object file, cleaner for a
      variety of reasons. Preprocess and postprocess now work with source
      references.
    - Removed obsolete and undocumented Interp::vars and mc_var functions
    - Simplified chown/getpwuid usage in handler.pl (submitted by Randal
      Schwartz)

0.6.2  August 20, 2000

    - Fixed problem with shared data cache locks over NFS (submitted by
      Tom Hughes)
    - Fixed mc_auto_comp, which never really worked as documented
    - Fixed preloading for directories (submitted by Dennis Watson)
    - Added back Utils::get_lock, which is used by content management

0.6.1  July 27, 2000

    - Added warnings to convert-0.6.pl about occasional erroneous
      component call syntax conversions (reported by Oleg Bartunov)
    - Fixed conversion of <% mc_comp("/foo/$bar") %> (reported by Oleg
      Bartunov)
    - Fixed cache access under high concurrencies (reported by Oleg
      Bartunov)
    - Fixed uppercase <%PERL>, broken in 0.6 (reported by Daniel L. Jones)
    - Fixed mc_suppress_http_header(0), broken in 0.6 (reported by Jim
      Mortko)

0.6  July 16, 2000

    - New <& &> tag provides a more convenient way to call components
      inside HTML. mc_comp still works.
    - The "perl_" prefix has been eliminated from section names: now
      simply use <%init>, <%cleanup>, <%args>, etc. The old names still
      work.
    - The utility bin/convert0.6.pl converts existing components to use
      the above new syntax.
    - New autohandler feature finally provides an easy way to specify a
      common template or behavior for a directory. An autohandler is invoked
      just before any top-level components in its directory begins executing.
      It can display header/footers, apply a filtering function, set up
      globals, etc.  A good complement to dhandlers.
    - New <%once> section contains code that will be executed once when a
      component is loaded.  It is useful for defining persistent variables
      and named subroutines.
    - New <%filter> section and mc_call_self command allow you to arbitrarily
      filter the output of the current component.
    - New <%text> section allows you to turn off Mason processing for a
      particular section of text.
    - Implemented first installation test suite! [modus]
    - HEAD optimization: we now automatically abort after headers are sent
      on a HEAD request.
    - New Parser make() utility traverses a tree of components, compiling
      any out-of-date components into object files and reporting errors.
    - New mc_comp_source command returns the source filename of this or
      any component.
    - mc_file now uses current component path by default for relative paths
      if no static_file_root defined (suggested by John Landahl)
    - Various previewer interface improvements
    - Removed link tags in pods documentation due to 5.004 problems
    - Took out previewer stub from Mason.pm to eliminate "subroutine
      redefined" warning
    - Updated makeconfig.pl to prefer GDBM_File, to avoid a bug in
      Berkeley DB 1.x
    - Cleaned and sped up interp hooks facility
    - Stopped substituting control characters for section strings in Parser
      [modus]
    - Fixed mc_cache 'expire' bug (reported by Aaron Ross)
    - Changed ignore_warnings default to ignore "subroutine redefined"
      warnings to make <%once> more useful
    - Removed defunct Safe code from Parser and defunct ALLOW_HANDLERS
      code from Interp
    - Added index file to htdocs/

0.5.1  June 10, 2000
    - Removed leftover "use File::Recurse" in ApacheHandler.pm [modus]
    - Added empty test target to FAQ Makefile, required on certain
      architectures [modus]

0.5   June 3, 2000
    - Removed memory leak associated with "return sub { ... }"
    - Overhauled Config.pm, now maintains previous configuration when
      upgrading Mason (suggested by Patrick Kane)
    - Made filename processing compatible with Windows 32 (suggested by
      Rafael Weinstein)
    - Removed requirement of File::Tools/File::Recurse, replaced with
      standard File::Find
    - Switched output to STDOUT from $r->print, to facilitate chaining
      with other mod_perl tools
    - Switched to standard argument processing code, now handles
      multi-part forms [modus]
    - New preprocess and postprocess Parser options allow you to apply
      auomatic modifications to components, before or after they are compiled
      into code. (submitted by Philip Gwyn)
    - New in_package Parser option allows components to live in any
      package. (submitted by Philip Gwyn)
    - Added documentation about using globals in components, and
      some new facilities: Parser option 'allow_globals' and Interp
      method 'set_global'.
    - Documented how to save persistent user information with Apache::Session [modus]
    - ** Changed behavior of reload_file mode to read directly from object
      files. If you use reload files, you're now responsible for
      creating object files. [mschmick]
    - Reduced number of file stats when loading components [mschmick]
    - New apache_status_title ApacheHandler option makes it possible to
      use Mason's perl-status page with multiple ApacheHandler objects.
      (submitted by Philip Gwyn)
    - Upgraded FakeApache/debug files to work with mod_perl 1.19
    - New sections in Component Developer's Guide explain how debug files
      work and some caveats about when they don't.
    - Mentioned mailing lists, masonhq.com web site, and FAQ in the
      documentation and README
    - Improved documentation on how to integrate images and non-Mason
      hierarchies with Mason.
    - Differentiated mc_cache and mc_cache_self in the commands manual
      (suggested by Tom Hukins)
    - Increased discouraging of SDBM, improved warnings when cache store
      fails (suggested by Patrick Kane)
    - Fixed HTML documentation to work with IE (suggested by Fen Lebalme)
    - Fixed infinite loop in ApacheHandler dhandler search (submitted by
      Chuck O'Donnell)
    - Documented Parser method parse(), which allows you to compile
      components outside of a Interp environment.
    - New mc_cache actions 'expire' and 'keys' help you peer into data cache
      files and expire selected keys.
    - Corrected Parser to properly handle \ in components (submitted by
      Ken Williams)
    - ** Took Preview out of Mason.pm; ApacheHandler used only if mod_perl
      environment. If you use the previewer, you now have to explicitly "use
      HTML::Mason::Preview" in your handler.pl.
    - Improved documentation about argument/GET/POST handling (suggested
      by Ken Williams)
    - Added cache option 'busy_lock', which prevents multiple processes
      from recomputing an expire cache value at the same time.  (suggested
      by Dennis Watson)
    - Inserted work-around for Perl 5.005 $r scoping bug (submitted by
      Rafael Weinstein)
    - Fixed "new CGI" example in Components.pod (submitted by Austin Lin)
    - Fixed "return if content-type..." line in handler.pl and Mason.pod
      (submitted by Patrick Kane)
    - Added CREDITS file

0.4  January 06, 2000
    - Added support for using Perl profiler in conjunction with debug
      files
    - Fixed bug in previewer HTML trace introduced in 0.3
    - Created Perl status section for Mason
    - Removed most warnings when PerlWarn is on (suggested by Philip Gwyn)
    - Added code_cache_mode parameter to control caching of components in
      memory
    - Fixed mismatch between documentation and code with regards to cache
      store events in system log.  The real event name is CACHE_WRITE.
    - Changed system logging to use canonical server name when recording
      URI
    - Field access methods inside Mason objects are now handled with
      custom subroutines instead of generic AUTOLOAD, improving performance
    - Information for debug file is no longer collected if debug mode is
      "none"
    - Code to decline images and other non-text requests was placed in
      default handler.pl and described in documentation (suggested by
      Patrick Kane)
    - Fixed server header output from debug files (suggested by Ewan Edwards)
    - Created a Mason bundle
    - Created a CPAN "alias" from Apache::Mason to HTML::Mason

0.3   November 25, 1999
    - Added optional system logging of page requests, cache activity,
      component loading
    - Deny directory requests so that index files will work in mod_perl 1.16+
    - Removed reliance on several external packages (Date::Manip,
      CGI::Base, URI::Escape). This should reduce the amount of memory taken
      up by Mason processes and make Mason easier to install.
    - ** Due to the removal of Date::Manip, the mc_date command will no
      longer work unless Date::Manip is explicitly used, and the syntax for
      the expire_at cache parameter and the Interp current_time parameter
      have changed.
    - Added parser taint_check flag which allows Mason to work with taint
      checking on (suggested by Randal Schwartz)
    - Added warning messages when returning 404 from ApacheHandler
    - Improved cache locking with the use of separate lock files
    - Makefile.PL checks for required and optional packages
    - Documentation fixes and improvements
    - Removed obsolete and undocumented commands from Commands.pm
    - Failure to write debug file is now a warning rather than fatal error
    - Augmented "no configuration for previewer port" error
    - Fixed $interp->exec to be able to return list
    - Changed parser to remove ctrl-Ms instead of replacing with spaces
    - Always call http_header hook, not just at top level
    - Added global IN_DEBUG_FILE flag
    - Renamed mc_call_stack to mc_comp_stack to match documentation

0.2   August 21, 1999
    - Replaced File::lockf module, which could not port to some systems,
      with simple call to flock
    - Corrected email address in README
    - Fixed undeclared variable bug in preview component
    - The previewer did not work in basic versions of Perl 5.004 due to an
      eval scoping bug. A workaround was put in place.
    - Fixed expire_if cache option to pass correct argument to provided
      subroutine
    - Empty argument section no longer parsing incorrectly
    - Took out directory names from manifest which were causing errors on
      install
    - Debug file is no longer prepared when debug_mode is "none"
    - Use Preview.pm in Mason.pm

0.1   July 22, 1999
    - Original version; created by h2xs 1.18