12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/octopress-gist/gist.rb', line 12
def render(context)
if CodeHighlighter.clean_markup(@markup) =~ /([\S]*)\s*(\S*)/
gist_id, filename = $1.strip, $2.strip
filename = $2.strip == "" ? nil : $2.strip
options = {
gist_id: $1.strip,
cache: !@cache_disabled,
escape: false
}
options = CodeHighlighter.parse_markup(@markup, options)
if @cache_disabled or ! gist = Cache.read_cache(options)
gist = download_gist(options)
end
options[:url] ||= gist['html_url']
options[:link_text] ||= "View Gist"
output = []
files = gist_files(gist, filename)
if files.length > 1 && (options[:start] || options[:end] || options[:range])
puts "Gist embed warning:"
puts " You should probably avoid using start, end or range options on gist embeds with multiple files"
puts " Embed files one at a time like {% gist 124151 filename %}"
end
files.each do |file|
opt = {
title: file['filename'],
lang: (file['language'] || '').downcase
}.merge(options)
begin
code = CodeHighlighter.select_lines(file['content'], opt)
code = CodeHighlighter.highlight(code, opt)
if page = context.registers[:page]
code = "<notextile>#{code}</notextile>" if page['path'] && page['path'].match(/textile/)
end
output << code
rescue => e
markup = "{% #{@tag_name} #{@markup.strip} %}"
CodeHighlighter.highlight_failed(e, "{% #{@tag_name} [gist_id] [file_name] [options...] %}", markup, file['content'])
end
end
output.join "\n"
else
error_msg = "Syntax Error: {% #{@tag_name} #{@markup.strip} %}"
syntax_msg = "Should be: {% #{@tag_name} [gistid] [file_name] [options...] %}"
puts error_msg.red
puts syntax_msg
"<pre>#{error_msg}\n#{syntax_msg}</pre>"
end
end
|