function text2HTML(sText : value) { sText = sText.composeHTMLLikeString(); sText = sText.replaceString("\r", ""); return sText.replaceString("\n", "
"); } TEXT2HTML ::= => { @
BNF coverage
@ } => { @ @ foreach i in this.rules { if existVariable(i.color) { @@ } } @
Highlighting of production rules
    @i@

Coverage of the text by production rules
@ local iPreviousPosition = 0; foreach position in this.areas { local iCurrentPosition = position.key(); if iCurrentPosition != iPreviousPosition { local sText = readChars($iCurrentPosition - iPreviousPosition$); @@sText.text2HTML()@@ } foreach i in position.end { foreach rule in i { if existVariable(rule.color) { @@ } } } foreach i in position.begin { foreach rule in i { if existVariable(rule.color) { @@ } } } iPreviousPosition = iCurrentPosition; } } ->(:sText)#empty => { @@sText.text2HTML()@
@ } ;