jekyll 4.2.0 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +350 -347
  3. data/LICENSE +21 -21
  4. data/README.markdown +86 -86
  5. data/exe/jekyll +57 -57
  6. data/lib/blank_template/_config.yml +3 -3
  7. data/lib/blank_template/_layouts/default.html +12 -12
  8. data/lib/blank_template/_sass/main.scss +9 -9
  9. data/lib/blank_template/assets/css/main.scss +4 -4
  10. data/lib/blank_template/index.md +8 -8
  11. data/lib/jekyll/cache.rb +190 -190
  12. data/lib/jekyll/cleaner.rb +111 -111
  13. data/lib/jekyll/collection.rb +309 -309
  14. data/lib/jekyll/command.rb +105 -105
  15. data/lib/jekyll/commands/build.rb +93 -93
  16. data/lib/jekyll/commands/clean.rb +45 -45
  17. data/lib/jekyll/commands/doctor.rb +177 -177
  18. data/lib/jekyll/commands/help.rb +34 -34
  19. data/lib/jekyll/commands/new.rb +169 -169
  20. data/lib/jekyll/commands/new_theme.rb +40 -40
  21. data/lib/jekyll/commands/serve/live_reload_reactor.rb +122 -122
  22. data/lib/jekyll/commands/serve/livereload_assets/livereload.js +1183 -1183
  23. data/lib/jekyll/commands/serve/servlet.rb +202 -202
  24. data/lib/jekyll/commands/serve/websockets.rb +81 -81
  25. data/lib/jekyll/commands/serve.rb +362 -365
  26. data/lib/jekyll/configuration.rb +313 -313
  27. data/lib/jekyll/converter.rb +54 -54
  28. data/lib/jekyll/converters/identity.rb +41 -41
  29. data/lib/jekyll/converters/markdown/kramdown_parser.rb +199 -199
  30. data/lib/jekyll/converters/markdown.rb +113 -113
  31. data/lib/jekyll/converters/smartypants.rb +70 -70
  32. data/lib/jekyll/convertible.rb +257 -260
  33. data/lib/jekyll/deprecator.rb +50 -50
  34. data/lib/jekyll/document.rb +544 -544
  35. data/lib/jekyll/drops/collection_drop.rb +20 -20
  36. data/lib/jekyll/drops/document_drop.rb +70 -70
  37. data/lib/jekyll/drops/drop.rb +293 -293
  38. data/lib/jekyll/drops/excerpt_drop.rb +19 -19
  39. data/lib/jekyll/drops/jekyll_drop.rb +32 -32
  40. data/lib/jekyll/drops/site_drop.rb +66 -66
  41. data/lib/jekyll/drops/static_file_drop.rb +14 -14
  42. data/lib/jekyll/drops/unified_payload_drop.rb +26 -26
  43. data/lib/jekyll/drops/url_drop.rb +140 -140
  44. data/lib/jekyll/entry_filter.rb +121 -121
  45. data/lib/jekyll/errors.rb +20 -20
  46. data/lib/jekyll/excerpt.rb +201 -201
  47. data/lib/jekyll/external.rb +79 -79
  48. data/lib/jekyll/filters/date_filters.rb +110 -110
  49. data/lib/jekyll/filters/grouping_filters.rb +64 -64
  50. data/lib/jekyll/filters/url_filters.rb +98 -98
  51. data/lib/jekyll/filters.rb +535 -535
  52. data/lib/jekyll/frontmatter_defaults.rb +240 -240
  53. data/lib/jekyll/generator.rb +5 -5
  54. data/lib/jekyll/hooks.rb +107 -107
  55. data/lib/jekyll/inclusion.rb +32 -32
  56. data/lib/jekyll/layout.rb +67 -67
  57. data/lib/jekyll/liquid_extensions.rb +22 -22
  58. data/lib/jekyll/liquid_renderer/file.rb +77 -77
  59. data/lib/jekyll/liquid_renderer/table.rb +55 -55
  60. data/lib/jekyll/liquid_renderer.rb +80 -80
  61. data/lib/jekyll/log_adapter.rb +151 -151
  62. data/lib/jekyll/mime.types +866 -866
  63. data/lib/jekyll/page.rb +217 -217
  64. data/lib/jekyll/page_excerpt.rb +25 -25
  65. data/lib/jekyll/page_without_a_file.rb +14 -14
  66. data/lib/jekyll/path_manager.rb +74 -74
  67. data/lib/jekyll/plugin.rb +92 -92
  68. data/lib/jekyll/plugin_manager.rb +115 -115
  69. data/lib/jekyll/profiler.rb +58 -58
  70. data/lib/jekyll/publisher.rb +23 -23
  71. data/lib/jekyll/reader.rb +192 -192
  72. data/lib/jekyll/readers/collection_reader.rb +23 -23
  73. data/lib/jekyll/readers/data_reader.rb +79 -79
  74. data/lib/jekyll/readers/layout_reader.rb +62 -62
  75. data/lib/jekyll/readers/page_reader.rb +25 -25
  76. data/lib/jekyll/readers/post_reader.rb +85 -85
  77. data/lib/jekyll/readers/static_file_reader.rb +25 -25
  78. data/lib/jekyll/readers/theme_assets_reader.rb +52 -52
  79. data/lib/jekyll/regenerator.rb +195 -195
  80. data/lib/jekyll/related_posts.rb +52 -52
  81. data/lib/jekyll/renderer.rb +265 -265
  82. data/lib/jekyll/site.rb +551 -551
  83. data/lib/jekyll/static_file.rb +208 -208
  84. data/lib/jekyll/stevenson.rb +60 -60
  85. data/lib/jekyll/tags/highlight.rb +110 -110
  86. data/lib/jekyll/tags/include.rb +275 -270
  87. data/lib/jekyll/tags/link.rb +42 -42
  88. data/lib/jekyll/tags/post_url.rb +106 -106
  89. data/lib/jekyll/theme.rb +86 -86
  90. data/lib/jekyll/theme_builder.rb +121 -121
  91. data/lib/jekyll/url.rb +167 -167
  92. data/lib/jekyll/utils/ansi.rb +57 -57
  93. data/lib/jekyll/utils/exec.rb +26 -26
  94. data/lib/jekyll/utils/internet.rb +37 -37
  95. data/lib/jekyll/utils/platforms.rb +67 -67
  96. data/lib/jekyll/utils/thread_event.rb +31 -31
  97. data/lib/jekyll/utils/win_tz.rb +75 -75
  98. data/lib/jekyll/utils.rb +367 -367
  99. data/lib/jekyll/version.rb +5 -5
  100. data/lib/jekyll.rb +195 -195
  101. data/lib/site_template/.gitignore +5 -5
  102. data/lib/site_template/404.html +25 -25
  103. data/lib/site_template/_config.yml +55 -55
  104. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +29 -29
  105. data/lib/site_template/about.markdown +18 -18
  106. data/lib/site_template/index.markdown +6 -6
  107. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -74
  108. data/lib/theme_template/Gemfile +4 -4
  109. data/lib/theme_template/LICENSE.txt.erb +21 -21
  110. data/lib/theme_template/README.md.erb +52 -52
  111. data/lib/theme_template/_layouts/default.html +1 -1
  112. data/lib/theme_template/_layouts/page.html +5 -5
  113. data/lib/theme_template/_layouts/post.html +5 -5
  114. data/lib/theme_template/example/_config.yml.erb +1 -1
  115. data/lib/theme_template/example/_post.md +12 -12
  116. data/lib/theme_template/example/index.html +14 -14
  117. data/lib/theme_template/example/style.scss +7 -7
  118. data/lib/theme_template/gitignore.erb +6 -6
  119. data/lib/theme_template/theme.gemspec.erb +16 -16
  120. data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -149
  121. data/rubocop/jekyll/no_p_allowed.rb +23 -23
  122. data/rubocop/jekyll/no_puts_allowed.rb +23 -23
  123. data/rubocop/jekyll.rb +5 -5
  124. metadata +3 -3
@@ -1,54 +1,54 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- class Converter < Plugin
5
- # Public: Get or set the highlighter prefix. When an argument is specified,
6
- # the prefix will be set. If no argument is specified, the current prefix
7
- # will be returned.
8
- #
9
- # highlighter_prefix - The String prefix (default: nil).
10
- #
11
- # Returns the String prefix.
12
- def self.highlighter_prefix(highlighter_prefix = nil)
13
- unless defined?(@highlighter_prefix) && highlighter_prefix.nil?
14
- @highlighter_prefix = highlighter_prefix
15
- end
16
- @highlighter_prefix
17
- end
18
-
19
- # Public: Get or set the highlighter suffix. When an argument is specified,
20
- # the suffix will be set. If no argument is specified, the current suffix
21
- # will be returned.
22
- #
23
- # highlighter_suffix - The String suffix (default: nil).
24
- #
25
- # Returns the String suffix.
26
- def self.highlighter_suffix(highlighter_suffix = nil)
27
- unless defined?(@highlighter_suffix) && highlighter_suffix.nil?
28
- @highlighter_suffix = highlighter_suffix
29
- end
30
- @highlighter_suffix
31
- end
32
-
33
- # Initialize the converter.
34
- #
35
- # Returns an initialized Converter.
36
- def initialize(config = {})
37
- @config = config
38
- end
39
-
40
- # Get the highlighter prefix.
41
- #
42
- # Returns the String prefix.
43
- def highlighter_prefix
44
- self.class.highlighter_prefix
45
- end
46
-
47
- # Get the highlighter suffix.
48
- #
49
- # Returns the String suffix.
50
- def highlighter_suffix
51
- self.class.highlighter_suffix
52
- end
53
- end
54
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Converter < Plugin
5
+ # Public: Get or set the highlighter prefix. When an argument is specified,
6
+ # the prefix will be set. If no argument is specified, the current prefix
7
+ # will be returned.
8
+ #
9
+ # highlighter_prefix - The String prefix (default: nil).
10
+ #
11
+ # Returns the String prefix.
12
+ def self.highlighter_prefix(highlighter_prefix = nil)
13
+ unless defined?(@highlighter_prefix) && highlighter_prefix.nil?
14
+ @highlighter_prefix = highlighter_prefix
15
+ end
16
+ @highlighter_prefix
17
+ end
18
+
19
+ # Public: Get or set the highlighter suffix. When an argument is specified,
20
+ # the suffix will be set. If no argument is specified, the current suffix
21
+ # will be returned.
22
+ #
23
+ # highlighter_suffix - The String suffix (default: nil).
24
+ #
25
+ # Returns the String suffix.
26
+ def self.highlighter_suffix(highlighter_suffix = nil)
27
+ unless defined?(@highlighter_suffix) && highlighter_suffix.nil?
28
+ @highlighter_suffix = highlighter_suffix
29
+ end
30
+ @highlighter_suffix
31
+ end
32
+
33
+ # Initialize the converter.
34
+ #
35
+ # Returns an initialized Converter.
36
+ def initialize(config = {})
37
+ @config = config
38
+ end
39
+
40
+ # Get the highlighter prefix.
41
+ #
42
+ # Returns the String prefix.
43
+ def highlighter_prefix
44
+ self.class.highlighter_prefix
45
+ end
46
+
47
+ # Get the highlighter suffix.
48
+ #
49
+ # Returns the String suffix.
50
+ def highlighter_suffix
51
+ self.class.highlighter_suffix
52
+ end
53
+ end
54
+ end
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Converters
5
- # Identity converter. Returns same content as given.
6
- # For more info on converters see https://jekyllrb.com/docs/plugins/converters/
7
- class Identity < Converter
8
- safe true
9
-
10
- priority :lowest
11
-
12
- # Public: Does the given extension match this converter's list of acceptable extensions?
13
- # Takes one argument: the file's extension (including the dot).
14
- #
15
- # _ext - The String extension to check (not relevant here)
16
- #
17
- # Returns true since it always matches.
18
- def matches(_ext)
19
- true
20
- end
21
-
22
- # Public: The extension to be given to the output file (including the dot).
23
- #
24
- # ext - The String extension or original file.
25
- #
26
- # Returns The String output file extension.
27
- def output_ext(ext)
28
- ext
29
- end
30
-
31
- # Logic to do the content conversion.
32
- #
33
- # content - String content of file (without front matter).
34
- #
35
- # Returns a String of the converted content.
36
- def convert(content)
37
- content
38
- end
39
- end
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Converters
5
+ # Identity converter. Returns same content as given.
6
+ # For more info on converters see https://jekyllrb.com/docs/plugins/converters/
7
+ class Identity < Converter
8
+ safe true
9
+
10
+ priority :lowest
11
+
12
+ # Public: Does the given extension match this converter's list of acceptable extensions?
13
+ # Takes one argument: the file's extension (including the dot).
14
+ #
15
+ # _ext - The String extension to check (not relevant here)
16
+ #
17
+ # Returns true since it always matches.
18
+ def matches(_ext)
19
+ true
20
+ end
21
+
22
+ # Public: The extension to be given to the output file (including the dot).
23
+ #
24
+ # ext - The String extension or original file.
25
+ #
26
+ # Returns The String output file extension.
27
+ def output_ext(ext)
28
+ ext
29
+ end
30
+
31
+ # Logic to do the content conversion.
32
+ #
33
+ # content - String content of file (without front matter).
34
+ #
35
+ # Returns a String of the converted content.
36
+ def convert(content)
37
+ content
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,199 +1,199 @@
1
- # Frozen-string-literal: true
2
-
3
- module Kramdown
4
- # A Kramdown::Document subclass meant to optimize memory usage from initializing
5
- # a kramdown document for parsing.
6
- #
7
- # The optimization is by using the same options Hash (and its derivatives) for
8
- # converting all Markdown documents in a Jekyll site.
9
- class JekyllDocument < Document
10
- class << self
11
- attr_reader :options, :parser
12
-
13
- # The implementation is basically the core logic in +Kramdown::Document#initialize+
14
- #
15
- # rubocop:disable Naming/MemoizedInstanceVariableName
16
- def setup(options)
17
- @cache ||= {}
18
-
19
- # reset variables on a subsequent set up with a different options Hash
20
- unless @cache[:id] == options.hash
21
- @options = @parser = nil
22
- @cache[:id] = options.hash
23
- end
24
-
25
- @options ||= Options.merge(options).freeze
26
- @parser ||= begin
27
- parser_name = (@options[:input] || "kramdown").to_s
28
- parser_name = parser_name[0..0].upcase + parser_name[1..-1]
29
- try_require("parser", parser_name)
30
-
31
- if Parser.const_defined?(parser_name)
32
- Parser.const_get(parser_name)
33
- else
34
- raise Kramdown::Error, "kramdown has no parser to handle the specified " \
35
- "input format: #{@options[:input]}"
36
- end
37
- end
38
- end
39
- # rubocop:enable Naming/MemoizedInstanceVariableName
40
-
41
- private
42
-
43
- def try_require(type, name)
44
- require "kramdown/#{type}/#{Utils.snake_case(name)}"
45
- rescue LoadError
46
- false
47
- end
48
- end
49
-
50
- def initialize(source, options = {})
51
- JekyllDocument.setup(options)
52
-
53
- @options = JekyllDocument.options
54
- @root, @warnings = JekyllDocument.parser.parse(source, @options)
55
- end
56
-
57
- # Use Kramdown::Converter::Html class to convert this document into HTML.
58
- #
59
- # The implementation is basically an optimized version of core logic in
60
- # +Kramdown::Document#method_missing+ from kramdown-2.1.0.
61
- def to_html
62
- output, warnings = Kramdown::Converter::Html.convert(@root, @options)
63
- @warnings.concat(warnings)
64
- output
65
- end
66
- end
67
- end
68
-
69
- #
70
-
71
- module Jekyll
72
- module Converters
73
- class Markdown
74
- class KramdownParser
75
- CODERAY_DEFAULTS = {
76
- "css" => "style",
77
- "bold_every" => 10,
78
- "line_numbers" => "inline",
79
- "line_number_start" => 1,
80
- "tab_width" => 4,
81
- "wrap" => "div",
82
- }.freeze
83
-
84
- def initialize(config)
85
- @main_fallback_highlighter = config["highlighter"] || "rouge"
86
- @config = config["kramdown"] || {}
87
- @highlighter = nil
88
- setup
89
- load_dependencies
90
- end
91
-
92
- # Setup and normalize the configuration:
93
- # * Create Kramdown if it doesn't exist.
94
- # * Set syntax_highlighter, detecting enable_coderay and merging
95
- # highlighter if none.
96
- # * Merge kramdown[coderay] into syntax_highlighter_opts stripping coderay_.
97
- # * Make sure `syntax_highlighter_opts` exists.
98
-
99
- def setup
100
- @config["syntax_highlighter"] ||= highlighter
101
- @config["syntax_highlighter_opts"] ||= {}
102
- @config["syntax_highlighter_opts"]["default_lang"] ||= "plaintext"
103
- @config["syntax_highlighter_opts"]["guess_lang"] = @config["guess_lang"]
104
- @config["coderay"] ||= {} # XXX: Legacy.
105
- modernize_coderay_config
106
- end
107
-
108
- def convert(content)
109
- document = Kramdown::JekyllDocument.new(content, @config)
110
- html_output = document.to_html
111
- if @config["show_warnings"]
112
- document.warnings.each do |warning|
113
- Jekyll.logger.warn "Kramdown warning:", warning
114
- end
115
- end
116
- html_output
117
- end
118
-
119
- private
120
-
121
- def load_dependencies
122
- require "kramdown-parser-gfm" if @config["input"] == "GFM"
123
-
124
- if highlighter == "coderay"
125
- Jekyll::External.require_with_graceful_fail("kramdown-syntax-coderay")
126
- end
127
-
128
- # `mathjax` emgine is bundled within kramdown-2.x and will be handled by
129
- # kramdown itself.
130
- if (math_engine = @config["math_engine"]) && math_engine != "mathjax"
131
- Jekyll::External.require_with_graceful_fail("kramdown-math-#{math_engine}")
132
- end
133
- end
134
-
135
- # config[kramdown][syntax_higlighter] >
136
- # config[kramdown][enable_coderay] >
137
- # config[highlighter]
138
- # Where `enable_coderay` is now deprecated because Kramdown
139
- # supports Rouge now too.
140
- def highlighter
141
- return @highlighter if @highlighter
142
-
143
- if @config["syntax_highlighter"]
144
- return @highlighter = @config[
145
- "syntax_highlighter"
146
- ]
147
- end
148
-
149
- @highlighter = begin
150
- if @config.key?("enable_coderay") && @config["enable_coderay"]
151
- Jekyll::Deprecator.deprecation_message(
152
- "You are using 'enable_coderay', " \
153
- "use syntax_highlighter: coderay in your configuration file."
154
- )
155
-
156
- "coderay"
157
- else
158
- @main_fallback_highlighter
159
- end
160
- end
161
- end
162
-
163
- def strip_coderay_prefix(hash)
164
- hash.each_with_object({}) do |(key, val), hsh|
165
- cleaned_key = key.to_s.gsub(%r!\Acoderay_!, "")
166
-
167
- if key != cleaned_key
168
- Jekyll::Deprecator.deprecation_message(
169
- "You are using '#{key}'. Normalizing to #{cleaned_key}."
170
- )
171
- end
172
-
173
- hsh[cleaned_key] = val
174
- end
175
- end
176
-
177
- # If our highlighter is CodeRay we go in to merge the CodeRay defaults
178
- # with your "coderay" key if it's there, deprecating it in the
179
- # process of you using it.
180
- def modernize_coderay_config
181
- unless @config["coderay"].empty?
182
- Jekyll::Deprecator.deprecation_message(
183
- "You are using 'kramdown.coderay' in your configuration, " \
184
- "please use 'syntax_highlighter_opts' instead."
185
- )
186
-
187
- @config["syntax_highlighter_opts"] = begin
188
- strip_coderay_prefix(
189
- @config["syntax_highlighter_opts"] \
190
- .merge(CODERAY_DEFAULTS) \
191
- .merge(@config["coderay"])
192
- )
193
- end
194
- end
195
- end
196
- end
197
- end
198
- end
199
- end
1
+ # Frozen-string-literal: true
2
+
3
+ module Kramdown
4
+ # A Kramdown::Document subclass meant to optimize memory usage from initializing
5
+ # a kramdown document for parsing.
6
+ #
7
+ # The optimization is by using the same options Hash (and its derivatives) for
8
+ # converting all Markdown documents in a Jekyll site.
9
+ class JekyllDocument < Document
10
+ class << self
11
+ attr_reader :options, :parser
12
+
13
+ # The implementation is basically the core logic in +Kramdown::Document#initialize+
14
+ #
15
+ # rubocop:disable Naming/MemoizedInstanceVariableName
16
+ def setup(options)
17
+ @cache ||= {}
18
+
19
+ # reset variables on a subsequent set up with a different options Hash
20
+ unless @cache[:id] == options.hash
21
+ @options = @parser = nil
22
+ @cache[:id] = options.hash
23
+ end
24
+
25
+ @options ||= Options.merge(options).freeze
26
+ @parser ||= begin
27
+ parser_name = (@options[:input] || "kramdown").to_s
28
+ parser_name = parser_name[0..0].upcase + parser_name[1..-1]
29
+ try_require("parser", parser_name)
30
+
31
+ if Parser.const_defined?(parser_name)
32
+ Parser.const_get(parser_name)
33
+ else
34
+ raise Kramdown::Error, "kramdown has no parser to handle the specified " \
35
+ "input format: #{@options[:input]}"
36
+ end
37
+ end
38
+ end
39
+ # rubocop:enable Naming/MemoizedInstanceVariableName
40
+
41
+ private
42
+
43
+ def try_require(type, name)
44
+ require "kramdown/#{type}/#{Utils.snake_case(name)}"
45
+ rescue LoadError
46
+ false
47
+ end
48
+ end
49
+
50
+ def initialize(source, options = {})
51
+ JekyllDocument.setup(options)
52
+
53
+ @options = JekyllDocument.options
54
+ @root, @warnings = JekyllDocument.parser.parse(source, @options)
55
+ end
56
+
57
+ # Use Kramdown::Converter::Html class to convert this document into HTML.
58
+ #
59
+ # The implementation is basically an optimized version of core logic in
60
+ # +Kramdown::Document#method_missing+ from kramdown-2.1.0.
61
+ def to_html
62
+ output, warnings = Kramdown::Converter::Html.convert(@root, @options)
63
+ @warnings.concat(warnings)
64
+ output
65
+ end
66
+ end
67
+ end
68
+
69
+ #
70
+
71
+ module Jekyll
72
+ module Converters
73
+ class Markdown
74
+ class KramdownParser
75
+ CODERAY_DEFAULTS = {
76
+ "css" => "style",
77
+ "bold_every" => 10,
78
+ "line_numbers" => "inline",
79
+ "line_number_start" => 1,
80
+ "tab_width" => 4,
81
+ "wrap" => "div",
82
+ }.freeze
83
+
84
+ def initialize(config)
85
+ @main_fallback_highlighter = config["highlighter"] || "rouge"
86
+ @config = config["kramdown"] || {}
87
+ @highlighter = nil
88
+ setup
89
+ load_dependencies
90
+ end
91
+
92
+ # Setup and normalize the configuration:
93
+ # * Create Kramdown if it doesn't exist.
94
+ # * Set syntax_highlighter, detecting enable_coderay and merging
95
+ # highlighter if none.
96
+ # * Merge kramdown[coderay] into syntax_highlighter_opts stripping coderay_.
97
+ # * Make sure `syntax_highlighter_opts` exists.
98
+
99
+ def setup
100
+ @config["syntax_highlighter"] ||= highlighter
101
+ @config["syntax_highlighter_opts"] ||= {}
102
+ @config["syntax_highlighter_opts"]["default_lang"] ||= "plaintext"
103
+ @config["syntax_highlighter_opts"]["guess_lang"] = @config["guess_lang"]
104
+ @config["coderay"] ||= {} # XXX: Legacy.
105
+ modernize_coderay_config
106
+ end
107
+
108
+ def convert(content)
109
+ document = Kramdown::JekyllDocument.new(content, @config)
110
+ html_output = document.to_html
111
+ if @config["show_warnings"]
112
+ document.warnings.each do |warning|
113
+ Jekyll.logger.warn "Kramdown warning:", warning
114
+ end
115
+ end
116
+ html_output
117
+ end
118
+
119
+ private
120
+
121
+ def load_dependencies
122
+ require "kramdown-parser-gfm" if @config["input"] == "GFM"
123
+
124
+ if highlighter == "coderay"
125
+ Jekyll::External.require_with_graceful_fail("kramdown-syntax-coderay")
126
+ end
127
+
128
+ # `mathjax` emgine is bundled within kramdown-2.x and will be handled by
129
+ # kramdown itself.
130
+ if (math_engine = @config["math_engine"]) && math_engine != "mathjax"
131
+ Jekyll::External.require_with_graceful_fail("kramdown-math-#{math_engine}")
132
+ end
133
+ end
134
+
135
+ # config[kramdown][syntax_higlighter] >
136
+ # config[kramdown][enable_coderay] >
137
+ # config[highlighter]
138
+ # Where `enable_coderay` is now deprecated because Kramdown
139
+ # supports Rouge now too.
140
+ def highlighter
141
+ return @highlighter if @highlighter
142
+
143
+ if @config["syntax_highlighter"]
144
+ return @highlighter = @config[
145
+ "syntax_highlighter"
146
+ ]
147
+ end
148
+
149
+ @highlighter = begin
150
+ if @config.key?("enable_coderay") && @config["enable_coderay"]
151
+ Jekyll::Deprecator.deprecation_message(
152
+ "You are using 'enable_coderay', " \
153
+ "use syntax_highlighter: coderay in your configuration file."
154
+ )
155
+
156
+ "coderay"
157
+ else
158
+ @main_fallback_highlighter
159
+ end
160
+ end
161
+ end
162
+
163
+ def strip_coderay_prefix(hash)
164
+ hash.each_with_object({}) do |(key, val), hsh|
165
+ cleaned_key = key.to_s.gsub(%r!\Acoderay_!, "")
166
+
167
+ if key != cleaned_key
168
+ Jekyll::Deprecator.deprecation_message(
169
+ "You are using '#{key}'. Normalizing to #{cleaned_key}."
170
+ )
171
+ end
172
+
173
+ hsh[cleaned_key] = val
174
+ end
175
+ end
176
+
177
+ # If our highlighter is CodeRay we go in to merge the CodeRay defaults
178
+ # with your "coderay" key if it's there, deprecating it in the
179
+ # process of you using it.
180
+ def modernize_coderay_config
181
+ unless @config["coderay"].empty?
182
+ Jekyll::Deprecator.deprecation_message(
183
+ "You are using 'kramdown.coderay' in your configuration, " \
184
+ "please use 'syntax_highlighter_opts' instead."
185
+ )
186
+
187
+ @config["syntax_highlighter_opts"] = begin
188
+ strip_coderay_prefix(
189
+ @config["syntax_highlighter_opts"] \
190
+ .merge(CODERAY_DEFAULTS) \
191
+ .merge(@config["coderay"])
192
+ )
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end