juicelang-theme 0.4.4 → 0.5.1
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/_includes/nav.html +1 -1
- data/lib/custom_tags.rb +13 -9
- data/lib/juice_lexer.rb +181 -1
- metadata +2 -3
- data/lib/markdown_toc.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f852df9e1751836546ec0ea84f1db906a60950456da13f4b9544a672a4fe784
|
|
4
|
+
data.tar.gz: c8885eb5faa5508b89a0b04dd6044a3f4d1f1af4739f3a1fe7956a0aa688f40c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 27994731614627460d4908dfc7accfa2e36e736b3050dc1128a92ade56104a6c7ffd3bc47c9adc228c82cc04bb2c9399e0844a410f7a21690e7e944f2d8fc6d1
|
|
7
|
+
data.tar.gz: d326873e94ae956149ca4b627fe7f17a37a5b7303fdeeb01cd213b7c3cd9cfe620d5adbc5103ec86e826e9860c06fe6e1903308a0a38c357048dbe053cbd2b81
|
data/_includes/nav.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div id="{{ include.id }}" uk-offcanvas="mode: push{% if include.flip %}; flip: true{% endif %}">
|
|
2
2
|
<div class="uk-offcanvas-bar">
|
|
3
|
-
<ul class="uk-nav-default" uk-nav='{"toggle": "> a.nav-parent-toggle"}'
|
|
3
|
+
<ul class="uk-nav-default" uk-nav='{"toggle": "> a.nav-parent-toggle"}'>
|
|
4
4
|
{% assign navigation = site.data.navigation[include.navigation] %}
|
|
5
5
|
{% assign indexPage = site.pages | find: "path", navigation.index_path %}
|
|
6
6
|
<li class="uk-nav-header"><a href="{{ indexPage | url_without_ext }}">{{ navigation.title }}</a></li>
|
data/lib/custom_tags.rb
CHANGED
|
@@ -4,8 +4,6 @@ require 'jekyll'
|
|
|
4
4
|
require 'kramdown'
|
|
5
5
|
require 'liquid'
|
|
6
6
|
|
|
7
|
-
require_relative 'markdown_toc'
|
|
8
|
-
|
|
9
7
|
|
|
10
8
|
class ToCTag < Liquid::Tag
|
|
11
9
|
def initialize(tag_name, input, tokens)
|
|
@@ -15,22 +13,28 @@ class ToCTag < Liquid::Tag
|
|
|
15
13
|
def render(context)
|
|
16
14
|
toc = Kramdown::Document.new(context.registers[:page]['content'], {
|
|
17
15
|
input: "GFM"
|
|
18
|
-
}).
|
|
19
|
-
build_list(toc
|
|
16
|
+
}).to_Toc
|
|
17
|
+
build_list(toc, context)
|
|
20
18
|
end
|
|
21
19
|
|
|
22
20
|
private
|
|
23
21
|
|
|
24
|
-
def build_list(toc,
|
|
25
|
-
|
|
22
|
+
def build_list(toc, context)
|
|
23
|
+
top = toc.children.first.value
|
|
24
|
+
result = '<li class="uk-active"><a href="#' + top.attr['id'] + '">' + elementToHTML(top, context) + '</a></li>' + "\n"
|
|
26
25
|
|
|
27
|
-
for
|
|
28
|
-
|
|
29
|
-
result += '<li><a href="#' + item[1] + '">' + item[2][0].value + "</a></li>\n"
|
|
26
|
+
for item in toc.children.first.children.map { |e| e.value }
|
|
27
|
+
result += '<li><a href="#' + item.attr['id'] + '">' + elementToHTML(item, context) + "</a></li>\n"
|
|
30
28
|
end
|
|
31
29
|
|
|
32
30
|
result
|
|
33
31
|
end
|
|
32
|
+
|
|
33
|
+
def elementToHTML(el, context)
|
|
34
|
+
root = Kramdown::Element.new(:root, nil, nil, encoding: context.registers[:page]['content'].encoding)
|
|
35
|
+
root.children = el.children
|
|
36
|
+
Kramdown::Converter::CustomHtml.convert(root).first
|
|
37
|
+
end
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
Liquid::Template.register_tag('toc', ToCTag)
|
data/lib/juice_lexer.rb
CHANGED
|
@@ -14,7 +14,187 @@ Jekyll::Hooks.register :site, :pre_render do |site|
|
|
|
14
14
|
filenames '*.juice'
|
|
15
15
|
|
|
16
16
|
state :root do
|
|
17
|
-
|
|
17
|
+
mixin :whitespace
|
|
18
|
+
mixin :keyword
|
|
19
|
+
mixin :operator
|
|
20
|
+
mixin :punctuation
|
|
21
|
+
mixin :identifier
|
|
22
|
+
mixin :literal
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
state :whitespace do
|
|
26
|
+
rule %r/[\x20\x0A\x0D\x09\x0B\x0C\x00]+/, Text::Whitespace
|
|
27
|
+
rule %r(//.*\n), Comment::Single
|
|
28
|
+
rule %r(/\*), Comment::Multiline, :multiline_comment
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
state :multiline_comment do
|
|
32
|
+
rule %r/(?:[^\*\/]|\*(?!\/)|\/(?!\*))+/, Comment::Multiline
|
|
33
|
+
|
|
34
|
+
rule %r(/\*), Comment::Multiline, :multiline_comment
|
|
35
|
+
rule %r(\*/), Comment::Multiline, :pop!
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
state :keyword do
|
|
39
|
+
rule %r/binary|enum|extension|func|import|init|internal|let|module|operator|private|precedencegroup|public|static|struct|subscript|throws|trait|type|typeprivate|var/, Keyword::Declaration
|
|
40
|
+
rule %r/break|case|catch|continue|default|defer|do|else|fallthrough|for|guard|if|in|loop|match|return|throw|where|while/, Keyword
|
|
41
|
+
rule %r/as|case|is|self|try/, Keyword
|
|
42
|
+
rule %r/any|some|throws|_/, Keyword::Type
|
|
43
|
+
rule %r/_/, Keyword
|
|
44
|
+
rule %r/above|associativity|below|binary|didSet|get|indirect|left|none|postfix|prefix|right|set|Type|value|willSet/, Keyword
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
state :operator do
|
|
48
|
+
rule %r/[+\-\*\/%<>=&\|\^!\?~]+/, Operator
|
|
49
|
+
rule %r/\.[+\-\*\/%<>=&\|\^!\?~\.]+/, Operator
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
state :punctuation do
|
|
53
|
+
rule %r/\(|\)|\[|\]|\{|\}|\.|,|:|;|=|&|->|=>|`|\?|!/, Punctuation
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
state :identifier do
|
|
57
|
+
rule %r/[_A-Za-z][_A-Za-z0-9]*/, Name
|
|
58
|
+
rule %r/`[_A-Za-z][_A-Za-z0-9]*`/, Name
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
state :literal do
|
|
62
|
+
rule %r/true|false|nil/, Keyword::Constant
|
|
63
|
+
rule %r/'/, Str::Delimiter, :character_literal
|
|
64
|
+
|
|
65
|
+
rule %r/(#*)"""/ do |m|
|
|
66
|
+
token Str::Delimiter
|
|
67
|
+
@multiline = true
|
|
68
|
+
@rawLevel = m[1].length
|
|
69
|
+
push :string_literal
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
rule %r/(#*)"/ do |m|
|
|
73
|
+
token Str::Delimiter
|
|
74
|
+
@multiline = false
|
|
75
|
+
@rawLevel = m[1].length
|
|
76
|
+
push :string_literal
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
rule %r/[0-9][0-9_]*(?:\.[0-9][0-9_]*(?:[eE][+-]?[0-9][0-9_]*)?|[eE][+-]?[0-9][0-9_]*)/, Num::Float
|
|
80
|
+
rule %r/[0-9][0-9_]*/, Num::Integer
|
|
81
|
+
rule %r/0b[01][01_]*/, Num::Bin
|
|
82
|
+
rule %r/0o[0-7][0-7_]*/, Num::Oct
|
|
83
|
+
rule %r/0x[0-9a-fA-F][0-9a-fA-F_]*/, Num::Hex
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
state :character_literal do
|
|
87
|
+
rule %r/[^\\']/ do
|
|
88
|
+
token Str::Char
|
|
89
|
+
goto :character_literal_ending
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rule %r/\\/ do
|
|
93
|
+
token Str::Escape
|
|
94
|
+
goto :character_literal_ending
|
|
95
|
+
push :escape
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
state :character_literal_ending do
|
|
100
|
+
rule %r/'/, Str::Delimiter, :pop!
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
state :string_literal do
|
|
104
|
+
rule %r/[^\\"\$]+/, Str
|
|
105
|
+
rule %r/"""/ do
|
|
106
|
+
if @multiline
|
|
107
|
+
if @rawLevel > 0
|
|
108
|
+
@delimiter = '"""'
|
|
109
|
+
@currentRawLevel = @rawLevel
|
|
110
|
+
goto :raw_string_literal_ending
|
|
111
|
+
else
|
|
112
|
+
token Str::Delimiter
|
|
113
|
+
pop!
|
|
114
|
+
end
|
|
115
|
+
else
|
|
116
|
+
token Error
|
|
117
|
+
pop!
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
rule %r/"/ do
|
|
122
|
+
if !@multiline
|
|
123
|
+
if @rawLevel > 0
|
|
124
|
+
@delimiter = '"'
|
|
125
|
+
@currentRawLevel = @rawLevel
|
|
126
|
+
goto :raw_string_literal_ending
|
|
127
|
+
else
|
|
128
|
+
token Str::Delimiter
|
|
129
|
+
pop!
|
|
130
|
+
end
|
|
131
|
+
else
|
|
132
|
+
token Str
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
rule %r/\\?\n/ do
|
|
137
|
+
if @multiline
|
|
138
|
+
token Str
|
|
139
|
+
else
|
|
140
|
+
token Error
|
|
141
|
+
pop!
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
rule %r/(\\)(#*)/ do |m|
|
|
146
|
+
if m[2].length < @rawLevel
|
|
147
|
+
token Str
|
|
148
|
+
elsif m[2].length == @rawLevel
|
|
149
|
+
token Str::Escape
|
|
150
|
+
push :escape
|
|
151
|
+
else
|
|
152
|
+
token Error
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
rule %r/\$\{/, Str::Interpol, :interpolation
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
state :raw_string_literal_ending do
|
|
160
|
+
rule %r/#/ do
|
|
161
|
+
@delimiter += '#'
|
|
162
|
+
|
|
163
|
+
if @currentRawLevel > 1
|
|
164
|
+
@currentRawLevel -= 1
|
|
165
|
+
else
|
|
166
|
+
token Str::Delimiter, @delimiter
|
|
167
|
+
pop!
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
rule %r/[^#]/ do
|
|
172
|
+
token Str, @delimiter
|
|
173
|
+
token Str
|
|
174
|
+
goto :string_literal
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
rule %r/\n/ do
|
|
178
|
+
if @multiline
|
|
179
|
+
token Str, @delimiter
|
|
180
|
+
token Str
|
|
181
|
+
goto :string_literal
|
|
182
|
+
else
|
|
183
|
+
token Error
|
|
184
|
+
pop!
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
state :interpolation do # TODO
|
|
190
|
+
rule %r/[^\{\}]+/, Str::Interpol
|
|
191
|
+
rule %r/\{/, Str::Interpol, :interpolation
|
|
192
|
+
rule %r/\}/, Str::Interpol, :pop!
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
state :escape do
|
|
196
|
+
rule %r/0|\\|t|n|r|"|'|\$/, Str::Escape, :pop!
|
|
197
|
+
rule %r/u\{[0-9a-fA-F]{1,8}\}/, Str::Escape, :pop!
|
|
18
198
|
end
|
|
19
199
|
end
|
|
20
200
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: juicelang-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Josef Zoller
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-11-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -275,7 +275,6 @@ files:
|
|
|
275
275
|
- lib/juice_lexer.rb
|
|
276
276
|
- lib/juicelang-theme.rb
|
|
277
277
|
- lib/markdown.rb
|
|
278
|
-
- lib/markdown_toc.rb
|
|
279
278
|
homepage: https://github.com/juice-lang/juicelang-theme
|
|
280
279
|
licenses:
|
|
281
280
|
- MIT
|
data/lib/markdown_toc.rb
DELETED