summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-29 21:51:15 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-29 21:51:15 +0000
commit406325d3cad205eb010f8936d50337fcb61193d1 (patch)
tree8c86178519200975a7053f477b64fc27b0e129a8
parentf6e7dac51adf4283c60df7ddc1500dd5e3215852 (diff)
Add parsing for style name prefixes
-rw-r--r--mammoth/styles/parser/document_matcher_parser.py14
-rw-r--r--tests/styles/parser/document_matcher_parser_tests.py8
2 files changed, 19 insertions, 3 deletions
diff --git a/mammoth/styles/parser/document_matcher_parser.py b/mammoth/styles/parser/document_matcher_parser.py
index 95f3359..0024ac8 100644
--- a/mammoth/styles/parser/document_matcher_parser.py
+++ b/mammoth/styles/parser/document_matcher_parser.py
@@ -46,14 +46,22 @@ def parse_document_matcher(tokens):
def _parse_style_name(tokens):
if tokens.try_skip(TokenType.SYMBOL, "["):
tokens.skip(TokenType.IDENTIFIER, "style-name")
- tokens.skip(TokenType.SYMBOL, "=")
- name = parse_string(tokens)
+ string_matcher = _parse_string_matcher(tokens)
tokens.skip(TokenType.SYMBOL, "]")
- return document_matchers.equal_to(name)
+ return string_matcher
else:
return None
+def _parse_string_matcher(tokens):
+ if tokens.try_skip(TokenType.SYMBOL, "="):
+ return document_matchers.equal_to(parse_string(tokens))
+ elif tokens.try_skip(TokenType.SYMBOL, "^="):
+ return document_matchers.starts_with(parse_string(tokens))
+ else:
+ # TODO raise
+ pass
+
def _parse_numbering(tokens):
if tokens.try_skip(TokenType.SYMBOL, ":"):
is_ordered = _parse_list_type(tokens)
diff --git a/tests/styles/parser/document_matcher_parser_tests.py b/tests/styles/parser/document_matcher_parser_tests.py
index bec2368..0cf5f0e 100644
--- a/tests/styles/parser/document_matcher_parser_tests.py
+++ b/tests/styles/parser/document_matcher_parser_tests.py
@@ -39,6 +39,14 @@ def reads_paragraph_with_exact_style_name():
@istest
+def reads_paragraph_with_style_name_prefix():
+ assert_equal(
+ document_matchers.paragraph(style_name=document_matchers.starts_with("Heading")),
+ read_document_matcher("p[style-name^='Heading']")
+ )
+
+
+@istest
def reads_paragraph_ordered_list():
assert_equal(
document_matchers.paragraph(numbering=documents.numbering_level(1, is_ordered=True)),