--- /dev/null
+
+USING: accessors arrays kernel lexer locals math namespaces parser
+ sequences splitting ;
+
+IN: easy-help.expand-markup
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: scan-one-array ( string -- array rest )
+ string-lines
+ lexer-factory get call
+ [
+ [
+ \ } parse-until >array
+ lexer get line-text>>
+ lexer get column>> tail
+ ]
+ with-lexer
+ ]
+ with-scope ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: contains-markup? ( string -- ? ) "{ $" swap subseq? ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+:: expand-markup ( LINE -- lines )
+
+ LINE contains-markup?
+ [
+
+ [let | N [ "{ $" LINE start ] |
+
+ LINE N head
+
+ LINE N 2 + tail scan-one-array dup " " head? [ 1 tail ] [ ] if
+
+ [ 2array ] dip
+
+ expand-markup
+
+ append ]
+
+ ]
+ [ LINE 1array ]
+ if ;