diff options
author | ptmcg <ptmcg@austin.rr.com> | 2020-10-25 14:42:43 -0500 |
---|---|---|
committer | ptmcg <ptmcg@austin.rr.com> | 2020-10-25 14:42:43 -0500 |
commit | 96e0fab07788fca87e1473b0ae755335d6988895 (patch) | |
tree | 3a59a97f7221042f793c7a43adb805cce5787034 /pyparsing | |
parent | 27dc324608a8c83afa47b296c52b7d6c9aa8795e (diff) | |
download | pyparsing-git-96e0fab07788fca87e1473b0ae755335d6988895.tar.gz |
Add number_words.py example; update diagramming code
Diffstat (limited to 'pyparsing')
-rw-r--r-- | pyparsing/diagram/__init__.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/pyparsing/diagram/__init__.py b/pyparsing/diagram/__init__.py index e9ad70d..9678368 100644 --- a/pyparsing/diagram/__init__.py +++ b/pyparsing/diagram/__init__.py @@ -275,7 +275,7 @@ def _to_diagram_element( element: pyparsing.ParserElement, parent: Optional[EditablePartial], lookup: ConverterState = None, - vertical: Union[int, bool] = 5, + vertical: Union[int, bool] = 3, index: int = 0, name_hint: str = None, ) -> Optional[EditablePartial]: @@ -341,9 +341,9 @@ def _to_diagram_element( ret = EditablePartial.from_call(railroad.Sequence, items=[]) elif isinstance(element, (pyparsing.Or, pyparsing.MatchFirst)): if _should_vertical(vertical, len(exprs)): - ret = EditablePartial.from_call(railroad.HorizontalChoice, items=[]) - else: ret = EditablePartial.from_call(railroad.Choice, 0, items=[]) + else: + ret = EditablePartial.from_call(railroad.HorizontalChoice, items=[]) elif isinstance(element, pyparsing.Optional): ret = EditablePartial.from_call(railroad.Optional, item="") elif isinstance(element, pyparsing.OneOrMore): @@ -424,3 +424,16 @@ def _to_diagram_element( ) else: return ret + +# monkeypatch .create_diagram method onto ParserElement +def _create_diagram(expr: pyparsing.ParserElement, output_html): + railroad = to_railroad(expr) + if isinstance(output_html, str): + with open(output_html, "w", encoding="utf-8") as diag_file: + diag_file.write(railroad_to_html(railroad)) + else: + # we were passed a file-like object, just write to it + output_html.write(railroad_to_html(railroad)) + + +pyparsing.ParserElement.create_diagram = _create_diagram |