Date: Wed, 11 Sep 2002 09:11:25 -0400 (EDT) From: Aaron Straup Cope To: Benjamin Trott Subject: Re: MT - two unrelated thingies > > I mention all of this because it seems like it would be a nifty bit of > > featuritis for Movable Type. Actually, I mention it because it would be > > nice to have some kind of universal glossary system and MT is rapidly > > approaching universal status (congrats!) > > I agree that a glossary system would be pretty cool. Though, it's quite > doable currently just using the MT-Macro plugin. Have you taken a look > at that? Ah, I see. No I hadn't. That's cool - I gather I can do something like : <MTApplyGlossary> <$MTEntryBody$> </MTApplyGlossary> MT::Template::Context->add_container_tag(MTApplyGlossary => sub { my $ctx = shift; my $args = shift; my $path = $args->{path'}; if (! $path) { my $cfg = ... " # Remember how to get MT config manager here $path = $cfg->{GlossaryPath} || return $ctx->error($ctx->errstr); } # my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); my $output = ""; my $writer = XML::SAX::Writer->new(Output=>$output); my $glossary = XML::Filter::Glossary->new(Handler=>$writer); my $parser = XML::SAX::ParserFactory->parser(Handler=>$glossary); # Would also need to $glossary->no_do_startend_document_methods(); $glossary->set_glossary($path); eval { $parser->parse_string($builder->build($ctx, $tokens)); }; if ($@) { return $ctx->error($ctx->errstr.": $@"); } return $output; } Which will almost certainly break because it is very possible that the data passed to the plugin will not be well-formed. I suppose I could just export the code for parsing double-quoted keywords as a package function. I'm about to add support for <my_ns:glossary id = "some keyword with spaces" /> per a request which I'm not keen to parse with regex(p)s since you can also do <my_ns:keyword />. I suppose the whole thing could be hacked together using HTML::Parser to do the parsing since it is very forgiving. Well, it's something to work with anyway. Question : When a plugin is called, has the FH associated with the document already been opened or are you just building a string? If there is a FH, is there any way that it could be passed to the plugin? I suppose not since that would make managing nested tags/plugins impossible. Alas. In the unsolicited advice department, I would only mention the docs for plugins are less than inviting. I've noticed that other people who've written plugins have posted code which is helpful, since you can sort of infer what 'foo' does and how to get 'bar' from them. But, if plugins are really more exciting that just returning the value of system calls it isn't readily apparent how. 107 ->perldoc MT::Template::Context No documentation found for "MT::Template::Context".