module YARD
module Templates
module Helpers
# Helper methods for syntax highlighting.
module HtmlSyntaxHighlightHelper
# Highlights Ruby source
# @param [String] source the Ruby source code
# @return [String] the highlighted Ruby source
def html_syntax_highlight_ruby(source)
if Parser::SourceParser.parser_type == :ruby
html_syntax_highlight_ruby_ripper(source)
else
html_syntax_highlight_ruby_legacy(source)
end
end
private
def html_syntax_highlight_ruby_ripper(source)
tokenlist = Parser::Ruby::RubyParser.parse(source, "(syntax_highlight)").tokens
output = ""
tokenlist.each do |s|
output << "" if [:tstring_beg, :regexp_beg].include?(s[0])
case s.first
when :nl, :ignored_nl, :sp
output << h(s.last)
when :ident
output << "#{h(s.last)}"
else
output << "#{h(s.last)}"
end
output << "" if [:tstring_end, :regexp_end].include?(s[0])
end
output
rescue Parser::ParserSyntaxError
h(source)
end
def html_syntax_highlight_ruby_legacy(source)
tokenlist = Parser::Ruby::Legacy::TokenList.new(source)
tokenlist.map do |s|
prettyclass = s.class.class_name.sub(/^Tk/, '').downcase
prettysuper = s.class.superclass.class_name.sub(/^Tk/, '').downcase
case s
when Parser::Ruby::Legacy::RubyToken::TkWhitespace, Parser::Ruby::Legacy::RubyToken::TkUnknownChar
h s.text
when Parser::Ruby::Legacy::RubyToken::TkId
prettyval = h(s.text)
"#{prettyval}"
else
"#{h s.text}"
end
end.join
end
end
end
end
end