Upgrade kramdown dependency to v2.x (#7492)

Merge pull request 7492
This commit is contained in:
Ashwin Maroli 2019-03-15 22:57:41 +05:30 committed by jekyllbot
parent 9ba6c7dd77
commit 575f4b66de
6 changed files with 82 additions and 3 deletions

View File

@ -63,14 +63,13 @@ end
# #
group :jekyll_optional_dependencies do group :jekyll_optional_dependencies do
gem "coderay", "~> 1.1.0"
gem "jekyll-coffeescript" gem "jekyll-coffeescript"
gem "jekyll-docs", :path => "../docs" if Dir.exist?("../docs") && ENV["JEKYLL_VERSION"] gem "jekyll-docs", :path => "../docs" if Dir.exist?("../docs") && ENV["JEKYLL_VERSION"]
gem "jekyll-feed", "~> 0.9" gem "jekyll-feed", "~> 0.9"
gem "jekyll-gist" gem "jekyll-gist"
gem "jekyll-paginate" gem "jekyll-paginate"
gem "jekyll-redirect-from" gem "jekyll-redirect-from"
gem "kramdown", "~> 1.14" gem "kramdown-syntax-coderay"
gem "mime-types", "~> 3.0" gem "mime-types", "~> 3.0"
gem "rdoc", "~> 6.0" gem "rdoc", "~> 6.0"
gem "tomlrb", "~> 1.2" gem "tomlrb", "~> 1.2"

View File

@ -91,4 +91,51 @@ present in the generated site.
--- ---
### kramdown v2
Jekyll has dropped support for `kramdown-1.x` entirely.
From [`v2.0` onwards](https://kramdown.gettalong.org/news.html#kramdown-200-released) kramdown requires
specific extensions to be additionally installed to use certain features are desired outside of kramdown's
core functionality.
Out of all the extensions listed in the report linked above, gem `kramdown-parser-gfm` is automatically
installed along with Jekyll 4.0. The remaining extensions will have to be manually installed by the user
depending on desired funtionality, by listing the extension's gem-name in their `Gemfile`.
Notes:
* `kramdown-converter-pdf` will be ignored by Jekyll Core. To have Jekyll convert Markdown to PDF
you'll have to depend on a plugin that subclasses `Jekyll::Converter` with the
[required methods]({% link _docs/plugins/converters.md %}).
For example:
```ruby
module Jekyll
External.require_with_graceful_fail "kramdown-converter-pdf"
class Markdown2PDF < Converter
safe true
priority :low
def matches(ext)
# match only files that have an extension exactly ".markdown"
ext =~ /^\.markdown$/
end
def convert(content)
Kramdown::Document.new(content).to_pdf
end
def output_ext
".pdf"
end
end
end
```
* Vendors that provide a versioned Jekyll Environment Image (e.g. Docker Image, GitHub Pages, etc)
will have to manually whitelist kramdown's extension gems in their distributions for Jekyll 4.0.
---
*Did we miss something? Please click "Improve this page" above and add a section. Thanks!* *Did we miss something? Please click "Improve this page" above and add a section. Thanks!*

View File

@ -393,6 +393,21 @@ Feature: Collections
Then the _site directory should exist Then the _site directory should exist
And I should see "Second document's output: <p>Use <code class=\"highlighter-rouge\">Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>" in "_site/index.html" And I should see "Second document's output: <p>Use <code class=\"highlighter-rouge\">Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>" in "_site/index.html"
Scenario: Documents have an output attribute, which is the converted HTML based on site.config
Given I have an "index.html" page that contains "Second document's output: {{ site.documents[2].output }}"
And I have fixture collections
And I have a "_config.yml" file with content:
"""
kramdown:
guess_lang: false
collections:
- methods
"""
When I run jekyll build
Then I should get a zero exit status
Then the _site directory should exist
And I should see "Second document's output: <p>Use <code>Jekyll.configuration</code> to build a full configuration for use w/Jekyll.</p>\n\n<p>Whatever: foo.bar</p>" in "_site/index.html"
Scenario: Filter documents by where Scenario: Filter documents by where
Given I have an "index.html" page that contains "{% assign items = site.methods | where: 'whatever','foo.bar' %}Item count: {{ items.size }}" Given I have an "index.html" page that contains "{% assign items = site.methods | where: 'whatever','foo.bar' %}Item count: {{ items.size }}"
And I have fixture collections And I have fixture collections

View File

@ -39,7 +39,8 @@ Gem::Specification.new do |s|
s.add_runtime_dependency("i18n", ">= 0.9.5", "< 2") s.add_runtime_dependency("i18n", ">= 0.9.5", "< 2")
s.add_runtime_dependency("jekyll-sass-converter", "~> 1.0") s.add_runtime_dependency("jekyll-sass-converter", "~> 1.0")
s.add_runtime_dependency("jekyll-watch", "~> 2.0") s.add_runtime_dependency("jekyll-watch", "~> 2.0")
s.add_runtime_dependency("kramdown", "~> 1.14") s.add_runtime_dependency("kramdown", "~> 2.1")
s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
s.add_runtime_dependency("liquid", "~> 4.0") s.add_runtime_dependency("liquid", "~> 4.0")
s.add_runtime_dependency("mercenary", "~> 0.3.3") s.add_runtime_dependency("mercenary", "~> 0.3.3")
s.add_runtime_dependency("pathutil", "~> 0.9") s.add_runtime_dependency("pathutil", "~> 0.9")

View File

@ -71,6 +71,7 @@ module Jekyll
"smart_quotes" => "lsquo,rsquo,ldquo,rdquo", "smart_quotes" => "lsquo,rsquo,ldquo,rdquo",
"input" => "GFM", "input" => "GFM",
"hard_wrap" => false, "hard_wrap" => false,
"guess_lang" => true,
"footnote_nr" => 1, "footnote_nr" => 1,
"show_warnings" => false, "show_warnings" => false,
}, },

View File

@ -18,6 +18,7 @@ module Jekyll
@config = config["kramdown"] || {} @config = config["kramdown"] || {}
@highlighter = nil @highlighter = nil
setup setup
load_dependencies
end end
# Setup and normalize the configuration: # Setup and normalize the configuration:
@ -30,6 +31,7 @@ module Jekyll
def setup def setup
@config["syntax_highlighter"] ||= highlighter @config["syntax_highlighter"] ||= highlighter
@config["syntax_highlighter_opts"] ||= {} @config["syntax_highlighter_opts"] ||= {}
@config["syntax_highlighter_opts"]["guess_lang"] = @config["guess_lang"]
@config["coderay"] ||= {} # XXX: Legacy. @config["coderay"] ||= {} # XXX: Legacy.
modernize_coderay_config modernize_coderay_config
make_accessible make_accessible
@ -48,6 +50,20 @@ module Jekyll
private private
def load_dependencies
require "kramdown-parser-gfm" if @config["input"] == "GFM"
if highlighter == "coderay"
Jekyll::External.require_with_graceful_fail("kramdown-syntax-coderay")
end
# `mathjax` emgine is bundled within kramdown-2.x and will be handled by
# kramdown itself.
if (math_engine = @config["math_engine"]) && math_engine != "mathjax"
Jekyll::External.require_with_graceful_fail("kramdown-math-#{math_engine}")
end
end
def make_accessible(hash = @config) def make_accessible(hash = @config)
hash.keys.each do |key| hash.keys.each do |key|
hash[key.to_sym] = hash[key] hash[key.to_sym] = hash[key]