jekyll-slides 0.1.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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +25 -0
  3. data/LICENSE.txt +203 -0
  4. data/README.md +180 -0
  5. data/_includes/slides/controls.html +28 -0
  6. data/_includes/slides/overview.html +1 -0
  7. data/_includes/slides/progress.html +3 -0
  8. data/_layouts/presentation.html +36 -0
  9. data/assets/css/presentation.css +2 -0
  10. data/assets/fonts/OFL-atkinson-hyperlegible-mono.txt +93 -0
  11. data/assets/fonts/OFL-atkinson-hyperlegible-next.txt +93 -0
  12. data/assets/fonts/README.md +56 -0
  13. data/assets/fonts/atkinson-hyperlegible-mono-italic.woff2 +0 -0
  14. data/assets/fonts/atkinson-hyperlegible-mono.woff2 +0 -0
  15. data/assets/fonts/atkinson-hyperlegible-next-italic.woff2 +0 -0
  16. data/assets/fonts/atkinson-hyperlegible-next.woff2 +0 -0
  17. data/assets/js/presentation.js +370 -0
  18. data/doc/CHANGELOG.md +25 -0
  19. data/doc/Jekyll/Slides/Assets/SiteAssetFile.md +10 -0
  20. data/doc/Jekyll/Slides/Assets.md +12 -0
  21. data/doc/Jekyll/Slides/ComponentRenderer/RenderedDocument.md +15 -0
  22. data/doc/Jekyll/Slides/ComponentRenderer.md +33 -0
  23. data/doc/Jekyll/Slides/JekyllIntegration.md +28 -0
  24. data/doc/Jekyll/Slides/Layout.md +10 -0
  25. data/doc/Jekyll/Slides/Presentation.md +19 -0
  26. data/doc/Jekyll/Slides/PresentationParser.md +17 -0
  27. data/doc/Jekyll/Slides/RangeParser.md +21 -0
  28. data/doc/Jekyll/Slides/Renderer.md +10 -0
  29. data/doc/Jekyll/Slides/RougeRenderer.md +16 -0
  30. data/doc/Jekyll/Slides/SlideMetadata.md +43 -0
  31. data/doc/Jekyll/Slides/SlideRenderer.md +13 -0
  32. data/doc/Jekyll/Slides/Support.md +12 -0
  33. data/doc/Jekyll/Slides.md +50 -0
  34. data/doc/Jekyll.md +5 -0
  35. data/doc/README.md +180 -0
  36. data/doc/index.csv +71 -0
  37. data/lib/jekyll/slides/assets.rb +47 -0
  38. data/lib/jekyll/slides/component_renderer.rb +237 -0
  39. data/lib/jekyll/slides/jekyll_integration.rb +126 -0
  40. data/lib/jekyll/slides/layout.rb +20 -0
  41. data/lib/jekyll/slides/presentation.rb +22 -0
  42. data/lib/jekyll/slides/presentation_parser.rb +102 -0
  43. data/lib/jekyll/slides/range_parser.rb +52 -0
  44. data/lib/jekyll/slides/renderer.rb +21 -0
  45. data/lib/jekyll/slides/rouge_renderer.rb +58 -0
  46. data/lib/jekyll/slides/slide_metadata.rb +85 -0
  47. data/lib/jekyll/slides/slide_renderer.rb +93 -0
  48. data/lib/jekyll/slides/support.rb +25 -0
  49. data/lib/jekyll/slides/version.rb +7 -0
  50. data/lib/jekyll/slides.rb +39 -0
  51. data/lib/jekyll-slides.rb +3 -0
  52. data/llm.txt +50 -0
  53. metadata +175 -0
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Slides
5
+ class SlideMetadata
6
+ LAYOUTS = %w[title statement content code code-left code-right split-code code-result].freeze
7
+ BACKGROUNDS = %w[plain gradient grid spotlight].freeze
8
+ KEYS = %w[layout class background].freeze
9
+
10
+ attr_reader :layout, :background, :custom_class, :content, :values
11
+
12
+ def self.parse(content, index: 0, warning: nil, components: nil)
13
+ new(content, index: index, warning: warning).parse(components: components)
14
+ end
15
+
16
+ def initialize(content, index: 0, warning: nil)
17
+ @original_content = content.to_s
18
+ @index = index
19
+ @warning = warning
20
+ @content, @values = extract_comment(@original_content)
21
+ @background = @values["background"] || "plain"
22
+ @custom_class = @values["class"].to_s.strip
23
+ end
24
+
25
+ def parse(components: nil)
26
+ components ||= ComponentRenderer.new(warning: @warning).render_document(@content).components
27
+ @layout = @values["layout"] || inferred_layout(components)
28
+
29
+ unless LAYOUTS.include?(@layout)
30
+ Support.warn(@warning, "Invalid slide layout #{@layout.inspect}; falling back to automatic layout")
31
+ @layout = inferred_layout(components)
32
+ end
33
+ unless BACKGROUNDS.include?(@background)
34
+ Support.warn(@warning, "Invalid slide background #{@background.inspect}; falling back to plain")
35
+ @background = "plain"
36
+ end
37
+ self
38
+ end
39
+
40
+ private
41
+
42
+ def extract_comment(body)
43
+ match = body.match(/\A[ \t]*(<!--(.*?)-->)[ \t]*(?:\r?\n)?/m)
44
+ return [body, {}] unless match
45
+
46
+ values = {}
47
+ lines = match[2].to_s.lines.map(&:strip).reject(&:empty?)
48
+ parsed = lines.map { |line| line.match(/\A(\w[\w-]*)\s*:\s*(.*?)\z/) }
49
+ return [body, {}] unless parsed.all?
50
+ return [body, {}] unless parsed.any? { |match_data| KEYS.include?(match_data[1]) }
51
+
52
+ parsed.each do |match_data|
53
+ key = match_data[1]
54
+ if KEYS.include?(key)
55
+ values[key] = match_data[2].strip
56
+ else
57
+ Support.warn(@warning, "Unknown slide metadata key #{key.inspect}; ignoring")
58
+ end
59
+ end
60
+ [body[match.end(0)..].to_s, values]
61
+ end
62
+
63
+ def inferred_layout(components)
64
+ return "code-result" if components == %i[editor terminal]
65
+
66
+ editors = components.count(:editor)
67
+ terminals = components.count(:terminal)
68
+ return "split-code" if editors > 1 && components.all? { |component| component == :editor }
69
+ return "code" if editors.positive? || terminals.positive?
70
+ return "title" if @index.to_i.zero?
71
+
72
+ statement_content?(@content) ? "statement" : "content"
73
+ end
74
+
75
+ def statement_content?(body)
76
+ chunks = body.strip.split(/\n\s*\n/)
77
+ return false unless (1..2).cover?(chunks.length)
78
+ return false unless chunks.first.match?(/\A\s*\#{1,6}\s+.+\z/m)
79
+ return true if chunks.length == 1
80
+
81
+ chunks.last.lines.none? { |line| line.match?(/\A\s*(?:[#>*-]|```|~~~)/) }
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Slides
5
+ class SlideRenderer
6
+ def initialize(warning: nil, component_renderer: nil, options: {})
7
+ @warning = warning
8
+ @component_renderer = component_renderer || ComponentRenderer.new(warning: warning, options: options)
9
+ end
10
+
11
+ def render(markdown)
12
+ PresentationParser.new(markdown).parse.each_with_index.map do |source, index|
13
+ metadata = SlideMetadata.new(source, index: index, warning: @warning)
14
+ rendered = @component_renderer.render_document(
15
+ metadata.content,
16
+ id_prefix: "slide-#{index + 1}-"
17
+ )
18
+ metadata.parse(components: rendered.components)
19
+ fragments = rendered.fragments
20
+ body = composition(metadata.layout, fragments)
21
+ classes = ["slide", "layout-#{metadata.layout}", "bg-#{metadata.background}"]
22
+ classes.concat(metadata.custom_class.split(/\s+/)) unless metadata.custom_class.empty?
23
+ attrs = %(class="#{Support.escape(classes.join(' '))}" id="slide-#{index + 1}" data-slide="#{index + 1}" aria-label="Slide #{index + 1}")
24
+ %(<section #{attrs}><div class="slide-content">#{body}</div></section>)
25
+ end.join
26
+ end
27
+
28
+ private
29
+
30
+ def composition(layout, fragments)
31
+ prose = fragments.select { |kind, _html, _metadata| kind == :prose }.map { |_kind, html, _metadata| html }.join
32
+ visual = fragments.select { |kind, _html, _metadata| kind == :visual }.map { |_kind, html, _metadata| html }.join
33
+ case layout
34
+ when "split-code"
35
+ split_panes(fragments)
36
+ when "code-result"
37
+ %(<div class="prose">#{prose}</div><div class="stack">#{visual}</div>)
38
+ when "code-left"
39
+ %(<div class="panes"><div class="pane visual">#{visual}</div><div class="pane prose">#{prose}</div></div>)
40
+ when "code-right"
41
+ %(<div class="panes"><div class="pane prose">#{prose}</div><div class="pane visual">#{visual}</div></div>)
42
+ when "code"
43
+ code_layout(prose, visual)
44
+ else
45
+ fragments.map { |_kind, html, _metadata| html }.then { |body| %(<div class="prose">#{body.join}</div>) }
46
+ end
47
+ end
48
+
49
+ def code_layout(prose, visual)
50
+ prose_html = prose.empty? ? "" : %(<div class="prose">#{prose}</div>)
51
+ %(#{prose_html}<div class="visual">#{visual}</div>)
52
+ end
53
+
54
+ def split_panes(fragments)
55
+ visual_index = fragments.index { |kind, _| kind == :visual }
56
+ return %(<div class="prose">#{fragments.map { |_kind, html, _metadata| html }.join}</div>) unless visual_index
57
+
58
+ panes = []
59
+ leading = fragments[0...visual_index]
60
+ h1_intro = leading.length == 1 && leading.first[2][:heading_level] == 1
61
+ global = if h1_intro
62
+ leading.map { |_kind, html, _metadata| html }.join
63
+ elsif leading.length > 1
64
+ leading[0...-1].map { |_kind, html, _metadata| html }.join
65
+ end
66
+ pending = if h1_intro
67
+ +""
68
+ elsif leading.length > 1
69
+ leading.last[1].dup
70
+ else
71
+ leading.map { |_kind, html, _metadata| html }.join
72
+ end
73
+ fragments[visual_index..].each do |kind, html, _metadata|
74
+ if kind == :visual
75
+ panes << %(<div class="pane">#{pending}#{html}</div>)
76
+ pending = +""
77
+ else
78
+ pending << html
79
+ end
80
+ end
81
+ if pending.empty?
82
+ # no trailing prose
83
+ elsif panes.empty?
84
+ panes << %(<div class="pane">#{pending}</div>)
85
+ else
86
+ panes[-1] = panes[-1].sub(%r{</div>\z}, "#{pending}</div>")
87
+ end
88
+ prefix = global && !global.empty? ? %(<div class="prose">#{global}</div>) : ""
89
+ panes.empty? ? prefix : %(#{prefix}<div class="panes">#{panes.join}</div>)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cgi/escape"
4
+
5
+ module Jekyll
6
+ module Slides
7
+ module Support
8
+ module_function
9
+
10
+ def warn(warning, message)
11
+ return unless warning
12
+
13
+ if warning.respond_to?(:call)
14
+ warning.call(message)
15
+ elsif warning.respond_to?(:warn)
16
+ warning.warn(message)
17
+ end
18
+ end
19
+
20
+ def escape(value)
21
+ CGI.escapeHTML(value.to_s)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Slides
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jekyll"
4
+ require "rouge"
5
+
6
+ module Jekyll
7
+ # Markdown presentations for Jekyll, with editor and terminal components.
8
+ #
9
+ # Add +jekyll-slides+ to the site's plugins and choose the +presentation+
10
+ # layout on a Markdown page. Separate slides with +---+ outside fenced code blocks.
11
+ # The plugin supplies layouts, includes, styles, scripts, and offline fonts
12
+ # while preserving the site's theme and local overrides.
13
+ #
14
+ # Configure defaults under +slides:+ in _config.yml, or use front matter on
15
+ # individual decks. Themes are +midnight+, +minimal-light+, +minimal-dark+,
16
+ # and +ruby+. The supported aspect ratio is 16:9; quote this value in YAML.
17
+ #
18
+ # Jekyll runs Liquid before rendering each slide as one Markdown document.
19
+ # Jekyll::Slides::Presentation also renders slide HTML directly when Jekyll integration
20
+ # is not needed; it does not evaluate Liquid or wrap the presentation layout.
21
+ module Slides
22
+ ROOT = File.expand_path("../..", __dir__)
23
+ LAYOUT_NAME = "presentation"
24
+ end
25
+ end
26
+
27
+ require_relative "slides/version"
28
+ require_relative "slides/support"
29
+ require_relative "slides/presentation_parser"
30
+ require_relative "slides/slide_metadata"
31
+ require_relative "slides/range_parser"
32
+ require_relative "slides/rouge_renderer"
33
+ require_relative "slides/component_renderer"
34
+ require_relative "slides/slide_renderer"
35
+ require_relative "slides/presentation"
36
+ require_relative "slides/renderer"
37
+ require_relative "slides/layout"
38
+ require_relative "slides/assets"
39
+ require_relative "slides/jekyll_integration"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "jekyll/slides"
data/llm.txt ADDED
@@ -0,0 +1,50 @@
1
+ # Module Jekyll::Slides <a id="module-Jekyll-Slides"></a>
2
+
3
+ | | |
4
+ | --- | --- |
5
+ | **Defined in** | lib/jekyll/slides.rb, lib/jekyll/slides/assets.rb, lib/jekyll/slides/layout.rb, lib/jekyll/slides/support.rb, lib/jekyll/slides/version.rb, lib/jekyll/slides/renderer.rb, lib/jekyll/slides/presentation.rb, lib/jekyll/slides/range_parser.rb, lib/jekyll/slides/rouge_renderer.rb, lib/jekyll/slides/slide_metadata.rb, lib/jekyll/slides/slide_renderer.rb, lib/jekyll/slides/component_renderer.rb, lib/jekyll/slides/jekyll_integration.rb, lib/jekyll/slides/presentation_parser.rb |
6
+
7
+ Markdown presentations for Jekyll, with editor and terminal components.
8
+
9
+ Add <code>jekyll-slides</code> to the site's plugins and choose the
10
+ `presentation` layout on a Markdown page. Separate slides with
11
+ <code>---</code> outside fenced code blocks. The plugin supplies layouts,
12
+ includes, styles, scripts, and offline fonts while preserving the site's theme
13
+ and local overrides.
14
+
15
+ Configure defaults under <code>slides:</code> in _config.yml, or use front
16
+ matter on individual decks. Themes are `midnight`, <code>minimal-light</code>,
17
+ <code>minimal-dark</code>, and `ruby`. The supported aspect ratio is 16:9;
18
+ quote this value in YAML.
19
+
20
+ Jekyll runs Liquid before rendering each slide as one Markdown document.
21
+ Jekyll::Slides::Presentation also renders slide HTML directly when Jekyll
22
+ integration is not needed; it does not evaluate Liquid or wrap the
23
+ presentation layout.
24
+
25
+ ## Constants
26
+ ### `LAYOUT_NAME` <a id="constant-LAYOUT_NAME"></a> <a id="LAYOUT_NAME-constant"></a>
27
+ Not documented.
28
+
29
+ ### `ROOT` <a id="constant-ROOT"></a> <a id="ROOT-constant"></a>
30
+ Not documented.
31
+
32
+ ### `VERSION` <a id="constant-VERSION"></a> <a id="VERSION-constant"></a>
33
+ Not documented.
34
+
35
+ # Documentation
36
+
37
+ - [Slides/Assets/SiteAssetFile.md](doc/Jekyll/Slides/Assets/SiteAssetFile.md)
38
+ - [Slides/Assets.md](doc/Jekyll/Slides/Assets.md)
39
+ - [Slides/ComponentRenderer/RenderedDocument.md](doc/Jekyll/Slides/ComponentRenderer/RenderedDocument.md)
40
+ - [Slides/ComponentRenderer.md](doc/Jekyll/Slides/ComponentRenderer.md)
41
+ - [Slides/JekyllIntegration.md](doc/Jekyll/Slides/JekyllIntegration.md)
42
+ - [Slides/Layout.md](doc/Jekyll/Slides/Layout.md)
43
+ - [Slides/Presentation.md](doc/Jekyll/Slides/Presentation.md)
44
+ - [Slides/PresentationParser.md](doc/Jekyll/Slides/PresentationParser.md)
45
+ - [Slides/RangeParser.md](doc/Jekyll/Slides/RangeParser.md)
46
+ - [Slides/Renderer.md](doc/Jekyll/Slides/Renderer.md)
47
+ - [Slides/RougeRenderer.md](doc/Jekyll/Slides/RougeRenderer.md)
48
+ - [Slides/SlideMetadata.md](doc/Jekyll/Slides/SlideMetadata.md)
49
+ - [Slides/SlideRenderer.md](doc/Jekyll/Slides/SlideRenderer.md)
50
+ - [Slides/Support.md](doc/Jekyll/Slides/Support.md)
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-slides
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lucian Ghinda
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: jekyll
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '4.3'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '5'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '4.3'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '5'
32
+ - !ruby/object:Gem::Dependency
33
+ name: kramdown
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '2.4'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '3'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '2.4'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '3'
52
+ - !ruby/object:Gem::Dependency
53
+ name: kramdown-parser-gfm
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '1.1'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: '2'
72
+ - !ruby/object:Gem::Dependency
73
+ name: rouge
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '4'
79
+ - - "<"
80
+ - !ruby/object:Gem::Version
81
+ version: '5'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '4'
89
+ - - "<"
90
+ - !ruby/object:Gem::Version
91
+ version: '5'
92
+ description: A Jekyll plugin for turning Markdown into accessible, responsive slide
93
+ presentations with code and terminal components.
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - CHANGELOG.md
99
+ - LICENSE.txt
100
+ - README.md
101
+ - _includes/slides/controls.html
102
+ - _includes/slides/overview.html
103
+ - _includes/slides/progress.html
104
+ - _layouts/presentation.html
105
+ - assets/css/presentation.css
106
+ - assets/fonts/OFL-atkinson-hyperlegible-mono.txt
107
+ - assets/fonts/OFL-atkinson-hyperlegible-next.txt
108
+ - assets/fonts/README.md
109
+ - assets/fonts/atkinson-hyperlegible-mono-italic.woff2
110
+ - assets/fonts/atkinson-hyperlegible-mono.woff2
111
+ - assets/fonts/atkinson-hyperlegible-next-italic.woff2
112
+ - assets/fonts/atkinson-hyperlegible-next.woff2
113
+ - assets/js/presentation.js
114
+ - doc/CHANGELOG.md
115
+ - doc/Jekyll.md
116
+ - doc/Jekyll/Slides.md
117
+ - doc/Jekyll/Slides/Assets.md
118
+ - doc/Jekyll/Slides/Assets/SiteAssetFile.md
119
+ - doc/Jekyll/Slides/ComponentRenderer.md
120
+ - doc/Jekyll/Slides/ComponentRenderer/RenderedDocument.md
121
+ - doc/Jekyll/Slides/JekyllIntegration.md
122
+ - doc/Jekyll/Slides/Layout.md
123
+ - doc/Jekyll/Slides/Presentation.md
124
+ - doc/Jekyll/Slides/PresentationParser.md
125
+ - doc/Jekyll/Slides/RangeParser.md
126
+ - doc/Jekyll/Slides/Renderer.md
127
+ - doc/Jekyll/Slides/RougeRenderer.md
128
+ - doc/Jekyll/Slides/SlideMetadata.md
129
+ - doc/Jekyll/Slides/SlideRenderer.md
130
+ - doc/Jekyll/Slides/Support.md
131
+ - doc/README.md
132
+ - doc/index.csv
133
+ - lib/jekyll-slides.rb
134
+ - lib/jekyll/slides.rb
135
+ - lib/jekyll/slides/assets.rb
136
+ - lib/jekyll/slides/component_renderer.rb
137
+ - lib/jekyll/slides/jekyll_integration.rb
138
+ - lib/jekyll/slides/layout.rb
139
+ - lib/jekyll/slides/presentation.rb
140
+ - lib/jekyll/slides/presentation_parser.rb
141
+ - lib/jekyll/slides/range_parser.rb
142
+ - lib/jekyll/slides/renderer.rb
143
+ - lib/jekyll/slides/rouge_renderer.rb
144
+ - lib/jekyll/slides/slide_metadata.rb
145
+ - lib/jekyll/slides/slide_renderer.rb
146
+ - lib/jekyll/slides/support.rb
147
+ - lib/jekyll/slides/version.rb
148
+ - llm.txt
149
+ homepage: https://github.com/lucianghinda/jekyll-slides
150
+ licenses:
151
+ - Apache-2.0
152
+ metadata:
153
+ homepage_uri: https://github.com/lucianghinda/jekyll-slides
154
+ source_code_uri: https://github.com/lucianghinda/jekyll-slides/tree/main
155
+ bug_tracker_uri: https://github.com/lucianghinda/jekyll-slides/issues
156
+ changelog_uri: https://github.com/lucianghinda/jekyll-slides/blob/main/CHANGELOG.md
157
+ rubygems_mfa_required: 'true'
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '3.1'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 4.0.11
173
+ specification_version: 4
174
+ summary: Polished technical presentations from Markdown for Jekyll
175
+ test_files: []