jekyll-slides 0.1.0 → 0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +80 -4
- data/assets/css/presentation.css +1 -1
- data/doc/CHANGELOG.md +14 -1
- data/doc/Jekyll/Slides/Deck.md +40 -0
- data/doc/Jekyll/Slides/DeckAssembler.md +17 -0
- data/doc/Jekyll/Slides/FrontMatter.md +16 -0
- data/doc/Jekyll/Slides/JekyllIntegration.md +0 -3
- data/doc/Jekyll/Slides/SlideFile.md +18 -0
- data/doc/Jekyll/Slides/SlideMetadata.md +6 -0
- data/doc/Jekyll/Slides/Support.md +6 -0
- data/doc/Jekyll/Slides.md +15 -4
- data/doc/Jekyll.md +1 -1
- data/doc/README.md +80 -4
- data/doc/index.csv +19 -1
- data/lib/jekyll/slides/component_renderer.rb +33 -5
- data/lib/jekyll/slides/deck.rb +151 -0
- data/lib/jekyll/slides/deck_assembler.rb +147 -0
- data/lib/jekyll/slides/front_matter.rb +39 -0
- data/lib/jekyll/slides/jekyll_integration.rb +3 -3
- data/lib/jekyll/slides/renderer.rb +14 -0
- data/lib/jekyll/slides/slide_file.rb +55 -0
- data/lib/jekyll/slides/slide_metadata.rb +26 -18
- data/lib/jekyll/slides/support.rb +14 -0
- data/lib/jekyll/slides/version.rb +1 -1
- data/lib/jekyll/slides.rb +14 -2
- data/{llm.txt → llms.txt} +15 -4
- metadata +10 -2
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
module Slides
|
|
5
|
+
# Reads one Markdown file and returns its slide sources. The file's own
|
|
6
|
+
# front matter (+layout+, +background+, +class+) becomes a default
|
|
7
|
+
# metadata comment applied to every slide the file contains; a slide's
|
|
8
|
+
# own comment wins key by key.
|
|
9
|
+
class SlideFile
|
|
10
|
+
def initialize(path, warning: nil, read_options: {})
|
|
11
|
+
@path = path
|
|
12
|
+
@warning = warning
|
|
13
|
+
@read_options = read_options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def slides
|
|
17
|
+
@slides ||= build_slides
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def build_slides
|
|
23
|
+
file_values, body = FrontMatter.split(File.read(@path, **@read_options))
|
|
24
|
+
defaults = file_defaults(file_values)
|
|
25
|
+
slide_sources = PresentationParser.new(body).parse
|
|
26
|
+
|
|
27
|
+
if slide_sources.empty?
|
|
28
|
+
Support.warn(@warning, "#{@path} produced no slides; skipping")
|
|
29
|
+
return []
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
slide_sources.map { |slide| apply_defaults(slide, defaults) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def file_defaults(file_values)
|
|
36
|
+
file_values.each_with_object({}) do |(key, value), defaults|
|
|
37
|
+
if SlideMetadata::KEYS.include?(key)
|
|
38
|
+
defaults[key] = value
|
|
39
|
+
else
|
|
40
|
+
Support.warn(@warning, "Unknown slide file key #{key.inspect}; ignoring")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def apply_defaults(slide, defaults)
|
|
46
|
+
return slide if defaults.empty?
|
|
47
|
+
|
|
48
|
+
body, own_values = SlideMetadata.split_comment(slide)
|
|
49
|
+
merged = defaults.merge(own_values)
|
|
50
|
+
lines = SlideMetadata::KEYS.filter_map { |key| "#{key}: #{merged[key]}" if merged.key?(key) }
|
|
51
|
+
"<!--\n#{lines.join("\n")}\n-->\n#{body}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -13,6 +13,31 @@ module Jekyll
|
|
|
13
13
|
new(content, index: index, warning: warning).parse(components: components)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
# Parses a leading "<!-- key: value -->" metadata comment off +body+.
|
|
17
|
+
# Returns [body_without_comment, values]. A comment whose lines are not
|
|
18
|
+
# all "key: value", or that carries no recognized key, is left in the
|
|
19
|
+
# body untouched. Unknown keys warn only when +warning+ is given.
|
|
20
|
+
def self.split_comment(body, warning: nil)
|
|
21
|
+
match = body.match(/\A[ \t]*(<!--(.*?)-->)[ \t]*(?:\r?\n)?/m)
|
|
22
|
+
return [body, {}] unless match
|
|
23
|
+
|
|
24
|
+
values = {}
|
|
25
|
+
lines = match[2].to_s.lines.map(&:strip).reject(&:empty?)
|
|
26
|
+
parsed = lines.map { |line| line.match(/\A(\w[\w-]*)\s*:\s*(.*?)\z/) }
|
|
27
|
+
return [body, {}] unless parsed.all?
|
|
28
|
+
return [body, {}] unless parsed.any? { |match_data| KEYS.include?(match_data[1]) }
|
|
29
|
+
|
|
30
|
+
parsed.each do |match_data|
|
|
31
|
+
key = match_data[1]
|
|
32
|
+
if KEYS.include?(key)
|
|
33
|
+
values[key] = match_data[2].strip
|
|
34
|
+
else
|
|
35
|
+
Support.warn(warning, "Unknown slide metadata key #{key.inspect}; ignoring")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
[body[match.end(0)..].to_s, values]
|
|
39
|
+
end
|
|
40
|
+
|
|
16
41
|
def initialize(content, index: 0, warning: nil)
|
|
17
42
|
@original_content = content.to_s
|
|
18
43
|
@index = index
|
|
@@ -40,24 +65,7 @@ module Jekyll
|
|
|
40
65
|
private
|
|
41
66
|
|
|
42
67
|
def extract_comment(body)
|
|
43
|
-
|
|
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]
|
|
68
|
+
self.class.split_comment(body, warning: @warning)
|
|
61
69
|
end
|
|
62
70
|
|
|
63
71
|
def inferred_layout(components)
|
|
@@ -20,6 +20,20 @@ module Jekyll
|
|
|
20
20
|
def escape(value)
|
|
21
21
|
CGI.escapeHTML(value.to_s)
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
# A comparable Array key for natural filename ordering: digit runs
|
|
25
|
+
# compare numerically, text runs compare case-insensitively, and digit
|
|
26
|
+
# runs sort before text runs. The name itself is appended as a stable
|
|
27
|
+
# tiebreaker so equal-value keys (e.g. "01-a" and "1-a") still order
|
|
28
|
+
# deterministically.
|
|
29
|
+
def natural_sort_key(name)
|
|
30
|
+
name = name.to_s
|
|
31
|
+
key = name.scan(/\d+|\D+/).map do |run|
|
|
32
|
+
run.match?(/\A\d+\z/) ? [0, run.to_i, ""] : [1, 0, run.downcase]
|
|
33
|
+
end
|
|
34
|
+
key << [2, 0, name]
|
|
35
|
+
key
|
|
36
|
+
end
|
|
23
37
|
end
|
|
24
38
|
end
|
|
25
39
|
end
|
data/lib/jekyll/slides.rb
CHANGED
|
@@ -12,8 +12,7 @@ module Jekyll
|
|
|
12
12
|
# while preserving the site's theme and local overrides.
|
|
13
13
|
#
|
|
14
14
|
# Configure defaults under +slides:+ in _config.yml, or use front matter on
|
|
15
|
-
# individual decks.
|
|
16
|
-
# and +ruby+. The supported aspect ratio is 16:9; quote this value in YAML.
|
|
15
|
+
# individual decks. The supported aspect ratio is 16:9; quote this value in YAML.
|
|
17
16
|
#
|
|
18
17
|
# Jekyll runs Liquid before rendering each slide as one Markdown document.
|
|
19
18
|
# Jekyll::Slides::Presentation also renders slide HTML directly when Jekyll integration
|
|
@@ -21,13 +20,26 @@ module Jekyll
|
|
|
21
20
|
module Slides
|
|
22
21
|
ROOT = File.expand_path("../..", __dir__)
|
|
23
22
|
LAYOUT_NAME = "presentation"
|
|
23
|
+
|
|
24
|
+
# Every theme name the plugin ships. A theme sets the whole deck through
|
|
25
|
+
# front matter, and any one of them also restyles a single editor or
|
|
26
|
+
# terminal block through that block's +theme+ attribute.
|
|
27
|
+
THEMES = %w[
|
|
28
|
+
minimal-light minimal-dark midnight ruby
|
|
29
|
+
catppuccin-latte catppuccin-frappe catppuccin-macchiato catppuccin-mocha
|
|
30
|
+
].freeze
|
|
31
|
+
DEFAULT_THEME = "midnight"
|
|
24
32
|
end
|
|
25
33
|
end
|
|
26
34
|
|
|
27
35
|
require_relative "slides/version"
|
|
28
36
|
require_relative "slides/support"
|
|
37
|
+
require_relative "slides/front_matter"
|
|
29
38
|
require_relative "slides/presentation_parser"
|
|
30
39
|
require_relative "slides/slide_metadata"
|
|
40
|
+
require_relative "slides/slide_file"
|
|
41
|
+
require_relative "slides/deck"
|
|
42
|
+
require_relative "slides/deck_assembler"
|
|
31
43
|
require_relative "slides/range_parser"
|
|
32
44
|
require_relative "slides/rouge_renderer"
|
|
33
45
|
require_relative "slides/component_renderer"
|
data/{llm.txt → llms.txt}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
| | |
|
|
4
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 |
|
|
5
|
+
| **Defined in** | lib/jekyll/slides.rb, lib/jekyll/slides/deck.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/slide_file.rb, lib/jekyll/slides/front_matter.rb, lib/jekyll/slides/presentation.rb, lib/jekyll/slides/range_parser.rb, lib/jekyll/slides/deck_assembler.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
6
|
|
|
7
7
|
Markdown presentations for Jekyll, with editor and terminal components.
|
|
8
8
|
|
|
@@ -13,9 +13,8 @@ includes, styles, scripts, and offline fonts while preserving the site's theme
|
|
|
13
13
|
and local overrides.
|
|
14
14
|
|
|
15
15
|
Configure defaults under <code>slides:</code> in _config.yml, or use front
|
|
16
|
-
matter on individual decks.
|
|
17
|
-
|
|
18
|
-
quote this value in YAML.
|
|
16
|
+
matter on individual decks. The supported aspect ratio is 16:9; quote this
|
|
17
|
+
value in YAML.
|
|
19
18
|
|
|
20
19
|
Jekyll runs Liquid before rendering each slide as one Markdown document.
|
|
21
20
|
Jekyll::Slides::Presentation also renders slide HTML directly when Jekyll
|
|
@@ -23,12 +22,20 @@ integration is not needed; it does not evaluate Liquid or wrap the
|
|
|
23
22
|
presentation layout.
|
|
24
23
|
|
|
25
24
|
## Constants
|
|
25
|
+
### `DEFAULT_THEME` <a id="constant-DEFAULT_THEME"></a> <a id="DEFAULT_THEME-constant"></a>
|
|
26
|
+
Not documented.
|
|
27
|
+
|
|
26
28
|
### `LAYOUT_NAME` <a id="constant-LAYOUT_NAME"></a> <a id="LAYOUT_NAME-constant"></a>
|
|
27
29
|
Not documented.
|
|
28
30
|
|
|
29
31
|
### `ROOT` <a id="constant-ROOT"></a> <a id="ROOT-constant"></a>
|
|
30
32
|
Not documented.
|
|
31
33
|
|
|
34
|
+
### `THEMES` <a id="constant-THEMES"></a> <a id="THEMES-constant"></a>
|
|
35
|
+
Every theme name the plugin ships. A theme sets the whole deck through front
|
|
36
|
+
matter, and any one of them also restyles a single editor or terminal block
|
|
37
|
+
through that block's `theme` attribute.
|
|
38
|
+
|
|
32
39
|
### `VERSION` <a id="constant-VERSION"></a> <a id="VERSION-constant"></a>
|
|
33
40
|
Not documented.
|
|
34
41
|
|
|
@@ -38,6 +45,9 @@ Not documented.
|
|
|
38
45
|
- [Slides/Assets.md](doc/Jekyll/Slides/Assets.md)
|
|
39
46
|
- [Slides/ComponentRenderer/RenderedDocument.md](doc/Jekyll/Slides/ComponentRenderer/RenderedDocument.md)
|
|
40
47
|
- [Slides/ComponentRenderer.md](doc/Jekyll/Slides/ComponentRenderer.md)
|
|
48
|
+
- [Slides/Deck.md](doc/Jekyll/Slides/Deck.md)
|
|
49
|
+
- [Slides/DeckAssembler.md](doc/Jekyll/Slides/DeckAssembler.md)
|
|
50
|
+
- [Slides/FrontMatter.md](doc/Jekyll/Slides/FrontMatter.md)
|
|
41
51
|
- [Slides/JekyllIntegration.md](doc/Jekyll/Slides/JekyllIntegration.md)
|
|
42
52
|
- [Slides/Layout.md](doc/Jekyll/Slides/Layout.md)
|
|
43
53
|
- [Slides/Presentation.md](doc/Jekyll/Slides/Presentation.md)
|
|
@@ -45,6 +55,7 @@ Not documented.
|
|
|
45
55
|
- [Slides/RangeParser.md](doc/Jekyll/Slides/RangeParser.md)
|
|
46
56
|
- [Slides/Renderer.md](doc/Jekyll/Slides/Renderer.md)
|
|
47
57
|
- [Slides/RougeRenderer.md](doc/Jekyll/Slides/RougeRenderer.md)
|
|
58
|
+
- [Slides/SlideFile.md](doc/Jekyll/Slides/SlideFile.md)
|
|
48
59
|
- [Slides/SlideMetadata.md](doc/Jekyll/Slides/SlideMetadata.md)
|
|
49
60
|
- [Slides/SlideRenderer.md](doc/Jekyll/Slides/SlideRenderer.md)
|
|
50
61
|
- [Slides/Support.md](doc/Jekyll/Slides/Support.md)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-slides
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lucian Ghinda
|
|
@@ -118,6 +118,9 @@ files:
|
|
|
118
118
|
- doc/Jekyll/Slides/Assets/SiteAssetFile.md
|
|
119
119
|
- doc/Jekyll/Slides/ComponentRenderer.md
|
|
120
120
|
- doc/Jekyll/Slides/ComponentRenderer/RenderedDocument.md
|
|
121
|
+
- doc/Jekyll/Slides/Deck.md
|
|
122
|
+
- doc/Jekyll/Slides/DeckAssembler.md
|
|
123
|
+
- doc/Jekyll/Slides/FrontMatter.md
|
|
121
124
|
- doc/Jekyll/Slides/JekyllIntegration.md
|
|
122
125
|
- doc/Jekyll/Slides/Layout.md
|
|
123
126
|
- doc/Jekyll/Slides/Presentation.md
|
|
@@ -125,6 +128,7 @@ files:
|
|
|
125
128
|
- doc/Jekyll/Slides/RangeParser.md
|
|
126
129
|
- doc/Jekyll/Slides/Renderer.md
|
|
127
130
|
- doc/Jekyll/Slides/RougeRenderer.md
|
|
131
|
+
- doc/Jekyll/Slides/SlideFile.md
|
|
128
132
|
- doc/Jekyll/Slides/SlideMetadata.md
|
|
129
133
|
- doc/Jekyll/Slides/SlideRenderer.md
|
|
130
134
|
- doc/Jekyll/Slides/Support.md
|
|
@@ -134,6 +138,9 @@ files:
|
|
|
134
138
|
- lib/jekyll/slides.rb
|
|
135
139
|
- lib/jekyll/slides/assets.rb
|
|
136
140
|
- lib/jekyll/slides/component_renderer.rb
|
|
141
|
+
- lib/jekyll/slides/deck.rb
|
|
142
|
+
- lib/jekyll/slides/deck_assembler.rb
|
|
143
|
+
- lib/jekyll/slides/front_matter.rb
|
|
137
144
|
- lib/jekyll/slides/jekyll_integration.rb
|
|
138
145
|
- lib/jekyll/slides/layout.rb
|
|
139
146
|
- lib/jekyll/slides/presentation.rb
|
|
@@ -141,11 +148,12 @@ files:
|
|
|
141
148
|
- lib/jekyll/slides/range_parser.rb
|
|
142
149
|
- lib/jekyll/slides/renderer.rb
|
|
143
150
|
- lib/jekyll/slides/rouge_renderer.rb
|
|
151
|
+
- lib/jekyll/slides/slide_file.rb
|
|
144
152
|
- lib/jekyll/slides/slide_metadata.rb
|
|
145
153
|
- lib/jekyll/slides/slide_renderer.rb
|
|
146
154
|
- lib/jekyll/slides/support.rb
|
|
147
155
|
- lib/jekyll/slides/version.rb
|
|
148
|
-
-
|
|
156
|
+
- llms.txt
|
|
149
157
|
homepage: https://github.com/lucianghinda/jekyll-slides
|
|
150
158
|
licenses:
|
|
151
159
|
- Apache-2.0
|