Skip to content

Commit

Permalink
Allow creating more than one instance of the parser, to avoid memoïza…
Browse files Browse the repository at this point in the history
…tion problems
  • Loading branch information
peter17 committed Jul 12, 2011
1 parent bfa9bf6 commit 8c3e0b1
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 14 deletions.
7 changes: 4 additions & 3 deletions html.py
Expand Up @@ -14,10 +14,11 @@ def render_paragraph(node):
def render_body(node):
node.value = '<body>\n%s</body>' % node.leaf()

from mediawiki_parser.wikitextParser import make_parser

toolset = {'render_raw_text': render_raw_text,
'render_paragraph': render_paragraph,
'render_title2': render_title2,
'render_body': render_body}
parser = make_parser(toolset)

def make_parser():
from mediawiki_parser.wikitextParser import make_parser

This comment has been minimized.

Copy link
@erikrose

erikrose Jul 12, 2011

It would be better (faster, more conventional) to put this up at the top. To avoid name collisions, we can do this:

from mediawiki_parser import wikitextParser

def make_parser():
    return wikitextParser.make_parser(toolset)
return make_parser(toolset)
9 changes: 5 additions & 4 deletions parser.py
@@ -1,11 +1,12 @@
# -*- coding: utf8 -*-

# get the parser
#from pijnu import makeParser
#mediawikiGrammar = file("mediawiki.pijnu").read()
#mediawikiParser = makeParser(mediawikiGrammar)
from pijnu import makeParser
mediawikiGrammar = file("mediawiki.pijnu").read()
makeParser(mediawikiGrammar)

from html import parser
from html import make_parser
parser = make_parser()

This comment has been minimized.

Copy link
@erikrose

erikrose Jul 12, 2011

What's this file even for?

This comment has been minimized.

Copy link
@peter17

peter17 Jul 12, 2011

Author Owner

Just for testing


# import the source in a utf-8 string
import codecs
Expand Down
7 changes: 4 additions & 3 deletions raw.py
Expand Up @@ -14,10 +14,11 @@ def render_paragraph(node):
def render_body(node):
pass

from mediawiki_parser.wikitextParser import make_parser

toolset = {'render_raw_text': render_raw_text,
'render_paragraph': render_paragraph,
'render_title2': render_title2,
'render_body': render_body}
parser = make_parser(toolset)

def make_parser():
from mediawiki_parser.wikitextParser import make_parser

This comment has been minimized.

Copy link
@erikrose

erikrose Jul 12, 2011

Same as above

return make_parser(toolset)
8 changes: 7 additions & 1 deletion tests/__init__.py
Expand Up @@ -2,14 +2,20 @@
from unittest import TestCase


def setup_module():
from pijnu import makeParser

This comment has been minimized.

Copy link
@erikrose

erikrose Jul 12, 2011

Always put imports at the top, unless you're trying to avoid a circular import.

mediawikiGrammar = file("mediawiki.pijnu").read()
mediawikiParser = makeParser(mediawikiGrammar)

class ParserTestCase(TestCase):
def _grammar(self, method_name):
"""Return a full or partial grammar.
method_name -- If truthy, the attribute of the full grammar to return
"""
from raw import parser
from raw import make_parser

This comment has been minimized.

Copy link
@erikrose

erikrose Jul 12, 2011

Likewise, at top. It'd probably be most readable to say

from mediawiki_parser import raw

...

raw.make_parser()

parser = make_parser()
return getattr(parser, method_name) if method_name else parser

def parsed_equal_string(self, source, result, method_name):
Expand Down
7 changes: 4 additions & 3 deletions text.py
Expand Up @@ -13,10 +13,11 @@ def render_paragraph(node):
def render_body(node):
pass

from mediawiki_parser.wikitextParser import make_parser

toolset = {'render_raw_text': render_raw_text,
'render_paragraph': render_paragraph,
'render_title2': render_title2,
'render_body': render_body}
parser = make_parser(toolset)

def make_parser():
from mediawiki_parser.wikitextParser import make_parser
return make_parser(toolset)

0 comments on commit 8c3e0b1

Please sign in to comment.