yatoc 0.2.5 → 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
- checksums.yaml.gz.sig +0 -0
- data/lib/yatoc.rb +79 -15
- data.tar.gz.sig +0 -0
- metadata +24 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eb5256965dbce2125694049499d87d0e54b4b226ab93b9f8130a54cd3f3e907
|
4
|
+
data.tar.gz: 7ac46c4f4bdd682a737e5cfae82b26fe8a319f2f74ea58795e351357e59e8fd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b3b8f8e1329c4ec69f14271483d696e1ef602ea05d9dfdca4729d25018d3a283983e775698b5ca29eb958b82bbd71a8f9ca742424398b28ba0cd8b500354bed
|
7
|
+
data.tar.gz: 5629d9fa2af81b478095397c994e1f15ec7ff691bf55895fdd18bfade656b79eb5653c914b1d5219aa159c5e3c3eae2bf50e35e4accb88734afdfa2c25cc1054
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/yatoc.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
require 'pxindex'
|
8
8
|
require 'line-tree'
|
9
|
+
require 'kramdown'
|
9
10
|
|
10
11
|
|
11
12
|
class Yatoc
|
@@ -13,24 +14,32 @@ class Yatoc
|
|
13
14
|
|
14
15
|
attr_reader :to_html, :to_toc, :to_index
|
15
16
|
|
16
|
-
def initialize(
|
17
|
+
def initialize(content, min_sections: 3, numbered: nil, debug: false)
|
17
18
|
|
18
|
-
@numbered, @debug, @
|
19
|
+
@numbered, @debug, @content = numbered, debug, content
|
19
20
|
|
20
|
-
|
21
|
+
|
22
|
+
if content =~ /<index[^>]+>/ then
|
21
23
|
|
22
24
|
@numbered ||= false
|
23
|
-
html2 = gen_index(
|
25
|
+
html2 = gen_index(content)
|
24
26
|
puts 'html2: ' + html2.inspect
|
25
|
-
"%s\n\n<div class='main'>%s</div>" %
|
27
|
+
@to_html = "%s\n\n<div class='main'>%s</div>" % \
|
28
|
+
[html2, content.sub(/<index[^>]+>/, '')]
|
26
29
|
|
27
|
-
elsif
|
30
|
+
elsif content =~ /<ix[^>]+>/ then
|
31
|
+
|
32
|
+
@numbered ||= false
|
33
|
+
html2 = gen_index(content, threshold: nil)
|
34
|
+
puts 'html2: ' + html2.inspect
|
35
|
+
@to_html = "%s\n\n<div class='main'>%s</div>" % \
|
36
|
+
[html2, content.sub(/<ix[^>]+>/, '')]
|
28
37
|
|
29
|
-
|
30
|
-
|
38
|
+
elsif content.scan(/<h\d+/).length > min_sections
|
39
|
+
|
40
|
+
@numbered ||= true
|
41
|
+
gen_toc(content)
|
31
42
|
|
32
|
-
else
|
33
|
-
html
|
34
43
|
end
|
35
44
|
|
36
45
|
end
|
@@ -90,9 +99,49 @@ CSS
|
|
90
99
|
end
|
91
100
|
|
92
101
|
def to_index(threshold: 5)
|
93
|
-
gen_index(@
|
102
|
+
gen_index(@content, threshold: threshold)
|
94
103
|
end
|
95
104
|
|
105
|
+
def to_aztoc()
|
106
|
+
|
107
|
+
a = @content.split(/(?=^# )/).map {|x| x.scan(/^#+ +[^\n]+/)}
|
108
|
+
|
109
|
+
a2 = a.group_by {|x| x.first[/# +(.)/,1]}.sort
|
110
|
+
|
111
|
+
a3 = a2.map do |heading, body|
|
112
|
+
lists = body.map do |x|
|
113
|
+
x.map do |line|
|
114
|
+
line.sub(/^(#+)/) {|y| ' ' * (y.length - 1) + '*'}
|
115
|
+
end.join("\n")
|
116
|
+
end
|
117
|
+
['# ' + heading, lists]
|
118
|
+
end.join("\n\n")
|
119
|
+
|
120
|
+
doc = Rexle.new("<div>%s</div>" % Kramdown::Document.new(a3).to_html)
|
121
|
+
|
122
|
+
doc.root.xpath('//li').each do |li|
|
123
|
+
|
124
|
+
pnode = li.parent.parent
|
125
|
+
|
126
|
+
pg = ''
|
127
|
+
|
128
|
+
pg = if pnode.name == 'li' then
|
129
|
+
pnode.element('a/attribute::href').to_s.strip[/^[^#]+/] + '#' \
|
130
|
+
+ li.text.to_s.strip.gsub(/ /,'_').downcase
|
131
|
+
else
|
132
|
+
|
133
|
+
li.text.to_s.strip.gsub(/ /,'_')
|
134
|
+
end
|
135
|
+
|
136
|
+
e = Rexle::Element.new('a', attributes: {href: pg}, \
|
137
|
+
value: li.text.to_s.strip)
|
138
|
+
li.children[0] = e
|
139
|
+
end
|
140
|
+
|
141
|
+
doc.xml
|
142
|
+
|
143
|
+
end
|
144
|
+
|
96
145
|
private
|
97
146
|
|
98
147
|
def build_html(a)
|
@@ -109,12 +158,27 @@ CSS
|
|
109
158
|
|
110
159
|
end
|
111
160
|
|
161
|
+
def gen_aztoc(html)
|
162
|
+
|
163
|
+
a = scan_headings html, 1
|
164
|
+
puts ('_a: ' + a.inspect).debug if @debug
|
165
|
+
|
166
|
+
s = make_tree(a,0, 1)
|
167
|
+
puts ('s: ' + s.inspect).debug if @debug
|
168
|
+
|
169
|
+
px = PxIndex.new
|
170
|
+
px.import(s)
|
171
|
+
|
172
|
+
@to_index = "<div id='azindex' class='sidenav'>\n%s\n</div>\n\n" \
|
173
|
+
% px.build_html
|
174
|
+
end
|
175
|
+
|
112
176
|
def gen_index(html, threshold: 5)
|
113
177
|
|
114
178
|
a = html.split(/(?=<h2)/)
|
115
179
|
puts ('gen_index a: ' + a.inspect).debug if @debug
|
116
180
|
|
117
|
-
if a.length < threshold then
|
181
|
+
if threshold.nil? or a.length < threshold then
|
118
182
|
|
119
183
|
index = build_html(a)
|
120
184
|
|
@@ -178,7 +242,7 @@ CSS
|
|
178
242
|
end
|
179
243
|
|
180
244
|
|
181
|
-
def make_tree(a, indent=0)
|
245
|
+
def make_tree(a, indent=0, hn=2)
|
182
246
|
|
183
247
|
if @debug then
|
184
248
|
puts 'inside make_tree'.debug
|
@@ -193,11 +257,11 @@ CSS
|
|
193
257
|
|
194
258
|
puts 'before make_tree()'.info if @debug
|
195
259
|
|
196
|
-
make_tree(x, indent+1)
|
260
|
+
make_tree(x, indent+1, hn)
|
197
261
|
|
198
262
|
else
|
199
263
|
|
200
|
-
next unless x =~ /<h[
|
264
|
+
next unless x =~ /<h[#{hn}-4]/
|
201
265
|
space = i == 0 ? indent-1 : indent
|
202
266
|
heading = (' ' * space) + x[/(?<=\>)[^<]+/]
|
203
267
|
puts ('heading: ' + heading.inspect).debug if @debug
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yatoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
7RVV+J+oYjvww0tYfGq6N2tECM5thrQYj3cKLzAEEPYBjoWcPA5bqRXBTNta+k+K
|
36
36
|
tc7DELyeAZoKgZBO2wAc4FQ6
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2019-
|
38
|
+
date: 2019-02-02 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: pxindex
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '0.7'
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.7.
|
69
|
+
version: 0.7.2
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -76,7 +76,27 @@ dependencies:
|
|
76
76
|
version: '0.7'
|
77
77
|
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.7.
|
79
|
+
version: 0.7.2
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: kramdown
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 2.1.0
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.1.0
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '2.1'
|
80
100
|
description:
|
81
101
|
email: james@jamesrobertson.eu
|
82
102
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|