aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-05-18 12:41:35 +0200
committerJonas Smedegaard <dr@jones.dk>2025-05-18 14:05:02 +0200
commit90d5b0125fb943eea852ab14ed7a8243c86d7d21 (patch)
treeadcd22463cc5b7654551db156b9f737741475edb
parentba1aaf9246f7371bc4c4f8e6636baf44ddf28444 (diff)
define LinkTitle
-rw-r--r--_def_dia.qmd2
-rw-r--r--def.peg7
-rwxr-xr-xdef_LinkDefinition.py4
-rwxr-xr-xdef_LinkTitle.py36
-rwxr-xr-xdef_LinkedWords.py11
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.
![LinkLabel](def_LinkLabel.svg)
+![LinkTitle](def_LinkTitle.svg)
+
![PlainWords](def_PlainWords.svg)
![Url](def_Uri.svg)
diff --git a/def.peg b/def.peg
index 8bec09d..336a446 100644
--- a/def.peg
+++ b/def.peg
@@ -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(