module Rabbit::Parser::Ext::Enscript
Public Instance Methods
Source
# File lib/rabbit/parser/ext/enscript.rb, line 42 def check_availability(lang) if @@enscript_highlight.has_key?(lang) true else Rabbit.logger.warn(_("enscript: unsupported language: %s") % lang) false end end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 114 def element_to_rabbit(element) case element.name when "pre" PreformattedText.new when "b" Keyword.new when "i" Element::Comment.new when "font" text = TextContainer.new color = element.get_attribute("color").to_s text.add_default_prop("foreground", color) text else format = _("enscript: unsupported element name: %s") Rabbit.logger.warn(format % element.name) nil end end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 91 def extract_newline_around_pre(html) html = html.gsub(/<pre[^>]*>\n/i, '<pre\1>') html.gsub(/\n<\/pre>/i, '</pre>') end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 96 def find_element(node, name) node.css(name)[0] end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 51 def highlight(lang, text) begin require 'nokogiri' rescue Rabbit.logger.warning("Syntax highlight by enscript requires nokogiri.") return nil end src_file = Tempfile.new("rabbit-enscript") src_file.open src_file.print(text) src_file.close html_file = Tempfile.new("rabbit-enscript-html") args = [ "--quiet", "--color", "--language=html", "--highlight=#{@@enscript_highlight[lang]}", "--output=#{html_file.path}", src_file.path, ] if SystemRunner.run("enscript", *args) html_file.open html_to_rabbit(html_file.read) else nil end end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 78 def html_to_rabbit(html) node = Nokogiri::HTML(extract_newline_around_pre(html)) pre = find_element(node, "pre") address = find_element(node, "address") element = node_to_rabbit(pre) if element Rabbit.logger.info(address.text) if address PreformattedBlock.new(element) else nil end end
Source
# File lib/rabbit/parser/ext/enscript.rb, line 100 def node_to_rabbit(node) element = element_to_rabbit(node) return nil if element.nil? node.children.each do |child| if child.text? element << Text.new(Escape.escape_meta_character(child.text)) else child_element = node_to_rabbit(child) element << child_element unless child_element.nil? end end element end