pseudohikiparser 0.0.6.develop → 0.0.6
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/lib/pseudohiki/blockparser.rb +15 -115
- data/lib/pseudohiki/htmlformat.rb +0 -65
- data/lib/pseudohiki/markdownformat.rb +1 -8
- data/lib/pseudohiki/version.rb +1 -1
- data/lib/pseudohikiparser.rb +0 -2
- data/test/test_blockparser.rb +0 -67
- data/test/test_htmlelement_utils.rb +0 -11
- data/test/test_htmlformat.rb +0 -413
- data/test/test_markdownformat.rb +0 -153
- data/test/test_plaintextformat.rb +0 -85
- metadata +4 -5
- data/lib/pseudohiki/sinatra_helpers.rb +0 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d25782e47a5041970f1724029b8a048fd453c302
|
|
4
|
+
data.tar.gz: 8b2bfb67cf20795f7c43c8de5df1f7df986d72fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c993101868e60327fe8ad381fb1e4a2999c812ce567d61bad8e018b7321dc075cfff7465ed93fea751886a133531a1afc9933fdfa67b909a77dd6b8a3fa628fe
|
|
7
|
+
data.tar.gz: 50ebcfe2480943bc124d38f854a2c5755ff071f745530f3e336fd2815df796310c91dd4735249027d4b189770e6b18ace56b305a4759a7fc87e0c2d565f590ac
|
|
@@ -39,21 +39,14 @@ module PseudoHiki
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
class BlockStack < TreeStack
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
current_node.parse_leafs(breaker)
|
|
46
|
-
pop
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def current_heading_level
|
|
50
|
-
i = @stack.rindex {|node| node.kind_of? BlockElement::HeadingNode }
|
|
51
|
-
@stack[i].level || 0
|
|
42
|
+
def pop
|
|
43
|
+
current_node.parse_leafs
|
|
44
|
+
super
|
|
52
45
|
end
|
|
53
46
|
end
|
|
54
47
|
|
|
55
48
|
class BlockLeaf < BlockStack::Leaf
|
|
56
|
-
attr_accessor :level, :node_id
|
|
49
|
+
attr_accessor :level, :node_id
|
|
57
50
|
|
|
58
51
|
class << self
|
|
59
52
|
attr_accessor :head_re
|
|
@@ -89,7 +82,7 @@ module PseudoHiki
|
|
|
89
82
|
super(stack)
|
|
90
83
|
end
|
|
91
84
|
|
|
92
|
-
def parse_leafs
|
|
85
|
+
def parse_leafs
|
|
93
86
|
parsed = InlineParser.parse(join)
|
|
94
87
|
clear
|
|
95
88
|
concat(parsed)
|
|
@@ -139,10 +132,6 @@ module PseudoHiki
|
|
|
139
132
|
first.level if first # @cached_level ||= (first.level if first)
|
|
140
133
|
end
|
|
141
134
|
|
|
142
|
-
def decorator
|
|
143
|
-
first.decorator if first
|
|
144
|
-
end
|
|
145
|
-
|
|
146
135
|
def push_self(stack)
|
|
147
136
|
@stack = stack
|
|
148
137
|
super(stack)
|
|
@@ -152,11 +141,11 @@ module PseudoHiki
|
|
|
152
141
|
not (kind_of? breaker.block and level == breaker.level)
|
|
153
142
|
end
|
|
154
143
|
|
|
155
|
-
def parse_leafs
|
|
144
|
+
def parse_leafs; end
|
|
156
145
|
|
|
157
146
|
def add_leaf(line, blockparser)
|
|
158
147
|
leaf = create_leaf(line, blockparser)
|
|
159
|
-
blockparser.stack.
|
|
148
|
+
blockparser.stack.pop while blockparser.breakable?(leaf)
|
|
160
149
|
blockparser.stack.push leaf
|
|
161
150
|
end
|
|
162
151
|
|
|
@@ -168,8 +157,8 @@ module PseudoHiki
|
|
|
168
157
|
end
|
|
169
158
|
|
|
170
159
|
class NonNestedBlockNode < BlockNode
|
|
171
|
-
def parse_leafs
|
|
172
|
-
each {|leaf| leaf.parse_leafs
|
|
160
|
+
def parse_leafs
|
|
161
|
+
each {|leaf| leaf.parse_leafs }
|
|
173
162
|
end
|
|
174
163
|
end
|
|
175
164
|
|
|
@@ -187,15 +176,13 @@ module PseudoHiki
|
|
|
187
176
|
end
|
|
188
177
|
end
|
|
189
178
|
|
|
190
|
-
class UnmatchedSectioningTagError < StandardError; end
|
|
191
|
-
|
|
192
179
|
module BlockElement
|
|
193
180
|
{
|
|
194
|
-
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf
|
|
181
|
+
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf),
|
|
195
182
|
NonNestedBlockLeaf => %w(QuoteLeaf ParagraphLeaf),
|
|
196
183
|
NestedBlockLeaf => %w(HeadingLeaf),
|
|
197
184
|
ListTypeLeaf => %w(ListLeaf EnumLeaf),
|
|
198
|
-
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode
|
|
185
|
+
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode),
|
|
199
186
|
NonNestedBlockNode => %w(QuoteNode ParagraphNode),
|
|
200
187
|
NestedBlockNode => %w(HeadingNode),
|
|
201
188
|
ListTypeBlockNode => %w(ListNode EnumNode),
|
|
@@ -218,100 +205,15 @@ module PseudoHiki
|
|
|
218
205
|
attr_accessor :in_block_tag
|
|
219
206
|
|
|
220
207
|
def add_leaf(line, blockparser)
|
|
221
|
-
return @stack.
|
|
208
|
+
return @stack.pop if VERBATIM_END.match? line
|
|
222
209
|
return super(line, blockparser) unless @in_block_tag
|
|
223
210
|
line = " #{line}" if BlockNodeEnd.head_re.match? line and not @in_block_tag
|
|
224
211
|
@stack.push VerbatimLeaf.create(line, @in_block_tag)
|
|
225
212
|
end
|
|
226
213
|
end
|
|
227
214
|
|
|
228
|
-
class DecoratorNode
|
|
229
|
-
DECORATOR_PAT = /\A(?:([^\[\]:]+))?(?:\[([^\[\]]+)\])?(?::\s*(\S.*))?/o
|
|
230
|
-
LABEL_SEP = [":"]
|
|
231
|
-
|
|
232
|
-
class DecoratorItem < Struct.new(:string, :type, :id, :value)
|
|
233
|
-
def self.create(leaf)
|
|
234
|
-
m = DECORATOR_PAT.match(leaf.join)
|
|
235
|
-
return nil unless m
|
|
236
|
-
args = m.to_a
|
|
237
|
-
if i = leaf.index(LABEL_SEP)
|
|
238
|
-
value = leaf.dup
|
|
239
|
-
value.shift(i + 1)
|
|
240
|
-
args[-1] = lstrip_value!(value)
|
|
241
|
-
end
|
|
242
|
-
self.new(*args)
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
def self.lstrip_value!(value)
|
|
246
|
-
head_val = value[0][0]
|
|
247
|
-
if head_val.kind_of? String and head_val.start_with? " ".freeze
|
|
248
|
-
value[0][0] = head_val.lstrip
|
|
249
|
-
end
|
|
250
|
-
value
|
|
251
|
-
end
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
def parse_leafs(breaker)
|
|
255
|
-
decorator = {}
|
|
256
|
-
breaker.decorator = decorator
|
|
257
|
-
@stack.remove_current_node.each do |leaf|
|
|
258
|
-
if item = DecoratorItem.create(leaf)
|
|
259
|
-
decorator[item.type || :id] = item
|
|
260
|
-
end
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
def breakable?(breaker)
|
|
265
|
-
return super if breaker.kind_of? DecoratorLeaf
|
|
266
|
-
parse_leafs(breaker)
|
|
267
|
-
@stack.current_node.breakable?(breaker)
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
class DecoratorLeaf
|
|
272
|
-
def push_sectioning_node(stack, node_class)
|
|
273
|
-
node = node_class.new
|
|
274
|
-
m = DecoratorNode::DECORATOR_PAT.match(join)
|
|
275
|
-
node.node_id = m[2]
|
|
276
|
-
node.section_level = stack.current_heading_level if node.kind_of? SectioningNode
|
|
277
|
-
stack.push(node)
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
def push_self(stack)
|
|
281
|
-
decorator_type = self[0][0]
|
|
282
|
-
if decorator_type.start_with? "begin[".freeze
|
|
283
|
-
push_sectioning_node(stack, SectioningNode)
|
|
284
|
-
elsif decorator_type.start_with? "end[".freeze
|
|
285
|
-
push_sectioning_node(stack, SectioningNodeEnd)
|
|
286
|
-
else
|
|
287
|
-
super
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
class SectioningNode
|
|
293
|
-
attr_accessor :section_level
|
|
294
|
-
|
|
295
|
-
def breakable?(breaker)
|
|
296
|
-
breaker.kind_of? HeadingLeaf and @section_level >= breaker.level
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
class SectioningNodeEnd
|
|
301
|
-
def push_self(stack)
|
|
302
|
-
n = stack.stack.rindex do |node|
|
|
303
|
-
node.kind_of? SectioningNode and node.node_id == node_id
|
|
304
|
-
end
|
|
305
|
-
raise UnmatchedSectioningTagError unless n
|
|
306
|
-
stack.pop until stack.stack.length == n
|
|
307
|
-
rescue UnmatchedSectioningTagError => e
|
|
308
|
-
STDERR.puts "#{e}: The start tag for '#{node_id}' is not found."
|
|
309
|
-
# FIXME: The handling of this error should be changed appropriately.
|
|
310
|
-
end
|
|
311
|
-
end
|
|
312
|
-
|
|
313
215
|
class QuoteNode
|
|
314
|
-
def parse_leafs
|
|
216
|
+
def parse_leafs
|
|
315
217
|
self[0] = BlockParser.parse(self[0], AutoLink::Off)
|
|
316
218
|
end
|
|
317
219
|
end
|
|
@@ -372,8 +274,7 @@ module PseudoHiki
|
|
|
372
274
|
[HrLeaf, HrNode],
|
|
373
275
|
[ListLeaf, ListNode],
|
|
374
276
|
[EnumLeaf, EnumNode],
|
|
375
|
-
[BlockNodeEnd, BlockNodeEnd]
|
|
376
|
-
[DecoratorLeaf, DecoratorNode]
|
|
277
|
+
[BlockNodeEnd, BlockNodeEnd] # special case
|
|
377
278
|
].each do |leaf, node|
|
|
378
279
|
PARENT_NODE[leaf] = node
|
|
379
280
|
end
|
|
@@ -386,7 +287,6 @@ module PseudoHiki
|
|
|
386
287
|
['!', HeadingLeaf],
|
|
387
288
|
['""', QuoteLeaf],
|
|
388
289
|
['||', TableLeaf],
|
|
389
|
-
['//@', DecoratorLeaf],
|
|
390
290
|
['//', CommentOutLeaf],
|
|
391
291
|
['----\s*$', HrLeaf]]
|
|
392
292
|
|
|
@@ -432,7 +332,7 @@ module PseudoHiki
|
|
|
432
332
|
def read_lines(lines)
|
|
433
333
|
each_line = lines.respond_to?(:each_line) ? :each_line : :each
|
|
434
334
|
lines.send(each_line) {|line| @stack.current_node.add_leaf(line, self) }
|
|
435
|
-
@stack.
|
|
335
|
+
@stack.pop
|
|
436
336
|
end
|
|
437
337
|
end
|
|
438
338
|
|
|
@@ -78,7 +78,6 @@ module PseudoHiki
|
|
|
78
78
|
|
|
79
79
|
def visit(tree, memo)
|
|
80
80
|
htmlelement = create_element(tree)
|
|
81
|
-
decorate(htmlelement, tree)
|
|
82
81
|
push_visited_results(htmlelement, tree, memo)
|
|
83
82
|
htmlelement
|
|
84
83
|
end
|
|
@@ -97,21 +96,6 @@ module PseudoHiki
|
|
|
97
96
|
chunks.push tree
|
|
98
97
|
end
|
|
99
98
|
|
|
100
|
-
def decorate(htmlelement, tree)
|
|
101
|
-
each_decorator(htmlelement, tree) do |elm, decorator|
|
|
102
|
-
elm[CLASS] = HtmlElement.escape(decorator[CLASS].id) if decorator[CLASS]
|
|
103
|
-
if id_item = decorator[ID] || decorator[:id]
|
|
104
|
-
elm[ID] = HtmlElement.escape(id_item.id).upcase
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def each_decorator(element, tree)
|
|
110
|
-
return unless element.kind_of? HtmlElement
|
|
111
|
-
return unless tree.kind_of? BlockParser::BlockNode and tree.decorator
|
|
112
|
-
tree.decorator.tap {|decorator| yield element, decorator }
|
|
113
|
-
end
|
|
114
|
-
|
|
115
99
|
class ListLeafNodeFormatter < self
|
|
116
100
|
def create_element(tree)
|
|
117
101
|
super(tree).tap do |elm|
|
|
@@ -137,7 +121,6 @@ module PseudoHiki
|
|
|
137
121
|
[EnumNode, "ol"],
|
|
138
122
|
[TableLeaf, "tr"],
|
|
139
123
|
[VerbatimNode, "pre"],
|
|
140
|
-
[SectioningNode, "section"],
|
|
141
124
|
[CommentOutNode, nil],
|
|
142
125
|
[HeadingNode, "section"],
|
|
143
126
|
[DescLeaf, DT],
|
|
@@ -206,23 +189,6 @@ module PseudoHiki
|
|
|
206
189
|
|
|
207
190
|
# for BlockParser
|
|
208
191
|
|
|
209
|
-
class << Formatter[TableNode]
|
|
210
|
-
def decorate(htmlelement, tree, memo=nil)
|
|
211
|
-
each_decorator(htmlelement, tree) do |elm, decorator|
|
|
212
|
-
visited_value(decorator["summary"], memo) do |summary|
|
|
213
|
-
htmlelement["summary"] = HtmlElement.escape(summary.join.chomp)
|
|
214
|
-
end
|
|
215
|
-
visited_value(decorator["caption"], memo) do |caption|
|
|
216
|
-
htmlelement.push @generator.create("caption", caption)
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
def visited_value(decorator_item, memo)
|
|
222
|
-
yield visited_result(decorator_item.value, memo) if decorator_item
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
|
|
226
192
|
class << Formatter[VerbatimNode]
|
|
227
193
|
def visit(tree, memo)
|
|
228
194
|
contents = add_link(@generator.escape(tree.join))
|
|
@@ -237,37 +203,6 @@ module PseudoHiki
|
|
|
237
203
|
end
|
|
238
204
|
end
|
|
239
205
|
|
|
240
|
-
class << Formatter[SectioningNode]
|
|
241
|
-
ID_MARK = "#"
|
|
242
|
-
|
|
243
|
-
alias :orig_create_element :create_element
|
|
244
|
-
|
|
245
|
-
def section_with_id(tree, node_id)
|
|
246
|
-
orig_create_element(tree).tap do |elm|
|
|
247
|
-
elm[ID] = node_id[1..-1] # remove the first charactor from node_id
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
def section_for_class(tree, node_id)
|
|
252
|
-
if HtmlElement::HTML5_TAGS.include? node_id
|
|
253
|
-
@generator.create(node_id)
|
|
254
|
-
else
|
|
255
|
-
orig_create_element(tree).tap do |elm|
|
|
256
|
-
elm[CLASS] = elm[CLASS] ? "#{elm[CLASS]} #{node_id}" : node_id
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
def create_element(tree)
|
|
262
|
-
node_id = tree.node_id
|
|
263
|
-
if node_id.start_with? ID_MARK
|
|
264
|
-
section_with_id(tree, node_id)
|
|
265
|
-
else
|
|
266
|
-
section_for_class(tree, node_id)
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
206
|
class << Formatter[CommentOutNode]
|
|
272
207
|
def visit(tree, memo); BLANK; end
|
|
273
208
|
end
|
|
@@ -275,14 +275,13 @@ module PseudoHiki
|
|
|
275
275
|
class VerbatimNodeFormatter < self
|
|
276
276
|
def visit(tree, memo)
|
|
277
277
|
element = super(tree, memo)
|
|
278
|
-
@language_name = language_name(tree)
|
|
279
278
|
return gfm_verbatim(element) if @options.gfm_style
|
|
280
279
|
md_verbatim(element)
|
|
281
280
|
end
|
|
282
281
|
|
|
283
282
|
def gfm_verbatim(element)
|
|
284
283
|
element.tap do |lines|
|
|
285
|
-
lines.unshift "```#{
|
|
284
|
+
lines.unshift "```#{$/}"
|
|
286
285
|
lines.push "```#{$/ * 2}"
|
|
287
286
|
end
|
|
288
287
|
end
|
|
@@ -290,12 +289,6 @@ module PseudoHiki
|
|
|
290
289
|
def md_verbatim(element)
|
|
291
290
|
element.join.gsub(/^/o, " ").sub(/ \Z/o, "").concat $/
|
|
292
291
|
end
|
|
293
|
-
|
|
294
|
-
def language_name(tree)
|
|
295
|
-
tree.decorator.tap do |decorator|
|
|
296
|
-
return decorator ? decorator["code"].id : ""
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
292
|
end
|
|
300
293
|
|
|
301
294
|
class QuoteNodeFormatter < self
|
data/lib/pseudohiki/version.rb
CHANGED
data/lib/pseudohikiparser.rb
CHANGED
data/test/test_blockparser.rb
CHANGED
|
@@ -311,73 +311,6 @@ TEXT
|
|
|
311
311
|
assert_equal([[[["heading"]]]],parsed)
|
|
312
312
|
end
|
|
313
313
|
|
|
314
|
-
|
|
315
|
-
def test_decorator
|
|
316
|
-
text = <<TEXT
|
|
317
|
-
//@class[section_name]
|
|
318
|
-
!!title of section
|
|
319
|
-
|
|
320
|
-
//@summary: Summary of the table
|
|
321
|
-
||!header 1||! header 2
|
|
322
|
-
||cell 1||cell 2
|
|
323
|
-
|
|
324
|
-
a paragraph.
|
|
325
|
-
|
|
326
|
-
//@class[class_name]
|
|
327
|
-
//@[id_name]
|
|
328
|
-
another paragraph.
|
|
329
|
-
TEXT
|
|
330
|
-
|
|
331
|
-
tree = PseudoHiki::BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
|
332
|
-
assert_equal(PseudoHiki::BlockParser::BlockNode, tree.class)
|
|
333
|
-
assert_equal("section_name", tree[0].decorator["class"].id)
|
|
334
|
-
assert_equal(PseudoHiki::BlockParser::BlockElement::HeadingNode, tree[0].class)
|
|
335
|
-
assert_equal([[["title of section"]], [[[["header 1"]], [[" header 2"]]], [[["cell 1"]], [["cell 2"]]]], [[["a paragraph."]]], [[["another paragraph."]]]], tree[0])
|
|
336
|
-
assert_equal([["Summary of the table"]], tree[0][1].decorator["summary"].value)
|
|
337
|
-
assert_equal(PseudoHiki::BlockParser::BlockElement::TableNode, tree[0][1].class)
|
|
338
|
-
assert_equal(nil, tree[0][2].decorator)
|
|
339
|
-
assert_equal('id_name', tree[0][3].decorator[:id].id)
|
|
340
|
-
assert_equal('class_name', tree[0][3].decorator["class"].id)
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
def test_sectioning_node
|
|
344
|
-
text = <<TEXT
|
|
345
|
-
! Main title
|
|
346
|
-
|
|
347
|
-
//@begin[header]
|
|
348
|
-
!! first title in header
|
|
349
|
-
|
|
350
|
-
paragraph
|
|
351
|
-
|
|
352
|
-
!! second title in header
|
|
353
|
-
|
|
354
|
-
paragraph2
|
|
355
|
-
|
|
356
|
-
//@end[header]
|
|
357
|
-
|
|
358
|
-
!! first subtitle in main part
|
|
359
|
-
|
|
360
|
-
paragraph3
|
|
361
|
-
|
|
362
|
-
TEXT
|
|
363
|
-
|
|
364
|
-
expected_tree = [[[[" Main title\n"]],
|
|
365
|
-
[
|
|
366
|
-
[[[" first title in header\n"]],
|
|
367
|
-
[[["paragraph\n"]]]],
|
|
368
|
-
[[[" second title in header\n"]],
|
|
369
|
-
[[["paragraph2\n"]]]]
|
|
370
|
-
],
|
|
371
|
-
[[[" first subtitle in main part\n"]],
|
|
372
|
-
[[["paragraph3\n"]]]]]]
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
tree = PseudoHiki::BlockParser.parse(text)
|
|
376
|
-
assert_equal(expected_tree, tree)
|
|
377
|
-
assert_kind_of(PseudoHiki::BlockParser::BlockElement::SectioningNode, tree[0][1])
|
|
378
|
-
assert_equal("header", tree[0][1].node_id)
|
|
379
|
-
end
|
|
380
|
-
|
|
381
314
|
def test_comment_out_followed_by_a_verbatim_block
|
|
382
315
|
text = <<TEXT
|
|
383
316
|
the first paragraph
|
|
@@ -135,19 +135,11 @@ table_with_col_header_text = <<TABLE
|
|
|
135
135
|
||!header1||col1-1||col2-1
|
|
136
136
|
||!header2||col1-2||col2-2
|
|
137
137
|
||!header3||col1-3||col2-3
|
|
138
|
-
TABLE
|
|
139
|
-
|
|
140
|
-
table_with_row_header_and_caption_text = <<TABLE
|
|
141
|
-
//@caption: Caption
|
|
142
|
-
||!header1||!header2||!header3
|
|
143
|
-
||row1-1||row1-2||row1-3
|
|
144
|
-
||row2-1||row2-2||row2-3
|
|
145
138
|
TABLE
|
|
146
139
|
|
|
147
140
|
@table_manager = HtmlElement::Utils::TableManager.new
|
|
148
141
|
@table_with_row_header = PseudoHiki::BlockParser.parse(table_with_row_header_text)
|
|
149
142
|
@table_with_col_header = PseudoHiki::BlockParser.parse(table_with_col_header_text)
|
|
150
|
-
@table_with_row_header_and_caption = PseudoHiki::BlockParser.parse(table_with_row_header_and_caption_text)
|
|
151
143
|
|
|
152
144
|
end
|
|
153
145
|
|
|
@@ -157,9 +149,6 @@ TABLE
|
|
|
157
149
|
|
|
158
150
|
html_table = PseudoHiki::HtmlFormat.format(@table_with_col_header)[0]
|
|
159
151
|
assert_equal("row", @table_manager.guess_header_scope(html_table))
|
|
160
|
-
|
|
161
|
-
html_table = PseudoHiki::HtmlFormat.format(@table_with_row_header_and_caption)[0]
|
|
162
|
-
assert_equal("col", @table_manager.guess_header_scope(html_table))
|
|
163
152
|
end
|
|
164
153
|
|
|
165
154
|
def test_assign_scope
|
data/test/test_htmlformat.rb
CHANGED
|
@@ -775,419 +775,6 @@ HTML
|
|
|
775
775
|
assert_equal(xhtml, HtmlFormat.format(tree, {:auto_link_in_verbatim => false }).to_s)
|
|
776
776
|
end
|
|
777
777
|
|
|
778
|
-
def test_decorator
|
|
779
|
-
text = <<TEXT
|
|
780
|
-
//@class[section_type]
|
|
781
|
-
!!title of section
|
|
782
|
-
|
|
783
|
-
a paragraph.
|
|
784
|
-
|
|
785
|
-
//@class[class_name]
|
|
786
|
-
//@id[id_name]
|
|
787
|
-
another paragraph.
|
|
788
|
-
TEXT
|
|
789
|
-
|
|
790
|
-
xhtml = <<HTML
|
|
791
|
-
<div class="section_type">
|
|
792
|
-
<h2>title of section</h2>
|
|
793
|
-
<p>
|
|
794
|
-
a paragraph.</p>
|
|
795
|
-
<p class="class_name" id="ID_NAME">
|
|
796
|
-
another paragraph.</p>
|
|
797
|
-
<!-- end of section_type -->
|
|
798
|
-
</div>
|
|
799
|
-
HTML
|
|
800
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
|
801
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
802
|
-
end
|
|
803
|
-
|
|
804
|
-
def test_decorator_for_table
|
|
805
|
-
text = <<TEXT
|
|
806
|
-
//@summary: Summary of the table
|
|
807
|
-
||!header 1||! header 2
|
|
808
|
-
||cell 1||cell 2
|
|
809
|
-
TEXT
|
|
810
|
-
|
|
811
|
-
xhtml = <<HTML
|
|
812
|
-
<table summary="Summary of the table">
|
|
813
|
-
<tr><th>header 1</th><th> header 2</th></tr>
|
|
814
|
-
<tr><td>cell 1</td><td>cell 2</td></tr>
|
|
815
|
-
</table>
|
|
816
|
-
HTML
|
|
817
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
|
818
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
819
|
-
end
|
|
820
|
-
|
|
821
|
-
def test_decorator_for_table_summary
|
|
822
|
-
text = <<TEXT
|
|
823
|
-
//@summary: Summary of the table
|
|
824
|
-
||!header 1||! header 2
|
|
825
|
-
TEXT
|
|
826
|
-
|
|
827
|
-
xhtml = <<HTML
|
|
828
|
-
<table summary="Summary of the table">
|
|
829
|
-
<tr><th>header 1</th><th> header 2
|
|
830
|
-
</th></tr>
|
|
831
|
-
</table>
|
|
832
|
-
HTML
|
|
833
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line })
|
|
834
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
835
|
-
end
|
|
836
|
-
|
|
837
|
-
def test_decorator_for_table_caption
|
|
838
|
-
text = <<TEXT
|
|
839
|
-
//@caption: Caption of ''the table''
|
|
840
|
-
||!header 1||! header 2
|
|
841
|
-
||cell 1||cell 2
|
|
842
|
-
TEXT
|
|
843
|
-
|
|
844
|
-
xhtml = <<HTML
|
|
845
|
-
<table>
|
|
846
|
-
<caption>Caption of <em>the table</em></caption>
|
|
847
|
-
<tr><th>header 1</th><th> header 2</th></tr>
|
|
848
|
-
<tr><td>cell 1</td><td>cell 2</td></tr>
|
|
849
|
-
</table>
|
|
850
|
-
HTML
|
|
851
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
|
852
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
853
|
-
end
|
|
854
|
-
|
|
855
|
-
def test_decorator_for_table_caption_with_tags
|
|
856
|
-
text = <<TEXT
|
|
857
|
-
//@caption: [[''Table caption''that begins with a link|http://www.example.org/]] and contains other strings
|
|
858
|
-
||!header 1||! header 2
|
|
859
|
-
TEXT
|
|
860
|
-
|
|
861
|
-
xhtml = <<HTML
|
|
862
|
-
<table>
|
|
863
|
-
<caption><a href="http://www.example.org/"><em>Table caption</em>that begins with a link</a> and contains other strings</caption>
|
|
864
|
-
<tr><th>header 1</th><th> header 2</th></tr>
|
|
865
|
-
</table>
|
|
866
|
-
HTML
|
|
867
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
|
868
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
869
|
-
end
|
|
870
|
-
|
|
871
|
-
def test_decorator_for_verbatim
|
|
872
|
-
text = <<TEXT
|
|
873
|
-
//@code[ruby]
|
|
874
|
-
def bonjour!
|
|
875
|
-
puts "Bonjour!"
|
|
876
|
-
end
|
|
877
|
-
TEXT
|
|
878
|
-
|
|
879
|
-
xhtml = <<HTML
|
|
880
|
-
<pre>
|
|
881
|
-
def bonjour!
|
|
882
|
-
puts "Bonjour!"
|
|
883
|
-
end
|
|
884
|
-
</pre>
|
|
885
|
-
HTML
|
|
886
|
-
|
|
887
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
888
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
|
889
|
-
end
|
|
890
|
-
|
|
891
|
-
def test_sectioning_node
|
|
892
|
-
text = <<TEXT
|
|
893
|
-
! Main title
|
|
894
|
-
|
|
895
|
-
//@begin[header]
|
|
896
|
-
!! first title in header
|
|
897
|
-
|
|
898
|
-
paragraph
|
|
899
|
-
|
|
900
|
-
!! second title in header
|
|
901
|
-
|
|
902
|
-
paragraph2
|
|
903
|
-
|
|
904
|
-
//@end[header]
|
|
905
|
-
|
|
906
|
-
!! first subtitle in main part
|
|
907
|
-
|
|
908
|
-
paragraph3
|
|
909
|
-
|
|
910
|
-
//@begin[#footer]
|
|
911
|
-
|
|
912
|
-
paragraph4
|
|
913
|
-
|
|
914
|
-
//@end[#footer]
|
|
915
|
-
|
|
916
|
-
TEXT
|
|
917
|
-
|
|
918
|
-
expected_html = <<HTML
|
|
919
|
-
<div class="section h1">
|
|
920
|
-
<h1> Main title
|
|
921
|
-
</h1>
|
|
922
|
-
<div class="header">
|
|
923
|
-
<div class="section h2">
|
|
924
|
-
<h2> first title in header
|
|
925
|
-
</h2>
|
|
926
|
-
<p>
|
|
927
|
-
paragraph
|
|
928
|
-
</p>
|
|
929
|
-
<!-- end of section h2 -->
|
|
930
|
-
</div>
|
|
931
|
-
<div class="section h2">
|
|
932
|
-
<h2> second title in header
|
|
933
|
-
</h2>
|
|
934
|
-
<p>
|
|
935
|
-
paragraph2
|
|
936
|
-
</p>
|
|
937
|
-
<!-- end of section h2 -->
|
|
938
|
-
</div>
|
|
939
|
-
<!-- end of header -->
|
|
940
|
-
</div>
|
|
941
|
-
<div class="section h2">
|
|
942
|
-
<h2> first subtitle in main part
|
|
943
|
-
</h2>
|
|
944
|
-
<p>
|
|
945
|
-
paragraph3
|
|
946
|
-
</p>
|
|
947
|
-
<div class="section" id="footer">
|
|
948
|
-
<p>
|
|
949
|
-
paragraph4
|
|
950
|
-
</p>
|
|
951
|
-
<!-- end of footer -->
|
|
952
|
-
</div>
|
|
953
|
-
<!-- end of section h2 -->
|
|
954
|
-
</div>
|
|
955
|
-
<!-- end of section h1 -->
|
|
956
|
-
</div>
|
|
957
|
-
HTML
|
|
958
|
-
|
|
959
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
960
|
-
assert_equal(expected_html, XhtmlFormat.format(tree).to_s)
|
|
961
|
-
end
|
|
962
|
-
|
|
963
|
-
def test_sectioning_node_for_html5
|
|
964
|
-
text = <<TEXT
|
|
965
|
-
! Main title
|
|
966
|
-
|
|
967
|
-
//@begin[header]
|
|
968
|
-
!! first title in header
|
|
969
|
-
|
|
970
|
-
paragraph
|
|
971
|
-
|
|
972
|
-
!! second title in header
|
|
973
|
-
|
|
974
|
-
paragraph2
|
|
975
|
-
|
|
976
|
-
//@end[header]
|
|
977
|
-
|
|
978
|
-
!! first subtitle in main part
|
|
979
|
-
|
|
980
|
-
paragraph3
|
|
981
|
-
|
|
982
|
-
//@begin[#footer]
|
|
983
|
-
|
|
984
|
-
paragraph4
|
|
985
|
-
|
|
986
|
-
//@end[#footer]
|
|
987
|
-
|
|
988
|
-
TEXT
|
|
989
|
-
|
|
990
|
-
expected_html = <<HTML
|
|
991
|
-
<section class="h1">
|
|
992
|
-
<h1> Main title
|
|
993
|
-
</h1>
|
|
994
|
-
<header>
|
|
995
|
-
<section class="h2">
|
|
996
|
-
<h2> first title in header
|
|
997
|
-
</h2>
|
|
998
|
-
<p>
|
|
999
|
-
paragraph
|
|
1000
|
-
</p>
|
|
1001
|
-
<!-- end of h2 -->
|
|
1002
|
-
</section>
|
|
1003
|
-
<section class="h2">
|
|
1004
|
-
<h2> second title in header
|
|
1005
|
-
</h2>
|
|
1006
|
-
<p>
|
|
1007
|
-
paragraph2
|
|
1008
|
-
</p>
|
|
1009
|
-
<!-- end of h2 -->
|
|
1010
|
-
</section>
|
|
1011
|
-
</header>
|
|
1012
|
-
<section class="h2">
|
|
1013
|
-
<h2> first subtitle in main part
|
|
1014
|
-
</h2>
|
|
1015
|
-
<p>
|
|
1016
|
-
paragraph3
|
|
1017
|
-
</p>
|
|
1018
|
-
<section id="footer">
|
|
1019
|
-
<p>
|
|
1020
|
-
paragraph4
|
|
1021
|
-
</p>
|
|
1022
|
-
<!-- end of footer -->
|
|
1023
|
-
</section>
|
|
1024
|
-
<!-- end of h2 -->
|
|
1025
|
-
</section>
|
|
1026
|
-
<!-- end of h1 -->
|
|
1027
|
-
</section>
|
|
1028
|
-
HTML
|
|
1029
|
-
|
|
1030
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
1031
|
-
assert_equal(expected_html, Xhtml5Format.format(tree).to_s)
|
|
1032
|
-
end
|
|
1033
|
-
|
|
1034
|
-
def test_sectioning_node_when_end_tag_is_omitted
|
|
1035
|
-
text = <<TEXT
|
|
1036
|
-
!! First part
|
|
1037
|
-
|
|
1038
|
-
paragraph1
|
|
1039
|
-
|
|
1040
|
-
//@begin[first_sub_part]
|
|
1041
|
-
!!! first title in first sub-part
|
|
1042
|
-
|
|
1043
|
-
paragraph2
|
|
1044
|
-
|
|
1045
|
-
!!! second title in first sub-part
|
|
1046
|
-
|
|
1047
|
-
paragraph3
|
|
1048
|
-
|
|
1049
|
-
//you should put //@end[first_sub_part] here.
|
|
1050
|
-
|
|
1051
|
-
!! Second part
|
|
1052
|
-
|
|
1053
|
-
paragraph4
|
|
1054
|
-
|
|
1055
|
-
//@begin[#footer]
|
|
1056
|
-
|
|
1057
|
-
paragraph5
|
|
1058
|
-
|
|
1059
|
-
//@end[#footer]
|
|
1060
|
-
|
|
1061
|
-
TEXT
|
|
1062
|
-
|
|
1063
|
-
expected_html = <<HTML
|
|
1064
|
-
<div class=\"section h2\">
|
|
1065
|
-
<h2> First part
|
|
1066
|
-
</h2>
|
|
1067
|
-
<p>
|
|
1068
|
-
paragraph1
|
|
1069
|
-
</p>
|
|
1070
|
-
<div class=\"section first_sub_part\">
|
|
1071
|
-
<div class=\"section h3\">
|
|
1072
|
-
<h3> first title in first sub-part
|
|
1073
|
-
</h3>
|
|
1074
|
-
<p>
|
|
1075
|
-
paragraph2
|
|
1076
|
-
</p>
|
|
1077
|
-
<!-- end of section h3 -->
|
|
1078
|
-
</div>
|
|
1079
|
-
<div class=\"section h3\">
|
|
1080
|
-
<h3> second title in first sub-part
|
|
1081
|
-
</h3>
|
|
1082
|
-
<p>
|
|
1083
|
-
paragraph3
|
|
1084
|
-
</p>
|
|
1085
|
-
<!-- end of section h3 -->
|
|
1086
|
-
</div>
|
|
1087
|
-
<!-- end of section first_sub_part -->
|
|
1088
|
-
</div>
|
|
1089
|
-
<!-- end of section h2 -->
|
|
1090
|
-
</div>
|
|
1091
|
-
<div class=\"section h2\">
|
|
1092
|
-
<h2> Second part
|
|
1093
|
-
</h2>
|
|
1094
|
-
<p>
|
|
1095
|
-
paragraph4
|
|
1096
|
-
</p>
|
|
1097
|
-
<div class=\"section\" id=\"footer\">
|
|
1098
|
-
<p>
|
|
1099
|
-
paragraph5
|
|
1100
|
-
</p>
|
|
1101
|
-
<!-- end of footer -->
|
|
1102
|
-
</div>
|
|
1103
|
-
<!-- end of section h2 -->
|
|
1104
|
-
</div>
|
|
1105
|
-
HTML
|
|
1106
|
-
|
|
1107
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
1108
|
-
assert_equal(expected_html, XhtmlFormat.format(tree).to_s)
|
|
1109
|
-
end
|
|
1110
|
-
|
|
1111
|
-
def test_sectioning_node_when_end_tag_is_wrongly_placed
|
|
1112
|
-
text = <<TEXT
|
|
1113
|
-
!! First part
|
|
1114
|
-
|
|
1115
|
-
paragraph1
|
|
1116
|
-
|
|
1117
|
-
//@begin[first_sub_part]
|
|
1118
|
-
!!! first title in first sub-part
|
|
1119
|
-
|
|
1120
|
-
paragraph2
|
|
1121
|
-
|
|
1122
|
-
!!! second title in first sub-part
|
|
1123
|
-
|
|
1124
|
-
paragraph3
|
|
1125
|
-
|
|
1126
|
-
//you should put //@end[first_sub_part] here.
|
|
1127
|
-
|
|
1128
|
-
!! Second part
|
|
1129
|
-
|
|
1130
|
-
paragraph4
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
//@end[first_sub_part] this end tag is wrongly placed.
|
|
1134
|
-
|
|
1135
|
-
//@begin[#footer]
|
|
1136
|
-
|
|
1137
|
-
paragraph5
|
|
1138
|
-
|
|
1139
|
-
//@end[#footer]
|
|
1140
|
-
|
|
1141
|
-
TEXT
|
|
1142
|
-
|
|
1143
|
-
expected_html = <<HTML
|
|
1144
|
-
<div class=\"section h2\">
|
|
1145
|
-
<h2> First part
|
|
1146
|
-
</h2>
|
|
1147
|
-
<p>
|
|
1148
|
-
paragraph1
|
|
1149
|
-
</p>
|
|
1150
|
-
<div class=\"section first_sub_part\">
|
|
1151
|
-
<div class=\"section h3\">
|
|
1152
|
-
<h3> first title in first sub-part
|
|
1153
|
-
</h3>
|
|
1154
|
-
<p>
|
|
1155
|
-
paragraph2
|
|
1156
|
-
</p>
|
|
1157
|
-
<!-- end of section h3 -->
|
|
1158
|
-
</div>
|
|
1159
|
-
<div class=\"section h3\">
|
|
1160
|
-
<h3> second title in first sub-part
|
|
1161
|
-
</h3>
|
|
1162
|
-
<p>
|
|
1163
|
-
paragraph3
|
|
1164
|
-
</p>
|
|
1165
|
-
<!-- end of section h3 -->
|
|
1166
|
-
</div>
|
|
1167
|
-
<!-- end of section first_sub_part -->
|
|
1168
|
-
</div>
|
|
1169
|
-
<!-- end of section h2 -->
|
|
1170
|
-
</div>
|
|
1171
|
-
<div class=\"section h2\">
|
|
1172
|
-
<h2> Second part
|
|
1173
|
-
</h2>
|
|
1174
|
-
<p>
|
|
1175
|
-
paragraph4
|
|
1176
|
-
</p>
|
|
1177
|
-
<div class=\"section\" id=\"footer\">
|
|
1178
|
-
<p>
|
|
1179
|
-
paragraph5
|
|
1180
|
-
</p>
|
|
1181
|
-
<!-- end of footer -->
|
|
1182
|
-
</div>
|
|
1183
|
-
<!-- end of section h2 -->
|
|
1184
|
-
</div>
|
|
1185
|
-
HTML
|
|
1186
|
-
|
|
1187
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
1188
|
-
assert_equal(expected_html, XhtmlFormat.format(tree).to_s)
|
|
1189
|
-
end
|
|
1190
|
-
|
|
1191
778
|
def test_comment_out_followed_by_a_verbatim_block
|
|
1192
779
|
text = <<TEXT
|
|
1193
780
|
the first paragraph
|
data/test/test_markdownformat.rb
CHANGED
|
@@ -518,159 +518,6 @@ TEXT
|
|
|
518
518
|
assert_equal(md_text, @formatter.format(tree).to_s)
|
|
519
519
|
end
|
|
520
520
|
|
|
521
|
-
def test_decorator_for_verbatim
|
|
522
|
-
text = <<TEXT
|
|
523
|
-
//@code[ruby]
|
|
524
|
-
def bonjour!
|
|
525
|
-
puts "Bonjour!"
|
|
526
|
-
end
|
|
527
|
-
TEXT
|
|
528
|
-
|
|
529
|
-
gfm_text =<<TEXT
|
|
530
|
-
```ruby
|
|
531
|
-
def bonjour!
|
|
532
|
-
puts "Bonjour!"
|
|
533
|
-
end
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
TEXT
|
|
537
|
-
|
|
538
|
-
md_text = <<TEXT
|
|
539
|
-
def bonjour!
|
|
540
|
-
puts "Bonjour!"
|
|
541
|
-
end
|
|
542
|
-
|
|
543
|
-
TEXT
|
|
544
|
-
|
|
545
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
546
|
-
assert_equal(gfm_text, @gfm_formatter.format(tree).to_s)
|
|
547
|
-
assert_equal(md_text, @formatter.format(tree).to_s)
|
|
548
|
-
end
|
|
549
|
-
|
|
550
|
-
def test_decorator_for_verbatim_block
|
|
551
|
-
text = <<TEXT
|
|
552
|
-
//@code[ruby]
|
|
553
|
-
<<<
|
|
554
|
-
def bonjour!
|
|
555
|
-
puts "Bonjour!"
|
|
556
|
-
end
|
|
557
|
-
>>>
|
|
558
|
-
TEXT
|
|
559
|
-
|
|
560
|
-
gfm_text =<<TEXT
|
|
561
|
-
```ruby
|
|
562
|
-
def bonjour!
|
|
563
|
-
puts "Bonjour!"
|
|
564
|
-
end
|
|
565
|
-
```
|
|
566
|
-
|
|
567
|
-
TEXT
|
|
568
|
-
|
|
569
|
-
md_text = <<TEXT
|
|
570
|
-
def bonjour!
|
|
571
|
-
puts "Bonjour!"
|
|
572
|
-
end
|
|
573
|
-
|
|
574
|
-
TEXT
|
|
575
|
-
|
|
576
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
577
|
-
assert_equal(gfm_text, @gfm_formatter.format(tree).to_s)
|
|
578
|
-
assert_equal(md_text, @formatter.format(tree).to_s)
|
|
579
|
-
end
|
|
580
|
-
|
|
581
|
-
def test_without_sectioning_node
|
|
582
|
-
text = <<TEXT
|
|
583
|
-
! Main title
|
|
584
|
-
|
|
585
|
-
!! first title in header
|
|
586
|
-
|
|
587
|
-
paragraph
|
|
588
|
-
|
|
589
|
-
!! second title in header
|
|
590
|
-
|
|
591
|
-
paragraph2
|
|
592
|
-
|
|
593
|
-
!! first subtitle in main part
|
|
594
|
-
|
|
595
|
-
paragraph3
|
|
596
|
-
|
|
597
|
-
paragraph4
|
|
598
|
-
|
|
599
|
-
TEXT
|
|
600
|
-
|
|
601
|
-
expected_text = <<HTML
|
|
602
|
-
# Main title
|
|
603
|
-
|
|
604
|
-
## first title in header
|
|
605
|
-
|
|
606
|
-
paragraph
|
|
607
|
-
|
|
608
|
-
## second title in header
|
|
609
|
-
|
|
610
|
-
paragraph2
|
|
611
|
-
|
|
612
|
-
## first subtitle in main part
|
|
613
|
-
|
|
614
|
-
paragraph3
|
|
615
|
-
|
|
616
|
-
paragraph4
|
|
617
|
-
|
|
618
|
-
HTML
|
|
619
|
-
|
|
620
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
621
|
-
assert_equal(expected_text, @gfm_formatter.format(tree).to_s)
|
|
622
|
-
end
|
|
623
|
-
|
|
624
|
-
def test_sectioning_node
|
|
625
|
-
text = <<TEXT
|
|
626
|
-
! Main title
|
|
627
|
-
|
|
628
|
-
//@begin[header]
|
|
629
|
-
!! first title in header
|
|
630
|
-
|
|
631
|
-
paragraph
|
|
632
|
-
|
|
633
|
-
!! second title in header
|
|
634
|
-
|
|
635
|
-
paragraph2
|
|
636
|
-
|
|
637
|
-
//@end[header]
|
|
638
|
-
|
|
639
|
-
!! first subtitle in main part
|
|
640
|
-
|
|
641
|
-
paragraph3
|
|
642
|
-
|
|
643
|
-
//@begin[#footer]
|
|
644
|
-
|
|
645
|
-
paragraph4
|
|
646
|
-
|
|
647
|
-
//@end[#footer]
|
|
648
|
-
|
|
649
|
-
TEXT
|
|
650
|
-
|
|
651
|
-
expected_text = <<HTML
|
|
652
|
-
# Main title
|
|
653
|
-
|
|
654
|
-
## first title in header
|
|
655
|
-
|
|
656
|
-
paragraph
|
|
657
|
-
|
|
658
|
-
## second title in header
|
|
659
|
-
|
|
660
|
-
paragraph2
|
|
661
|
-
|
|
662
|
-
## first subtitle in main part
|
|
663
|
-
|
|
664
|
-
paragraph3
|
|
665
|
-
|
|
666
|
-
paragraph4
|
|
667
|
-
|
|
668
|
-
HTML
|
|
669
|
-
|
|
670
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
671
|
-
assert_equal(expected_text, @gfm_formatter.format(tree).to_s)
|
|
672
|
-
end
|
|
673
|
-
|
|
674
521
|
def test_collect_headings
|
|
675
522
|
text = <<TEXT
|
|
676
523
|
!![main-heading] heading
|
|
@@ -265,89 +265,4 @@ TEXT
|
|
|
265
265
|
assert_equal(expected_text_in_verbose_mode, PlainTextFormat.format(tree, { :verbose_mode => true }).to_s)
|
|
266
266
|
assert_equal(expected_text, PlainTextFormat.format(tree, { :verbose_mode => false }).to_s)
|
|
267
267
|
end
|
|
268
|
-
|
|
269
|
-
def test_without_sectioning_node
|
|
270
|
-
text = <<TEXT
|
|
271
|
-
! Main title
|
|
272
|
-
|
|
273
|
-
!! first title in header
|
|
274
|
-
|
|
275
|
-
paragraph
|
|
276
|
-
|
|
277
|
-
!! second title in header
|
|
278
|
-
|
|
279
|
-
paragraph2
|
|
280
|
-
|
|
281
|
-
!! first subtitle in main part
|
|
282
|
-
|
|
283
|
-
paragraph3
|
|
284
|
-
|
|
285
|
-
paragraph4
|
|
286
|
-
|
|
287
|
-
TEXT
|
|
288
|
-
|
|
289
|
-
expected_text = <<HTML
|
|
290
|
-
Main title
|
|
291
|
-
first title in header
|
|
292
|
-
paragraph
|
|
293
|
-
|
|
294
|
-
second title in header
|
|
295
|
-
paragraph2
|
|
296
|
-
|
|
297
|
-
first subtitle in main part
|
|
298
|
-
paragraph3
|
|
299
|
-
|
|
300
|
-
paragraph4
|
|
301
|
-
|
|
302
|
-
HTML
|
|
303
|
-
|
|
304
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
305
|
-
assert_equal(expected_text, PlainTextFormat.format(tree, { :verbose_mode => false }).to_s)
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
def test_sectioning_node
|
|
309
|
-
text = <<TEXT
|
|
310
|
-
! Main title
|
|
311
|
-
|
|
312
|
-
//@begin[header]
|
|
313
|
-
!! first title in header
|
|
314
|
-
|
|
315
|
-
paragraph
|
|
316
|
-
|
|
317
|
-
!! second title in header
|
|
318
|
-
|
|
319
|
-
paragraph2
|
|
320
|
-
|
|
321
|
-
//@end[header]
|
|
322
|
-
|
|
323
|
-
!! first subtitle in main part
|
|
324
|
-
|
|
325
|
-
paragraph3
|
|
326
|
-
|
|
327
|
-
//@begin[#footer]
|
|
328
|
-
|
|
329
|
-
paragraph4
|
|
330
|
-
|
|
331
|
-
//@end[#footer]
|
|
332
|
-
|
|
333
|
-
TEXT
|
|
334
|
-
|
|
335
|
-
expected_text = <<HTML
|
|
336
|
-
Main title
|
|
337
|
-
first title in header
|
|
338
|
-
paragraph
|
|
339
|
-
|
|
340
|
-
second title in header
|
|
341
|
-
paragraph2
|
|
342
|
-
|
|
343
|
-
first subtitle in main part
|
|
344
|
-
paragraph3
|
|
345
|
-
|
|
346
|
-
paragraph4
|
|
347
|
-
|
|
348
|
-
HTML
|
|
349
|
-
|
|
350
|
-
tree = BlockParser.parse(text.lines.to_a)
|
|
351
|
-
assert_equal(expected_text, PlainTextFormat.format(tree, { :verbose_mode => false }).to_s)
|
|
352
|
-
end
|
|
353
268
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pseudohikiparser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.6
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- HASHIMOTO, Naoki
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-10-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -91,7 +91,6 @@ files:
|
|
|
91
91
|
- lib/pseudohiki/markdownformat.rb
|
|
92
92
|
- lib/pseudohiki/plaintextformat.rb
|
|
93
93
|
- lib/pseudohiki/shim.rb
|
|
94
|
-
- lib/pseudohiki/sinatra_helpers.rb
|
|
95
94
|
- lib/pseudohiki/treestack.rb
|
|
96
95
|
- lib/pseudohiki/utils.rb
|
|
97
96
|
- lib/pseudohiki/version.rb
|
|
@@ -126,9 +125,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
126
125
|
version: 1.8.7
|
|
127
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
127
|
requirements:
|
|
129
|
-
- - "
|
|
128
|
+
- - ">="
|
|
130
129
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
130
|
+
version: '0'
|
|
132
131
|
requirements: []
|
|
133
132
|
rubyforge_project:
|
|
134
133
|
rubygems_version: 2.6.6
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
module Sinatra
|
|
5
|
-
module PseudoHikiParserHelpers
|
|
6
|
-
XHTML5_CONTENT_TYPE = 'application/xhtml+xml'
|
|
7
|
-
def phiki(hiki_data, &block)
|
|
8
|
-
case content_type
|
|
9
|
-
when XHTML5_CONTENT_TYPE
|
|
10
|
-
PseudoHiki::Format.to_html5(hiki_data, &block)
|
|
11
|
-
else
|
|
12
|
-
PseudoHiki::Format.to_xhtml(hiki_data, &block)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class Base
|
|
18
|
-
helpers PseudoHikiParserHelpers
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
rescue
|
|
22
|
-
#Sinatra is not available
|
|
23
|
-
end
|