Revision history for Perl extension Embedix::ECD.
+ means it still needs to be done
- means it's done
beyond 1.00
+ allow for negative indentation? (probably not)
+ grammar capable of detecting unknown attributes
1.00 TARGET
- be able to create an object tree from a file
- be able to render an object tree
- grammar capable of detecting imbalanced tags
+ freeze the API after having discussed it w/ others who care
(but I'm the only one who seems to care)
+ documentation should be complete
+ the subclasses of Embedix::ECD should begin to take on individual
characteristics (because they can't all be the same). It annoys
me that they are all clones of eachother. Allowed attributes should
vary among different node classes for one thing.
- submit to CPAN -- when is my PAUSE id coming in? (on my bday of course!)
+ split the constructors that rely on the parser out into
a factory class. (maybe)
+ make an Embedix::ECD::Node class that the other node classes
inherit from. The parts of Embedix::ECD that are not factory
methods will be moved there. Also make a node class called
Embedix::ECD::Root.
+ Make a Parse::Yapp-based parser? Parse::Yapp let's me provide
my own lexer, so it should be significantly faster than
Parse::RecDescent, and it'll be easier to do magic to get around
the weird things.
+ need to allow "<" inside rawtext to be compatible w/ the
evil version. argh! In toXML(), be sure to turn "<" and ">"
bounded within tags to the entities < and > This sucks.
If I can't get around this bug, at least make the Parse::RecDescent
parser die when it encounters it instead of failing silently.
+ portmap.ecd has a mystery attribute: BUILD_REQUIRES.
I think it's the same as REQUIRES.
+ kbd.ecd has what appears to be tags inside a multi-line
help section.
+ newFromXML()!!! expat is really fast and kicks the shit out
of this Parse::RecDescent based parser on large ECDs.
0.09
- in the grammar, made it so that single-lined attributes
have their whitespace trimmed on both the left and right sides.
- added a license attribute and a get/set method for it, too.
this is my first significant fork away from target wizard ECDs.
- added license to the ecd_v1.dtd and the @default_order
array in Embedix::ECD::Util and documented the change.
- use Carp;
- moved unindent_and_aggregate out of the grammar and into
Embedix::ECD::Util.
- using the production from chipmunk@perlmonks (w/ minor
modifications, I can now have '<' inside rawtext!
- make unindent_and_aggregate() remove comments
- added hasChildren()
- added delChild()
- system/base/$arch/MAKEDEV.ecd
spaces are allowed in node names so I adjusted for that
- CONFLICTS attribute added.
- applied
yy}}po<ESC>V:s/=item / /<ENTER>{{kV:s/\$ecd->\|()//g<ENTER>
to the documentation
- in the *_size attributes, it's able to evaluate mathematical
expressions, and deal w/ pairs of numbers. The first number is
the base size, and the second number is the give-or-take amount.
make_evaluating_getter_method() makes it possible.
0.08 Sun Dec 31 23:50:20 MST 2000
- added POD for bin/ecd2xml
- fixed a spacing bug and overzealous lc() bug in toXML()
- enforced existence of name attribute to new constructor
- changed getNodeType() to getNodeClass() to make the naming
consistent with the schema used by Embedix::DB::Pg.
- rename XMLWriter.pm to XMLv1.pm. There will hopefully be an
XMLv2.pm in the near future w/ nicer semantics. There may
even be an XMLv3.pm if I stick around long enough... or not...
who knows?
- fixed some bugs in bin/ecd2xml. This is the first time that
my own documentation helped me find a bug. ecd2xml had still
been using the obsoleted XMLWriter.pm, and I was wondering why
my changes in XMLv1.pm weren't taking effect. I read my own
man page for ecd2xml, and sure enough, I had documented that
Embedix::ECD::XMLWriter was one of my requirements. hehe.
0.07 Wed Dec 6 23:11:29 MST 2000
- The grammar was simplified and also made capable of detecting
imbalanced tags. This means that the parser will die when
an error is detected so be sure to wrap calls to the constructors
around an eval block.
- wrote documentation regarding these new error messages.
- added n() which is an alias for getChild(). I think they should
have disallowed "-" from node names.
- added Embedix::ECD::XMLWriter -- much work needs to be done.
- write tests for rendering
- newFromCons() and grammar changed such that nodes are
returned as a pair in an arrayref. Everything still works
the same.
- added bin/ecd2xml
- discovered Pod::Usage(3pm) -- perl module of the week!
- added ecd_v1.dtd which is a straight port of the ECD format
to XML
- added function xml_from_cons() which takes an arrayref
(NOT an Embedix::ECD object) and turns it into XML. It even
preserves comments!
- added getNodeType() method to Embedix::ECD
- fleshed out toXML(). It now takes a "dtd" parameter which can
be "yes", "embed", or "no". This determines how the
document type declaration is mentioned in the XML.
- "&" in CDATA gets turned into an & entity.
- ecd_v1.dtd adjusted to have element order coincide w/ the way
Embedix::ECD usually orders them. Otherwise, it's invalid. :(
The dtd was also changed to allow the nesting of group, component,
option, and autovar nodes. (I forgot about that).
Everything should be well-formed now, and the stuff toXML() spits
out should even be valid. The stuff xml_from_cons() spits out will
probably not be valid, though -- I don't have control over the order
of attributes when I get a cons.
- this is the first version to be put into CPAN.
Getting my PAUSE id today was the best birthday present I've
ever gotten.
0.06 Mon Nov 20 08:33:24 MST 2000
- implemented mergeWith()
- refactor subclasses of Embedix::ECD to minimize duplication of code
- wrote more documentation about what an ECD actually is and
reorganized some of the sections to (hopefully) make it easier
to understand.
- added getFormatOptions(@opt) method to further reduce duplication
of code in the subclasses.
0.05 Wed Nov 15 00:56:39 MST 2000
- overloaded the "" operator like CGI::Cookie
- create methods for accessing known attributes
- added newFromCons() which takes a big arrayref and turns it
into a bigger Embedix::ECD object.
- added setAttribute($name, $value) and getAttribute($name) to
make newFromCons() much easier to implement w/o violating
abstraction or having to eval.
- updated POD for methods such that each method is preceded by
Embedix::ECD (if it is a class method) or $ecd (if it is an
instance method).
- added getDepth() to find one's depth in the tree.
Unfortunately, overloading "" seemed to conflict with reference
comparisons and really screwed things up, so I may end up disabling
overloading.
- re-enabled the overloaded "" operator. Instead of checking to
see if $parent eq undef, I just do ref($parent) which seems
to not make the "" kick in (which is a good thing).
- the grammar now has a way to turn the attributes that are supposed
to be aggregates into aggregates via __unindent_and_aggregate()
- added module Embdix::ECD::Util and in it, indent()
more utility functions will be added there as necessary.
- overloading "" is pissing me off -- it kicks in when I least expect it.
No more overloading for me.
- subclasses need to implement their own toString()
...but it got messy
- added %default and @attribute_order to Embedix::ECD::Util
They're probably going to get moved somewhere else.
- I decided that ALL attributes that get delimited by tags
are aggregates. There is no longer a distinction between
singular and aggregate attributes.
- added accessor method for default_value (which was accidentally
omitted).
0.04 Mon Nov 13 02:05:29 MST 2000
- made the parser collect consecutive comments into one big comment.
Removed join_comments method, because of this.
- removed debugging noise from the parser
- wrote great quantities of POD
- added Embedix/ECD/Autovar.pm
- provided an intervening layer in the grammar so that one could
get a nested arrayref form of the syntax tree instead of an object
- API changes for accessing child nodes. AUTOLOAD will no longer be
able to add children. addChild() will have to be used for that
task. getChild() was added for those times it would be inconvenient
to let AUTOLOAD return a child node. Finally children() was renamed
to getChildren(). This was the result of my desire to let the methods
for accessing attribute names be nouns. I also want all other methods
to have a verb in them. Thus children() became getChildren().
- enhanced the basic constructor, new()
0.03 Fri Nov 10 12:16:27 MST 2000
- more additions to the grammar
- added a stub for merge().
- added a stub for join_comments().
- added t/data/node.ecd which is an ECD file that only
contains nodes.
- this is the first time a grammar has been able to load an ECD file
in its entirety into a simple perl data structure.
0.02 Tue Aug 29 16:38:47 MDT 2000
- implemented AUTOLOAD method
- added a test for building object hierarchies
- implemented new_from_file() constructor
- preliminary (very wrong) ECD parser
- added children() method for returning all children of a node.
- switched to Java-styled method names for pre-defined methods.
newFromFile() and newFromString() were changed.
0.01 Thu Aug 24 14:56:50 2000
- original version; created by h2xs 1.19