Hi Joel, Thanks very much for the detailed explanation. Seems wikidb is the right way to go, and I will check it out.
Regards, Gang On Tue, Sep 21, 2010 at 8:03 PM, Joel Nothman <[email protected]>wrote: > > > On Wed, 22 Sep 2010 02:52:19 +1000, Gang Liang < > [email protected]> wrote: > > On Tue, Sep 21, 2010 at 7:34 AM, Joel Nothman >> <[email protected]> wrote: >> >>> >>> 2. the template construction "{{...}}" is parsed as regular text. I am >>>> wondering whether we can use a dedicated object type to caption the >>>> template type. >>>> >>> >>> template expansion is handled as a separate module in mwlib. parseString >>> will only perform template expansion if it is passed a non-None wikidb >>> object which contains the template markup. >>> >>> >> thanks! >> >> one question. do you mean "template expansion" as expanding the given >> template to what we see on a page? what i think here is a simple task. >> for example, "{{WM Help Guide}}" is now parsed into >> >> mwlib.parser.node.Paragraph >> u"{{WM Help Guide}}" >> >> can we parse it into something like: >> >> mwlib.parser.node.Template >> tagname = u"WM Help Guide" >> > > No, currently it is not being parsed at all, I assume, because you're not > passing a value for wikidb to parseString, so the template expansion isn't > being attempted. > > As in the other thread on this group with Peter Wills, you will need to > create an appropriate wikidb object, with a normalize_and_get_page function > that returns whatever you want to appear as the template content. > > It would be relatively easy, for instance, to expand a template > transclusion {{xxx}} to <span class="template"></span>, which you can then > postprocess to change those spans to Template objects: > > > from mwlib.uparser import parseString > from mwlib.parser import Node, TagNode > > class Page(object): > def __init__(self, raw): > self.rawtext = raw > > class MyWikiDb(object): > def normalize_and_get_page(self, title, defaultns): > return Page(u'<span class="template">%s</span>' % title) > > def get_siteinfo(self): > from mwlib import siteinfo > return siteinfo.get_siteinfo('en') > > class Template(Node): > @classmethod > def convert_in_tree(cls, tree): > for n in tree.find(TagNode): > if n.vlist.get('class') == 'template': > n.__class__ = cls > n.tagname = None > n.vlist = None > > > parsed = parseString(title="Foobar", raw="{{my template}}", > wikidb=MyWikiDb()) > Template.convert_in_tree(parsed) > parsed.show() > > > we can append template parameters there as well. >> > > No you can't; not so easily. mwlib doesn't pass the template parameters to > the wikidb. Rather, once it's got the markup back, it substitutes them in > with the template evaluator. > > So, unless you want to modify the internal template expansion code, the > best you could do is get a list of parameters as *expected* by the template. > So if you had a lookup function like get_tpl_params(title) which returned > the list of parameter names expected by a particular template, you could > then do something like: > > params = ','.join(u'%s={{{%s}}}' % (param, param) for param in > get_tpl_params(title)) > return Page(u'<span class="template">%s(%s)</span>' % (title, params)) > > > So if I hardcode get_tpl_params to return ['1','2','3'], and use raw='{{my > template|a|b|c|foo=bar}}', I get back the following: > > Article->'Foobar' > Template->'span' > u'my template(1=a,2=b,3=c)' > > A bit hacky, but possible to make it work... > > > ~J > > -- > You received this message because you are subscribed to the Google Groups > "mwlib" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected] <mwlib%[email protected]>. > For more options, visit this group at > http://groups.google.com/group/mwlib?hl=en. > > -- Gang Liang Life is beautiful! -- You received this message because you are subscribed to the Google Groups "mwlib" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/mwlib?hl=en.
