require 'redcarpet' require 'pygments' module Documentation class MarkdownRenderer < Redcarpet::Render::HTML attr_accessor :page include ActionView::Helpers::TagHelper def block_code(code, language) title = nil code.gsub!(/\A\:\:(.*)$/) { title = $1 ; nil } String.new.tap do |s| s << "

#{title}

" if title s << Pygments.highlight(code, :lexer => language) end rescue "
#{code}
" end def link(link, title, content) if link =~ /\A\^/ case link when /\A\^\.\/(.*)/ # ^./pagename # Links to pages on the same level as the current page link = "{{docRoot}}/#{page.parents.map(&:permalink).join('/')}/#{$1}" when /\A\^\/(.*)/ # ^/full/path # Links to a page frmo the root of the docs link = "{{docRoot}}/#{$1}" when /\A\^(.*)/ # ^child/item # Links to a child of the current page link = "{{docRoot}}/#{page.full_permalink}/#{$1}" end end "#{content}" end def image(src, title, alt) if alt.gsub!(/\*([\w\-\s]+)\z/, '') klass = "imgcontainer #{$1}" else klass = nil end content_tag :span, tag(:img, :src => src, :title => title, :alt => alt), :class => klass end def paragraph(text) klass = '' text.gsub!(/\A(\w+)\:/) do klass = $1 nil end text.sub!(/ ([^ ]+)$/, ' \1') "

#{text}

" end end end