Merge pull request #3436 from jekyll/fix-highlight-madness
This commit is contained in:
commit
b81f6ed38c
|
@ -77,8 +77,6 @@ eos
|
|||
def render_pygments(code, is_safe)
|
||||
Jekyll::External.require_with_graceful_fail('pygments')
|
||||
|
||||
@options[:encoding] = 'utf-8'
|
||||
|
||||
highlighted_code = Pygments.highlight(
|
||||
code,
|
||||
:lexer => @lang,
|
||||
|
@ -96,26 +94,26 @@ eos
|
|||
raise ArgumentError.new("Pygments.rb returned an unacceptable value when attempting to highlight some code.")
|
||||
end
|
||||
|
||||
highlighted_code
|
||||
highlighted_code.sub('<div class="highlight"><pre>', '').sub('</pre></div>', '')
|
||||
end
|
||||
|
||||
def render_rouge(code)
|
||||
Jekyll::External.require_with_graceful_fail('rouge')
|
||||
formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false)
|
||||
lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
|
||||
code = formatter.format(lexer.lex(code))
|
||||
"<div class=\"highlight\"><pre>#{code}</pre></div>"
|
||||
formatter.format(lexer.lex(code))
|
||||
end
|
||||
|
||||
def render_codehighlighter(code)
|
||||
"<div class=\"highlight\"><pre>#{h(code).strip}</pre></div>"
|
||||
h(code).strip
|
||||
end
|
||||
|
||||
def add_code_tag(code)
|
||||
# Add nested <code> tags to code blocks
|
||||
code = code.sub(/<pre>\n*/,'<pre><code class="language-' + @lang.to_s.gsub("+", "-") + '" data-lang="' + @lang.to_s + '">')
|
||||
code = code.sub(/\n*<\/pre>/,"</code></pre>")
|
||||
code.strip
|
||||
code_attributes = [
|
||||
"class=\"language-#{@lang.to_s.gsub('+', '-')}\"",
|
||||
"data-lang=\"#{@lang.to_s}\""
|
||||
].join(" ")
|
||||
"<div class=\"highlight\"><pre><code #{code_attributes}>#{code.chomp}</code></pre></div>"
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ class TestTags < Test::Unit::TestCase
|
|||
def create_post(content, override = {}, converter_class = Jekyll::Converters::Markdown)
|
||||
stub(Jekyll).configuration do
|
||||
site_configuration({
|
||||
"highlighter" => "pygments"
|
||||
"highlighter" => "rouge"
|
||||
}.merge(override))
|
||||
end
|
||||
site = Site.new(Jekyll.configuration)
|
||||
|
@ -136,9 +136,10 @@ CONTENT
|
|||
end
|
||||
end
|
||||
|
||||
context "with the pygments highlighter" do
|
||||
context "post content has highlight tag" do
|
||||
setup do
|
||||
fill_post("test")
|
||||
fill_post("test", {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "not cause a markdown error" do
|
||||
|
@ -154,6 +155,105 @@ CONTENT
|
|||
end
|
||||
end
|
||||
|
||||
context "post content has highlight with file reference" do
|
||||
setup do
|
||||
fill_post("./jekyll.gemspec", {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "not embed the file" do
|
||||
assert_match %{<pre><code class="language-text" data-lang="text">./jekyll.gemspec</code></pre>}, @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight tag with UTF character" do
|
||||
setup do
|
||||
fill_post("Æ", {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "render markdown with pygments line handling" do
|
||||
assert_match %{<pre><code class="language-text" data-lang="text">Æ</code></pre>}, @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight tag with preceding spaces & lines" do
|
||||
setup do
|
||||
code = <<-EOS
|
||||
|
||||
|
||||
[,1] [,2]
|
||||
[1,] FALSE TRUE
|
||||
[2,] FALSE TRUE
|
||||
EOS
|
||||
fill_post(code, {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "only strip the preceding newlines" do
|
||||
assert_match %{<pre><code class=\"language-text\" data-lang=\"text\"> [,1] [,2]}, @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight tag with preceding spaces & lines in several places" do
|
||||
setup do
|
||||
code = <<-EOS
|
||||
|
||||
|
||||
[,1] [,2]
|
||||
|
||||
|
||||
[1,] FALSE TRUE
|
||||
[2,] FALSE TRUE
|
||||
|
||||
|
||||
EOS
|
||||
fill_post(code, {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "only strip the newlines which precede and succeed the entire block" do
|
||||
assert_match "<pre><code class=\"language-text\" data-lang=\"text\"> [,1] [,2]\n\n\n[1,] FALSE TRUE\n[2,] FALSE TRUE</code></pre>", @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight tag with preceding spaces & Windows-style newlines" do
|
||||
setup do
|
||||
fill_post "\r\n\r\n\r\n [,1] [,2]", {'highlighter' => 'pygments'}
|
||||
end
|
||||
|
||||
should "only strip the preceding newlines" do
|
||||
assert_match %{<pre><code class=\"language-text\" data-lang=\"text\"> [,1] [,2]}, @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight tag with only preceding spaces" do
|
||||
setup do
|
||||
code = <<-EOS
|
||||
[,1] [,2]
|
||||
[1,] FALSE TRUE
|
||||
[2,] FALSE TRUE
|
||||
EOS
|
||||
fill_post(code, {'highlighter' => 'pygments'})
|
||||
end
|
||||
|
||||
should "only strip the preceding newlines" do
|
||||
assert_match %{<pre><code class=\"language-text\" data-lang=\"text\"> [,1] [,2]}, @result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "with the rouge highlighter" do
|
||||
context "post content has highlight tag" do
|
||||
setup do
|
||||
fill_post("test")
|
||||
end
|
||||
|
||||
should "render markdown with rouge" do
|
||||
assert_match %{<pre><code class="language-text" data-lang="text">test</code></pre>}, @result
|
||||
end
|
||||
|
||||
should "render markdown with rouge with line numbers" do
|
||||
assert_match %{<table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre>test<span class="w">\n</span></pre></td></tr></tbody></table>}, @result
|
||||
end
|
||||
end
|
||||
|
||||
context "post content has highlight with file reference" do
|
||||
setup do
|
||||
fill_post("./jekyll.gemspec")
|
||||
|
@ -233,6 +333,7 @@ EOS
|
|||
assert_match %{<pre><code class=\"language-text\" data-lang=\"text\"> [,1] [,2]}, @result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "simple post with markdown and pre tags" do
|
||||
setup do
|
||||
|
|
Loading…
Reference in New Issue