From e4fd6ef12743f1f5dc652e4a360dedd8e8777fe9 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Thu, 12 Jul 2012 08:25:11 -0400 Subject: [PATCH] Updating with a more logical project structure. --- README.rst | 18 +++++++----- mwparserfromhell/__init__.py | 10 ++----- mwparserfromhell/nodes/__init__.py | 32 ++++++++++++++++++++++ .../{node.py => nodes/extras/__init__.py} | 5 +--- mwparserfromhell/{ => nodes/extras}/parameter.py | 0 mwparserfromhell/{ => nodes}/template.py | 5 ++-- mwparserfromhell/{ => nodes}/text.py | 5 ++-- mwparserfromhell/parser/__init__.py | 23 ++++++++++++++++ mwparserfromhell/{parser.py => parser/demo.py} | 9 +++--- mwparserfromhell/string_mixin.py | 2 +- mwparserfromhell/wikicode.py | 8 ++---- 11 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 mwparserfromhell/nodes/__init__.py rename mwparserfromhell/{node.py => nodes/extras/__init__.py} (94%) rename mwparserfromhell/{ => nodes/extras}/parameter.py (100%) rename mwparserfromhell/{ => nodes}/template.py (93%) rename mwparserfromhell/{ => nodes}/text.py (91%) create mode 100644 mwparserfromhell/parser/__init__.py rename mwparserfromhell/{parser.py => parser/demo.py} (92%) diff --git a/README.rst b/README.rst index c60fda4..56e5ea7 100644 --- a/README.rst +++ b/README.rst @@ -26,15 +26,19 @@ Usage Normal usage is rather straightforward (where ``text`` is page text):: >>> import mwparserfromhell - >>> parser = mwparserfromhell.Parser() - >>> templates = parser.parse(text) + >>> wikicode = mwparserfromhell.parse(text) + +``wikicode`` is a ``mwparserfromhell.Wikicode`` object, which acts like an +ordinary unicode object. It also contains a list of nodes representing the +components of the wikicode, including ordinary text nodes, templates, and +links. For example:: + + >>> wikicode = mwparserfromhell.parse(u"{{foo|bar|baz|eggs=spam}}") + >>> print wikicode + u"{{foo|bar|baz|eggs=spam}}" + >>> -``templates`` is a list of ``mwparserfromhell.Template`` objects, which contain -a ``name`` attribute, a ``params`` attribute, and a ``render()`` method. Slices -are supported to get parameters. For example:: - >>> templates = parser.parse("{{foo|bar|baz|eggs=spam}}") - >>> print templates [Template(name="foo", params={"1": "bar", "2": "baz", "eggs": "spam"})] >>> template = templates[0] >>> print template.name diff --git a/mwparserfromhell/__init__.py b/mwparserfromhell/__init__.py index c332e97..f770af3 100644 --- a/mwparserfromhell/__init__.py +++ b/mwparserfromhell/__init__.py @@ -32,12 +32,6 @@ __license__ = "MIT License" __version__ = "0.1.dev" __email__ = "ben.kurtovic@verizon.net" -from mwparserfromhell.node import Node -from mwparserfromhell.parameter import Parameter -from mwparserfromhell.parser import Parser -from mwparserfromhell.string_mixin import StringMixIn -from mwparserfromhell.template import Template -from mwparserfromhell.text import Text -from mwparserfromhell.wikicode import Wikicode +from mwparserfromhell import nodes, parser, string_mixin, wikicode -parse = Parser().parse +parse = lambda text: parser.Parser().parse(text) diff --git a/mwparserfromhell/nodes/__init__.py b/mwparserfromhell/nodes/__init__.py new file mode 100644 index 0000000..bc2a5b4 --- /dev/null +++ b/mwparserfromhell/nodes/__init__.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 Ben Kurtovic +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from mwparserfromhell.string_mixin import StringMixIn + +__all__ = ["Node"] + +class Node(StringMixIn): + pass + +from mwparserfromhell.nodes import extras +from mwparserfromhell.nodes.template import Template +from mwparserfromhell.nodes.text import Text diff --git a/mwparserfromhell/node.py b/mwparserfromhell/nodes/extras/__init__.py similarity index 94% rename from mwparserfromhell/node.py rename to mwparserfromhell/nodes/extras/__init__.py index e27652a..8a52268 100644 --- a/mwparserfromhell/node.py +++ b/mwparserfromhell/nodes/extras/__init__.py @@ -20,7 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -__all__ = ["Node"] - -class Node(object): - pass +from mwparserfromhell.nodes.extras.parameter import Parameter diff --git a/mwparserfromhell/parameter.py b/mwparserfromhell/nodes/extras/parameter.py similarity index 100% rename from mwparserfromhell/parameter.py rename to mwparserfromhell/nodes/extras/parameter.py diff --git a/mwparserfromhell/template.py b/mwparserfromhell/nodes/template.py similarity index 93% rename from mwparserfromhell/template.py rename to mwparserfromhell/nodes/template.py index 334a8ab..7def606 100644 --- a/mwparserfromhell/template.py +++ b/mwparserfromhell/nodes/template.py @@ -20,12 +20,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from mwparserfromhell.node import Node -from mwparserfromhell.string_mixin import StringMixIn +from mwparserfromhell.nodes import Node __all__ = ["Template"] -class Template(Node, StringMixIn): +class Template(Node): def __init__(self, name, params=None): self._name = name if params: diff --git a/mwparserfromhell/text.py b/mwparserfromhell/nodes/text.py similarity index 91% rename from mwparserfromhell/text.py rename to mwparserfromhell/nodes/text.py index a30af76..afdc235 100644 --- a/mwparserfromhell/text.py +++ b/mwparserfromhell/nodes/text.py @@ -20,12 +20,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from mwparserfromhell.node import Node -from mwparserfromhell.string_mixin import StringMixIn +from mwparserfromhell.nodes import Node __all__ = ["Text"] -class Text(Node, StringMixIn): +class Text(Node): def __init__(self, value): self._value = value diff --git a/mwparserfromhell/parser/__init__.py b/mwparserfromhell/parser/__init__.py new file mode 100644 index 0000000..a757dc3 --- /dev/null +++ b/mwparserfromhell/parser/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 Ben Kurtovic +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from mwparserfromhell.parser.demo import DemoParser as Parser diff --git a/mwparserfromhell/parser.py b/mwparserfromhell/parser/demo.py similarity index 92% rename from mwparserfromhell/parser.py rename to mwparserfromhell/parser/demo.py index a6d283c..c98205a 100644 --- a/mwparserfromhell/parser.py +++ b/mwparserfromhell/parser/demo.py @@ -20,14 +20,13 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from mwparserfromhell.parameter import Parameter -from mwparserfromhell.template import Template -from mwparserfromhell.text import Text +from mwparserfromhell.nodes import Template, Text +from mwparserfromhell.nodes.extras import Parameter from mwparserfromhell.wikicode import Wikicode -__all__ = ["Parser"] +__all__ = ["DemoParser"] -class Parser(object): +class DemoParser(object): def _tokenize(self, text): return text diff --git a/mwparserfromhell/string_mixin.py b/mwparserfromhell/string_mixin.py index 6f0027f..c0a4460 100644 --- a/mwparserfromhell/string_mixin.py +++ b/mwparserfromhell/string_mixin.py @@ -22,7 +22,7 @@ __all__ = ["StringMixIn"] -class StringMixIn(object): +class StringMixIn(object): # UnicodeMixIn? def __str__(self): return unicode(self).encode("utf8") diff --git a/mwparserfromhell/wikicode.py b/mwparserfromhell/wikicode.py index bab3a0f..ea97d5e 100644 --- a/mwparserfromhell/wikicode.py +++ b/mwparserfromhell/wikicode.py @@ -24,10 +24,8 @@ import htmlentitydefs import re import mwparserfromhell -from mwparserfromhell.node import Node +from mwparserfromhell.nodes import Node, Template, Text from mwparserfromhell.string_mixin import StringMixIn -from mwparserfromhell.template import Template -from mwparserfromhell.text import Text __all__ = ["Wikicode"] @@ -187,6 +185,6 @@ class Wikicode(StringMixIn): # Magic with htmlentitydefs if normalize return normalized(u" ".join(self.ifilter_text())) - def show_tree(self): + def get_tree(self): marker = object() # Random object we can find with certainty in a list - print "\n".join(self._show_tree(self, [], marker)) + return "\n".join(self._show_tree(self, [], marker))