aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-12-12 22:41:08 +0000
committerMichael Williamson <mike@zwobble.org>2013-12-12 22:41:08 +0000
commit47b0e47e2bd117c5a102c19e5e6bcb6088dbdd90 (patch)
tree18bc3f98f1c76fc878c076d6e32c221cd1f87e3c
parentdae26433ca6f7211b2eca03d2079c86c2e2dcfc7 (diff)
Read document run matchers
-rw-r--r--mammoth/document_matchers.py7
-rw-r--r--mammoth/style_reader/document_matcher_reader.py18
-rw-r--r--tests/style_reader_tests.py16
3 files changed, 38 insertions, 3 deletions
diff --git a/mammoth/document_matchers.py b/mammoth/document_matchers.py
index 8bae5b1..1049c94 100644
--- a/mammoth/document_matchers.py
+++ b/mammoth/document_matchers.py
@@ -6,3 +6,10 @@ def paragraph(style_name=None):
ParagraphMatcher = collections.namedtuple("ParagraphMatcher", ["style_name"])
+
+
+def run(style_name=None):
+ return RunMatcher(style_name)
+
+
+RunMatcher = collections.namedtuple("RunMatcher", ["style_name"])
diff --git a/mammoth/style_reader/document_matcher_reader.py b/mammoth/style_reader/document_matcher_reader.py
index f72f03d..ba08e09 100644
--- a/mammoth/style_reader/document_matcher_reader.py
+++ b/mammoth/style_reader/document_matcher_reader.py
@@ -4,14 +4,22 @@ from .. import document_matchers
def read_document_matcher(string):
- paragraph_node = _grammar.parse(string)
- return _read_paragraph_node(paragraph_node)
+ root_node = _grammar.parse(string)
+ element_node = root_node.children[0]
+ if element_node.expr_name == "paragraph":
+ return _read_paragraph_node(element_node)
+ elif element_node.expr_name == "run":
+ return _read_run_node(element_node)
-
def _read_paragraph_node(paragraph_node):
style_name = _read_style_node(paragraph_node.children[1])
return document_matchers.paragraph(style_name=style_name)
+
+
+def _read_run_node(run_node):
+ style_name = _read_style_node(run_node.children[1])
+ return document_matchers.run(style_name=style_name)
def _read_style_node(style_node):
@@ -22,8 +30,12 @@ def _read_style_node(style_node):
_grammar = Grammar(r"""
+matcher = paragraph / run
+
paragraph = "p" style_name?
+run = "r" style_name?
+
style_name = "." style_identifier
style_identifier = ~"[A-Z0-9]*"i
diff --git a/tests/style_reader_tests.py b/tests/style_reader_tests.py
index c04c44b..cd26a80 100644
--- a/tests/style_reader_tests.py
+++ b/tests/style_reader_tests.py
@@ -77,3 +77,19 @@ class ReadDocumentMatcherTests(object):
document_matchers.paragraph(style_name="Heading1"),
read_document_matcher("p.Heading1")
)
+
+
+ @istest
+ def reads_plain_run(self):
+ assert_equal(
+ document_matchers.run(),
+ read_document_matcher("r")
+ )
+
+
+ @istest
+ def reads_run_with_style_name(self):
+ assert_equal(
+ document_matchers.run(style_name="Emphasis"),
+ read_document_matcher("r.Emphasis")
+ )