[Module]
Name=Graph::Easy::Marpa
Changelog.Creator=Module::Metadata::Changes V 2.04
Changelog.Parser=Config::IniFiles V 2.78

[V 1.12]
Date=2012-12-20T15:27:00
Comments= <<EOT
- 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.
EOT

[V 1.11]
Date=2012-11-08T12:38:00
Comments= <<EOT
- 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.
EOT

[V 1.10]
Date=2012-10-16T09:49:00
Comments= <<EOT
- 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.
EOT

[V 1.09]
Date=2012-06-25T14:10:00
Comments= <<EOT
- 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.
EOT

[V 1.08]
Date=2011-12-25T10:33:00
Comments= <<EOT
- 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.
EOT

[V 1.07]
Date=2011-12-14T13:29:00
Comments= <<EOT
- 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.
EOT

[V 1.06]
Date=2011-08-08T11:08:00
Comments= <<EOT
- 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'.
EOT

[V 1.05]
Date=2011-08-02T15:32:00
Comments= <<EOT
- 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.
EOT

[V 1.04]
Date=2011-07-29T14:12:00
Comments= <<EOT
- 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.
EOT

[V 1.03]
Date=2011-07-23T16:36:00
Comments=- Add Sort::Naturally to Build.PL and Makefile.PL, since it's used in t/*.t.

[V 1.02]
Date=2011-07-21T13:37:00
Comments= <<EOT
- 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.
EOT

[V 1.01]
Date=2011-07-20T14:24:00
Comments=- Remove the restriction that anonymous nodes had to have at least 1 space in their name.

[V 1.00]
Date=2011-07-19T15:42:00
Comments= <<EOT
- 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.
EOT

[V 0.91]
Date=2011-06-29T11:41:00
Comments=- Update pre-requisites. Set::FA 1.05 -> 1.06. Add File::Spec, File::Basename, GraphViz2.

[V 0.90]
Date=2011-06-28T12:18:00
Comments= <<EOT
- 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.
EOT

[V 0.60]
Date=2011-05-14T11:16:00
Comments= <<EOT
- 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.
EOT

[V 0.51]
Date=2011-04-27T10:46:00
Comments=- Update pre-reqs.

[V 0.50]
Date=2011-04-26T11:09:44
Comments=- Original version
