diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-12-12 21:57:49 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-12-12 21:57:49 +0000 |
| commit | d745ac4b6d65e6729b3d70ddaa23a95bb59fbd39 (patch) | |
| tree | 4a8891a371ca84f5cbb657f3382284992df86b6c | |
| parent | e2a87dbda6d32200b5fa68ba2f5e48aa526499f2 (diff) | |
Support choice of element
| -rw-r--r-- | mammoth/html_paths.py | 6 | ||||
| -rw-r--r-- | mammoth/style_reader.py | 19 | ||||
| -rw-r--r-- | setup.py | 3 | ||||
| -rw-r--r-- | tests/style_reader_tests.py | 17 |
4 files changed, 40 insertions, 5 deletions
diff --git a/mammoth/html_paths.py b/mammoth/html_paths.py index bc4eba1..cb53968 100644 --- a/mammoth/html_paths.py +++ b/mammoth/html_paths.py @@ -5,9 +5,9 @@ def path(elements): return HtmlPath(elements) -def element(name): - return HtmlPathElement(name) +def element(names): + return HtmlPathElement(names) HtmlPath = collections.namedtuple("HtmlPath", ["elements"]) -HtmlPathElement = collections.namedtuple("HtmlPathElement", ["name"]) +HtmlPathElement = collections.namedtuple("HtmlPathElement", ["names"]) diff --git a/mammoth/style_reader.py b/mammoth/style_reader.py index 18c848d..0c27bd8 100644 --- a/mammoth/style_reader.py +++ b/mammoth/style_reader.py @@ -1,5 +1,22 @@ +from parsimonious.grammar import Grammar + from . import html_paths def read_html_path(string): - return html_paths.path([html_paths.element(string)]) + root_node = _grammar.parse(string) + tag_names = [root_node.children[0].text] + + for choice_node in root_node.children[1].children: + tag_names.append(choice_node.children[1].text) + + return html_paths.path([html_paths.element(tag_names)]) + + +_grammar = Grammar(""" + +tag_names = identifier ("|" identifier)* + +identifier = ~"[A-Z0-9]*"i + +""") @@ -16,5 +16,8 @@ setup( url='http://github.com/mwilliamson/python-mammoth', packages=['mammoth', 'mammoth.docx'], keywords="docx word office clean html", + install_requires=[ + "parsimonious>=0.5,<0.6", + ] ) diff --git a/tests/style_reader_tests.py b/tests/style_reader_tests.py index df2b622..43bb3db 100644 --- a/tests/style_reader_tests.py +++ b/tests/style_reader_tests.py @@ -9,6 +9,21 @@ class ReadHtmlPathTests(object): @istest def can_read_single_element(self): assert_equal( - html_paths.path([html_paths.element("p")]), + html_paths.path([html_paths.element(["p"])]), read_html_path("p") ) + + @istest + def can_read_choice_of_two_elements(self): + assert_equal( + html_paths.path([html_paths.element(["ul", "ol"])]), + read_html_path("ul|ol") + ) + + + @istest + def can_read_choice_of_three_elements(self): + assert_equal( + html_paths.path([html_paths.element(["ul", "ol", "p"])]), + read_html_path("ul|ol|p") + ) |
