murkdown 0.1.1

An experimental semantic markup language and static site generator for composing and decomposing hypertext documents
Documentation
RULES FOR markdown PRODUCE text/markdown

/* ------------------------------------------------ */
PREPROCESS RULES:
[...DATE...]$
  EXEC "date" TO text/plain AS "date"
  PUSH src "exec?:date"

[...EXEC...]$
  PUSH src "exec?:run"

[...EXEC...] [SEC]$
  SET stdin "\v"
  EXEC "bash" TO text/plain AS "run"

[...UML...]$
  PUSH ref "exec:plantuml.png"

[...UML...] [SEC]$
  SET stdin "\v"
  EXEC "plantuml -pipe -tpng" TO image/png AS "plantuml.png"

[...IMAGE...]$
  IS REF-BY-COPY

/* ------------------------------------------------ */
COMPILE RULES:
/* root */
^[...]$
  SET join "\n"

^[...] [SEC...] [...]$
  IS COMPOSABLE
  SET spacer " "

^[...] [SEC...] [CODE] [SEC...]$
  IS COMPOSABLE
  SET spacer ""

/* code section */
[...CODE...] [SEC...]$
  WRITEALL prefix
  WRITE spacer
  WRITE "```$language\n"
  YIELD
  WRITE "\n"
  WRITEALL prefix
  WRITE spacer
  WRITE "```\n"

/* figure block */
[...FIGURE...]$
  YIELD

/* root image block*/
^[...] [SEC...] ([ FIGURE ] [ SEC ] )?[...IMAGE...]$
  WRITEALL prefix
  WRITE "!["
  YIELD
  WRITE prefix
  WRITE "]($ref)"

/* image block */
[...IMAGE...]$
  WRITEALL prefix
  WRITE " !["
  YIELD
  WRITE "]($ref)"

/* callout block */
[...TIP...]$
  PUSH prefix "\m"
  WRITEALL prefix
  WRITE " [!TIP]\n"
  YIELD
  POP prefix

/* plain code block */
[CODE]$
  SET language "$language"
  YIELD
  SET language ""

/* code block */
[...CODE...]$
  SET language "$language"
  PUSH prefix "\m"
  YIELD
  POP prefix
  SET language ""

/* root block */
^[...] [SEC...] [...]$
  PUSH prefix "\m"
  YIELD
  POP prefix

/* heading block */
[...] [SEC...] [...HEADING...]$
  PUSH prefix "\m"
  YIELD
  POP prefix

/* nested block */
[...] [SEC...] [...]$
  PUSH prefix " \m"
  YIELD
  POP prefix

/* root plain code line */
^[...] [SEC...] [CODE] [SEC...] LINE$
  IS UNESCAPED_VALUE
  WRITEALL prefix
  WRITE "\v"

/* code line */
[...CODE...] [SEC...] LINE$
  IS UNESCAPED_VALUE
  WRITEALL prefix
  WRITE " \v"

/* image line */
[...IMAGE...] [SEC...] LINE$
  WRITE "\v"

/* other */
^[...] [SEC...] LINE$
  IS UNESCAPED_VALUE
  WRITE prefix
  WRITE "\v"

LINE$
  IS UNESCAPED_VALUE
  WRITEALL prefix
  WRITE spacer
  WRITE "\v"