+x::="x"
+// indentation styling...
+// literal blocks [[need to ignore bracing]] double-colon style?
+// definition -- by prior line indentation, like headings in the original structured text
+// tables
+// dropcap
+// output formats: latex, contex, ps, pdf, html, man, txt, rfc
// URGENT: why does swapping [a-zA-Z0-9] for alphanum in "item" cause severe breakage?
// URGENT: why does enabling "url" cause severe breakage? (probably same cause)
// ... something to do with unit productions
-
-
// output formats: latex, contex, ps, pdf, html, man, txt, rfc
// bullet list
// numbered list
// FIXME: these have to go at the top so they have their dropAll bit set before PreSequence.build...
ws !::= w**
w !::= [\r\n\ ]
-nw ::= [~\r\n\ ]
+nw ::= ~[\r\n\ ]
//////////////////////////////////////////////////////////////////////////////
-s ::= {Doc} => top
+s ::= { Doc } => "top"
Doc ::= Header Body /ws => doc
Header ::= "header" { kv */ ws } /ws => header
Body ::= Section*/ws => body
-Section ::= SectionHeader ({text}*/ws) /ws => section
+Section ::= SectionHeader Paragraph*/ws /ws => section
SectionHeader ::= "==" SectionHeaderBody "=="
SectionHeaderBody ::= "=" SectionHeaderBody "="
> ws text ws
kv ::= word "=" text /ws => kv1
+num !::= [0-9]++ => "stringify"
+Paragraph ::= { "\"\"" ws text } => "blockquote"
+ > { "*" " " ws text } => "ul"
+ > { "#" " " ws text } => "ol"
+ > { num " " ws text } => "ol"
+ > { "---" "-"* } => "hr"
+ > { text } => "p"
+
text ::= item */ ws
-pre ::= "[verbatim]" { [~]+ } /ws => "verbatim" // FIXME doesn't work
+pre ::= "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work
item ::= pre
> email
> structured
> styled
> "\"" text "\"" => quoted
- > [a-zA-Z0-9]++
+ > alphanum++ => "stringify"
> symbol
symbol ::= symbolx & sym++
// only gets parsed once
urlpath ::= urlchar*
-username ::= [a-zA-Z0-9;/?:&=$\-_.+]++
-password ::= [a-zA-Z0-9;/?:&=$\-_.+]++
+username ::= [a-zA-Z0-9;/?:&=$\-_.+]++ => "stringify"
+password ::= [a-zA-Z0-9;/?:&=$\-_.+]++ => "stringify"
urlchar ::= [a-zA-Z0-9;/?:&=$\-_.+@]
| "%" [0-9] [0-9] => "%"
url ::= "mailto" ":" email
port ::= [0-9]+
domain ::= part +/ "."
-part ::= [a-zA-Z0-9\-]++ // interesting use of boolean grammars
-// &~ ([\-0-9] [~]* | [~]* [\-0-9])
+part ::= [a-zA-Z0-9\-]++ => "stringify" // interesting use of boolean grammars
+// &~ ([\-0-9] ~[]* | ~[]* [\-0-9])
email ::= username "@" host => email
host ::= [0-9]+ "." [0-9]+ "." [0-9]+ "." [0-9]+ => "ip"
// Tokens ///////////////////////////////////////////////////////////////////
-word ::= alphanum++
+word ::= alphanum++ => "stringify"
| quoted
-quoted ::= "\"" (([~\"\\] | escaped)+) "\""
+quoted ::= "\"" ((~[\"\\] | escaped)+) "\""
| "\"\"" => ""
escaped ::= "\\n" => "\n"
| "\\r" => "\r"
- | "\\" [~nr]
+ | "\\" ~[nr]
// Chars ///////////////////////////////////////////////////////////////
alpha ::= [a-zA-Z]
num ::= [0-9]
alphanum ::= [a-zA-Z0-9]
-sym ::= [~a-zA-Z0-9\ \r\n]
+sym ::= ~[a-zA-Z0-9\ \r\n]