def parseString(title=None, raw=None, wikidb=None, revision=None, lang=None, magicwords=None, expandTemplates=True): """parse article with title from raw mediawiki text""" uniquifier = None siteinfo = None assert title is not None, 'no title given' if raw is None: page = wikidb.normalize_and_get_page(title, 0) if page: raw = page.rawtext else: raw = None assert raw is not None, "cannot get article %r" % (title,) input_raw = raw te = None if wikidb: if expandTemplates: te = expander.Expander(raw, pagename=title, wikidb=wikidb) input_raw = te.expandTemplates(True) uniquifier = te.uniquifier if hasattr(wikidb, 'get_siteinfo'): siteinfo = wikidb.get_siteinfo() src = None if hasattr(wikidb, 'getSource'): src = wikidb.getSource(title, revision=revision) assert not isinstance(src, dict) if not src: src = metabook.source() if lang is None: lang = src.language if magicwords is None: if siteinfo is not None and 'magicwords' in siteinfo: magicwords = siteinfo['magicwords'] else: magicwords = src.get('magicwords') if siteinfo is None: nshandler = nshandling.get_nshandler_for_lang(lang) else: nshandler = nshandling.nshandler(siteinfo) a = compat.parse_txt(input_raw, title=title, wikidb=wikidb, nshandler=nshandler, lang=lang, magicwords=magicwords, uniquifier=uniquifier, expander=te) a.caption = title if te and te.magic_displaytitle: a.caption = te.magic_displaytitle from mwlib.old_uparser import postprocessors for x in postprocessors: x(a, title=title, revision=revision, wikidb=wikidb, lang=lang) return a
class Expander(object): magic_displaytitle = None # set via {{DISPLAYTITLE:...}} def __init__(self, txt, pagename="", wikidb=None, recursion_limit=100): assert wikidb is not None, "must supply wikidb argument in Expander.__init__" self.pagename = pagename self.db = wikidb self.uniquifier = Uniquifier() si = None try: si = self.db.get_siteinfo() except Exception, err: print 'Caught: %s' % err if si is None: print "WARNING: failed to get siteinfo from %r" % (self.db, ) si = siteinfo.get_siteinfo("de") self.nshandler = nshandler = nshandling.nshandler(si) self.siteinfo = si if self.db and hasattr(self.db, "getSource"): source = self.db.getSource(pagename) or metabook.source() local_values = source.locals or u"" local_values = mwlocals.parse_locals(local_values) else: local_values = None source = {} # XXX we really should call Expander with a nuwiki.page object. revisionid = 0 if self.db and hasattr(self.db, "nuwiki") and pagename: page = self.db.nuwiki.get_page(self.pagename) if page is not None: revisionid = getattr(page, 'revid', 0) or 0 self.resolver = magics.MagicResolver(pagename=pagename, revisionid=revisionid) self.resolver.siteinfo = si self.resolver.nshandler = nshandler self.resolver.wikidb = wikidb self.resolver.local_values = local_values self.resolver.source = source self.recursion_limit = recursion_limit self.recursion_count = 0 self.aliasmap = parser.aliasmap(self.siteinfo) self.parsed = parser.parse(txt, included=False, replace_tags=self.replace_tags, siteinfo=self.siteinfo) # show(self.parsed) self.parsedTemplateCache = {}
def parseString(title=None, raw=None, wikidb=None, revision=None, lang=None, magicwords=None, expandTemplates=True): """parse article with title from raw mediawiki text""" uniquifier = None siteinfo = None assert title is not None, 'no title given' if raw is None: page = wikidb.normalize_and_get_page(title, 0) if page: raw = page.rawtext else: raw = None assert raw is not None, "cannot get article %r" % (title, ) input = raw te = None if wikidb: if expandTemplates: te = expander.Expander(raw, pagename=title, wikidb=wikidb) input = te.expandTemplates(True) uniquifier = te.uniquifier if hasattr(wikidb, 'get_siteinfo'): siteinfo = wikidb.get_siteinfo() src = None if hasattr(wikidb, 'getSource'): src = wikidb.getSource(title, revision=revision) assert not isinstance(src, dict) if not src: src = metabook.source() if lang is None: lang = src.language if magicwords is None: if siteinfo is not None and 'magicwords' in siteinfo: magicwords = siteinfo['magicwords'] else: magicwords = src.get('magicwords') if siteinfo is None: nshandler = nshandling.get_nshandler_for_lang(lang) else: nshandler = nshandling.nshandler(siteinfo) a = compat.parse_txt(input, title=title, wikidb=wikidb, nshandler=nshandler, lang=lang, magicwords=magicwords, uniquifier=uniquifier, expander=te) a.caption = title if te and te.magic_displaytitle: a.caption = te.magic_displaytitle from mwlib.old_uparser import postprocessors for x in postprocessors: x(a, title=title, revision=revision, wikidb=wikidb, lang=lang) return a