wiki_md 0.7.8 → 0.8.0

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: 78e50d1a9dd8054d0211a9b8f95813e2bdf86a2e0f9adaa76265ae1c4b27d82d
4
- data.tar.gz: d9eef53c6d9aabb36a31d25347d0db530f769e022f1fd22c5ba2965ff02ff29b
3
+ metadata.gz: 148a00fe5a9fcef0a37edbcd2bc78ede1069dfce519deaa69768ee2c35afd011
4
+ data.tar.gz: ab50dee21bfeb59cdc5f0405c920510dea75d985cac63a45d4677db70f6a619b
5
5
  SHA512:
6
- metadata.gz: 605cb7e3c00af73a846ac9cc074c36affde8bca96313cd4dadacda4ec356aa21f4198fc2292f5a2378c9abb4eb0d71bc242b59ce3c80376acac1e9fa9cd2d7c1
7
- data.tar.gz: 82f1d25062b6177ff301b7070d7fdc7d3bfb160dd9ad7b364c50a751713992686a581156afc9bda9b7817351e881a4afc22499e66f68e33c227ea2037856342c
6
+ metadata.gz: ea1a9af18ed278b4c3e963428c00a637a96058b80672b749a5b6f91a2c9694acc96a50b4802bd37d3c798793ac25e9da1fea724909bad0d731c062dca7e73e9f
7
+ data.tar.gz: 7fe0eeb327e020b8bfa5a26b06fefe724c7ff2c1f2d5791a4ae9d411d15ab6727566baa1da3ee7cbadc52ba1f795c18eb490ef04ab291bf5f726121963b5b104
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/wiki_md.rb CHANGED
@@ -6,6 +6,9 @@ require 'dxsectionx'
6
6
  require 'dynarex-tags'
7
7
 
8
8
 
9
+ class WikiMdReadError < Exception
10
+ end
11
+
9
12
  class WikiMd
10
13
  include RXFHelperModule
11
14
  using ColouredText
@@ -99,6 +102,9 @@ class WikiMd
99
102
  elsif type == :file or type == :dfs
100
103
 
101
104
  @filename = wiki
105
+
106
+ valid, msg = validate s
107
+ raise WikiMdReadError, msg unless valid
102
108
 
103
109
  puts ('s: ' + s.inspect).debug if @debug
104
110
  @dxsx = DxSectionX.new s, debug: debug, autosave: true,
@@ -331,7 +337,13 @@ EOF
331
337
  @dxsx.save filename.sub(/\.md$/, '.xml')
332
338
  @dx = new_index(File.join(@filepath, 'index.xml')) unless @dx
333
339
 
334
- end
340
+ end
341
+
342
+ def sort!()
343
+ @dxsx.dx.sort_by! do |rec|
344
+ rec.element('x').value.lines.first.chomp[/(?<=^# ).*/]
345
+ end
346
+ end
335
347
 
336
348
  def title()
337
349
  @dxsx.dx.title()
@@ -344,12 +356,35 @@ EOF
344
356
  def to_aztoc(base_url: '')
345
357
  Yatoc.new(self.entries.map(&:to_s).join).to_aztoc.gsub(/(?<=href=')([^']+)/, base_url + '\1')
346
358
  end
359
+
360
+ # generates an accordion menu in XML format. It can be rendered to
361
+ # HTML using the Martile gem
362
+ #
363
+ def to_accordion()
364
+
365
+ doc = Rexle.new('<accordion/>')
366
+
367
+ sort!()
368
+
369
+ entries.each do |x|
370
+
371
+ e = Rexle::Element.new('panel')
372
+ e.add_attribute(title: x.heading)
373
+
374
+ body = "<body>%s</body>" % Martile.new(x.body).to_html
375
+ Rexle.new(body).root.elements.each {|element| e.add element }
376
+
377
+ doc.root.add e
378
+
379
+ end
380
+
381
+ doc.root.xml pretty: true
382
+
383
+ end
347
384
 
348
385
  def to_sections()
349
386
 
350
- @dxsx.dx.sort_by! do |rec|
351
- rec.element('x').value.lines.first.chomp[/(?<=^# ).*/]
352
- end
387
+ sort!()
353
388
 
354
389
  @dxsx.to_doc.root.xpath('records/section')\
355
390
  .map {|x| x.xml(pretty: true)}.join("\n")
@@ -485,4 +520,17 @@ EOF
485
520
  dx
486
521
 
487
522
  end
523
+
524
+ def validate(s)
525
+
526
+ a = s[/(?<=--#\n).*/m].split(/(?=\n# )/)
527
+ valid = a.all? {|x| x.lines.last[0] == '+'}
528
+ return true if valid
529
+
530
+ r = a.detect {|x| x.lines.last[0] != '+'}
531
+
532
+ heading = r[/(?<=# ).*/]
533
+
534
+ [false, 'Tagline missing from heading # ' + heading]
535
+ end
488
536
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wiki_md
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,31 +11,31 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwOTE1MTg0NDMwWhcN
15
- MTkwOTE1MTg0NDMwWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDPXxC/
17
- rMAwO24yY94T4JLT3R+znJABZWAW1RiOi3YmNzRvm6G1IRjIh1t+TqHpzjL0tJF9
18
- LKjFRC8yQJrWI/Vv0T/UbdCmScAf+xCDwh2h8nDGcdv+w2rop05ejQk+KmInhFSh
19
- xTD5NnY1V541dwK/a0tmrBO+qO8BDuZlfsnPr0v8uQ76BzB3iKmW3+EYuP/Zrgzc
20
- ezju4kZwFLkBLdcFUT0LKTgVGoK8B4RjBxTTtbjxr6qpbTZv3ysb0BEiXTYx6kAh
21
- 8NSf9iWlSDBNZ7HaTF9+brbvKJnwJgbG1HSa587S5KYcmfCUkYBdahFLN+eTMJYO
22
- 3RxG/f+OITTd/TdgKTrDJfODJpM4uOHWeYExQmdLTvDFsyU0JEqnIxI9XtBmCRkc
23
- xyvH41u9siBzLgmMwQDXeQLMLipXvQD8fG43E/reH4lQG6PYS9ik+Ly8lwTNNUYI
24
- /t7pt/vtPgNpUovrzKasCWLoSplqSiBQ9zF1tMDfyrKZENHaNiAAPdq1CjMCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUhzQNrQMt
26
- GIqVJc3cOBE0wKNhGx4wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwMTIxMjMxNTI0WhcN
15
+ MjEwMTIwMjMxNTI0WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC4Ru7o
17
+ KHnj/uJU7F5Xbp5yPX2YgOohtrEf06+HIdWoYWo0+ThvAuh07+HrmGytjrzxP8wv
18
+ kA9m8tp7Gw92k1aPL60Jwbq1Dpjb68xVh1c4cnTPd5oip6MyVwPQnvSzwNpVZBHj
19
+ fPYHtEnzzSyGLQbhX0nB4ZqguSQBIpo+2n1DdG59ub2j4kJreghEsZfUKgdiSsEh
20
+ Kfk7+ZMq3wd0biOV8yO8pBNthqKcj4VKY1Zi63Dt0jqHImOXXAIuOTxoUpMeZGbL
21
+ N87LZRQu8/Wrj9M6OQu8rS1qV1+tSzPhdovBK/Z+nFuDvtr6WbyDst/RHr0y42mu
22
+ XzSexab8CwuLhfi7WvEnoYoOxBVDlS85OaFIEBbLHb/DqXEluzpGwWOKJ3Y06uF0
23
+ I/ucQCOPOV3lmgyLPfYsf8lB/qxJ+ovHFaxhsoK4wbofWPEknv2bYQ4XzBxSdgIZ
24
+ tjsyN0nwfgftpj9VUj9T9To5nvEHLYYk00zYxJaGn4+vDk90/aTk69abDeUCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUIe+GCuMp
26
+ s6MGlmJRJw9yMMVqzAQwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAnOv8IWAUOwRZHsA3oogowopfrsem12UhwwbMTZTy
29
- 0Apo1L92KobglMlZrVRIz4DRJu6TanMJdTJMByrHo1xGD5p5H3XpGpOj2Xxz0AYa
30
- IUbVAOmUDy84vBIcdsKs2Kvy0YRRgCTWLZxuz0C5aa9TiTKTCRpgo0UE9rhif+WR
31
- gCEmysM3199yhFFurjRulaZuJwkQAznRByquUsvePnMjxXjLK2HpX1HU/6o14pu3
32
- qWoZKECwLdShjxT25j1mLVg9hNwC75Vn6OhEMXl3dOqplg4DPVcbrL9pbDR5MBu7
33
- jmNqGmQZkCvwUb4emxNDvuaaPomy+C1cu3rgVUdQNPd/WyWHIuf1maZhIDWTJalY
34
- tjb0N9prw0HZTv/h2eextC0wHlmDwcyYdPhuFzeeunAI/e+F4FtDFJhgd8vrp5fJ
35
- nEQURKgvgTAqVg9tuqcjEE861mSCPc+12rmUHVBZDxMDQF6CQbnOxrYRIS+7fnia
36
- kikBQtN17cUMyGOrZTVRhVGR
28
+ BgkqhkiG9w0BAQsFAAOCAYEAkJSE2shCsfjnUSnopr7iNTU9V8uuw3MZtOmRFS2K
29
+ ca2afbjPRPZjDSElwU9UfTQd6tJRaXNoaBcmrokxzg+qkbi8YinMg+ULuNb5K+Wq
30
+ TovMj1i7h1ORBTVcu7vWnuycXWCj4jNo0HrquxwvEBcSOwcLP3evJ+EZlJ+YEaxI
31
+ qRiNtkk4g29oPBUtNh/bEmuysSe+eh7Rv+hAN6jeor3Eoc/rgKCiJvNPbP/NTIY0
32
+ So08bfqBUrPqn/wzT8W6KLfAlCzlT7Pfj5Qq5O7wSmPZSYD66Ossm0wC5Uhg/fi4
33
+ Rxh5s0z+KhRLZ/Nk9rOtjMtflV1OHvabvyamw0p6a8cNmb1N1pV/RHULjPEyHJc9
34
+ 3f6jP2IUfB7et2sBm/gB9ZnoZubDoHvy0Sws8qTfQ116vgW9vr2hH4XGB0s9uWiA
35
+ N5hZmnA6M2h3NysLCPRtwS2vMJh8qq6OS5RjU9cc5V08vyIkQ7/YC/x+7kLm5Kn0
36
+ kvoWXxa8gpUBS+qMlSYFDHlq
37
37
  -----END CERTIFICATE-----
38
- date: 2019-02-03 00:00:00.000000000 Z
38
+ date: 2020-01-21 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: dxsectionx
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '0.3'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.3.1
49
+ version: 0.3.2
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '0.3'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.3.1
59
+ version: 0.3.2
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: dynarex-tags
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubygems_version: 3.0.2
106
+ rubygems_version: 3.0.3
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: 'Designed for maintaining many wiki entries within a single document in Markdown
metadata.gz.sig CHANGED
Binary file