# Subsets of Markdown syntax structure # expressed in parsing expression grammar (PEG) notation. # # Copyright 2025, Jonas Smedegaard # SPDX-License-Identifier: GPL-3+ # Document Markdown <- MetaBlock* Block* # Block elements Block <- Header / List / LinkDefinition / Paragraph Header <- '#'+ SPACE* Words? SPACE* NEWLINE List <- ([-*]+ / [[:digit:]]+ [).]) (SPACE+ (List / Words))? NEWLINE LinkDefinition <- '[' !'[]' PlainWords ']:' SPACE Uri NEWLINE SPACE SPACE '"' !'"' PlainWords '"' NEWLINE Paragraph <- Words (SPACE? NEWLINE Words / HardBreak Words)* NEWLINE NEWLINE # Inline elements Words <- StyledWords / LinkedWords / AnnotatedWords / PlainWords StyledWords <- '*' Words '*' / '**' Words '**' / '_' Words '_' LinkedWords <- '[' Words ']' '(' Uri ')' / '[' Words ']' '[' ![\[\]] LinkDefinitionKeyphrase ']' / '[' LinkDefinitionKeyphrase ']' AnnotatedWords <- '[' Words ']' '{' ![{}] PlainWords '}' PlainWords <- PRINTABLES (SPACE PRINTABLES)* Uri <- '<' ![<>] PRINTABLES? '>' / ![<>] PRINTABLES HardBreak <- SPACE SPACE NEWLINE # Terminals PRINTABLES <- [[:graph:]]+ SPACE <- ' ' NEWLINE <- '\r\n' / '\n' / '\r'