markita 3.1.210913 → 3.4.211004
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/README.md +19 -5
- data/bin/markita +2 -1
- data/lib/markita/markdown.rb +96 -37
- data/lib/markita/plug/highlight.rb +3 -1
- data/lib/markita.rb +1 -1
- metadata +8 -9
- data/data/highlight.css +0 -81
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2a83f3ae0cb87314ee1ea28a3f5c39cd84813d9564e666f4ed474627988b12cf
|
|
4
|
+
data.tar.gz: c180906afdac8f5343f99cc86c28d9c6db3ae38fdb8828d65f50f338d7b15757
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 98e97748ae3187b627841670a4744e55ec3a630a49839a069268ef99fdf12cecfe78589b64e7f8ab01fa2c8a4ec7f7fed07535ff5908c423190c19f807c663de
|
|
7
|
+
data.tar.gz: 0ca77e473071ef3716812dac6d727ec21229acf42ea73d367913cbfa5ec4bb32449798a3649c74c01aaa9d5640d8d30b31aaf2140f996299a6b6efab64f1694f
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Markita
|
|
2
2
|
|
|
3
|
-
* [VERSION 3.
|
|
3
|
+
* [VERSION 3.4.211004](https://github.com/carlosjhr64/markita/releases)
|
|
4
4
|
* [github](https://www.github.com/carlosjhr64/markita)
|
|
5
5
|
* [rubygems](https://rubygems.org/gems/markita)
|
|
6
6
|
|
|
@@ -23,6 +23,7 @@ Options:
|
|
|
23
23
|
--root=DIRECTORY ~/vimwiki
|
|
24
24
|
--bind=BIND 0.0.0.0
|
|
25
25
|
--port=PORT 8080
|
|
26
|
+
--theme=THEME base16.light
|
|
26
27
|
--allowed=IPS
|
|
27
28
|
--no_about
|
|
28
29
|
--no_favicon
|
|
@@ -34,8 +35,8 @@ Types:
|
|
|
34
35
|
DIRECTORY /^~?[\/\w\.]+$/
|
|
35
36
|
BIND /^[\w\.]+$/
|
|
36
37
|
PORT /^\d+$/
|
|
37
|
-
THEME /^[\w\.]+$/
|
|
38
38
|
IPS /^[\d\.\,]+$/
|
|
39
|
+
THEME /^[\w\.]+$/
|
|
39
40
|
# NOTE:
|
|
40
41
|
# Assuming site is in ~/vimwiki,
|
|
41
42
|
# when ~/vimwiki/.valid-id is set with a sha256sum of a password,
|
|
@@ -96,6 +97,9 @@ Markdown:
|
|
|
96
97
|
! Address:[address]
|
|
97
98
|
! Code:[code="1234"]
|
|
98
99
|
|
|
100
|
+
A selection list:
|
|
101
|
+
! Color:[color="Red","White","Blue"]
|
|
102
|
+
|
|
99
103
|
### Template substitutions
|
|
100
104
|
|
|
101
105
|
Markdown:
|
|
@@ -265,8 +269,9 @@ Markdown:
|
|
|
265
269
|
|
|
266
270
|
!> /path-to/ascii_art.txt
|
|
267
271
|
|
|
268
|
-
Must be a `*.txt` file.
|
|
269
272
|
Useful for ASCII art.
|
|
273
|
+
Unless an `*.html` file, the text is embedded in `pre` tags.
|
|
274
|
+
Further more unless a `*.txt` file, the text is embedded in `code` tags.
|
|
270
275
|
|
|
271
276
|
### Emojis
|
|
272
277
|
|
|
@@ -290,6 +295,16 @@ Markdown:
|
|
|
290
295
|
[^2]: Cash is money in currency.
|
|
291
296
|
[^3]: Read as "Nan took it."
|
|
292
297
|
|
|
298
|
+
### Meta-data
|
|
299
|
+
|
|
300
|
+
Markdown:
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
Title: The Title You Want For Your Page
|
|
304
|
+
1: https://way.to/create/ref/links
|
|
305
|
+
---
|
|
306
|
+
You can now [link](1) with a reference number.
|
|
307
|
+
|
|
293
308
|
## HOW-TOs
|
|
294
309
|
|
|
295
310
|
### Set site password:
|
|
@@ -297,12 +312,11 @@ Markdown:
|
|
|
297
312
|
$ # Assuming ~/vimwiki is your site's root...
|
|
298
313
|
$ echo -n '<SitePasswordHere>' | sha256sum | grep -o '^\w*' > ~/vimwiki/.valid-id
|
|
299
314
|
```
|
|
300
|
-
### Set site custom favicon,
|
|
315
|
+
### Set site custom favicon, not found page, and login form and fail page:
|
|
301
316
|
```console
|
|
302
317
|
$ # Assuming ~/vimwiki is your site's root...
|
|
303
318
|
$ # Note that you'll have to restart the server on any change to these:
|
|
304
319
|
$ cp /path-to/custom/favicon.ico ~/vimwiki/favicon.ico
|
|
305
|
-
$ cp /path-to/custom/highlight.css ~/vimwiki/highlight.css
|
|
306
320
|
$ cp /path-to/custom/not_found.html ~/vimwiki/not_found.html
|
|
307
321
|
$ cp /path-to/custom/login_form.html ~/vimwiki/login_form.html
|
|
308
322
|
$ cp /path-to/custom/login_fail.html ~/vimwiki/login_fail.html
|
data/bin/markita
CHANGED
|
@@ -9,6 +9,7 @@ Options:
|
|
|
9
9
|
--root=DIRECTORY \t ~/vimwiki
|
|
10
10
|
--bind=BIND \t 0.0.0.0
|
|
11
11
|
--port=PORT \t 8080
|
|
12
|
+
--theme=THEME \t base16.light
|
|
12
13
|
--allowed=IPS
|
|
13
14
|
--no_about
|
|
14
15
|
--no_favicon
|
|
@@ -20,8 +21,8 @@ Types:
|
|
|
20
21
|
DIRECTORY /^~?[\\/\\w\\.]+$/
|
|
21
22
|
BIND /^[\\w\\.]+$/
|
|
22
23
|
PORT /^\\d+$/
|
|
23
|
-
THEME /^[\\w\\.]+$/
|
|
24
24
|
IPS /^[\\d\\.\\,]+$/
|
|
25
|
+
THEME /^[\\w\\.]+$/
|
|
25
26
|
# NOTE:
|
|
26
27
|
# Assuming site is in ~/vimwiki,
|
|
27
28
|
# when ~/vimwiki/.valid-id is set with a sha256sum of a password,
|
data/lib/markita/markdown.rb
CHANGED
|
@@ -6,6 +6,7 @@ class Markdown
|
|
|
6
6
|
def initialize(title)
|
|
7
7
|
@title = title
|
|
8
8
|
@line=@html=@file=@opt=nil
|
|
9
|
+
@metadata = {}
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def start
|
|
@@ -14,6 +15,9 @@ class Markdown
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def finish
|
|
18
|
+
if title = @metadata['Title']
|
|
19
|
+
@html << %Q(<script> document.title = "#{title}" </script>\n)
|
|
20
|
+
end
|
|
17
21
|
@html << HTML.footer
|
|
18
22
|
@line = nil
|
|
19
23
|
end
|
|
@@ -62,7 +66,10 @@ class Markdown
|
|
|
62
66
|
CODE = lambda {|m| "<code>#{m[1]}</code>"}
|
|
63
67
|
|
|
64
68
|
Ax = /\[([^\[\]]+)\]\(([^()]+)\)/
|
|
65
|
-
|
|
69
|
+
def anchor(m)
|
|
70
|
+
href = ((_=m[2]).match?(/^\d+$/) and @metadata[_] or _)
|
|
71
|
+
%Q(<a href="#{href}">#{m[1]}</a>)
|
|
72
|
+
end
|
|
66
73
|
|
|
67
74
|
URLx = %r(\[(https?://[\w\.\-\/\&\+\?\%]+)\])
|
|
68
75
|
URL = lambda {|m| %Q(<a href="#{m[1]}">#{m[1]}</a>)}
|
|
@@ -95,9 +102,9 @@ class Markdown
|
|
|
95
102
|
return (block ? block.call(entry) : entry)
|
|
96
103
|
end
|
|
97
104
|
|
|
98
|
-
|
|
105
|
+
def inline(entry)
|
|
99
106
|
string = Markdown.tag(entry, CODEx, CODE) do |entry|
|
|
100
|
-
Markdown.tag(entry, Ax,
|
|
107
|
+
Markdown.tag(entry, Ax, method(:anchor)) do |entry|
|
|
101
108
|
Markdown.tag(entry, URLx, URL) do |entry|
|
|
102
109
|
entry = Markdown.tag(entry, EMOJIx, EMOJI)
|
|
103
110
|
entry = Markdown.tag(entry, Bx, B)
|
|
@@ -121,29 +128,34 @@ class Markdown
|
|
|
121
128
|
end
|
|
122
129
|
|
|
123
130
|
# Ordered list
|
|
124
|
-
ORDERED =
|
|
131
|
+
ORDERED = /^( {0,3})\d+\. (\S.*)$/
|
|
125
132
|
PARSERS << :ordered
|
|
126
|
-
def ordered
|
|
127
|
-
|
|
133
|
+
def ordered(md=ORDERED.match(@line), level=0)
|
|
134
|
+
return false unless md
|
|
128
135
|
@html << "<ol#{@opt[:attributes]}>\n"
|
|
129
136
|
@opt.delete(:attributes)
|
|
130
|
-
while md
|
|
131
|
-
@html << " <li>#{
|
|
132
|
-
md = (@line=@file.gets)&.match
|
|
137
|
+
while md and level==md[1].length
|
|
138
|
+
@html << " <li>#{inline(md[2])}</li>\n"
|
|
139
|
+
if md = (@line=@file.gets)&.match(ORDERED)
|
|
140
|
+
if level < md[1].length
|
|
141
|
+
ordered(md, md[1].length)
|
|
142
|
+
md = @line&.match(ORDERED)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
133
145
|
end
|
|
134
146
|
@html << "</ol>\n"
|
|
135
147
|
true
|
|
136
148
|
end
|
|
137
149
|
|
|
138
150
|
# Paragraph
|
|
139
|
-
PARAGRAPHS = /^[\[`*"~_]?\w/
|
|
151
|
+
PARAGRAPHS = /^[\[\(`*"~_]?\w/
|
|
140
152
|
PARSERS << :paragraphs
|
|
141
153
|
def paragraphs
|
|
142
154
|
md = PARAGRAPHS.match(@line) or return false
|
|
143
155
|
@html << "<p#{@opt[:attributes]}>\n"
|
|
144
156
|
@opt.delete(:attributes)
|
|
145
157
|
while md
|
|
146
|
-
@html <<
|
|
158
|
+
@html << inline(@line)
|
|
147
159
|
md = (@line=@file.gets)&.match PARAGRAPHS
|
|
148
160
|
end
|
|
149
161
|
@html << "</p>\n"
|
|
@@ -151,15 +163,20 @@ class Markdown
|
|
|
151
163
|
end
|
|
152
164
|
|
|
153
165
|
# Unordered list
|
|
154
|
-
UNORDERED = /^[*] (.*)$/
|
|
166
|
+
UNORDERED = /^( {0,3})[*] (\S.*)$/
|
|
155
167
|
PARSERS << :unordered
|
|
156
|
-
def unordered
|
|
157
|
-
|
|
168
|
+
def unordered(md=UNORDERED.match(@line), level=0)
|
|
169
|
+
return false unless md
|
|
158
170
|
@html << "<ul#{@opt[:attributes]}>\n"
|
|
159
171
|
@opt.delete(:attributes)
|
|
160
|
-
while md
|
|
161
|
-
@html << " <li>#{
|
|
162
|
-
md = (@line=@file.gets)&.match
|
|
172
|
+
while md and level==md[1].length
|
|
173
|
+
@html << " <li>#{inline(md[2])}</li>\n"
|
|
174
|
+
if md = (@line=@file.gets)&.match(UNORDERED)
|
|
175
|
+
if level < md[1].length
|
|
176
|
+
unordered(md, md[1].length)
|
|
177
|
+
md = @line&.match(UNORDERED)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
163
180
|
end
|
|
164
181
|
@html << "</ul>\n"
|
|
165
182
|
true
|
|
@@ -177,7 +194,7 @@ class Markdown
|
|
|
177
194
|
li = (x=='x')?
|
|
178
195
|
%q{<li style="list-style-type: '☑ '">} :
|
|
179
196
|
%q{<li style="list-style-type: '☐ '">}
|
|
180
|
-
@html << " #{li}#{
|
|
197
|
+
@html << " #{li}#{inline(t)}</li>\n"
|
|
181
198
|
md = (@line=@file.gets)&.match BALLOTS
|
|
182
199
|
end
|
|
183
200
|
@html << "</ul>\n"
|
|
@@ -193,8 +210,8 @@ class Markdown
|
|
|
193
210
|
@opt.delete(:attributes)
|
|
194
211
|
while md
|
|
195
212
|
item = md[1]
|
|
196
|
-
@html << ((item[-1]==':')? "<dt>#{
|
|
197
|
-
"<dd>#{
|
|
213
|
+
@html << ((item[-1]==':')? "<dt>#{inline(item[0..-2])}</dt>\n" :
|
|
214
|
+
"<dd>#{inline(item)}</dd>\n")
|
|
198
215
|
md = (@line=@file.gets)&.match DEFINITIONS
|
|
199
216
|
end
|
|
200
217
|
@html << "</dl>\n"
|
|
@@ -207,9 +224,9 @@ class Markdown
|
|
|
207
224
|
def headers
|
|
208
225
|
md = HEADERS.match(@line) or return false
|
|
209
226
|
i,header = md[1].length,md[2]
|
|
210
|
-
id = header.
|
|
227
|
+
id = header.gsub(/\([^\(\)]*\)/,'').scan(/\w+/).join('+')
|
|
211
228
|
@html << %Q(<a id="#{id}">\n)
|
|
212
|
-
@html << " <h#{i}#{@opt[:attributes]}>#{
|
|
229
|
+
@html << " <h#{i}#{@opt[:attributes]}>#{inline(header)}</h#{i}>\n"
|
|
213
230
|
@html << "</a>\n"
|
|
214
231
|
@opt.delete(:attributes)
|
|
215
232
|
@line = @file.gets
|
|
@@ -224,7 +241,7 @@ class Markdown
|
|
|
224
241
|
@html << "<blockquote#{@opt[:attributes]}>\n"
|
|
225
242
|
@opt.delete(:attributes)
|
|
226
243
|
while md
|
|
227
|
-
@html <<
|
|
244
|
+
@html << inline(md[1])
|
|
228
245
|
@html << "\n"
|
|
229
246
|
md = (@line=@file.gets)&.match BLOCKQS
|
|
230
247
|
end
|
|
@@ -268,14 +285,31 @@ class Markdown
|
|
|
268
285
|
true
|
|
269
286
|
end
|
|
270
287
|
|
|
271
|
-
#
|
|
288
|
+
# Meta-data
|
|
289
|
+
METADATAS = /^(\w+): (.*)$/
|
|
290
|
+
def metadata
|
|
291
|
+
md = METADATAS.match(@line) or return false
|
|
292
|
+
while md
|
|
293
|
+
@metadata[md[1]] = md[2]
|
|
294
|
+
md = (@line=@file.gets)&.match METADATAS
|
|
295
|
+
end
|
|
296
|
+
true
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
# Horizontal rule or Meta-data
|
|
272
300
|
HRS = /^---+$/
|
|
273
301
|
PARSERS << :hrs
|
|
274
302
|
def hrs
|
|
275
303
|
HRS.match? @line or return false
|
|
276
|
-
@html << "<hr#{@opt[:attributes]}>\n"
|
|
277
|
-
@opt.delete(:attributes)
|
|
278
304
|
@line = @file.gets
|
|
305
|
+
if metadata
|
|
306
|
+
# Optional closing HRS
|
|
307
|
+
@line = @file.gets if @line&.match? HRS
|
|
308
|
+
else
|
|
309
|
+
# Display HR
|
|
310
|
+
@html << "<hr#{@opt[:attributes]}>\n"
|
|
311
|
+
@opt.delete(:attributes)
|
|
312
|
+
end
|
|
279
313
|
true
|
|
280
314
|
end
|
|
281
315
|
|
|
@@ -287,7 +321,7 @@ class Markdown
|
|
|
287
321
|
@html << "<table#{@opt[:attributes]}>\n"
|
|
288
322
|
@opt.delete(:attributes)
|
|
289
323
|
@html << '<thead><tr><th>'
|
|
290
|
-
@html << @line[1...-1].split('|').map{
|
|
324
|
+
@html << @line[1...-1].split('|').map{inline(_1.strip)}.join('</th><th>')
|
|
291
325
|
@html << "</th></tr></thead>\n"
|
|
292
326
|
align = []
|
|
293
327
|
while (@line=@file.gets)&.match TABLES
|
|
@@ -304,7 +338,7 @@ class Markdown
|
|
|
304
338
|
align[i] = ' align="left"'
|
|
305
339
|
@html << '<td><hr></td>'
|
|
306
340
|
else
|
|
307
|
-
@html << "<td#{align[i]}>#{
|
|
341
|
+
@html << "<td#{align[i]}>#{inline(cell.strip)}</td>"
|
|
308
342
|
end
|
|
309
343
|
end
|
|
310
344
|
@html << "</tr>\n"
|
|
@@ -360,7 +394,9 @@ class Markdown
|
|
|
360
394
|
end
|
|
361
395
|
|
|
362
396
|
# Forms
|
|
363
|
-
|
|
397
|
+
FIELD = '(\w+:)?\[(\*)?(\w+)(=("[^"]+")(,"[^"]+")*)?\]'
|
|
398
|
+
FIELDS = Regexp.new FIELD
|
|
399
|
+
FORMS = Regexp.new "^!( #{FIELD})+"
|
|
364
400
|
PARSERS << :forms
|
|
365
401
|
def forms
|
|
366
402
|
md = FORMS.match(@line) or return false
|
|
@@ -370,16 +406,26 @@ class Markdown
|
|
|
370
406
|
while md
|
|
371
407
|
n += 1
|
|
372
408
|
form << ' <br>' if n > 1
|
|
373
|
-
@line.scan(
|
|
409
|
+
@line.scan(FIELDS).each do |field, pwd, name, value|
|
|
374
410
|
method ||= ' method="post"' if pwd
|
|
375
411
|
field &&= field[0...-1]
|
|
376
412
|
value &&= value[2...-1]
|
|
377
413
|
if field
|
|
378
|
-
fields += 1
|
|
379
414
|
type = (pwd)? 'password' : 'text'
|
|
380
415
|
if value
|
|
381
|
-
|
|
416
|
+
if (values = value.split('","')).length > 1
|
|
417
|
+
form << %Q(#{field}:<select name="#{name}">)
|
|
418
|
+
values.each do |value|
|
|
419
|
+
fields += 1
|
|
420
|
+
form << %Q( <option value="#{value}">#{value}</option>)
|
|
421
|
+
end
|
|
422
|
+
form << "</select>"
|
|
423
|
+
else
|
|
424
|
+
fields += 1
|
|
425
|
+
form << %Q{ #{field}:<input type="#{type}" name="#{name}" value="#{value}">}
|
|
426
|
+
end
|
|
382
427
|
else
|
|
428
|
+
fields += 1
|
|
383
429
|
form << %Q{ #{field}:<input type="#{type}" name="#{name}">}
|
|
384
430
|
end
|
|
385
431
|
elsif name=='submit'
|
|
@@ -404,14 +450,27 @@ class Markdown
|
|
|
404
450
|
end
|
|
405
451
|
|
|
406
452
|
# Embed text
|
|
407
|
-
EMBED_TEXTS = /^!> (#{PAGE_KEY}
|
|
453
|
+
EMBED_TEXTS = /^!> (#{PAGE_KEY}\.\w+)$/
|
|
408
454
|
PARSERS << :embed_texts
|
|
409
455
|
def embed_texts
|
|
410
456
|
md = EMBED_TEXTS.match(@line) or return false
|
|
411
457
|
if File.exist?(filename=File.join(ROOT, md[1]))
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
458
|
+
extension,lang = filename.split('.').last,nil
|
|
459
|
+
unless extension=='html'
|
|
460
|
+
lang = Rouge::Lexer.find extension
|
|
461
|
+
klass = lang ? ' class="highlight"' : nil
|
|
462
|
+
@html << "<pre#{klass}#{@opt[:attributes]}>"
|
|
463
|
+
@opt.delete(:attributes)
|
|
464
|
+
@html << '<code>' unless extension=='txt'
|
|
465
|
+
@html << "\n"
|
|
466
|
+
end
|
|
467
|
+
code = File.read(filename)
|
|
468
|
+
@html << (lang ? ROUGE.format(lang.new.lex(code)) : code)
|
|
469
|
+
unless extension=='html'
|
|
470
|
+
@html << '</code>' unless extension=='txt'
|
|
471
|
+
@html << '</pre>'
|
|
472
|
+
@html << "\n"
|
|
473
|
+
end
|
|
415
474
|
else
|
|
416
475
|
@html << @line
|
|
417
476
|
end
|
|
@@ -426,7 +485,7 @@ class Markdown
|
|
|
426
485
|
md = FOOTNOTES.match(@line) or return false
|
|
427
486
|
@html << "<small>\n"
|
|
428
487
|
while md
|
|
429
|
-
@html <<
|
|
488
|
+
@html << inline(@line.chomp)+"<br>\n"
|
|
430
489
|
md = (@line=@file.gets)&.match FOOTNOTES
|
|
431
490
|
end
|
|
432
491
|
@html << "</small>\n"
|
|
@@ -2,7 +2,9 @@ module Markita
|
|
|
2
2
|
class Base
|
|
3
3
|
HEADER_LINKS << %Q( <link rel="stylesheet" href="/highlight.css" type="text/css">\n)
|
|
4
4
|
module Highlight
|
|
5
|
-
|
|
5
|
+
theme = OPTIONS&.theme || 'base16.light'
|
|
6
|
+
CSS = Rouge::Theme.find(theme)&.render(scope: '.highlight')
|
|
7
|
+
raise "Can't find Rouge Theme "+theme unless CSS
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
get '/highlight.css' do
|
data/lib/markita.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: markita
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.4.211004
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- CarlosJHR64
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-10-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: help_parser
|
|
@@ -16,20 +16,20 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '8.0'
|
|
20
20
|
- - ">="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version:
|
|
22
|
+
version: 8.0.210917
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
27
|
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '
|
|
29
|
+
version: '8.0'
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
32
|
+
version: 8.0.210917
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: rouge
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
version: '3.26'
|
|
40
40
|
- - ">="
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 3.26.
|
|
42
|
+
version: 3.26.1
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -49,7 +49,7 @@ dependencies:
|
|
|
49
49
|
version: '3.26'
|
|
50
50
|
- - ">="
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: 3.26.
|
|
52
|
+
version: 3.26.1
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: sinatra
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -104,7 +104,6 @@ files:
|
|
|
104
104
|
- bin/markita
|
|
105
105
|
- data/emojis.tsv
|
|
106
106
|
- data/favicon.ico
|
|
107
|
-
- data/highlight.css
|
|
108
107
|
- data/login_failed.html
|
|
109
108
|
- data/login_form.html
|
|
110
109
|
- data/not_found.html
|
data/data/highlight.css
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/* Ruby Gem Rouge's base16.light */
|
|
2
|
-
.highlight table td { padding: 5px; }
|
|
3
|
-
.highlight table pre { margin: 0; }
|
|
4
|
-
.highlight, .highlight .w {
|
|
5
|
-
color: #303030;
|
|
6
|
-
}
|
|
7
|
-
.highlight .err {
|
|
8
|
-
color: #151515;
|
|
9
|
-
background-color: #ac4142;
|
|
10
|
-
}
|
|
11
|
-
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cpf, .highlight .c1, .highlight .cs {
|
|
12
|
-
color: #505050;
|
|
13
|
-
}
|
|
14
|
-
.highlight .cp {
|
|
15
|
-
color: #f4bf75;
|
|
16
|
-
}
|
|
17
|
-
.highlight .nt {
|
|
18
|
-
color: #f4bf75;
|
|
19
|
-
}
|
|
20
|
-
.highlight .o, .highlight .ow {
|
|
21
|
-
color: #d0d0d0;
|
|
22
|
-
}
|
|
23
|
-
.highlight .p, .highlight .pi {
|
|
24
|
-
color: #d0d0d0;
|
|
25
|
-
}
|
|
26
|
-
.highlight .gi {
|
|
27
|
-
color: #90a959;
|
|
28
|
-
}
|
|
29
|
-
.highlight .gd {
|
|
30
|
-
color: #ac4142;
|
|
31
|
-
}
|
|
32
|
-
.highlight .gh {
|
|
33
|
-
color: #6a9fb5;
|
|
34
|
-
background-color: #151515;
|
|
35
|
-
font-weight: bold;
|
|
36
|
-
}
|
|
37
|
-
.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {
|
|
38
|
-
color: #aa759f;
|
|
39
|
-
}
|
|
40
|
-
.highlight .kc {
|
|
41
|
-
color: #d28445;
|
|
42
|
-
}
|
|
43
|
-
.highlight .kt {
|
|
44
|
-
color: #d28445;
|
|
45
|
-
}
|
|
46
|
-
.highlight .kd {
|
|
47
|
-
color: #d28445;
|
|
48
|
-
}
|
|
49
|
-
.highlight .s, .highlight .sb, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {
|
|
50
|
-
color: #90a959;
|
|
51
|
-
}
|
|
52
|
-
.highlight .sa {
|
|
53
|
-
color: #aa759f;
|
|
54
|
-
}
|
|
55
|
-
.highlight .sr {
|
|
56
|
-
color: #75b5aa;
|
|
57
|
-
}
|
|
58
|
-
.highlight .si {
|
|
59
|
-
color: #8f5536;
|
|
60
|
-
}
|
|
61
|
-
.highlight .se {
|
|
62
|
-
color: #8f5536;
|
|
63
|
-
}
|
|
64
|
-
.highlight .nn {
|
|
65
|
-
color: #f4bf75;
|
|
66
|
-
}
|
|
67
|
-
.highlight .nc {
|
|
68
|
-
color: #f4bf75;
|
|
69
|
-
}
|
|
70
|
-
.highlight .no {
|
|
71
|
-
color: #f4bf75;
|
|
72
|
-
}
|
|
73
|
-
.highlight .na {
|
|
74
|
-
color: #6a9fb5;
|
|
75
|
-
}
|
|
76
|
-
.highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mx {
|
|
77
|
-
color: #90a959;
|
|
78
|
-
}
|
|
79
|
-
.highlight .ss {
|
|
80
|
-
color: #90a959;
|
|
81
|
-
}
|