_plugins/remote_snippets.rb (59 lines of code) (raw):

require 'rouge' require 'open-uri' require 'uri' class RemoteSnippet < Liquid::Tag def initialize(tag_name, text, tokens) super args = text.strip.split(' ', 3) @path = args[0] if args.length() > 2 @type = args[1] @range = args[2] elsif args.length() > 1 @type = args[1] @range = "all" else @type = "text" @range = "all" end end def render(context) title = context.registers[:site].config['title'] prefix = context.registers[:site].config['gitbox_url'] url = "#{prefix};a=blob_plain;hb=HEAD;f=#{@path}" pretty_url = "#{prefix};a=blob;hb=HEAD;f=#{@path}" content = "" if @range == "all" URI.open(url) {|f| content = f.read } else rangenums = @range.split(",", 2) first = 0 second = 0 if rangenums.length() == 2 first = Integer(rangenums[0]) second = Integer(rangenums[1]) - first URI.open(url) {|f| content = f.each_line.drop(first).take(second).join() } else first = Integer(rangenums[0]) URI.open(url) {|f| content = f.each_line.drop(first).join() } end end snippet_type = "snippet" if @type == "direct" content = Kramdown::Document.new(content).to_html snippet_type = "page" else content = content.force_encoding("utf-8") formatter = Rouge::Formatters::HTMLLegacy.new lexer = Rouge::Lexer.find_fancy(@type, content) content = formatter.format(lexer.lex(content)) end #content = CGI::escapeHTML(content) return """ #{content} <p class=\"snippet_footer\">This #{snippet_type} was generated by #{title}'s <strong>source tree docs</strong>: <a href=\"#{pretty_url}\">#{@path}</a> </p> """ end end Liquid::Template.register_tag('remote_snippet', RemoteSnippet)