module Octopress::EscapeCode

Constants

VERSION

Public Instance Methods

escape(page) click to toggle source
# File lib/octopress-escape-code.rb, line 43
def escape(page)
  ext = page.ext.downcase
  content = page.content.encode!("UTF-8")
  md_ext = %w{.markdown .mdown .mkdn .md .mkd .mdwn .mdtxt .mdtext}

  # Escape markdown style code blocks
  if md_ext.include?(ext)

    # Escape four tab or space indented code blocks
    content = content.gsub /^((\t| {4})[^\n].+?)\n($|\S)/m do
      "#{escape_brackets $1}\n#{$3}"
    end

    # Escape in-line code backticks
    content = content.gsub /(`[^`\n]+?`)/ do
      "#{escape_brackets $1}"
    end

    # Escape in-line code double backticks
    content = content.gsub /(``[^\n]+?``)/ do
      escape_brackets $1
    end

  end

  # Escape highlight and codeblock tag contents
  content = content.gsub /^({%\s*(codeblock|highlight).+?%})(.+?){%\s*end(codeblock|highlight)\s*%}/m do
    "#{$1}{% raw %}#{unescape_brackets $3}{% endraw %}{% end#{$4} %}"
  end

  # Escape codefenced codeblocks
  content = content.gsub /^(`{3}.+?`{3})/m do
    
    # Replace any raw/endraw tags inside of codefence block
    # as some of the regex above may have escaped contents
    # of the codefence block
    #
    code = unescape_brackets($1).gsub(/{% (end)?raw %}/, '')

    # Wrap codefence content in raw tags
    "{% raw %}\n#{code}\n{% endraw %}"
  end

  content
end
escape_brackets(content) click to toggle source
# File lib/octopress-escape-code.rb, line 33
def escape_brackets(content)
  content.gsub(/{/,'{').gsub(/}/, '}')
end
escape_enabled?(page) click to toggle source
# File lib/octopress-escape-code.rb, line 19
def escape_enabled?(page)
  get_config(page, 'escape_code', false)
end
get_config(page, config, default) click to toggle source
# File lib/octopress-escape-code.rb, line 23
def get_config(page, config, default)
  site_config = page.site.config[config]
  site_config = default if site_config.nil?

  page_config = page.data[config]
  page_config = site_config if page_config.nil?

  page_config
end
unescape_brackets(content) click to toggle source
# File lib/octopress-escape-code.rb, line 37
def unescape_brackets(content)
  content.gsub!(/&(amp;)?#x7b;/, '{')
  content.gsub!(/&(amp;)?#x7d;/, '}')
  content
end