def to_html
do_quotes = do_backticks = do_dashes = do_ellipses = do_stupify = nil
convert_quotes = prevent_breaks = nil
if @options.include?(0)
return self
elsif @options.include?(1)
do_quotes = do_backticks = do_ellipses = true
do_dashes = :normal
elsif @options.include?(2)
do_quotes = do_backticks = do_ellipses = true
do_dashes = :oldschool
elsif @options.include?(3)
do_quotes = do_backticks = do_ellipses = true
do_dashes = :inverted
elsif @options.include?(-1)
do_stupefy = true
end
do_quotes = true if @options.include?(:quotes)
do_backticks = true if @options.include?(:backticks)
do_backticks = :both if @options.include?(:allbackticks)
do_dashes = :normal if @options.include?(:dashes)
do_dashes = :oldschool if @options.include?(:oldschool)
do_dashes = :inverted if @options.include?(:inverted)
prevent_breaks = true if @options.include?(:prevent_breaks)
do_ellipses = true if @options.include?(:ellipses)
convert_quotes = true if @options.include?(:convertquotes)
do_stupefy = true if @options.include?(:stupefy)
tokens = tokenize
in_pre = nil
result = ""
prev_token_last_char = nil
tokens.each do |token|
if token.first == :tag
result << token[1]
if token[1].end_with? '/>'
elsif token[1] =~ %r!\A<(/?)(pre|code|kbd|script|style|math)[\s>]!
if $1 == '' && ! in_pre
in_pre = $2
elsif $1 == '/' && $2 == in_pre
in_pre = nil
end
end
else
t = token[1]
last_char = t[-1].chr
unless in_pre
t = process_escapes t
t.gsub!(/"/, '"') if convert_quotes
if do_dashes
t = educate_dashes t, prevent_breaks if do_dashes == :normal
t = educate_dashes_oldschool t, prevent_breaks if do_dashes == :oldschool
t = educate_dashes_inverted t, prevent_breaks if do_dashes == :inverted
end
t = educate_ellipses t, prevent_breaks if do_ellipses
if do_backticks
t = educate_backticks t
t = educate_single_backticks t if do_backticks == :both
end
if do_quotes
if t == "'"
if prev_token_last_char =~ /\S/
t = entity(:single_right_quote)
else
t = entity(:single_left_quote)
end
elsif t == '"'
if prev_token_last_char =~ /\S/
t = entity(:double_right_quote)
else
t = entity(:double_left_quote)
end
else
t = educate_quotes t
end
end
t = stupefy_entities t if do_stupefy
end
prev_token_last_char = last_char
result << t
end
end
result
end