require 'syntax/convertors/abstract' module Syntax module Convertors # A simple class for converting a text into HTML. class HTML < Abstract # Converts the given text to HTML, using spans to represent token groups # of any type but :normal (which is always unhighlighted). If # +pre+ is +true+, the html is automatically wrapped in pre tags. def convert( text, pre=true ) html = "" html << "
" if pre
regions = []
@tokenizer.tokenize( text ) do |tok|
value = html_escape(tok)
case tok.instruction
when :region_close then
regions.pop
html << ""
when :region_open then
regions.push tok.group
html << "#{value}"
else
if tok.group == ( regions.last || :normal )
html << value
else
html << "#{value}"
end
end
end
html << "" while regions.pop
html << "
" if pre
html
end
private
# Replaces some characters with their corresponding HTML entities.
def html_escape( string )
string.gsub( /&/, "&" ).
gsub( /, "<" ).
gsub( />/, ">" ).
gsub( /"/, """ )
end
end
end
end