jstreebuilder 0.1.2 → 0.2.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/jstreebuilder.rb +114 -16
- data.tar.gz.sig +0 -0
- metadata +22 -2
- 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: a34efda76d17c49fe344f4cbdf3ac4e1e12f0ea04015838f51fdba695fe8c6fb
|
4
|
+
data.tar.gz: 7d7748ad8a279fe205c0832b610463b26d7f5223235da94e5ed8d0a0c264fd92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e93d1ed1bfb1d5607f2a7b41dea63503fbdf6bfc45a4d1a6c7b45922ebfefeb36b52346af29eda10d600f286ab578ef1653150447dcc79164c8fecb737156505
|
7
|
+
data.tar.gz: 1851f88fd3da5fde59ec8d91ff9e6815b3037cc6562167644f7be0fef9407d57c6079d221113a60512e0181906b1a5edb3029004195f709130d87d3fc781a010
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/jstreebuilder.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'polyrex-xslt'
|
7
7
|
require 'polyrex'
|
8
|
-
|
8
|
+
require 'kramdown'
|
9
9
|
|
10
10
|
|
11
11
|
XSLT = %q[
|
@@ -28,7 +28,20 @@ XSLT = %q[
|
|
28
28
|
|
29
29
|
<xsl:element name='li'>
|
30
30
|
|
31
|
-
<
|
31
|
+
<xsl:element name='span'>
|
32
|
+
<xsl:attribute name="class">caret</xsl:attribute>
|
33
|
+
<xsl:choose>
|
34
|
+
<xsl:when test='summary/url != ""'>
|
35
|
+
<xsl:element name='a'>
|
36
|
+
<xsl:attribute name='href'><xsl:value-of select='summary/url'/></xsl:attribute>
|
37
|
+
<xsl:value-of select='summary/title'/>
|
38
|
+
</xsl:element>
|
39
|
+
</xsl:when>
|
40
|
+
<xsl:otherwise>
|
41
|
+
<xsl:value-of select='summary/title'/>
|
42
|
+
</xsl:otherwise>
|
43
|
+
</xsl:choose>
|
44
|
+
</xsl:element>
|
32
45
|
<ul class='nested'>
|
33
46
|
<xsl:apply-templates select='records/entry' />
|
34
47
|
</ul>
|
@@ -115,15 +128,90 @@ for (i = 0; i < toggler.length; i++) {
|
|
115
128
|
}
|
116
129
|
EOF
|
117
130
|
|
131
|
+
class TreeBuilder
|
132
|
+
using ColouredText
|
133
|
+
|
134
|
+
attr_reader :to_tree
|
135
|
+
|
136
|
+
def initialize(s, debug: false)
|
137
|
+
|
138
|
+
@debug = debug
|
139
|
+
html = Kramdown::Document.new(s).to_html
|
140
|
+
puts ('html: ' + html.inspect) if @debug
|
141
|
+
a = scan_headings(html)
|
142
|
+
puts ('a: ' + a.inspect) if @debug
|
143
|
+
|
144
|
+
s2 = make_tree(a)
|
145
|
+
puts ('s2: ' + s2.inspect) if @debug
|
146
|
+
tree = LineTree.new(s2).to_tree
|
147
|
+
|
148
|
+
puts ('tree: ' + tree.inspect).debug if @debug
|
149
|
+
|
150
|
+
doc = Rexle.new(tree)
|
151
|
+
doc.root.each_recursive do |node|
|
152
|
+
|
153
|
+
h = node.attributes
|
154
|
+
puts ('h: ' + h.inspect).debug if @debug
|
155
|
+
h[:url] = '#' + h[:title].strip.downcase.gsub(' ', '-')
|
156
|
+
|
157
|
+
end
|
158
|
+
puts ('doc.xml: ' + doc.xml.inspect) if @debug
|
159
|
+
|
160
|
+
@to_tree = doc.xml pretty: true
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
def make_tree(a, indent=0, hn=1)
|
165
|
+
|
166
|
+
if @debug then
|
167
|
+
puts 'inside make_tree'.debug
|
168
|
+
puts ('a: ' + a.inspect).debug
|
169
|
+
end
|
170
|
+
|
171
|
+
a.map.with_index do |x, i|
|
172
|
+
|
173
|
+
puts ('x: ' + x.inspect).debug if @debug
|
174
|
+
|
175
|
+
if x.is_a? Array then
|
176
|
+
|
177
|
+
puts 'before make_tree()'.info if @debug
|
178
|
+
|
179
|
+
make_tree(x, indent+1, hn)
|
180
|
+
|
181
|
+
else
|
182
|
+
|
183
|
+
next unless x =~ /<h[#{hn}-4]/
|
184
|
+
space = i == 0 ? indent-1 : indent
|
185
|
+
heading = (' ' * space) + x[/(?<=\>)[^<]+/]
|
186
|
+
puts ('heading: ' + heading.inspect).debug if @debug
|
187
|
+
heading
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end.compact.join("\n")
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
def scan_headings(s, n=1)
|
196
|
+
|
197
|
+
s.split(/(?=<h#{n})/).map do |x|
|
198
|
+
x.include?('<h' + (n+1).to_s) ? scan_headings(x, n+1) : x
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
204
|
+
|
118
205
|
|
119
206
|
attr_reader :html, :css, :js
|
120
207
|
|
121
208
|
def initialize(unknown=nil, options={})
|
122
209
|
|
123
210
|
if unknown.is_a? String or unknown.is_a? Symbol then
|
124
|
-
type =
|
211
|
+
type = unkown.to_sym
|
125
212
|
elsif unknown.is_a? Hash
|
126
|
-
options = unknown
|
213
|
+
options = {type: :tree}.merge(unknown)
|
214
|
+
type = options[:type]
|
127
215
|
end
|
128
216
|
|
129
217
|
@debug = options[:debug]
|
@@ -198,30 +286,40 @@ EOF
|
|
198
286
|
|
199
287
|
end
|
200
288
|
|
289
|
+
def build_px(tree)
|
290
|
+
|
291
|
+
schema = 'entries/entry[title, url]'
|
292
|
+
xslt_schema = 'tree/item[@title:title, @url:url]'
|
293
|
+
|
294
|
+
# transform the tree xml into a polyrex document
|
295
|
+
pxsl = PolyrexXSLT.new(schema: schema, xslt_schema: xslt_schema).to_xslt
|
296
|
+
puts 'pxsl: ' + pxsl if @debug
|
297
|
+
Rexslt.new(pxsl, tree).to_s
|
298
|
+
|
299
|
+
end
|
300
|
+
|
201
301
|
|
202
302
|
def tree(opt={})
|
203
303
|
|
204
|
-
|
304
|
+
src = opt[:src]
|
205
305
|
|
206
|
-
s = if
|
306
|
+
s = if src =~ /<tree>/ then
|
207
307
|
|
208
|
-
|
209
|
-
xslt_schema = 'tree/item[@title:title]'
|
210
|
-
|
211
|
-
# transform the tree xml into a polyrex document
|
212
|
-
pxsl = PolyrexXSLT.new(schema: schema, xslt_schema: xslt_schema).to_xslt
|
213
|
-
puts 'pxsl: ' + pxsl if @debug
|
214
|
-
Rexslt.new(pxsl, tree).to_s
|
308
|
+
build_px(src)
|
215
309
|
|
216
|
-
elsif
|
217
|
-
|
310
|
+
elsif src =~ /<?polyrex /
|
311
|
+
src
|
312
|
+
else
|
313
|
+
build_px(TreeBuilder.new(src, debug: @debug).to_tree)
|
218
314
|
end
|
219
315
|
|
316
|
+
puts ('s: ' + s.inspect).debug if @debug
|
220
317
|
px = Polyrex.new(s)
|
221
318
|
|
222
319
|
# transform the polyrex xml into a nested HTML list
|
223
320
|
#@ul = Rexslt.new(px.to_xml, XSLT).to_xml
|
224
|
-
|
321
|
+
puts ('px: ' + px.inspect).debug if @debug
|
322
|
+
puts ('px.to_xml: ' + px.to_xml.inspect).debug if @debug
|
225
323
|
doc = Nokogiri::XML(px.to_xml)
|
226
324
|
xslt = Nokogiri::XSLT(XSLT)
|
227
325
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jstreebuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -97,6 +97,26 @@ dependencies:
|
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 0.2.2
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: kramdown
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 2.1.0
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '2.1'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 2.1.0
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '2.1'
|
100
120
|
description:
|
101
121
|
email: james@jamesrobertson.eu
|
102
122
|
executables: []
|
@@ -126,5 +146,5 @@ requirements: []
|
|
126
146
|
rubygems_version: 3.0.3
|
127
147
|
signing_key:
|
128
148
|
specification_version: 4
|
129
|
-
summary: Generates an HTML tree from XML.
|
149
|
+
summary: Generates an HTML tree from XML or Markdown.
|
130
150
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|