txtBlock = ' para text block 1 para text block 2 ' text = ' ! section!1 some text as a block asdf !! section 1.1 * ul.li * ul.li ** ul.ul.li ! seciton 2 {{{ pre block }}} slice: value 1 /%some hidden text%/ ' ometa P { text = (~'\n' char)+:c -> c.join(''), pIndi = (``\n\n'')+, paraBlock = (~pIndi char)+:c -> c.join(''), para = pIndi paraBlock:y -> ['p', y] | para:xx -> ['xx',xx], sIndi = ``\n! '', // sBlock = (~sIndi char)+:c -> c.join(''), sBlock = (~sIndi para)*:x -> x, section = sIndi spaces text:t sBlock:x -> ['h1', t, x], hStart = ``/%'', hEnd = ``%/'', hBlock = (~hEnd char)+:c -> c.join(''), hidden = hStart hBlock:x -> ['hidden', x], // h1 = ``!'' spaces text:x -> ['h1', x], // h2 = ``!!'' spaces text:x -> ['h2', x], // line = h2 | h1, line = section | hidden | para, // linef = line:l '\n' -> l // | line | '\n', linef = line:l -> l | line, expr = linef*:l -> l.join('') } tree = P.matchAll(txtBlock, 'para')