jekyll 4.2.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +474 -350
  3. data/LICENSE +21 -21
  4. data/README.markdown +83 -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 +186 -190
  12. data/lib/jekyll/cleaner.rb +111 -111
  13. data/lib/jekyll/collection.rb +310 -309
  14. data/lib/jekyll/command.rb +105 -105
  15. data/lib/jekyll/commands/build.rb +82 -93
  16. data/lib/jekyll/commands/clean.rb +44 -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 +168 -169
  20. data/lib/jekyll/commands/new_theme.rb +39 -40
  21. data/lib/jekyll/commands/serve/live_reload_reactor.rb +119 -122
  22. data/lib/jekyll/commands/serve/livereload_assets/livereload.js +1183 -1183
  23. data/lib/jekyll/commands/serve/mime_types_charset.json +71 -0
  24. data/lib/jekyll/commands/serve/servlet.rb +206 -202
  25. data/lib/jekyll/commands/serve/websockets.rb +81 -81
  26. data/lib/jekyll/commands/serve.rb +367 -362
  27. data/lib/jekyll/configuration.rb +313 -313
  28. data/lib/jekyll/converter.rb +54 -54
  29. data/lib/jekyll/converters/identity.rb +41 -41
  30. data/lib/jekyll/converters/markdown/kramdown_parser.rb +197 -199
  31. data/lib/jekyll/converters/markdown.rb +113 -113
  32. data/lib/jekyll/converters/smartypants.rb +70 -70
  33. data/lib/jekyll/convertible.rb +257 -257
  34. data/lib/jekyll/data_entry.rb +83 -0
  35. data/lib/jekyll/data_hash.rb +61 -0
  36. data/lib/jekyll/deprecator.rb +50 -50
  37. data/lib/jekyll/document.rb +543 -544
  38. data/lib/jekyll/drops/collection_drop.rb +20 -20
  39. data/lib/jekyll/drops/document_drop.rb +71 -70
  40. data/lib/jekyll/drops/drop.rb +293 -293
  41. data/lib/jekyll/drops/excerpt_drop.rb +23 -19
  42. data/lib/jekyll/drops/jekyll_drop.rb +32 -32
  43. data/lib/jekyll/drops/site_drop.rb +71 -66
  44. data/lib/jekyll/drops/static_file_drop.rb +14 -14
  45. data/lib/jekyll/drops/theme_drop.rb +36 -0
  46. data/lib/jekyll/drops/unified_payload_drop.rb +30 -26
  47. data/lib/jekyll/drops/url_drop.rb +140 -140
  48. data/lib/jekyll/entry_filter.rb +117 -121
  49. data/lib/jekyll/errors.rb +20 -20
  50. data/lib/jekyll/excerpt.rb +200 -201
  51. data/lib/jekyll/external.rb +75 -79
  52. data/lib/jekyll/filters/date_filters.rb +110 -110
  53. data/lib/jekyll/filters/grouping_filters.rb +64 -64
  54. data/lib/jekyll/filters/url_filters.rb +98 -98
  55. data/lib/jekyll/filters.rb +532 -535
  56. data/lib/jekyll/frontmatter_defaults.rb +238 -240
  57. data/lib/jekyll/generator.rb +5 -5
  58. data/lib/jekyll/hooks.rb +107 -107
  59. data/lib/jekyll/inclusion.rb +32 -32
  60. data/lib/jekyll/layout.rb +55 -67
  61. data/lib/jekyll/liquid_extensions.rb +22 -22
  62. data/lib/jekyll/liquid_renderer/file.rb +77 -77
  63. data/lib/jekyll/liquid_renderer/table.rb +55 -55
  64. data/lib/jekyll/liquid_renderer.rb +80 -80
  65. data/lib/jekyll/log_adapter.rb +151 -151
  66. data/lib/jekyll/mime.types +939 -866
  67. data/lib/jekyll/page.rb +215 -217
  68. data/lib/jekyll/page_excerpt.rb +25 -25
  69. data/lib/jekyll/page_without_a_file.rb +14 -14
  70. data/lib/jekyll/path_manager.rb +74 -74
  71. data/lib/jekyll/plugin.rb +92 -92
  72. data/lib/jekyll/plugin_manager.rb +123 -115
  73. data/lib/jekyll/profiler.rb +55 -58
  74. data/lib/jekyll/publisher.rb +23 -23
  75. data/lib/jekyll/reader.rb +209 -192
  76. data/lib/jekyll/readers/collection_reader.rb +23 -23
  77. data/lib/jekyll/readers/data_reader.rb +116 -79
  78. data/lib/jekyll/readers/layout_reader.rb +62 -62
  79. data/lib/jekyll/readers/page_reader.rb +25 -25
  80. data/lib/jekyll/readers/post_reader.rb +85 -85
  81. data/lib/jekyll/readers/static_file_reader.rb +25 -25
  82. data/lib/jekyll/readers/theme_assets_reader.rb +52 -52
  83. data/lib/jekyll/regenerator.rb +195 -195
  84. data/lib/jekyll/related_posts.rb +52 -52
  85. data/lib/jekyll/renderer.rb +263 -265
  86. data/lib/jekyll/site.rb +582 -551
  87. data/lib/jekyll/static_file.rb +205 -208
  88. data/lib/jekyll/stevenson.rb +60 -60
  89. data/lib/jekyll/tags/highlight.rb +114 -110
  90. data/lib/jekyll/tags/include.rb +275 -275
  91. data/lib/jekyll/tags/link.rb +42 -42
  92. data/lib/jekyll/tags/post_url.rb +106 -106
  93. data/lib/jekyll/theme.rb +90 -86
  94. data/lib/jekyll/theme_builder.rb +121 -121
  95. data/lib/jekyll/url.rb +167 -167
  96. data/lib/jekyll/utils/ansi.rb +57 -57
  97. data/lib/jekyll/utils/exec.rb +26 -26
  98. data/lib/jekyll/utils/internet.rb +37 -37
  99. data/lib/jekyll/utils/platforms.rb +67 -67
  100. data/lib/jekyll/utils/thread_event.rb +31 -31
  101. data/lib/jekyll/utils/win_tz.rb +46 -75
  102. data/lib/jekyll/utils.rb +378 -367
  103. data/lib/jekyll/version.rb +5 -5
  104. data/lib/jekyll.rb +197 -195
  105. data/lib/site_template/.gitignore +5 -5
  106. data/lib/site_template/404.html +25 -25
  107. data/lib/site_template/_config.yml +55 -55
  108. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +29 -29
  109. data/lib/site_template/about.markdown +18 -18
  110. data/lib/site_template/index.markdown +6 -6
  111. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -74
  112. data/lib/theme_template/Gemfile +4 -4
  113. data/lib/theme_template/LICENSE.txt.erb +21 -21
  114. data/lib/theme_template/README.md.erb +50 -52
  115. data/lib/theme_template/_layouts/default.html +1 -1
  116. data/lib/theme_template/_layouts/page.html +5 -5
  117. data/lib/theme_template/_layouts/post.html +5 -5
  118. data/lib/theme_template/example/_config.yml.erb +1 -1
  119. data/lib/theme_template/example/_post.md +12 -12
  120. data/lib/theme_template/example/index.html +14 -14
  121. data/lib/theme_template/example/style.scss +7 -7
  122. data/lib/theme_template/gitignore.erb +6 -6
  123. data/lib/theme_template/theme.gemspec.erb +16 -16
  124. data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -149
  125. data/rubocop/jekyll/no_p_allowed.rb +23 -23
  126. data/rubocop/jekyll/no_puts_allowed.rb +23 -23
  127. data/rubocop/jekyll.rb +5 -5
  128. metadata +62 -14
@@ -1,110 +1,114 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Tags
5
- class HighlightBlock < Liquid::Block
6
- include Liquid::StandardFilters
7
-
8
- # The regular expression syntax checker. Start with the language specifier.
9
- # Follow that by zero or more space separated options that take one of three
10
- # forms: name, name=value, or name="<quoted list>"
11
- #
12
- # <quoted list> is a space-separated list of numbers
13
- SYNTAX = %r!^([a-zA-Z0-9.+#_-]+)((\s+\w+(=(\w+|"([0-9]+\s)*[0-9]+"))?)*)$!.freeze
14
-
15
- def initialize(tag_name, markup, tokens)
16
- super
17
- if markup.strip =~ SYNTAX
18
- @lang = Regexp.last_match(1).downcase
19
- @highlight_options = parse_options(Regexp.last_match(2))
20
- else
21
- raise SyntaxError, <<~MSG
22
- Syntax Error in tag 'highlight' while parsing the following markup:
23
-
24
- #{markup}
25
-
26
- Valid syntax: highlight <lang> [linenos]
27
- MSG
28
- end
29
- end
30
-
31
- LEADING_OR_TRAILING_LINE_TERMINATORS = %r!\A(\n|\r)+|(\n|\r)+\z!.freeze
32
-
33
- def render(context)
34
- prefix = context["highlighter_prefix"] || ""
35
- suffix = context["highlighter_suffix"] || ""
36
- code = super.to_s.gsub(LEADING_OR_TRAILING_LINE_TERMINATORS, "")
37
-
38
- output =
39
- case context.registers[:site].highlighter
40
- when "rouge"
41
- render_rouge(code)
42
- when "pygments"
43
- render_pygments(code, context)
44
- else
45
- render_codehighlighter(code)
46
- end
47
-
48
- rendered_output = add_code_tag(output)
49
- prefix + rendered_output + suffix
50
- end
51
-
52
- private
53
-
54
- OPTIONS_REGEX = %r!(?:\w="[^"]*"|\w=\w|\w)+!.freeze
55
-
56
- def parse_options(input)
57
- options = {}
58
- return options if input.empty?
59
-
60
- # Split along 3 possible forms -- key="<quoted list>", key=value, or key
61
- input.scan(OPTIONS_REGEX) do |opt|
62
- key, value = opt.split("=")
63
- # If a quoted list, convert to array
64
- if value&.include?('"')
65
- value.delete!('"')
66
- value = value.split
67
- end
68
- options[key.to_sym] = value || true
69
- end
70
-
71
- options[:linenos] = "inline" if options[:linenos] == true
72
- options
73
- end
74
-
75
- def render_pygments(code, _context)
76
- Jekyll.logger.warn "Warning:", "Highlight Tag no longer supports rendering with Pygments."
77
- Jekyll.logger.warn "", "Using the default highlighter, Rouge, instead."
78
- render_rouge(code)
79
- end
80
-
81
- def render_rouge(code)
82
- require "rouge"
83
- formatter = ::Rouge::Formatters::HTMLLegacy.new(
84
- :line_numbers => @highlight_options[:linenos],
85
- :wrap => false,
86
- :css_class => "highlight",
87
- :gutter_class => "gutter",
88
- :code_class => "code"
89
- )
90
- lexer = ::Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
91
- formatter.format(lexer.lex(code))
92
- end
93
-
94
- def render_codehighlighter(code)
95
- h(code).strip
96
- end
97
-
98
- def add_code_tag(code)
99
- code_attributes = [
100
- "class=\"language-#{@lang.to_s.tr("+", "-")}\"",
101
- "data-lang=\"#{@lang}\"",
102
- ].join(" ")
103
- "<figure class=\"highlight\"><pre><code #{code_attributes}>"\
104
- "#{code.chomp}</code></pre></figure>"
105
- end
106
- end
107
- end
108
- end
109
-
110
- Liquid::Template.register_tag("highlight", Jekyll::Tags::HighlightBlock)
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Tags
5
+ class HighlightBlock < Liquid::Block
6
+ include Liquid::StandardFilters
7
+
8
+ # The regular expression syntax checker. Start with the language specifier.
9
+ # Follow that by zero or more space separated options that take one of three
10
+ # forms: name, name=value, or name="<quoted list>"
11
+ #
12
+ # <quoted list> is a space-separated list of numbers
13
+ SYNTAX = %r!^([a-zA-Z0-9.+#_-]+)((\s+\w+(=(\w+|"([0-9]+\s)*[0-9]+"))?)*)$!.freeze
14
+
15
+ def initialize(tag_name, markup, tokens)
16
+ super
17
+ if markup.strip =~ SYNTAX
18
+ @lang = Regexp.last_match(1).downcase
19
+ @highlight_options = parse_options(Regexp.last_match(2))
20
+ else
21
+ raise SyntaxError, <<~MSG
22
+ Syntax Error in tag 'highlight' while parsing the following markup:
23
+
24
+ #{markup}
25
+
26
+ Valid syntax: highlight <lang> [linenos]
27
+ MSG
28
+ end
29
+ end
30
+
31
+ LEADING_OR_TRAILING_LINE_TERMINATORS = %r!\A(\n|\r)+|(\n|\r)+\z!.freeze
32
+
33
+ def render(context)
34
+ prefix = context["highlighter_prefix"] || ""
35
+ suffix = context["highlighter_suffix"] || ""
36
+ code = super.to_s.gsub(LEADING_OR_TRAILING_LINE_TERMINATORS, "")
37
+
38
+ output =
39
+ case context.registers[:site].highlighter
40
+ when "rouge"
41
+ render_rouge(code)
42
+ when "pygments"
43
+ render_pygments(code, context)
44
+ else
45
+ render_codehighlighter(code)
46
+ end
47
+
48
+ rendered_output = add_code_tag(output)
49
+ prefix + rendered_output + suffix
50
+ end
51
+
52
+ private
53
+
54
+ OPTIONS_REGEX = %r!(?:\w="[^"]*"|\w=\w|\w)+!.freeze
55
+
56
+ def parse_options(input)
57
+ options = {}
58
+ return options if input.empty?
59
+
60
+ # Split along 3 possible forms -- key="<quoted list>", key=value, or key
61
+ input.scan(OPTIONS_REGEX) do |opt|
62
+ key, value = opt.split("=")
63
+ # If a quoted list, convert to array
64
+ if value&.include?('"')
65
+ value.delete!('"')
66
+ value = value.split
67
+ end
68
+ options[key.to_sym] = value || true
69
+ end
70
+
71
+ options[:linenos] = "inline" if options[:linenos] == true
72
+ options
73
+ end
74
+
75
+ def render_pygments(code, _context)
76
+ Jekyll.logger.warn "Warning:", "Highlight Tag no longer supports rendering with Pygments."
77
+ Jekyll.logger.warn "", "Using the default highlighter, Rouge, instead."
78
+ render_rouge(code)
79
+ end
80
+
81
+ def render_rouge(code)
82
+ require "rouge"
83
+ formatter = ::Rouge::Formatters::HTML.new
84
+ if @highlight_options[:linenos]
85
+ formatter = ::Rouge::Formatters::HTMLTable.new(
86
+ formatter,
87
+ {
88
+ :css_class => "highlight",
89
+ :gutter_class => "gutter",
90
+ :code_class => "code",
91
+ }
92
+ )
93
+ end
94
+ lexer = ::Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
95
+ formatter.format(lexer.lex(code))
96
+ end
97
+
98
+ def render_codehighlighter(code)
99
+ h(code).strip
100
+ end
101
+
102
+ def add_code_tag(code)
103
+ code_attributes = [
104
+ "class=\"language-#{@lang.to_s.tr("+", "-")}\"",
105
+ "data-lang=\"#{@lang}\"",
106
+ ].join(" ")
107
+ "<figure class=\"highlight\"><pre><code #{code_attributes}>" \
108
+ "#{code.chomp}</code></pre></figure>"
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ Liquid::Template.register_tag("highlight", Jekyll::Tags::HighlightBlock)