Revision history for Perl extension Graph::Easy::Marpa.

2.01  Thu Jan 12:31:00 2014
	- Patch CPAN::Meta::Validator to not delete META.* (Module::Build does the dirty work).
	- Add use strict/warnings to Build.PL, Makefile.PL.
	- Fix typo in Makefile.PL prereq for Path::Tiny.
	- Clean up pre-reqs, removing File::Slurp and Text::CSV::Slurp.
	- Fix various typos which only affect the author.

2.00  Mon Jul 29 14:42:00 2013
	- Massive update. Switch from Marpa's NAIF (Original interface) to its SLIF (Scanless interface).
		This means I'm using Marpa for lexing and parsing. So, all references to the old lexer are gone.
	- Put author tests in xt/author.
	- Switch from Hash::FieldHash to Moo.
	- Switch from Path::Class to Path::Tiny.
	- Remove from pre-reqs: Data::Section::Simple, List::Compare, Module::Load, Set::FA::Element, Text::CSV_XS.
	- Delete Graph::Easy::Marpa::Lexer and Graph::Easy::Marpa::Lexer::DFA.
	- Split the method get_files() out of Graph::Easy::Marpa::Utils into Graph::Easy::Marpa::Filer.
		This means t/tokens.t does not need to load the config file.
	- Add Graph::Easy::Marpa::Actions for the new parser's callbacks.
	- Rearrange code in Graph::Easy::Marpa::Renderer::GraphViz2's run() method so that the dot commands
		are saved to disk (if requested) before attempting to run 'dot'. This means dot's input file,
		new(dot_input_file => $name) is available even if dot exits with an error.
	- Delete scripts/lex.sh and scripts/lex.pl now that there is no separate lexer.
	- Change parameters used by scripts/parse.pl. Run parse.pl -h for instructions.
	- Change parameters used by scripts/gem.pl. Run parse.pl -h for instructions.
	- Rename data/*.raw to data/*.ge.
	- Rename data/*.cooked to data/*.tokens.
	- Ship data/*.dot, the output from the default renderer.
	- Add scripts/dot2svg.pl.
	- Add data/edge.09.* and data/edge.09.svg to demonstrate juxtaposition of edges without spaces.
	- Delete scripts/cooked2svg.pl.
	- Delete scripts/gem.pl and scripts/gem.sh. Use parse.pl and parse.sh instead.
	- Rename scripts/generate.demo.pl to scripts/generate.index.pl.
	- Rename scripts/raw2cooked.pl to scripts/ge2svg.pl.
	- Rename CHANGES to Changes as per CPAN::Changes::Spec.
	- Update docs. This includes a new FAQ section on the tiny differences between V 1 and V2 in terms
		of the input syntax expected and the output file differences.
		It also includes removal of all references to the state transition table used by the old DFA code.
	- All input test data files now have the suffix '.ge' rather than '.raw'.
	- All output test data files now have the suffix '.tokens' rather than '.cooked'.
	- All output test dot files - '*.dot' - are now shipped in the data/ directory.
		Previosuly they were not shipped.
	- Some test data files have been renamed to remove gaps in the ranges of the numeric parts of their names.

1.12  Thu Dec 20 15:27:00 2012
	- Change all uses of shape 'square' to 'rect', since older versions of Graphviz didn't have 'square'.
		This affects data/class.group.04.raw, data/class.node.09.raw, and POD in Marpa.pm and Lexer.pm
		The corresponding data/*.cooked files change as a result, when they are re-generated.
	- Change all functions (not methods) in Parser.pm from my(undef...) to my($stash...).
		This feature of Marpa is not used, but might be one day. The $stash is a hashref of per-parse info.
	- Change sub log():
		From: $self -> logger -> $level($s)        if ($self -> logger)
		To:   $self -> logger -> log($level => $s) if ($self -> logger)
		The reason for this is that if your logger is derived from another class or role, that class or
		role had to provide not just the log() method, but all of debug(), info(), notice(), warning(),
		warn(), error(), err(), critical(), crit(), alert(), emergency() and emerg(), just in case any
		of them are needed.
		I should not have used that design, because it forces other code to provide too much complexity.
		This affects Graph::Easy::Marpa, Graph::Easy::Marpa::Lexer, Graph::Easy::Marpa::Parser and
		Graph::Easy::Marpa::Renderer::GraphViz2.

1.11  Thu Nov  8 12:38:00 2012
	- No user-visible code changes.
	- For pre-reqs such as strict, warnings, etc, which ship with Perl, set the version # to 0.
		Reported as RT#80663 by Father Chrysostomos for Tree::DAG_Node.
	- Remove color cycle code from scripts/stt.html, since it was never used.
	- Rename HTML templates (to match) from rainbow.table.tx to basic.table.tx and rainbow.row.tx to basic.column.tx.
	- Rename rainbow.page.tx to stt.tx.
	- Move html/graph.easy.index.tx to htdocs/assets/templates/graph/easy/marpa.
	- Add Graph::Easy::Marpa::Config to manage location of templates.
	- Add config/.htgraph.easy.marpa.conf.
	- Add scripts/copy.config.pl.
	- Move code from scripts/stt.pl into Graph::Easy::Marpa::Utils.
	- Ship html/stt.html.
	- Add environment report to HTML templates.
	- Link graph demo template and stt template to each other.
	- Update pre-reqs.
	- Remove demo files which contained syntax errors: data/graph.10.raw, data/graph.12.raw and data/node.11.raw.

1.10  Tue Oct 16 09:49:00 2012
	- Fix a bug in the lexer where it used to combine multiple lines in the input file by, basically, using
		join('', <IN>), which meant the last char of a line was juxtaposed with the first char of the next
		line. If the second line started with spaces, that was ok, but if it started with, say, the name of
		a node, then that name was concatenated with what could have been a node name on the end of a previous
		line. This meant 2 separate node names sometimes became one.

1.09  Mon Jun 25 14:10:00 2012
	- Handle HTML-style labels, even if they contain ';' chars, e.g. by using HTML entities such as &lt;.
	- Add matching test files data/node.(17, 18, 19).(raw, cooked). See also the demo page.
	- Change the abstract slightly to mention we process Graphviz files in the Graph::Easy format.
	- Expand the FAQ re HTML-style labels.
	- Encode HTML entities when including the demos' source code in the demo page, because now demos can
		contain HTML-like labels.

1.08  Sun Dec 25 10:33:00 2011
	  - Change <img... to <object...> in the demo creation code, to keep poor old FireFox happy.
	  - Change various things in html/graph.easy.index.tx to we validate as XHTML 1.0 Strict.
	  - Switch from Marpa::XS to Marpa::R2.

1.07  Wed Dec 14 13:29:00 2011
	  - Fix declaration of null_value for some rules, to stop heaps of warnings during testing and/or running gem.pl.
	  	The messages you get look like: Zero length sequence for symbol without null value: "group_name",
		if you don't have symbol descriptors declared for symbols whose value can be empty.
		Search Graph::Easy::Marpa::Parser for 'symbols' to see what I had to do because group and node names can be empty.
	  - Update Build.PL and Makefile.PL to only require Marpa::XS V 0.026000 (not 0.108000), which is the latest as of today.
	  - Add a discussion of Marpa::PP to the FAQ, since I've tested it too.

1.06  Mon Aug  8 11:08:00 2011
	  - Improve home-grown validate.build.make.pl to include not just *.pm files, but also *.pl and *.t files, so as to find more dependencies.
	  - Add Capture::Tiny, File::Remove, File::Temp, Getopt::Long, List::Cycle, Pod::Usage and Text::Xlate to Build.PL and Makefile.PL.
	  - And yes I know, List::Cycle is not really needed (yet) :-).
	  - Patch the STT so that attribute definitions for classes can have leading spaces, as edge and node attribute definitions already could.
	  	Eg: 'graph {rankdir: TB }' can now be 'graph { rankdir: TB}'. Note the new space in front of 'rankdir'.

1.05  Tue Aug  2 15:32:00 2011
	  - Add File::Slurp to Build.PL and Makefile.PL because its readdir() method is used in t/cooked.t and t/raw.t.
	  - Add http://metacpan.org/ link to html/graph.easy.index.tx, so it appears in html/index.html.
	  - Clean up confusion between demo output being png or svg. The demo files uploaded to my web site used to be png,
	  	because one of the outputs (graph.15.*) was empty (for some reason) when svg is used.
		But since svg files are smaller than png files, and everything works, svg is used again.
	  - Add DOCTYPE and Content-Type to html/graph.easy.index.tx, so that html/index.html validates as XHTML 1.0 Transitional.

1.04  Fri Jul 29 14:12:00 2011
	  - Make scripts/gem.pl pass rankdir thru to parser.
	  - Make scripts/generate.demo.sh pass image type thru to scripts/generate.demo.pl.
	  - Fix scripts/graph.easy.index.tx img src field patch which got lost with a git reset.

1.03  Sat Jul 23 16:36:00 2011
	  - Add Sort::Naturally to Build.PL and Makefile.PL, since it's used in t/*.t.

1.02  Thu Jul 21 13:37:00 2011
	  - Change colors so they're compatible with both the X11 and SVG color schemes.
 	  - Require GraphViz2 V 1.09 to have access to output image formats such as png:gd etc.

1.01  Wed Jul 20 14:24:00 2011
	  - Remove the restriction that anonymous nodes had to have at least 1 space in their name.

1.00  Tue Jul 19 15:42:00 2011
	  - Implement subgraphs (i.e. groups), classes and subclasses. See the FAQ for notes on group attributes.
	  - Put a copy of the CSV version of the STT in the __DATA__ section of the lexer, to speed up reading it.
	  - Support the rankdir option for the graph as a whole.
	  - Support the directed option for the graph as a whole.
	  - In Graph::Easy::Marpa::Lexer, use the timeout feature to ensure the DFA does not loop forever.
	  - In Graph::Easy::Marpa::Lexer, make OpenOffice::OODoc optional, and only load it if the user specifies *.ods
	  	for the STT file.
	  - In Graph::Easy::Marpa::Lexer, add verbose to the list of keys accepted by new().
	  - In Graph::Easy::Marpa::Renderer::GraphViz2, handle cases where the graph definition starts or ends with an edge,
	  	or a daisy chain of edges.
	  - In Graph::Easy::Marpa, add a new section to the docs, Methods, where all public methods are documented.
	  	These are the same as the parameters to new(), along with log() and run().
	  - In other modules, update the lists of keys acceptable to new(), and the corresponding method docs.
	  - Allow an object of type Graph::Easy::Marpa to pass a logger object to objects of type Graph::Easy::Marpa::Lexer
	  	and of type Graph::Easy::Marpa::Parser, along with the corresponding values for maxlevel and minlevel.
	  - Use Date::Format to add a date stamp at the end of html/index.html, as output by generate.index.pl.
	  - Extend demo with data/edge.08.raw, which show various arrow heads, and many class and subgraphs samples too.
	  - Export the STT (cvs file) as data/default.stt.html. The version shipped with 0.91 was not up-to-date.

0.91  Wed Jun 29 11:41:00 2011
	  - Update pre-requisites. Set::FA 1.05 -> 1.06. Add File::Spec, File::Basename, GraphViz2.

0.90  Tue Jun 28 12:18:00 2011
	  - Allow spaces in graph definitions, by expanding the regexps in the state transition table.
	  - Add more sample data, as data/*.raw (for input to the lexer) and data/*.cooked (as output from the lexer
	  	and input to the parser).
	  - Adopt Set::Array instead of manually managing some arrayrefs.
	  - Ensure all major methods (normally run() ) return 0 for success and 1 for failure, and that test code does too.
	  - Switch from Moose to Hash::FieldHash, to make the code more light-weight.
	  - Implement scripts/generate.index.pl to create a web page with embedded Graph::Easy files and corresponding *.svg files.
	  - Upload demo to http://savage.net.au/Perl-modules/html/graph.easy.marpa/index.html.

0.60  Sat May 14 11:16:00 2011
	  - Implement basic Graph::Easy::Marpa::Lexer to read raw Graph::Easy files.
	  - Change Graph::Easy::Marpa::Test.run() to test_parser(), and implement test_lexer().
	  - Change Graph::Easy::Marpa::Test to accept file name not file number.
	  - Add various test files in data/ and t/.
	  - Add scripts/graph.30.sh to show how to feed the lexer's output to the parser.

0.51  Wed Apr 27 10:46:00 2011
	  - Update pre-reqs.

0.50  Tue Apr 26 11:09:44 2011
	  - Original version
