aboutsummaryrefslogtreecommitdiff
path: root/plugins/backtick_code_block.rb
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/backtick_code_block.rb')
-rw-r--r--plugins/backtick_code_block.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/plugins/backtick_code_block.rb b/plugins/backtick_code_block.rb
new file mode 100644
index 00000000..c7a83435
--- /dev/null
+++ b/plugins/backtick_code_block.rb
@@ -0,0 +1,42 @@
+require './plugins/pygments_code'
+
+module BacktickCodeBlock
+ include HighlightCode
+ AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+)\s*(.+)?/i
+ LangCaption = /([^\s]+)\s*(.+)?/i
+ def render_code_block(input)
+ @caption = nil
+ @lang = nil
+ @url = nil
+ @title = nil
+ input.gsub /^`{3} *([^\n]+)?\n(.+?)\n`{3}/m do
+ options = $1
+ str = $2
+
+ if options =~ AllOptions
+ @lang = $1
+ @caption = "<figcaption><span>#{$2}</span><a href='#{$3}'>#{$4 || 'link'}</a></figcaption>"
+ elsif options =~ LangCaption
+ @lang = $1
+ @caption = "<figcaption><span>#{$2}</span></figcaption>"
+ end
+
+ if str.match(/\A {4}/)
+ str = str.gsub /^ {4}/, ''
+ end
+ if @lang.nil? || @lang == 'plain'
+ code = tableize_code(str.gsub('<','&lt;').gsub('>','&gt;'))
+ "<figure role=code>#{@caption}#{code}</figure>"
+ else
+ if @lang.include? "-raw"
+ raw = "``` #{@lang.sub('-raw', '')}\n"
+ raw += str
+ raw += "\n```\n"
+ else
+ code = highlight(str, @lang)
+ "<figure role=code>#{@caption}#{code}</figure>"
+ end
+ end
+ end
+ end
+end