-
-// 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
-// horizontal rule
+x::="x"
+// interactions between !=> and &~ mean that I need to rethink the chartage
+// 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
-// smallcap
-// strikethrough
-// link
+// output formats: latex, contex, ps, pdf, html, man, txt, rfc
+
+// escapification
+// comment
// math
// image
-// today's date, last edit date
-// blockquote
-// superscript
-// subscript
-// citations/references
-// typewriter-text
// figures
// 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
+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 => section }
SectionHeader ::= "==" SectionHeaderBody "=="
SectionHeaderBody ::= "=" SectionHeaderBody "="
> ws text ws
-kv ::= word "=" text /ws => kv1
-
-text ::= item */ ws
-pre ::= "[verbatim]" { [~]+ } /ws => "verbatim" // FIXME doesn't work
-item ::= pre
- > email
- > structured
- > styled
- > "\"" text "\"" => quoted
- > [a-zA-Z0-9]++
- > symbol
+sp !::= " "**
+blank ::= sp "\n" sp "\n" ws
-symbol ::= symbolx & sym++
-symbolx ::= "--" => emdash
- | ","
- | ":"
- | ";"
-
-styled ::= "**" text "**" => bold
- | "__" text "__" => ul
- | "~~" text "~~" => it // hard to type
- | "((" text "))" => footnote
-
-structured ::= glyph
-// | url
+kv ::= word "=" text /ws => kv1
-glyph ::= "(r)" | "(c)" | "(tm)" // euro symbol?
+num !::= [0-9]++
+Paragraph ::= { "\"\"" ws text } => "blockquote"
+ > { "*" " " ws text } => "ul"
+ > { "#" " " ws text } => "ol"
+ > { num " " ws text } => "ol"
+ > { "---" "-"* } => "hr"
+ > { text } => "p"
+
+text ::= Item
+Itemx ::= ws Item | ()
+Item ::= blockquote
+ > pre Itemx => []
+ > structured Itemx => []
+ > structuredx Itemx => []
+ > styled Itemx => []
+ > qtext Itemx => []
+ > alphanum++ Itemx => []
+ > symbol Itemx => []
+// > sym++ Itemx => []
+ > Paragraph Itemx => []
+
+symbol ::= sym++
+
+blockquote ::= "\"\"" text "\"\"" => "blockquote"
+ | "\"\"" block => "blockquote"
+
+qtext ::= "\"" text "\"" => "quoted"
+pre ::= "[verbatim]" { ~[]+ } /ws => "verbatim" // FIXME doesn't work
+
+styled ::= "__" text "__" => ul
+ | "((" text "))" => footnote
+ | ( "[[" text "]]" => tt
+ > "[" word "]" => citation
+ )
+ | "!!" text "!!" => strikethrough
+ | "^^" (word|block) => superscript
+ | ",," (word|block) => subscript
+ | "\\sc" block => smallcap
+ | "**" text "**" => bold
+ | "!" (word|block) => keyword
+ > "*" text "*" => it
+
+block ::= { text }
+structured ::= { text } "->" (url|email) => link
+ //> alphanum++ "->" (url|email) => link
+structuredx ::= glyph
+ > email
+ > url
+
+glyph ::= "(r)" | "(c)" | "(tm)" | "--" // euro symbol?
+ | "\\today" -> ~[a-z] => today
// URLs //////////////////////////////////////////////////////////////////////////////
method ::= [+\-.a-z0-9]+
port ::= [0-9]+
-domain ::= part +/ "."
+domain ::= (part +/ ".") -> ~"."
part ::= [a-zA-Z0-9\-]++ // interesting use of boolean grammars
-// &~ ([\-0-9] [~]* | [~]* [\-0-9])
+// &~ ([\-0-9] ~[]* | ~[]* [\-0-9])
-email ::= username "@" host => email
+email ::= username "@" host -> ~[.] => emailaddr
host ::= [0-9]+ "." [0-9]+ "." [0-9]+ "." [0-9]+ => "ip"
| domain
word ::= alphanum++
| quoted
-quoted ::= "\"" (([~\"\\] | escaped)+) "\""
+quoted ::= "\"" ((~[\"\\] | escaped)+) "\""
| "\"\"" => ""
escaped ::= "\\n" => "\n"
| "\\r" => "\r"
- | "\\" [~nr]
+ | "\\" ~[nr]
// Chars ///////////////////////////////////////////////////////////////
alpha ::= [a-zA-Z]
-num ::= [0-9]
+//num ::= [0-9]
alphanum ::= [a-zA-Z0-9]
-sym ::= [~a-zA-Z0-9\ \r\n]
+sym ::= ~[a-zA-Z0-9\ \r\n=\">]