Index: sample/pre.rd =================================================================== --- sample/pre.rd (リビジョン 234) +++ sample/pre.rd (作業コピー) @@ -23,6 +23,20 @@ bbb += pre + + # image + # src = file:///tmp/c.eps + + +# # enscript c + +# int +# main(void) +# { +# return 0; +# } + = pre3 * aaa Index: lib/rabbit/logger/base.rb =================================================================== --- lib/rabbit/logger/base.rb (リビジョン 234) +++ lib/rabbit/logger/base.rb (作業コピー) @@ -37,6 +37,7 @@ end def warn(message_or_error=nil, &block) + puts caller log(WARN, message_or_error, &block) end Index: lib/rabbit/image/eps.rb =================================================================== --- lib/rabbit/image/eps.rb (リビジョン 234) +++ lib/rabbit/image/eps.rb (作業コピー) @@ -16,6 +16,7 @@ class << self def match?(filename) + p filename File.open(filename) do |f| f.each do |line| case line Index: lib/rabbit/ext/block-verbatim.rb =================================================================== --- lib/rabbit/ext/block-verbatim.rb (リビジョン 234) +++ lib/rabbit/ext/block-verbatim.rb (作業コピー) @@ -5,6 +5,7 @@ require 'rabbit/rt/rt2rabbit-lib' require 'rabbit/ext/base' require 'rabbit/ext/image' +require 'rabbit/ext/enscript' require 'rabbit/tgif' module Rabbit @@ -13,6 +14,7 @@ include SystemRunner include Image + include Enscript include GetText def ext_block_verb_quote(label, content, visitor) @@ -33,6 +35,52 @@ make_image(visitor, prop['src'], prop) end + @@enscript_highlight = `enscript --help-highlight`.scan(/^Name: (\w+)/) + @@enscript_highlight.flatten! + + unless @@enscript_highlight.empty? + def ext_block_verb_enscript(label, content, visitor) + return nil unless /^enscript (\w+)$/i =~ label + highlight_lang = $1 + return unless @@enscript_highlight.include?(highlight_lang) + highlight_lang.untaint + prop = {} + src_file = Tempfile.new("rabbit-enscript") + in_src = false + src_file.open + ps_file = Tempfile.new("rabbit-enscript-ps") + content.each do |line| + if in_src + src_file.print(line) + else + if /^\s*$/ =~ line + in_src = true + elsif /^(?:#\s*)?(\S+)\s*=\s*(.+)\s*$/ =~ line + prop[$1] = $2 + end + end + end + src_file.close + args = [ + "--color", "--language=PostScript", + "--highlight=#{highlight_lang}", "--output=#{ps_file.path}", + src_file.path, + ] + if run("enscript", *args) + eps_file = Tempfile.new("rabbit-enscript-eps") + if run("ps2epsi", ps_file.path, eps_file.path) + image = make_image(visitor, "file://#{eps_file.path}", prop) + sleep 100 + image["_src"] = eps_file # for protecting from GC + image + else + nil + end + else + nil + end + end + end def ext_block_verb_tex(label, content, visitor) return nil unless /^TeX$/i =~ label prop = {} Index: lib/rabbit/ext/image.rb =================================================================== --- lib/rabbit/ext/image.rb (リビジョン 234) +++ lib/rabbit/ext/image.rb (作業コピー) @@ -26,6 +26,7 @@ begin Element::Image.new(image_filename(visitor, uri), prop) rescue ImageLoadError + puts $@ visitor.logger.warn($!.message) nil end Index: lib/rabbit/ext/enscript.rb =================================================================== --- lib/rabbit/ext/enscript.rb (リビジョン 0) +++ lib/rabbit/ext/enscript.rb (リビジョン 0) @@ -0,0 +1,8 @@ +require 'rabbit/ext/block-verbatim' + +module Rabbit + module Ext + module Enscript + end + end +end