Hi Rich On 06/11/12 01:53, richgo...@comcast.net wrote:
I didn't want to clog the list with this question, unless you feel it it worth it.
Post all questions and ideas. I don't want to develop code in a vacuum. I only that if I /really/ know what I'm doing. Not so in this case...
But would this new parser have reporting capabilities?
The basic module - no. It would be purely to parse the file and build a data structure.
Code for traversing a tree is standard, from which any imaginable output can be produced.
In the simplest case, any node is the root of a sub-tree, and the tree can be traversed and (say) printed from that point on.
What you're talking about I assume is formatting that output.
For example, I really like the layout of the FamilyTree add-on for GRAMPS, but it looks like it is not longer being updated, and I wish it was a little more modular, that it could display more fields than it does.
I googled and found this link: http://www.gramps-project.org/wiki/index.php?title=Family_Tree
I have to say that's a very fancy report. Amazingly, to some extent, such a report is (almost) already available from a tree structure. Peruse the 4 links on this page to get the idea:
http://savage.net.au/Graph-module-demos.html Hence my preference for trees.
Plus I wish it was written in perl ; )
Don't we all.
Rich ----- Original Message ----- From: "Ron Savage"<r...@savage.net.au> To: perl-gedcom@perl.org Sent: Monday, November 5, 2012 2:04:42 AM Subject: The new GEDCOM parser Hi The new GEDCOM parser This document is a collection of ideas which have been percolating in my mind for a long time. Comments welcome. Ideas Module name Genealogy::Gedcom::Parser. A place-holder, Genealogy::Gedcom <http://metacpan.org/release/Genealogy-Gedcom>, is already on CPAN. Note: This module was written before the new, major tools now available were released. See Tools below. ETA There is no ETA for the parser. However, certain Perl-based tools are now available which will make coding a simple task. See Tools below. See also 'Famous Last Words' :-). UTF-8 The code will accept input files in utf-8, and generate files containing utf-8 characters. Apache and mod_perl These will not be required. I only mention these because references to them appear in the Gedcom.pm distro. Logging The code will have a built-in logger, so debugging, e.g., can be turned on with a parameter to new(). This logger will use Log::Handler. See Tools below. Sub-classing Sub-classing the main module will be trivial, and samples will be provided. Sub-classing will be done with Hash::FieldHash. See Tools and the FAQ below. Grammars and grammar generators Like Gedcom.pm, the code will read a GEDCOM grammar in BNF from a file. I'll run this phase before shipping the module, so you don't have to. See Tools below, specifically Marpa::Rules::Simple. Bascially, this means the startling complexity of the code in Gedcom.pm is a thing of the past. Operating the parser Using Marpa, callbacks are triggered when input is recognized. So, when lines like these are encountered: 1 @<XREF:FAM>@ FAM 2 RIN<AUTOMATED_RECORD_ID> Marpa will automatically call the callback attached to each tag. Callbacks will probably have names like 'do_fam' and 'do_rin', i.e. of the format 'do_$tag'. The parameters passed to the callback include the non-tag text on the line. Default callbacks for all tags will be provided, each one doing its part in parsing the parameters to the tag, and storing the result. The result will probably be stored in a tree. See Tools below, specifically Tree::DAG_Node. Database support A DBD::SQLite database is possible. Tools o Hash::FieldHash Simplifies class-building. As for the obvious question, why not use Moose, see the FAQ below. o Log::Handling Simplifies logging. o Marpa::R2 This is the modern way to do parsing. Home page<http://jeffreykegler.github.com/Marpa-web-site/>. Jeffrey's blog about Marpa <http://jeffreykegler.github.com/Ocean-of-Awareness-blog/>. My recent article about lexing and parsing with Marpa <http://www.perl.com/pub/2012/10/an-overview-of-lexing-and-parsing.html>. o MarpaX::Simple::Rules This module reads a grammar in BNF and generates a Marpa grammar. Hence it will read a BNF version of the GEDCOM spec and output the matching Marpa grammar. o Tree::DAG_Node The most sophisticated tree-handling code on CPAN. I've recently become co-maintainer of this module. FAQ Why did you choose Hash::FieldHash over Moose? My policy is to use the light-weight Hash::FieldHash for stand-alone modules and Moose for applications. Why did you choose to store the data in a tree? A GEDCOM file's structure can be viewed as a tree, so my initial plan is to store the data likewise.
-- Ron Savage http://savage.net.au/ Ph: 0421 920 622