diff options
| -rw-r--r-- | _def_dia.qmd | 2 | ||||
| -rw-r--r-- | def.peg | 7 | ||||
| -rwxr-xr-x | def_LinkDefinition.py | 4 | ||||
| -rwxr-xr-x | def_LinkTitle.py | 36 | ||||
| -rwxr-xr-x | def_LinkedWords.py | 11 |
5 files changed, 54 insertions, 6 deletions
diff --git a/_def_dia.qmd b/_def_dia.qmd index d800c02..1afeeec 100644 --- a/_def_dia.qmd +++ b/_def_dia.qmd @@ -24,6 +24,8 @@ involving the negative predicate from PEG notation.  + +   @@ -11,17 +11,20 @@ Markdown <- MetaBlock* Block* Block <- Header / List / LinkDefinition / Paragraph Header <- '#'+ SPACE* !NEWLINE Words? SPACE* NEWLINE List <- ([-*]+ / [[:digit:]]+ [).]) (_ (List / Words))? NEWLINE -LinkDefinition <- LinkLabel ':' _? Uri (_ '"' !'"' PlainWords '"')? NEWLINE +LinkDefinition <- LinkLabel ':' _? Uri (_ LinkTitle)? NEWLINE Paragraph <- Words (HardBreak Words)* NEWLINE+ # Inline elements Words <- StyledWords / LinkedWords / AnnotatedWords / PlainWords StyledWords <- '*' Words '*' / '**' Words '**' / '_' Words '_' -LinkedWords <- '[' Words ']' '(' Uri ')' +LinkedWords <- '[' Words ']' '(' ((Uri _)? LinkTitle / Uri) ')' / '[' Words ']' LinkLabel / LinkLabel AnnotatedWords <- '[' Words ']' '{' ![{}] PlainWords '}' LinkLabel <- '[' _? ![\[\]] PlainWords _? ']' +LinkTitle <- '"' _? !'"' _? PlainWords _? '"' + / "'" _? !"'" PlainWords _? "'" + / "(" _? ![()] PlainWords _? ")" PlainWords <- PRINTABLES (_ PRINTABLES)* Uri <- '<' ![<>] PRINTABLES? '>' / ![<>] PRINTABLES HardBreak <- SPACE SPACE+ NEWLINE diff --git a/def_LinkDefinition.py b/def_LinkDefinition.py index 67b5797..a5cb2f2 100755 --- a/def_LinkDefinition.py +++ b/def_LinkDefinition.py @@ -14,9 +14,7 @@ Diagram( NonTerminal("Uri"), Optional(Sequence( NonTerminal("_"), - '"', - NonTerminal("!'\"' PlainWords"), - '"' + NonTerminal("LinkTitle") )), NonTerminal("NEWLINE"), End("complex") diff --git a/def_LinkTitle.py b/def_LinkTitle.py new file mode 100755 index 0000000..02f39d6 --- /dev/null +++ b/def_LinkTitle.py @@ -0,0 +1,36 @@ +#!/usr/bin/python3 + +# Copyright 2025, Jonas Smedegaard <dr@jones.dk> +# SPDX-License-Identifier: GPL-3+ + +from os.path import basename, splitext +from railroad import * + +Diagram( + Start("complex"), + Choice(0, + Sequence( + '"', + Optional(NonTerminal("_")), + NonTerminal("!'\"' PlainWords"), + Optional(NonTerminal("_")), + '"', + ), + Sequence( + "'", + Optional(NonTerminal("_")), + NonTerminal("!\"'\" PlainWords"), + Optional(NonTerminal("_")), + "'", + ), + Sequence( + "(", + Optional(NonTerminal("_")), + NonTerminal("![()] PlainWords"), + Optional(NonTerminal("_")), + ")", + ) + ), + End("complex") +).writeStandalone( + open(splitext(basename(__file__))[0] + ".svg", "w").write) diff --git a/def_LinkedWords.py b/def_LinkedWords.py index f5e2519..83ba83c 100755 --- a/def_LinkedWords.py +++ b/def_LinkedWords.py @@ -14,7 +14,16 @@ Diagram( NonTerminal("Words"), "]", "(", - NonTerminal("Uri"), + Choice(0, + Sequence( + Optional(Sequence( + NonTerminal("Uri"), + NonTerminal("_") + )), + NonTerminal("LinkTitle") + ), + NonTerminal("Uri"), + ), ")" ), Sequence( |
