markita 3.4.211004 → 4.0.221124

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a83f3ae0cb87314ee1ea28a3f5c39cd84813d9564e666f4ed474627988b12cf
4
- data.tar.gz: c180906afdac8f5343f99cc86c28d9c6db3ae38fdb8828d65f50f338d7b15757
3
+ metadata.gz: b56d7c82415c4cc7c3987168c61e94dc84a346a5e524db34683529dbb7cf0e0e
4
+ data.tar.gz: f7473780c5c0a1d3de2cc216c2eba8ff541ee337ba0effda0612e9f45e561b2e
5
5
  SHA512:
6
- metadata.gz: 98e97748ae3187b627841670a4744e55ec3a630a49839a069268ef99fdf12cecfe78589b64e7f8ab01fa2c8a4ec7f7fed07535ff5908c423190c19f807c663de
7
- data.tar.gz: 0ca77e473071ef3716812dac6d727ec21229acf42ea73d367913cbfa5ec4bb32449798a3649c74c01aaa9d5640d8d30b31aaf2140f996299a6b6efab64f1694f
6
+ metadata.gz: 266f1406ead43f83eb681010c78f196cf843fe491123689ed5adefbcfbd1fdd104ba039595113d653b761945cbc74c9619349f08530ae3844ed5217a36c7aa03
7
+ data.tar.gz: 2d0c10d772d383e50b97d308ea4cc1bd5b709b1deeef06d3489ddeb17f641761903946155c6b42ca436f86a321638e0e90048094d11340884945070dc3bd3c69
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Markita
2
2
 
3
- * [VERSION 3.4.211004](https://github.com/carlosjhr64/markita/releases)
3
+ * [VERSION 4.0.221124](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
 
@@ -28,9 +28,12 @@ Options:
28
28
  --no_about
29
29
  --no_favicon
30
30
  --no_highlight
31
- --no_navigation
32
31
  --no_login
32
+ --no_navigation
33
33
  --no_plugs
34
+ --no_readme
35
+ Exclusive:
36
+ no_login allowed
34
37
  Types:
35
38
  DIRECTORY /^~?[\/\w\.]+$/
36
39
  BIND /^[\w\.]+$/
@@ -60,11 +63,11 @@ Markdown:
60
63
 
61
64
  Markdown:
62
65
 
63
- ![ Centered Image ](/img/image.png)
64
- ![Left Floating ](/img/image.png)
65
- ![ Right Floating](/img/image.png)
66
+ ![:Centered Image:](/img/image.png)
67
+ ![Left Floating:](/img/image.png)
68
+ ![:Right Floating](/img/image.png)
66
69
  Image centered above.
67
- Image to the left with width and height set.
70
+ Image to the left.
68
71
  Image to the right.
69
72
  And set a HR bar below.
70
73
  ---
@@ -88,9 +91,11 @@ Markdown:
88
91
  A get method form without submit button on single field:
89
92
  ! Google:[q] (https://www.google.com/search)
90
93
 
91
- A post method form due to the password field with
92
- a submit button due to multiple fields:
93
- ! Username:[user] Password:[*pwd] (/login.html)
94
+ A post method form with a password field
95
+ and a submit button due to multiple fields.
96
+ Note the `*` in front of `pwd` marking it as a password field,
97
+ and the ending `!` marking the route as a post:
98
+ ! Username:[user] Password:[*pwd] (/login.html)!
94
99
 
95
100
  A multi-line form with default entry and hidden field:
96
101
  ! Name:[user] [status="active"] (/register.html)
@@ -177,9 +182,10 @@ Markdown:
177
182
  ### Inline links, code, bold, italic, strikes, and underline
178
183
 
179
184
  <p>
180
- The <b>bold</b> and <i>italics</i> <s>strikes</s> at <u>underlined</u>,
181
- while a <a href="#Markita">link to #Markita</a>
182
- sees the <code>~ code ~ "a*b*c"</code> to <a href="https://github.com">https://github.com</a>.
185
+ The <b>bold</b> and <i>italics</i> <s>strikes</s> at <u>underlined</u>, while a
186
+ <a href="#Markita">link to #Markita</a>
187
+ sees the <code>~ code ~ "a*b*c"</code> to
188
+ <a href="https://github.com">https://github.com</a>.
183
189
  </p>
184
190
 
185
191
  Markdown:
@@ -211,10 +217,9 @@ Markdown:
211
217
  * Point A
212
218
  * Point B
213
219
 
214
- : Word:
215
- : Definition of the word
216
- : Symbol:
217
- : Usage for the symbol
220
+ + Word: Definition of the word
221
+ + Symbol:
222
+ + Usage for the symbol
218
223
 
219
224
  ### Block-quote
220
225
 
@@ -287,7 +292,7 @@ Markdown:
287
292
 
288
293
  There once was a man from Nantucket[^1]
289
294
  Who kept all his cash[^2] in a bucket.
290
- But his daugter, named Nan,
295
+ But his daughter, named Nan,
291
296
  Ran away with a man
292
297
  And as for the bucket, Natucket.[^3]
293
298
 
@@ -346,7 +351,7 @@ $ GET https://raw.githubusercontent.com/carlosjhr64/markita/main/plug/todotxt.rb
346
351
  ```
347
352
  ## LICENSE
348
353
 
349
- Copyright 2021 CarlosJHR64
354
+ Copyright 2022 CarlosJHR64
350
355
 
351
356
  Permission is hereby granted, free of charge,
352
357
  to any person obtaining a copy of this software and
data/bin/markita CHANGED
@@ -14,9 +14,12 @@ Options:
14
14
  --no_about
15
15
  --no_favicon
16
16
  --no_highlight
17
- --no_navigation
18
17
  --no_login
18
+ --no_navigation
19
19
  --no_plugs
20
+ --no_readme
21
+ Exclusive:
22
+ no_login allowed
20
23
  Types:
21
24
  DIRECTORY /^~?[\\/\\w\\.]+$/
22
25
  BIND /^[\\w\\.]+$/
data/lib/markita/base.rb CHANGED
@@ -24,12 +24,21 @@ class Base < Sinatra::Base
24
24
  Markdown.new(key).filepath filepath
25
25
  end
26
26
 
27
- get IMAGE_PATH do |path, *_|
28
- send_file File.join(ROOT, path)
27
+ get SEND_FILE do |path|
28
+ pass unless params.length==1 and
29
+ filepath = File.join(ROOT, path) and
30
+ File.exist?(filepath)
31
+ send_file filepath
29
32
  end
30
33
 
31
34
  get '/' do
32
- redirect '/index'
35
+ filepath = File.join ROOT, 'index.md'
36
+ if File.exist? filepath
37
+ Markdown.new('index').filepath filepath
38
+ else
39
+ redirect '/about.html' unless OPTIONS&.no_about
40
+ raise Sinatra::NotFound
41
+ end
33
42
  end
34
43
 
35
44
  not_found do
@@ -6,7 +6,8 @@ module Markita
6
6
 
7
7
  ROOT = File.expand_path OPTIONS&.root || '~/vimwiki'
8
8
  raise "Missing site root directory: "+ROOT unless File.directory? ROOT
9
- APPDATA = File.join File.dirname(File.dirname __dir__), 'data'
9
+ APPDIR = File.dirname File.dirname __dir__
10
+ APPDATA = File.join APPDIR, 'data'
10
11
  PATH = lambda do |basename|
11
12
  [ROOT, APPDATA].map{ File.join _1, basename}.detect{ File.exist? _1}
12
13
  end
@@ -14,8 +15,8 @@ module Markita
14
15
 
15
16
  EMOJIS = Hash[*File.read(PATH['emojis.tsv']).split(/\s+/)]
16
17
 
17
- PAGE_KEY = %r{/(\w[\w\/\-]*\w)}
18
- IMAGE_PATH = %r{/(\w[\w\/\-]*\w\.((png)|(gif)))}
18
+ PAGE_KEY = %r{/(\w[\w\/\-]*\w)}
19
+ SEND_FILE = %r{/(\w[\w\/\-]*\w\.\w+)}
19
20
 
20
21
  START_TIME = Time.now
21
22
  end
@@ -63,15 +63,16 @@ class Markdown
63
63
  B = lambda {|m| "<b>#{m[1]}</b>"}
64
64
 
65
65
  CODEx = /`([^`]+)`/
66
- CODE = lambda {|m| "<code>#{m[1]}</code>"}
66
+ CODE = lambda {|m| "<code>#{m[1].gsub('<','&lt;')}</code>"}
67
67
 
68
68
  Ax = /\[([^\[\]]+)\]\(([^()]+)\)/
69
69
  def anchor(m)
70
70
  href = ((_=m[2]).match?(/^\d+$/) and @metadata[_] or _)
71
- %Q(<a href="#{href}">#{m[1]}</a>)
71
+ text = Markdown.tag(m[1], EMOJIx, EMOJI)
72
+ %Q(<a href="#{href}">#{text}</a>)
72
73
  end
73
74
 
74
- URLx = %r(\[(https?://[\w\.\-\/\&\+\?\%]+)\])
75
+ URLx = %r((https?://[\w\.\-\/\&\+\?\%]+))
75
76
  URL = lambda {|m| %Q(<a href="#{m[1]}">#{m[1]}</a>)}
76
77
 
77
78
  EMOJIx = /:(\w+):/
@@ -88,13 +89,12 @@ class Markdown
88
89
 
89
90
  def Markdown.tag(entry, regx, m2string, &block)
90
91
  if m = regx.match(entry)
91
- pre_match = (block ? block.call(m.pre_match) : m.pre_match)
92
- string = pre_match + m2string[m]
93
- post_match = m.post_match
94
- while m = regx.match(post_match)
92
+ string = ''
93
+ while m
95
94
  pre_match = (block ? block.call(m.pre_match) : m.pre_match)
96
95
  string << pre_match + m2string[m]
97
96
  post_match = m.post_match
97
+ m = regx.match(post_match)
98
98
  end
99
99
  string << (block ? block.call(post_match) : post_match)
100
100
  return string
@@ -130,15 +130,16 @@ class Markdown
130
130
  # Ordered list
131
131
  ORDERED = /^( {0,3})\d+\. (\S.*)$/
132
132
  PARSERS << :ordered
133
- def ordered(md=ORDERED.match(@line), level=0)
134
- return false unless md
133
+ def ordered(md=nil)
134
+ md ||= ORDERED.match(@line) or return false
135
+ level = md[1].length
135
136
  @html << "<ol#{@opt[:attributes]}>\n"
136
137
  @opt.delete(:attributes)
137
138
  while md and level==md[1].length
138
139
  @html << " <li>#{inline(md[2])}</li>\n"
139
140
  if md = (@line=@file.gets)&.match(ORDERED)
140
141
  if level < md[1].length
141
- ordered(md, md[1].length)
142
+ ordered(md)
142
143
  md = @line&.match(ORDERED)
143
144
  end
144
145
  end
@@ -148,7 +149,7 @@ class Markdown
148
149
  end
149
150
 
150
151
  # Paragraph
151
- PARAGRAPHS = /^[\[\(`*"~_]?\w/
152
+ PARAGRAPHS = /^[\[\(*`'"~_]?:?\w/
152
153
  PARSERS << :paragraphs
153
154
  def paragraphs
154
155
  md = PARAGRAPHS.match(@line) or return false
@@ -156,7 +157,10 @@ class Markdown
156
157
  @opt.delete(:attributes)
157
158
  while md
158
159
  @html << inline(@line)
159
- md = (@line=@file.gets)&.match PARAGRAPHS
160
+ while (@line=@file.gets)&.start_with?('<')
161
+ @html << @line # Exceptional HTML injection into the paragraph
162
+ end
163
+ md = @line&.match PARAGRAPHS
160
164
  end
161
165
  @html << "</p>\n"
162
166
  true
@@ -165,15 +169,16 @@ class Markdown
165
169
  # Unordered list
166
170
  UNORDERED = /^( {0,3})[*] (\S.*)$/
167
171
  PARSERS << :unordered
168
- def unordered(md=UNORDERED.match(@line), level=0)
169
- return false unless md
172
+ def unordered(md=nil)
173
+ md ||= UNORDERED.match(@line) or return false
174
+ level = md[1].length
170
175
  @html << "<ul#{@opt[:attributes]}>\n"
171
176
  @opt.delete(:attributes)
172
177
  while md and level==md[1].length
173
178
  @html << " <li>#{inline(md[2])}</li>\n"
174
179
  if md = (@line=@file.gets)&.match(UNORDERED)
175
180
  if level < md[1].length
176
- unordered(md, md[1].length)
181
+ unordered(md)
177
182
  md = @line&.match(UNORDERED)
178
183
  end
179
184
  end
@@ -202,16 +207,22 @@ class Markdown
202
207
  end
203
208
 
204
209
  # Definition list
205
- DEFINITIONS = /^: (.*)$/
210
+ DEFINITIONS = /^[+] (.*)$/
206
211
  PARSERS << :definitions
207
212
  def definitions
208
213
  md = DEFINITIONS.match(@line) or return false
209
214
  @html << "<dl#{@opt[:attributes]}>\n"
210
215
  @opt.delete(:attributes)
211
216
  while md
212
- item = md[1]
213
- @html << ((item[-1]==':')? "<dt>#{inline(item[0..-2])}</dt>\n" :
214
- "<dd>#{inline(item)}</dd>\n")
217
+ case md[1]
218
+ when /(.*): (.*)$/
219
+ @html << "<dt>#{inline $1.strip}</dt>\n"
220
+ @html << "<dd>#{inline $2.strip}</dd>\n"
221
+ when /(.*):$/
222
+ @html << "<dt>#{inline $1.strip}</dt>\n"
223
+ else
224
+ @html << "<dd>#{inline md[1].strip}</dd>\n"
225
+ end
215
226
  md = (@line=@file.gets)&.match DEFINITIONS
216
227
  end
217
228
  @html << "</dl>\n"
@@ -234,22 +245,27 @@ class Markdown
234
245
  end
235
246
 
236
247
  # Block-quote
237
- BLOCKQS = /^> (.*)$/
248
+ BLOCKQS = /^( {0,3})> (.*)$/
238
249
  PARSERS << :blockqs
239
- def blockqs
240
- md = BLOCKQS.match(@line) or return false
250
+ def blockqs(md=nil)
251
+ md ||= BLOCKQS.match(@line) or return false
252
+ level = md[1].length
241
253
  @html << "<blockquote#{@opt[:attributes]}>\n"
242
254
  @opt.delete(:attributes)
243
- while md
244
- @html << inline(md[1])
255
+ while md and level==md[1].length
256
+ @html << inline(md[2])
245
257
  @html << "\n"
246
- md = (@line=@file.gets)&.match BLOCKQS
258
+ if md = (@line=@file.gets)&.match(BLOCKQS)
259
+ if level < md[1].length
260
+ blockqs(md)
261
+ md = @line&.match(BLOCKQS)
262
+ end
263
+ end
247
264
  end
248
265
  @html << "</blockquote>\n"
249
266
  true
250
267
  end
251
268
 
252
-
253
269
  # Code
254
270
  CODES = /^[`~]{3}\s*(\w+)?$/
255
271
  PARSERS << :codes
@@ -375,11 +391,11 @@ class Markdown
375
391
  alt,src,href=md[1],*md[2].strip.split(/\s+/,2)
376
392
  style = ' '
377
393
  case alt
378
- when /^ .* $/
394
+ when /^:.*:$/
379
395
  style = %Q( style="display: block; margin-left: auto; margin-right: auto;" )
380
- when / $/
396
+ when /:$/
381
397
  style = %Q( style="float:left;" )
382
- when /^ /
398
+ when /^:/
383
399
  style = %Q( style="float:right;" )
384
400
  end
385
401
  if /(\d+)x(\d+)/.match alt
@@ -400,52 +416,48 @@ class Markdown
400
416
  PARSERS << :forms
401
417
  def forms
402
418
  md = FORMS.match(@line) or return false
403
- form = []
404
- n,fields,submit,method = 0,0,nil,nil
405
- action = (_=/\(([^\(\)]*)\)$/.match(@line))? _[1] : nil
419
+ fields,nl,submit = 0,false,nil
420
+ action = (_=/\(([^\(\)]*)\)!?$/.match(@line))? %Q( action="#{_[1]}") : nil
421
+ method = @line.match?(/!$/) ? ' method="post"' : nil
422
+ @html << %Q(<form#{action}#{method}#{@opt[:attributes]}>\n)
423
+ @opt.delete(:attributes)
406
424
  while md
407
- n += 1
408
- form << ' <br>' if n > 1
425
+ @html << " <br>\n" if nl
409
426
  @line.scan(FIELDS).each do |field, pwd, name, value|
410
- method ||= ' method="post"' if pwd
411
427
  field &&= field[0...-1]
412
428
  value &&= value[2...-1]
413
429
  if field
414
430
  type = (pwd)? 'password' : 'text'
415
431
  if value
416
432
  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>"
433
+ @html << %Q(#{field}:<select name="#{name}">\n)
434
+ values.each do |value|
435
+ fields += 1
436
+ @html << %Q( <option value="#{value}">#{value}</option>\n)
437
+ end
438
+ @html << "</select>\n"
423
439
  else
424
- fields += 1
425
- form << %Q{ #{field}:<input type="#{type}" name="#{name}" value="#{value}">}
440
+ fields += 1
441
+ @html << %Q{ #{field}:<input type="#{type}" name="#{name}" value="#{value}">\n}
426
442
  end
427
443
  else
428
444
  fields += 1
429
- form << %Q{ #{field}:<input type="#{type}" name="#{name}">}
445
+ @html << %Q{ #{field}:<input type="#{type}" name="#{name}">\n}
430
446
  end
431
447
  elsif name=='submit'
432
448
  submit = value
433
449
  else
434
- form << %Q{ <input type="hidden" name="#{name}" value="#{value}">}
450
+ @html << %Q{ <input type="hidden" name="#{name}" value="#{value}">\n}
435
451
  end
436
452
  end
437
- md = (@line=@file.gets)&.match FORMS
453
+ md=(@line=@file.gets)&.match(FORMS) and nl=true
438
454
  end
439
455
  if submit or not fields==1
440
456
  submit ||= 'Submit'
441
- form << ' <br>' if n > 1
442
- form << %Q( <input type="submit" value="#{submit}">)
457
+ @html << " <br>\n" if nl
458
+ @html << %Q( <input type="submit" value="#{submit}">\n)
443
459
  end
444
- form.unshift %Q(<form action="#{action}"#{method}#{@opt[:attributes]}>)
445
- form << %Q(</form>)
446
- @html << form.join("\n")
447
- @html << "\n"
448
- @opt.delete(:attributes)
460
+ @html << %Q(</form>\n)
449
461
  true
450
462
  end
451
463
 
@@ -457,17 +469,17 @@ form << %Q{ #{field}:<input type="#{type}" name="#{name}" value="#{value}">}
457
469
  if File.exist?(filename=File.join(ROOT, md[1]))
458
470
  extension,lang = filename.split('.').last,nil
459
471
  unless extension=='html'
460
- lang = Rouge::Lexer.find extension
472
+ lang = Rouge::Lexer.find(extension) unless extension=='txt'
461
473
  klass = lang ? ' class="highlight"' : nil
462
474
  @html << "<pre#{klass}#{@opt[:attributes]}>"
463
475
  @opt.delete(:attributes)
464
- @html << '<code>' unless extension=='txt'
476
+ @html << '<code>' if lang
465
477
  @html << "\n"
466
478
  end
467
479
  code = File.read(filename)
468
480
  @html << (lang ? ROUGE.format(lang.new.lex(code)) : code)
469
481
  unless extension=='html'
470
- @html << '</code>' unless extension=='txt'
482
+ @html << '</code>' if lang
471
483
  @html << '</pre>'
472
484
  @html << "\n"
473
485
  end
@@ -1,3 +1,3 @@
1
1
  module Markita
2
- NAVIGATION << %Q(![ Navigation](/favicon.ico /index)\n)
2
+ NAVIGATION << %Q(![:Navigation](/favicon.ico /index)\n)
3
3
  end
@@ -0,0 +1,7 @@
1
+ module Markita
2
+ class Base
3
+ get '/readme.html' do
4
+ Markdown.new('README').markdown File.read File.join(APPDIR,'README.md')
5
+ end
6
+ end
7
+ end
@@ -6,7 +6,7 @@ class Preprocess
6
6
  end
7
7
 
8
8
  def gets
9
- if line = @file.gets
9
+ while line = @file.gets
10
10
  case line
11
11
  when @regx
12
12
  line = @template if @template
@@ -14,17 +14,17 @@ class Preprocess
14
14
  line = line.gsub("&#{name.downcase};", value)
15
15
  line = line.gsub("&#{name.upcase};", CGI.escape(value))
16
16
  end
17
+ return line
17
18
  when %r(^! regx = /(.*)/$)
18
19
  @regx = Regexp.new $1
19
- line = gets
20
20
  when %r(^! template = "(.*)"$)
21
21
  @template = $1+"\n"
22
- line = gets
23
22
  else
24
23
  @regx &&= (@template=nil)
24
+ return line
25
25
  end
26
26
  end
27
- line
27
+ return nil
28
28
  end
29
29
  end
30
30
  end
data/lib/markita.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Markita
2
- VERSION = '3.4.211004'
2
+ VERSION = '4.0.221124'
3
3
 
4
4
  def self.run!
5
5
  # Standard libraries
@@ -16,12 +16,15 @@ module Markita
16
16
  require_relative 'markita/markdown.rb'
17
17
  require_relative 'markita/base.rb'
18
18
  # Plugs
19
+ require_relative 'markita/plug/about.rb' unless OPTIONS&.no_about
19
20
  require_relative 'markita/plug/favicon.rb' unless OPTIONS&.no_favicon
20
21
  require_relative 'markita/plug/highlight.rb' unless OPTIONS&.no_highlight
21
- require_relative 'markita/plug/navigation.rb' unless OPTIONS&.no_navigation
22
22
  require_relative 'markita/plug/login.rb' unless OPTIONS&.no_login
23
- require_relative 'markita/plug/about.rb' unless OPTIONS&.no_about
23
+ require_relative 'markita/plug/navigation.rb' unless OPTIONS&.no_navigation
24
24
  require_relative 'markita/plug/plugs.rb' unless OPTIONS&.no_plugs
25
+ require_relative 'markita/plug/readme.rb' unless OPTIONS&.no_readme
25
26
  Base.run!
26
27
  end
27
28
  end
29
+ # Requires:
30
+ #`ruby`
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.211004
4
+ version: 4.0.221124
5
5
  platform: ruby
6
6
  authors:
7
7
  - CarlosJHR64
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-04 00:00:00.000000000 Z
11
+ date: 2022-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: help_parser
@@ -36,40 +36,40 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '3.26'
39
+ version: '4.0'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 3.26.1
42
+ version: 4.0.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '3.26'
49
+ version: '4.0'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 3.26.1
52
+ version: 4.0.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: sinatra
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '2.1'
59
+ version: '3.0'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 2.1.0
62
+ version: 3.0.3
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '2.1'
69
+ version: '3.0'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 2.1.0
72
+ version: 3.0.3
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: thin
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -118,12 +118,13 @@ files:
118
118
  - lib/markita/plug/login.rb
119
119
  - lib/markita/plug/navigation.rb
120
120
  - lib/markita/plug/plugs.rb
121
+ - lib/markita/plug/readme.rb
121
122
  - lib/markita/preprocess.rb
122
123
  homepage: https://github.com/carlosjhr64/markita
123
124
  licenses:
124
125
  - MIT
125
126
  metadata: {}
126
- post_install_message:
127
+ post_install_message:
127
128
  rdoc_options: []
128
129
  require_paths:
129
130
  - lib
@@ -137,9 +138,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
138
  - - ">="
138
139
  - !ruby/object:Gem::Version
139
140
  version: '0'
140
- requirements: []
141
- rubygems_version: 3.2.22
142
- signing_key:
141
+ requirements:
142
+ - 'ruby: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [aarch64-linux]'
143
+ rubygems_version: 3.3.7
144
+ signing_key:
143
145
  specification_version: 4
144
146
  summary: A Sinatra Markdown server.
145
147
  test_files: []