blob: e40610f3f4e94704cbb5324e7a73ffcb23242f49 (
plain)
- # Subsets of Markdown syntax structure
- # expressed in parsing expression grammar (PEG) notation.
- #
- # Copyright 2025, Jonas Smedegaard <dr@jones.dk>
- # SPDX-License-Identifier: GPL-3+
- # Document
- Markdown <- ('---' NEWLINE MetaBlock* '---' NEWLINE)? Block*
- # Block elements
- Block <- Header
- / List
- / LinkDefinition
- / Paragraph
- Header <- '#'+ SPACE* !NEWLINE Words? SPACE* NEWLINE
- List <- ([-*]+ / [[:digit:]]+ [).]) (_ (List / Words))? 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 _)? LinkTitle / Uri) ')'
- / '[' Words ']' LinkLabel
- / LinkLabel
- AnnotatedWords <- '[' Words ']' '{' ![{}] PlainWords '}'
- LinkLabel <- '[' _? ![\[\]] PlainWords _? ']'
- LinkTitle <- '"' _? !'"' _? PlainWords _? '"'
- / "'" _? !"'" PlainWords _? "'"
- / "(" _? ![()] PlainWords _? ")"
- PlainWords <- PRINTABLES (_ PRINTABLES)*
- Uri <- '<' ![<>] PRINTABLES? '>'
- / ![<>] PRINTABLES
- HardBreak <- SPACE SPACE+ NEWLINE
- _ <- SPACE+
- / SPACE? NEWLINE SPACE? SPACE? SPACE?
- # Terminals
- PRINTABLES <- [[:graph:]]+
- SPACE <- ' '
- NEWLINE <- '\r\n'
- / '\n'
- / '\r'
- # Semantic Markdown
- AnnotatedWordsX <- '[' Words ']'
- ('{' (SemWords / ![{}] PlainWords) '}')
- SemWords <- SEMPREFIX '<' ![<>] PRINTABLES '>'
- / SEMPREFIX Curie
- Curie <- NAME? ':' NAME?
- SEMPREFIX <- [.#]
|