[Templates-cvs] cvs commit: Template2 Changes HACKING INSTALL MANIFEST MANIFEST.SKIP Makefile.PL README TODO
cvs@template-toolkit.org
cvs@template-toolkit.org
cvs 06/05/26 13:44:22
Modified: . Changes HACKING INSTALL MANIFEST MANIFEST.SKIP
Makefile.PL README TODO
Log:
Version 2.15
Revision Changes Path
2.83 +130 -42 Template2/Changes
Index: Changes
===================================================================
RCS file: /template-toolkit/Template2/Changes,v
retrieving revision 2.82
retrieving revision 2.83
diff -u -r2.82 -r2.83
--- Changes 2006/01/30 20:00:53 2.82
+++ Changes 2006/05/26 13:44:21 2.83
@@ -19,20 +19,77 @@
# Any changes you make here may be lost!
#
#------------------------------------------------------------------------
-# $Id: Changes,v 2.82 2006/01/30 20:00:53 abw Exp $
+# $Id: Changes,v 2.83 2006/05/26 13:44:21 abw Exp $
#========================================================================
#------------------------------------------------------------------------
-# Version 2.15
+# Version 2.15 - 26th May 2006
#------------------------------------------------------------------------
+Chomping Options
+----------------
+
+* Added the CHOMP_GREEDY option and '~' chomping flag. Changed
+ CHOMP_COLLAPSE to greedily chomp all whitespace (including multiple
+ newlines) and replace it with a single space. Previously it only
+ chomped one line. Renamed the CHOMP_ALL option to CHOMP_ONE which
+ makes more sense. CHOMP_ALL is still provided as an alias for
+ CHOMP_ONE for backwards compatibility. Thanks to Paul Seamons for
+ doing all the hard work on this.
+
+ http://tt2.org/pipermail/templates/2006-February/thread.html#8354
+
+* Added code to the replace text virtual method to use a faster and
+ simpler implementation if the replacement text doesn't contain any
+ back references. Thanks to Josh Rosenbaum for all his efforts on
+ this.
+
+ http://tt2.org/pipermail/templates/2006-February/008344.html
+
Stash
-----
+* Changed various tests for private/hidden variables (starting '_'
+ or '.') to use a regex defined in the $PRIVATE package variable in
+ Template::Stash. This can be redefined or undefined. Note that
+ the XS Stash only looks to see if $PRIVATE is defined or not, and
+ currently hard-codes the regex.
+
+Plugins
+-------
+
+* Changed the Image plugin tag() method to call the name() method
+ instead of accessing the name directly, making it easier for
+ subclasses to provide an alternate name. Thanks to Cees Hek for
+ his patch.
+
+ http://tt2.org/pipermail/templates/2006-February/008423.html
+
+* Change the AUTOLOAD regex in the Table plugin to be more robust.
+
+ http://tt2.org/pipermail/templates/2006-May/008602.html
+
+Documentation
+-------------
+
+* Added the Template::Toolkit documentation pointing people to
+ the right place.
+
+* Updated the Template::Stash::XS documentation to remove the
+ "experimental" description and tidy things up a bit.
+
+
+#------------------------------------------------------------------------
+# Version 2.14a - 2nd February 2006 ## DEVELOPER RELEASE ##
+#------------------------------------------------------------------------
+
+Stash
+-----
+
* Activated a patch in Template::Stash from Stephen Howard which adds
- code for the full set of fallbacks for dot ops called against objects
- which don't implement the specific method. For example
- [% hashobj.vmethod %] [% listobj.2 %] and [% listobj.vmethod %] now
+ code for the full set of fallbacks for dot ops called against
+ objects which don't implement the specific method. For example
+ [% hashobj.vmethod %] [% listobj.2 %] and [% listobj.vmethod %] now
all work with the Perl Template::Stash. Added code to the XS Stash
to do the same and updated tests.
@@ -43,76 +100,91 @@
http://tt2.org/pipermail/templates/2006-January/008266.html
-* Applied path from Slaven Rezic to Template::Stash::XS to check return
- code in tt_fetch_item() in a way which plays nicely with tied hashes.
+* Applied path from Slaven Rezic to Template::Stash::XS to check
+ return code in tt_fetch_item() in a way which plays nicely with tied
+ hashes.
http://rt.cpan.org/Ticket/Display.html?id=7830
-* Changed Template::Stash and Template::Stash::XS to evaluate list
+* Changed Template::Stash and Template::Stash::XS to evaluate list
vmethods in lvalues.
http://tt2.org/pipermail/templates/2006-January/008198.html
* Changed Template::Stash to be a little more strict about what it
- considers a failed method call. This allows exception thrown
- within called methods to be propagated correctly rather than
- being ignored as undefined method. Thanks to Dave Howorth for
- reporting the problem and providing a fix. Also ported to the
- Template::Stash::XS module.
+ considers a failed method call. This allows exception thrown within
+ called methods to be propagated correctly rather than being ignored
+ as undefined method. Thanks to Dave Howorth, Tom Insam and Stig
+ Brautaset for reporting the problem and providing fixes.
http://tt2.org/pipermail/templates/2005-April/007375.html
+ http://tt2.org/pipermail/templates/2006-February/008367.html
+
+* Removed redundant performance profiling code from
+ Template::Stash::XS. Must check with Doug that this is OK and he's
+ not still using it...
-* Removed redundant performance profiling code from Template::Stash::XS.
- Must check with Doug that this is OK and he's not still using it...
Virtual Methods
---------------
+
+* Added the scalar.remove, scalar.substr, hash.delete, hash.items,
+ hash.pairs, list.import and list.hash virtual methods.
+
+* Changed the scalar.replace method to work properly with back
+ references ($1, $2, etc) by incorporating ideas, code and tests from
+ Nik Clayton, Paul Seamon, Sergey Martynoff, Josh Rosenbaum and
+ others.
+
+ http://tt2.org/pipermail/templates/2006-February/008306.html
+ http://tt2.org/pipermail/templates/2006-February/008326.html
-* Changed list.hash and hash.list vmethods to Do The Right Thing instead
- of some crack fuelled nonsense. hash.list now returns [ %$hash ]
- and list.hash now returns [ @$list ]
-
- http://template-toolkit.org/pipermail/templates/2006-January/008256.html
-
-* Fixed the split scalar virtual method which wasn't accepting the second
- argument (limit) correctly. Thanks to Josh Rosenbaum for pointing
- out the problem, although the solution turned out to be a little more
- complicated.
+* Changed list.push and list.unshift to accept multiple arguments,
+ thanks to Bill Moseley.
+ http://tt2.org/pipermail/templates/2006-January/008294.html
+
+* Fixed the split scalar virtual method which wasn't accepting the
+ second argument (limit) correctly. Thanks to Josh Rosenbaum for
+ pointing out the problem.
+
http://tt2.org/pipermail/templates/2005-October/007982.html
-* Added the 'delete' hash virtual method and the 'remove' scalar virtual
- method.
+* Documented the fact that hash.list is going to change in the future,
+ recommending people switch to hash.pairs.
-* Changed $element to $component in Template::Context to fix callers bug,
- thanks to Andy Maas who identified the problem and found the solution:
+ http://tt2.org/pipermail/templates/2006-January/008256.html
+ http://tt2.org/pipermail/templates/2006-February/008312.html
- http://tt2.org/pipermail/templates/2004-December/007020.html
+* Added the global option to the 'match' scalar virtual method.
-* Fixed the regex matching relative paths in Template::Provider, thanks
- to Josh Rosenbaum
+* Changed $element to $component in Template::Context to fix callers
+ bug, thanks to Andy Maas who identified the problem and found the
+ solution:
- http://tt2.org/pipermail/templates/2005-January/007141.html
+ http://tt2.org/pipermail/templates/2004-December/007020.html
-* Changed the sort and nsort list virtual methods to always return
+* Changed the sort and nsort list virtual methods to always return
references to lists, avoiding any ambiguity in return results.
-* Changed the hash.defined method to do the same thing as scalar.defined
- when called without arguments. Added list.defined to do the same thing
- as hash.defined.
+* Changed the hash.defined method to do the same thing as
+ scalar.defined when called without arguments. Added list.defined to
+ do the same thing as hash.defined.
http://rt.cpan.org/Ticket/Display.html?id=9094
+* Moved all the tests into t/vmethods/*
+
Plugins
-------
* Added the $Template::Plugins::PLUGIN_BASE package variable to define
- the default 'Template::Plugin' value for the PLUGIN_BASE option.
- By clearing this value before calling the Template new() constructor,
- you can avoid having Template::Plugin added to the PLUGIN_BASE by
+ the default 'Template::Plugin' value for the PLUGIN_BASE option. By
+ clearing this value before calling the Template new() constructor,
+ you can avoid having Template::Plugin added to the PLUGIN_BASE by
default. Also changed PLUGINS search to look for lower case plugin
- name as well as case-specific name. Thanks yet again Josh for
+ name as well as case-specific name. Thanks yet again Josh for
addressing this issue.
http://tt2.org/pipermail/templates/2006-January/008225.html
@@ -172,7 +244,7 @@
http://rt.cpan.org/Ticket/Display.html?id=5695
* Updated documentation to reflect the fact that the html filter also
- escapes " as " Thanks to Geoff Richards for reporting it.
+ escapes " as " Thanks to Geoff Richards for reporting it.
* Moved Latex filters into Template-Latex distribution.
@@ -201,6 +273,11 @@
http://rt.cpan.org/Ticket/Display.html?id=4180
+* added AppConfig EXPAND => EXPAND_ALL option to perl5lib,
+ template_plugin_base, template_compile_dir and depend_file
+ configuration options to allow them to contain ~ to indicate
+ the user's home directory, or $WHATEVER for environment variables,
+ as per the other path-specific options like src, lib, etc.
Miscellaneous
-------------
@@ -219,6 +296,17 @@
Template::Parser line counting when using chomp flags.
http://tt2.org/pipermail/templates/2005-December/008157.html
+
+* Applied a patch from Jess Robinson to move the Template::Provider
+ check for file freshness into a separate method, in order to
+ play nicely with his Template::Provider::DBI module.
+
+ http://tt2.org/pipermail/templates/2005-December/008143.html
+
+* Fixed the regex matching relative paths in Template::Provider, thanks
+ to Josh Rosenbaum
+
+ http://tt2.org/pipermail/templates/2005-January/007141.html
* Applied a patch to Template::Provider to prevent a misleading error
message, thanks to Slaven Rezic.
2.34 +3 -3 Template2/HACKING
Index: HACKING
===================================================================
RCS file: /template-toolkit/Template2/HACKING,v
retrieving revision 2.33
retrieving revision 2.34
diff -u -r2.33 -r2.34
--- HACKING 2006/01/30 20:02:49 2.33
+++ HACKING 2006/05/26 13:44:21 2.34
@@ -3,9 +3,9 @@
Version 2.15
- 30 January 2006
+ 26 May 2006
- Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or
@@ -60,7 +60,7 @@
COPYRIGHT
---------
-Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved.
+Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved.
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or modify it under
2.36 +6 -14 Template2/INSTALL
Index: INSTALL
===================================================================
RCS file: /template-toolkit/Template2/INSTALL,v
retrieving revision 2.35
retrieving revision 2.36
diff -u -r2.35 -r2.36
--- INSTALL 2006/01/30 20:02:49 2.35
+++ INSTALL 2006/05/26 13:44:21 2.36
@@ -3,9 +3,9 @@
Version 2.15
- 30 January 2006
+ 26 May 2006
- Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or
@@ -53,9 +53,9 @@
-------------
The Template Toolkit is written entirely in Perl and should run on any
-platform on which Perl is available. It requires Perl 5.005 or later.
+platform on which Perl is available. It requires Perl 5.006 or later.
-The 'ttree' utility uses the AppConfig module (version 1.55 or above)
+The 'ttree' utility uses the AppConfig module (version 1.56 or above)
for parsing command line options and configuration files. It is
available from CPAN:
@@ -113,11 +113,6 @@
number of configuration items. The following CONFIGURATION section
covers this in greater detail.
-There are known to be a few minor issues with the test suite, with
-some tests failing in certain conditions. None of these are thought
-to be serious problems. The BUILDING AND TESTING section provides
-more detail on this.
-
If you choose to install the optional components then you may need to
perform some post-installation steps to ensure that the template
libraries, HTML documentation and examples can be correctly viewed via
@@ -326,11 +321,8 @@
make
The 'make test' command runs the test scripts in the 't' subdirectory.
-There is known to be at least one failures under certain conditions:
- * The Text::Autoformat plugin may fail on tests 23 and 25 with
- versions of Perl prior to 5.6.0 when using a locale which has a
- decimal separator other than '.'.
+ make test
You can set the TEST_VERBOSE flag when running 'make test' to see the
results of the individual tests:
@@ -486,7 +478,7 @@
COPYRIGHT
---------
-Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved.
+Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved.
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or modify it under
2.42 +35 -28 Template2/MANIFEST
Index: MANIFEST
===================================================================
RCS file: /template-toolkit/Template2/MANIFEST,v
retrieving revision 2.41
retrieving revision 2.42
diff -u -r2.41 -r2.42
--- MANIFEST 2006/02/02 11:53:02 2.41
+++ MANIFEST 2006/05/26 13:44:21 2.42
@@ -1,17 +1,10 @@
-Changes
-HACKING
-INSTALL
-MANIFEST
-Makefile.PL
-README
-TODO
-bin/README
bin/gifsplash
+bin/README
bin/tpage
bin/tt-bench.pl
bin/tt2inst
bin/ttree
-docs/README
+Changes
docs/html/README
docs/lib/config
docs/lib/docset/config
@@ -24,25 +17,28 @@
docs/lib/subsection
docs/lib/toc
docs/lib/tocitem
+docs/README
docs/src/FAQ/FAQ.html
docs/src/FAQ/index.html
+docs/src/index.html
docs/src/Library/HTML.html
+docs/src/Library/index.html
docs/src/Library/PostScript.html
docs/src/Library/Splash.html
-docs/src/Library/index.html
docs/src/Manual/Config.html
docs/src/Manual/Credits.html
docs/src/Manual/Directives.html
docs/src/Manual/Filters.html
+docs/src/Manual/index.html
docs/src/Manual/Internals.html
docs/src/Manual/Intro.html
docs/src/Manual/Plugins.html
docs/src/Manual/Refs.html
docs/src/Manual/Syntax.html
-docs/src/Manual/VMethods.html
docs/src/Manual/Variables.html
docs/src/Manual/Views.html
-docs/src/Manual/index.html
+docs/src/Manual/VMethods.html
+docs/src/Modules/index.html
docs/src/Modules/Template.html
docs/src/Modules/Template/Base.html
docs/src/Modules/Template/Config.html
@@ -75,6 +71,7 @@
docs/src/Modules/Template/Plugin/URL.html
docs/src/Modules/Template/Plugin/View.html
docs/src/Modules/Template/Plugin/Wrap.html
+docs/src/Modules/Template/Plugin/XML/Style.html
docs/src/Modules/Template/Plugins.html
docs/src/Modules/Template/Provider.html
docs/src/Modules/Template/Service.html
@@ -82,20 +79,19 @@
docs/src/Modules/Template/Stash/Context.html
docs/src/Modules/Template/Stash/XS.html
docs/src/Modules/Template/Test.html
-docs/src/Modules/index.html
+docs/src/Modules/Template/Toolkit.html
docs/src/Release/Changes.html
docs/src/Release/HACKING.html
+docs/src/Release/index.html
docs/src/Release/INSTALL.html
docs/src/Release/README.html
docs/src/Release/TODO.html
-docs/src/Release/index.html
docs/src/Tools/index.html
docs/src/Tools/tpage.html
docs/src/Tools/ttree.html
docs/src/Tutorial/Datafile.html
-docs/src/Tutorial/Web.html
docs/src/Tutorial/index.html
-docs/src/index.html
+docs/src/Tutorial/Web.html
docs/style/plain/booktabs
docs/style/plain/footer
docs/style/plain/header
@@ -109,14 +105,12 @@
docs/style/splash/navigate
docs/style/splash/pagemenu
docs/style/splash/section
-examples/README
examples/html/README
-examples/lib/README
examples/lib/config
-examples/lib/example/README
examples/lib/example/break
examples/lib/example/html
examples/lib/example/output
+examples/lib/example/README
examples/lib/example/source
examples/lib/example/split2
examples/lib/example/split2ps
@@ -128,7 +122,6 @@
examples/lib/example/vsplit2s
examples/lib/example/vsplit3
examples/lib/example/vsplit50
-examples/lib/examples/README
examples/lib/examples/html/bars/1
examples/lib/examples/html/bars/10
examples/lib/examples/html/bars/11
@@ -187,6 +180,7 @@
examples/lib/examples/ps/marks/7
examples/lib/examples/ps/marks/8
examples/lib/examples/ps/marks/9
+examples/lib/examples/README
examples/lib/examples/splash/bar/1
examples/lib/examples/splash/bar/2
examples/lib/examples/splash/bar/3
@@ -271,6 +265,7 @@
examples/lib/examples/splash/text/5
examples/lib/menu
examples/lib/page
+examples/lib/README
examples/lib/source
examples/lib/splash/about/bar
examples/lib/splash/about/box
@@ -288,6 +283,7 @@
examples/lib/splash/about/tabsbox
examples/lib/splash/about/tabset
examples/lib/splash/about/text
+examples/README
examples/src/html/bars.html
examples/src/html/headers.html
examples/src/html/index.html
@@ -317,6 +313,7 @@
examples/src/splash/tabsbox.html
examples/src/splash/tabset.html
examples/src/splash/text.html
+HACKING
images/splash/black/bl.gif
images/splash/black/blhair.gif
images/splash/black/box.gif
@@ -343,6 +340,7 @@
images/splash/black/up.gif
images/tt2power.gif
images/ttdotorg.gif
+INSTALL
lib/Template.pm
lib/Template/Base.pm
lib/Template/Config.pm
@@ -368,9 +366,9 @@
lib/Template/Manual/Plugins.pod
lib/Template/Manual/Refs.pod
lib/Template/Manual/Syntax.pod
-lib/Template/Manual/VMethods.pod
lib/Template/Manual/Variables.pod
lib/Template/Manual/Views.pod
+lib/Template/Manual/VMethods.pod
lib/Template/Modules.pod
lib/Template/Namespace/Constants.pm
lib/Template/Parser.pm
@@ -402,17 +400,21 @@
lib/Template/Stash/Context.pm
lib/Template/Stash/XS.pm
lib/Template/Test.pm
+lib/Template/Toolkit.pod
lib/Template/Tools/tpage.pod
lib/Template/Tools/ttree.pod
lib/Template/Tutorial.pod
lib/Template/Tutorial/Datafile.pod
lib/Template/Tutorial/Web.pod
lib/Template/View.pm
+Makefile.PL
+MANIFEST
+META.yml Module meta-data (added by MakeMaker)
parser/Grammar.pm.skel
parser/Parser.yp
parser/README
parser/yc
-t/README
+README
t/args.t
t/autoform.t
t/base.t
@@ -443,6 +445,7 @@
t/exception.t
t/factory.t
t/file.t
+t/fileline.t
t/filter.t
t/foreach.t
t/format.t
@@ -466,6 +469,7 @@
t/proc.t
t/process.t
t/provider.t
+t/README
t/ref.t
t/service.t
t/skel.t
@@ -486,12 +490,12 @@
t/test/dir/sub_two/waz.html
t/test/dir/sub_two/wiz.html
t/test/dir/xyzfile
-t/test/lib/README
t/test/lib/after
t/test/lib/badrawperl
t/test/lib/barfed
t/test/lib/before
t/test/lib/blockdef
+t/test/lib/chomp
t/test/lib/config
t/test/lib/content
t/test/lib/default
@@ -505,16 +509,17 @@
t/test/lib/one/foo
t/test/lib/outer
t/test/lib/process
+t/test/lib/README
t/test/lib/trimme
t/test/lib/two/bar
t/test/lib/two/foo
t/test/lib/udata1
t/test/lib/udata2
+t/test/lib/warning
t/test/plugin/MyPlugs/Bar.pm
t/test/plugin/MyPlugs/Baz.pm
t/test/plugin/MyPlugs/Foo.pm
t/test/pod/test1.pod
-t/test/src/README
t/test/src/bar/baz
t/test/src/bar/baz.txt
t/test/src/baz
@@ -529,12 +534,14 @@
t/test/src/leak2
t/test/src/metadata
t/test/src/mywrap
+t/test/src/README
t/test/src/recurse
t/test/tmp/README
t/text.t
t/throw.t
t/tiedhash.t
t/try.t
+t/unicode.t
t/url.t
t/vars.t
t/varsv1.t
@@ -546,7 +553,6 @@
t/while.t
t/wrap.t
t/wrapper.t
-templates/README
templates/html/bar
templates/html/body
templates/html/box
@@ -608,6 +614,7 @@
templates/ps/tilemap
templates/ps/tilepage
templates/ps/tiles
+templates/README
templates/splash/bar
templates/splash/box
templates/splash/breakdown
@@ -630,9 +637,9 @@
templates/splash/text
templates/splash/ttdotorg
templates/splash/ttpower
-xs/MANIFEST
+TODO
xs/Makefile.PL
+xs/MANIFEST
+xs/ppport.h
xs/README
xs/Stash.xs
-xs/ppport.h
-META.yml Module meta-data (added by MakeMaker)
2.15 +0 -2 Template2/MANIFEST.SKIP
Index: MANIFEST.SKIP
===================================================================
RCS file: /template-toolkit/Template2/MANIFEST.SKIP,v
retrieving revision 2.14
retrieving revision 2.15
diff -u -r2.14 -r2.15
--- MANIFEST.SKIP 2002/07/07 14:42:47 2.14
+++ MANIFEST.SKIP 2006/05/26 13:44:21 2.15
@@ -23,7 +23,6 @@
^lib/Template/Arena
^lib/Template/Map
^lib/Template/Plugin/XML/View
-^lib/Template/Plugin/Math
^lib/Template/Plugin/List
^pm_to_blib$
^bin/prep
@@ -45,7 +44,6 @@
^t/dbi_test.cfg
^t/shout.t
^t/map.t
-^t/math.t
^t/docset.t
^t/xmlview.t
^t/test/src/complex.org
2.46 +1 -0 Template2/Makefile.PL
Index: Makefile.PL
===================================================================
RCS file: /template-toolkit/Template2/Makefile.PL,v
retrieving revision 2.45
retrieving revision 2.46
diff -u -r2.45 -r2.46
--- Makefile.PL 2006/02/02 11:53:24 2.45
+++ Makefile.PL 2006/05/26 13:44:21 2.46
@@ -1,6 +1,7 @@
#!/usr/bin/perl -w # -*- perl -*-
use strict;
+use warnings;
use lib qw( ./lib );
use Config;
2.62 +23 -6 Template2/README
Index: README
===================================================================
RCS file: /template-toolkit/Template2/README,v
retrieving revision 2.61
retrieving revision 2.62
diff -u -r2.61 -r2.62
--- README 2006/01/30 20:02:49 2.61
+++ README 2006/05/26 13:44:21 2.62
@@ -3,9 +3,9 @@
Version 2.15
- 30 January 2006
+ 26 May 2006
- Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved
+ Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or
@@ -69,10 +69,27 @@
WHAT'S NEW?
-----------
-Version 2.15 features a number of enhancements to the XS Stash that
-includes support for tied hashes and arrays. There are numerous other
-bug fixes and enhancements, described in detail in the Changes file.
+Version 2.15 is a major maintenance release. It applies all outstanding
+patches and closes all open bugs listed on http://rt.cpan.org/ It
+includes:
+
+ * XS Stash: enhancements include support for tied hashes/arrays
+ and "fallback" methods on objects (e.g. accessing hash and
+ list items and calling virtual methods)
+
+ * Virtual Methods: added the scalar.remove, scalar.substr,
+ hash.delete, hash.items, hash.pairs, list.import and list.hash
+ virtual methods. Added support for backreferences to
+ scalar.replace and other improvements to list.push, list.unshift,
+ list.hash, hash.list
+
+ * Plugins: Added Math plugin, Bug fixes and enhancements to File,
+ Image, URL and String plugins. Moved DBI, XML and GD plugins
+ into separate distributions.
+ * Numerous other bug fixes, enhancements, documentation updates, all
+ described in detail in the Changes file.
+
More significant is what's not in version 2.15. The DBI plugin has
been moved into a separate Template-DBI distribution, the GD plugins
into Template-GD, the XML plugins into Template-XML, and the Latex
@@ -291,7 +308,7 @@
COPYRIGHT
---------
-Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved.
+Copyright (C) 1996-2006 Andy Wardley. All Rights Reserved.
Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
This is free software; you can redistribute it and/or modify it under
2.84 +13 -386 Template2/TODO
Index: TODO
===================================================================
RCS file: /template-toolkit/Template2/TODO,v
retrieving revision 2.83
retrieving revision 2.84
diff -u -r2.83 -r2.84
--- TODO 2006/05/25 11:23:34 2.83
+++ TODO 2006/05/26 13:44:21 2.84
@@ -8,16 +8,19 @@
# and a few whacky ideas.
#
# AUTHOR
-# Andy Wardley <abw@wardley.org>
+# Andy Wardley <abw@cpan.org>
#
#------------------------------------------------------------------------
-# $Id: TODO,v 2.83 2006/05/25 11:23:34 abw Exp $
+# $Id: TODO,v 2.84 2006/05/26 13:44:21 abw Exp $
#========================================================================
#------------------------------------------------------------------------
# Miscellaneous
#------------------------------------------------------------------------
+* The ENCODING options needs testing and documenting. Bill Moseley said
+ he may be able to do this.
+
* The 'eval' filter leaks memory, as reported by Colin Johnson. The
filter subroutine created contains a reference to the context and then
gets cached in the FILTER_CACHE item of the context. Hey presto -
@@ -51,34 +54,8 @@
between sessions and the same files in different INCLUDE_PATH dirs
maps to the samed compiled version) but is convenient for those times
when you know that's not going to be a problem.
-
-* Richard Tietjen's patch for stash replace. Allows back references
- (e.g. $1) but it would be nice to find a rock-solid way to implement
- it without relying on unusual ^A delimiter character.
-
-* Further to the above, Craig Barratt has this solution which will be
- going into the next verion (2.05b) unless anyone has any further
- suggestions to make before then.
-
- It would be great if replace handled backreferences. I don't like
- the ^A solution since the string could contain ^A, plus it is a
- security hole. The attempt I posted only works for up to 9
- backreferences and doesn't handle an escaped '\$' and uses nested
- evals:
-
- $str =~ s{$search}{
- my $r = $replace;
- my @d = (0, $1, $2, $3, $4, $5, $6, $7, $8, $9);
- $r =~ s/\$(\d+)/$d[$1]/eg;
- $r;
- }eg;
-
- I wish there was a perl predefined variable array containing all
- the backreferences (is there one?). You can avoid the hard-coded
- limit of 9 with extra evals, and a bit of work on the re could
- handle the escaped '\$' case, so maybe that would be good enough.
-* Craig also notes, in fixing the problem with NEXT not working
+* Craig Barratt notes, in fixing the problem with NEXT not working
inside SWITCH (see Changes v2.04):
By the way, I came across another arcane bug:
@@ -135,30 +112,6 @@
#------------------------------------------------------------------------
-# Stash
-#------------------------------------------------------------------------
-
-* The XS Stash does not work with tied hashes (e.g. DBI.tie). Also note
- that enabling the XS Stash cause all the Template::* modules to be
- installed in an architecture-dependant directory. For info, see
- http://www.tt2.org/pipermail/templates/2001-September/001568.html
-
-* Jonas Liljegren reports a segfault when using the XS Stash under
- Apache/mod_perl with certain undefined variables. At the time of
- writing detail is scarce. Check the mailing list for further
- details.
-
-* Stas Bekman raised the issue of the Stash not being able to correctly
- differentiate between scalar/list context and in particular, the
- cgi.param examples not working as expected. This is fixed in v3 and
- in Craig's Stash/Context.pm which does the right lookahead to allow
- 'scalar' and 'list' postfix operators. e.g. cgi.param.list
-
-* Have stash, etc., add current template name/line when reporting errors.
- (may be tricky under the current implementation)
-
-
-#------------------------------------------------------------------------
# Parser
#------------------------------------------------------------------------
@@ -177,64 +130,6 @@
# foo <- this gets printed
%]
-* Allow { and } as block delimiters, replacing for the ugly ';' and
- big, chunky [% END %] approach.
-
- e.g. something like:
-
- [% FOREACH a = [ 1 2 3 ] %]
- [% IF b == a %]
- [% INCLUDE foo %]
- [% ELSE %]
- [% INCLUDE bar %]
- [% END %]
- [% END %]
-
- could be written as:
-
- [% FOREACH a = [ 1 2 3 ] {
- IF b == a {
- INCLUDE foo
- }
- ELSE {
- INCLUDE bar
- }
- }
- %]
-
-* Ability to set different parser options for BLOCK definitions, etc.
-
- [% BLOCK header
- eval_perl = 0
- pre_chomp = 1
- %]
- ...
- [% END %]
-
- Anonymous BLOCK can then be used to set a parser scope
-
- [% BLOCK trim=1 %]
- ...
- [% END %]
-
- [% BLOCK trim=0 %]
- ...
- [% END %]
-
- And/or set different tag styles, etc.
-
- [% BLOCK tags='star' %]
- [* INCLUDE this_is_a_directive *]
- [% INCLUDE this_is_not %]
- [* END *]
-
- [% INCLUDE back_to_normal %]
-
- This is likely to be a TT3 feature and I've already got the basic
- parser for this up and running. It might get back-pactched into
- version 2, otherwise you might have to wait for the first alpha
- release of verion 3.
-
* Craig Barratt reports the following:
I looked at Parse.yp to see how hard it would be to push FILTER
@@ -332,26 +227,16 @@
* We need a way to easily enable/disable certain plugins. This should
be addressed by facility provision. Probably something for v3.
-* The Text::Autoformat module has some problems with versions of Perl
- prior to 5.6.0 when using a locale which has a decimal separator
- other than '.' (e.g. Swedish, which uses ','). Damian has been made
- aware of the problem (and I note he now has a new version out which
- I need to check). For now, the Makefile.PL issues a warning but
- continues regardless.
-
* The Template::Plugin DBI iterator first/last() methods don't behave
the same as list first/last(). Randal also reports that get_all()
- doesn't work as it should - may be a conflict in code/docs?
+ doesn't work as it should - may be a conflict in code/docs? Again,
+ this is a problem to solve in TT3.
* PLUGINS could accept a reference to an object which is used as a
singleton factory for a plugin. (NOTE: 2.01 includes PLUGIN_FACTORY
to implement this, but currently undocumented because it's likely to
change).
-* Add Leo & Leon's Page plugin, or try to find some way of implementing
- it in terms of the Table plugin. I think the jury is still out on the
- matter of whether it counts as duplicated functionality.
-
* A more general solution for XML (e.g. DOM, XPath, etc) would be for
TT to support a PerlSAX handler which generates the appropriate
callbacks to the view. This should make it possible to easily
@@ -414,6 +299,11 @@
# Splash!
#------------------------------------------------------------------------
+The Splash! library will be extracted into a separate distribution at
+some point (probably when TT3 is released, possibly before). At that
+point it will deprecated (read: not supported by me any more) in favour
+of something better.
+
The current implementation is a fairly ugly hack to get something up
and running that's good enough to use. It's mainly template driven
and doesn't scale very well, particularly with global variables
@@ -464,266 +354,3 @@
a chance to fix a couple of minor bugs relating to '/' vs '\' file
separators.
-
-#------------------------------------------------------------------------
-# Facilities
-#------------------------------------------------------------------------
-
-Core facilities currently implemented by Template::Context should be
-moved out into separate facilities. These currently fall into the
-categories of things like stash, view, plugins, filters, parser and
-maybe some others. (NOTE: this might tie in very closely with Camelot
-and the resource/presenter/actor breakdown, aka model/view/controller).
-
-* 'view' would handle template fetching and processing. It is the view
- that talks to a provider, possibly adding special prefixes, suffixes,
- doing default templates, special dispatch logic, etc.
-
-* 'stash' is responsible for storing variables, as it currently is.
-
-* 'plugins' is responsible for fetching plugins.
-
-* 'filters' is responsible for fetching filters.
-
-* maybe both the above would get bundled into something like 'logic'?
-
-* 'parser' would make parts of the parser accessible
-
-* 'output' could be used to generate output
-
-There would be some facility to install, customise and remove facilities
-to modify TT behaviour as required. This would allow us to disable
-certain plugins, or remove the plugin facility altogether, for example.
-Or we could install a new stash facility which generated a different kind
-of code (e.g. less magic, more speed). Or install a new custom facility
-to do some application or domain specific task.
-
-Facilities should be accessible via the context:
-
- my $stash = $context->stash(); # currently works
- my $view = $context->view(); # not yet
-
-General form:
-
- my $xyz = $context->facility('xyz');
-
-Multiple form:
-
- my ($a, $b, $c) = $context->facility(qw[ a b c ]);
-
-This can then be written into generated code pretty much as the stash
-currently is. The facilities would define the code generators that
-currently clutter up Template::Directives. They would ensure that the
-facility is scheduled to be requested from the context at the start of
-the sub:
-
- sub {
- my $context = shift;
- my ($stash, $view) = $context->faciity(qw( stash view ));
-
-and then transform the various directives into appropriate callbacks
-into the facility:
-
- $output .= $stash->get('x');
- $output .= $view->process('header');
-
-The context becomes a switching centre for the Template Toolkit, with
-most, if not all of its existing functionality moved out to
-facilities. The context should acquire all facilities at the start of
-a process lifecycle, run the template, and then release them all
-again. This should all be done according to the process contract
-which specifies which facilities should be installed, which can be
-modified, what can and can't be be loaded, and so on. The
-contract would also define things like PRE_PROCESS templates, error
-handling, etc.
-
-Thus the role of Template::Service is to undertake a contract with the
-client and attempt to fulfill it. A Template::Contract defines the
-terms of the contract and the Template::Context becomes an embodiment
-(runtime instance) of a contract.
-
-The current context would be available as the 'tt2' template variable,
-with facilities available as object methods. Thus, the following become
-possible:
-
- [% tt2.stash.get('foo') %] # [% foo %]
- [% tt2.view.process('header') %] # [% PROCESS header %]
- [% tt2.parser.start_tag %] # can't do this currently
-
-Directives would be re-written into code like that above. You can
-use the 'tt2.facility.whatever' form when directive syntax would
-otherwise get in the way:
-
- [% mycode( header = tt2.view.process('my/fancy/header'),
- footer = tt2.view.process('your/dull/footer') ) %]
-
-Or to explicitly disambiguate:
-
- [% tt2.stash.get('foo.size') %] # object method
- [% tt2.stash.list.size(foo) %] # virtual method
- [% foo.size %] # lucky dip :-)
-
-Facility management would itself be a facility. Thus, to disable runtime
-facility loading, you would simply unload (or not load) the facility
-management facility.
-
- [% tt2.facility.install(module='my_facility', name='foo') %]
- [% tt2.foo.bar(123) %]
-
-Note that there are some issues relating to cross-cutting facilities,
-otherwise known as "aspects" (see Aspect Oriented Programming). For
-example, variable localisation cross cuts views and data management
-(i.e. tt2.view.include('header', title='my title') must first localise
-the stash and delocalise it again afterwards). It may be appropriate
-to install aspects as separate entities (e.g. 'localisation') which
-can be invoked to apply cross cutting concerns in a generic way.
-Perhaps aspects are implemented as their own facility?
-
- [% tt2.aspect.localise %] ... [% tt2.aspect.delocalise %]
-or
- [% aspect = tt2.aspect.localise %] # cloned & specialised context
- [% aspect.view.process('header', title='my title') %]
-or
- ...
-
-Another example would be debugging:
-
- [% tt2dbg = tt2.aspect.debug(...params...) %]
- [% tt2dbg.view.process('header') %]
-or:
- [% tt2 = tt2.aspect.debug(...) %]
- ...
- [% tt2 = tt2.release %]
-
-
-#------------------------------------------------------------------------
-# Output
-#------------------------------------------------------------------------
-
-It should be possible to stack output buffers. In other words, you
-stop writing to the current output buffer and open a new buffer and
-start writing to that. The final output is simply the concatenation
-of all output buffers.
-
-The clever part of all this is that is should be possible to keep a
-handle on an earlier buffer and go back and append to it at some point
-in the future. A typical use is for generating tables of contents at
-the start of a document when you don't know in advance what the document
-contains. Simply push a new output buffer at the point of the TOC,
-generate the rest of the document (keeping track of all the section
-titles, etc) and at the end of the document, go back and generate the
-TOC onto the end of the first buffer.
-
-Haven't decided on any syntax yet, but it will almost certainly be
-implemented as a facility. At the lowest level, something like
-this perhaps:
-
- [% INCLUDE header %] # write content to first buffer
-
- [% toc = tt2.output.push %] # save current buffer as toc
-
- Blah blah blah # write content to second buffer
-
- [% INCLUDE footer %]
-
- [% tt2.output.buffer = toc %] # re-instate first buffer
-
- This is the TOC # append to first buffer
-
-The output stack would look something like this:
-
- +-----------------+
- | <header> |
- | This is the TOC |
- +-----------------+
- |
- V
- +-----------------+
- | Blah blah blah |
- | <footer> |
- +-----------------+
-
-Which to the end user, would silently be concatenated into:
-
- <header>
- This is the TOC
- Blah blah blah
- <footer>
-
-Another use is to ensure dependencies on other templates get resolved.
-For example, many of the PostScript library templates rely on other
-templates. At present, each template sets a global variable to
-say "I've been loaded" while also inspecting these variables for any
-templates that it relies on, loading them via INCLUDE/PROCESS if not
-set. e.g. ps/cross:
-
- [% # this works, but it's a bit clunky
- DEFAULT radius = '5 mm';
- PROCESS ps/mm UNLESS global.ps.loaded.mm;
- global.ps.loaded.cross = 1;
- -%]
- /cross {
- ...
- }
-
-Better would be to have each template simply activate the flags for
-those templates that it relies on. The header file pushes a new output
-buffer and the footer file goes back to the header buffer and INCLUDEs
-the dependant templates.
-
- [% PROCESS ps/header + ps/complex %]
-
- 10 mm 10 mm complex
-
- [% PROCESS ps/footer %]
-
-ps/complex:
-
- [% global.ps.require.simple = 1 %]
- /complex {
- ...
- simple
- ...
- }
-
-ps/simple:
-
- [% global.ps.require.mm = 1 %]
- /simple {
- ...
- 31 mm 41 mm moveto
- ...
- }
-
-ps/header:
-
- %%!PS-Adobe-3.0
- ...
- %%EndComments
-
- [% global.ps.header = tt2.output.push %]
-
-ps/footer:
-
- [% FOREACH file = ['mm','simple',...];
- INCLUDE $file IF global.ps.require.$file;
- END;
- %]
-
-Ultimately, the whole ps library would become a facility. The
-acquire() method (called by the Template::Service to acquire the
-facility at the start of processing a template) would do the 'header'
-part (i.e. push the output buffer), and the release() method (called
-at the tail end to release the facility) would do the dependency
-checks. The dependency registrations would be facility features,
-e.g.
-
-gs/complex:
-
- [% tt2.ps.require.mm = 1 %] # either
- [% tt2.ps.require('mm', 'simple') %] # or
-
-
-
-
-------------------------------------------------------------------------