pseudohikiparser 0.0.5.develop → 0.0.5
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 +3 -4
- 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: 5ebc8c1ea077d8299c8d99b805fbed3ddc4f45e4
|
4
|
+
data.tar.gz: 02fc8e556784f1bbbe63c6e2a0bcf369c4b0ec04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c48347a4e2cd673bbc426c0623255d8a64088d393730a5bdbba4962ca626b5ab8dad09bdb48abc64fd0fd307551d69dac7ae99a053ac7d230406ff9dc94ccc94
|
7
|
+
data.tar.gz: ca8187e15865fd7bd5e9d5def177dcf11f4ce843af06412f79e14b44cfdc649eece0487c7ab3f6397057afa1a2c45165b91153198697b79fceb9c4128f791c63
|
@@ -38,21 +38,14 @@ module PseudoHiki
|
|
38
38
|
end
|
39
39
|
|
40
40
|
class BlockStack < TreeStack
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
current_node.parse_leafs(breaker)
|
45
|
-
pop
|
46
|
-
end
|
47
|
-
|
48
|
-
def current_heading_level
|
49
|
-
i = @stack.rindex {|node| node.kind_of? BlockElement::HeadingNode }
|
50
|
-
@stack[i].level || 0
|
41
|
+
def pop
|
42
|
+
current_node.parse_leafs
|
43
|
+
super
|
51
44
|
end
|
52
45
|
end
|
53
46
|
|
54
47
|
class BlockLeaf < BlockStack::Leaf
|
55
|
-
attr_accessor :level, :node_id
|
48
|
+
attr_accessor :level, :node_id
|
56
49
|
|
57
50
|
class << self
|
58
51
|
attr_accessor :head_re
|
@@ -88,7 +81,7 @@ module PseudoHiki
|
|
88
81
|
super(stack)
|
89
82
|
end
|
90
83
|
|
91
|
-
def parse_leafs
|
84
|
+
def parse_leafs
|
92
85
|
parsed = InlineParser.parse(join)
|
93
86
|
clear
|
94
87
|
concat(parsed)
|
@@ -138,10 +131,6 @@ module PseudoHiki
|
|
138
131
|
first.level if first # @cached_level ||= (first.level if first)
|
139
132
|
end
|
140
133
|
|
141
|
-
def decorator
|
142
|
-
first.decorator if first
|
143
|
-
end
|
144
|
-
|
145
134
|
def push_self(stack)
|
146
135
|
@stack = stack
|
147
136
|
super(stack)
|
@@ -151,11 +140,11 @@ module PseudoHiki
|
|
151
140
|
not (kind_of? breaker.block and level == breaker.level)
|
152
141
|
end
|
153
142
|
|
154
|
-
def parse_leafs
|
143
|
+
def parse_leafs; end
|
155
144
|
|
156
145
|
def add_leaf(line, blockparser)
|
157
146
|
leaf = create_leaf(line, blockparser)
|
158
|
-
blockparser.stack.
|
147
|
+
blockparser.stack.pop while blockparser.breakable?(leaf)
|
159
148
|
blockparser.stack.push leaf
|
160
149
|
end
|
161
150
|
|
@@ -167,8 +156,8 @@ module PseudoHiki
|
|
167
156
|
end
|
168
157
|
|
169
158
|
class NonNestedBlockNode < BlockNode
|
170
|
-
def parse_leafs
|
171
|
-
each {|leaf| leaf.parse_leafs
|
159
|
+
def parse_leafs
|
160
|
+
each {|leaf| leaf.parse_leafs }
|
172
161
|
end
|
173
162
|
end
|
174
163
|
|
@@ -186,15 +175,13 @@ module PseudoHiki
|
|
186
175
|
end
|
187
176
|
end
|
188
177
|
|
189
|
-
class UnmatchedSectioningTagError < StandardError; end
|
190
|
-
|
191
178
|
module BlockElement
|
192
179
|
{
|
193
|
-
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf
|
180
|
+
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf),
|
194
181
|
NonNestedBlockLeaf => %w(QuoteLeaf ParagraphLeaf),
|
195
182
|
NestedBlockLeaf => %w(HeadingLeaf),
|
196
183
|
ListTypeLeaf => %w(ListLeaf EnumLeaf),
|
197
|
-
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode
|
184
|
+
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode),
|
198
185
|
NonNestedBlockNode => %w(QuoteNode ParagraphNode),
|
199
186
|
NestedBlockNode => %w(HeadingNode),
|
200
187
|
ListTypeBlockNode => %w(ListNode EnumNode),
|
@@ -217,100 +204,15 @@ module PseudoHiki
|
|
217
204
|
attr_accessor :in_block_tag
|
218
205
|
|
219
206
|
def add_leaf(line, blockparser)
|
220
|
-
return @stack.
|
207
|
+
return @stack.pop if VERBATIM_END =~ line
|
221
208
|
return super(line, blockparser) unless @in_block_tag
|
222
209
|
line = " #{line}" if BlockNodeEnd.head_re =~ line and not @in_block_tag
|
223
210
|
@stack.push VerbatimLeaf.create(line, @in_block_tag)
|
224
211
|
end
|
225
212
|
end
|
226
213
|
|
227
|
-
class DecoratorNode
|
228
|
-
DECORATOR_PAT = /\A(?:([^\[\]:]+))?(?:\[([^\[\]]+)\])?(?::\s*(\S.*))?/o
|
229
|
-
LABEL_SEP = [":"]
|
230
|
-
|
231
|
-
class DecoratorItem < Struct.new(:string, :type, :id, :value)
|
232
|
-
def self.create(leaf)
|
233
|
-
m = DECORATOR_PAT.match(leaf.join)
|
234
|
-
return nil unless m
|
235
|
-
args = m.to_a
|
236
|
-
if i = leaf.index(LABEL_SEP)
|
237
|
-
value = leaf.dup
|
238
|
-
value.shift(i + 1)
|
239
|
-
args[-1] = lstrip_value!(value)
|
240
|
-
end
|
241
|
-
self.new(*args)
|
242
|
-
end
|
243
|
-
|
244
|
-
def self.lstrip_value!(value)
|
245
|
-
head_val = value[0][0]
|
246
|
-
if head_val.kind_of? String and head_val.start_with? " ".freeze
|
247
|
-
value[0][0] = head_val.lstrip
|
248
|
-
end
|
249
|
-
value
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
def parse_leafs(breaker)
|
254
|
-
decorator = {}
|
255
|
-
breaker.decorator = decorator
|
256
|
-
@stack.remove_current_node.each do |leaf|
|
257
|
-
if item = DecoratorItem.create(leaf)
|
258
|
-
decorator[item.type || :id] = item
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
def breakable?(breaker)
|
264
|
-
return super if breaker.kind_of? DecoratorLeaf
|
265
|
-
parse_leafs(breaker)
|
266
|
-
@stack.current_node.breakable?(breaker)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
class DecoratorLeaf
|
271
|
-
def push_sectioning_node(stack, node_class)
|
272
|
-
node = node_class.new
|
273
|
-
m = DecoratorNode::DECORATOR_PAT.match(join)
|
274
|
-
node.node_id = m[2]
|
275
|
-
node.section_level = stack.current_heading_level if node.kind_of? SectioningNode
|
276
|
-
stack.push(node)
|
277
|
-
end
|
278
|
-
|
279
|
-
def push_self(stack)
|
280
|
-
decorator_type = self[0][0]
|
281
|
-
if decorator_type.start_with? "begin[".freeze
|
282
|
-
push_sectioning_node(stack, SectioningNode)
|
283
|
-
elsif decorator_type.start_with? "end[".freeze
|
284
|
-
push_sectioning_node(stack, SectioningNodeEnd)
|
285
|
-
else
|
286
|
-
super
|
287
|
-
end
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
class SectioningNode
|
292
|
-
attr_accessor :section_level
|
293
|
-
|
294
|
-
def breakable?(breaker)
|
295
|
-
breaker.kind_of? HeadingLeaf and @section_level >= breaker.level
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
class SectioningNodeEnd
|
300
|
-
def push_self(stack)
|
301
|
-
n = stack.stack.rindex do |node|
|
302
|
-
node.kind_of? SectioningNode and node.node_id == node_id
|
303
|
-
end
|
304
|
-
raise UnmatchedSectioningTagError unless n
|
305
|
-
stack.pop until stack.stack.length == n
|
306
|
-
rescue UnmatchedSectioningTagError => e
|
307
|
-
STDERR.puts "#{e}: The start tag for '#{node_id}' is not found."
|
308
|
-
# FIXME: The handling of this error should be changed appropriately.
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
214
|
class QuoteNode
|
313
|
-
def parse_leafs
|
215
|
+
def parse_leafs
|
314
216
|
self[0] = BlockParser.parse(self[0], AutoLink::Off)
|
315
217
|
end
|
316
218
|
end
|
@@ -371,8 +273,7 @@ module PseudoHiki
|
|
371
273
|
[HrLeaf, HrNode],
|
372
274
|
[ListLeaf, ListNode],
|
373
275
|
[EnumLeaf, EnumNode],
|
374
|
-
[BlockNodeEnd, BlockNodeEnd]
|
375
|
-
[DecoratorLeaf, DecoratorNode]
|
276
|
+
[BlockNodeEnd, BlockNodeEnd] # special case
|
376
277
|
].each do |leaf, node|
|
377
278
|
PARENT_NODE[leaf] = node
|
378
279
|
end
|
@@ -385,7 +286,6 @@ module PseudoHiki
|
|
385
286
|
['!', HeadingLeaf],
|
386
287
|
['""', QuoteLeaf],
|
387
288
|
['||', TableLeaf],
|
388
|
-
['//@', DecoratorLeaf],
|
389
289
|
['//', CommentOutLeaf],
|
390
290
|
['----\s*$', HrLeaf]]
|
391
291
|
|
@@ -431,7 +331,7 @@ module PseudoHiki
|
|
431
331
|
def read_lines(lines)
|
432
332
|
each_line = lines.respond_to?(:each_line) ? :each_line : :each
|
433
333
|
lines.send(each_line) {|line| @stack.current_node.add_leaf(line, self) }
|
434
|
-
@stack.
|
334
|
+
@stack.pop
|
435
335
|
end
|
436
336
|
end
|
437
337
|
|
@@ -78,7 +78,6 @@ module PseudoHiki
|
|
78
78
|
|
79
79
|
def visit(tree)
|
80
80
|
htmlelement = create_element(tree)
|
81
|
-
decorate(htmlelement, tree)
|
82
81
|
push_visited_results(htmlelement, tree)
|
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)
|
211
|
-
each_decorator(htmlelement, tree) do |elm, decorator|
|
212
|
-
visited_value(decorator["summary"]) do |summary|
|
213
|
-
htmlelement["summary"] = HtmlElement.escape(summary.join.chomp)
|
214
|
-
end
|
215
|
-
visited_value(decorator["caption"]) do |caption|
|
216
|
-
htmlelement.push @generator.create("caption", caption)
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
def visited_value(decorator_item)
|
222
|
-
yield visited_result(decorator_item.value) if decorator_item
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
192
|
class << Formatter[VerbatimNode]
|
227
193
|
def visit(tree)
|
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); BLANK; end
|
273
208
|
end
|
@@ -275,14 +275,13 @@ module PseudoHiki
|
|
275
275
|
class VerbatimNodeFormatter < self
|
276
276
|
def visit(tree)
|
277
277
|
element = super(tree)
|
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,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pseudohikiparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.5
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASHIMOTO, Naoki
|
@@ -90,7 +90,6 @@ files:
|
|
90
90
|
- lib/pseudohiki/inlineparser.rb
|
91
91
|
- lib/pseudohiki/markdownformat.rb
|
92
92
|
- lib/pseudohiki/plaintextformat.rb
|
93
|
-
- lib/pseudohiki/sinatra_helpers.rb
|
94
93
|
- lib/pseudohiki/treestack.rb
|
95
94
|
- lib/pseudohiki/utils.rb
|
96
95
|
- lib/pseudohiki/version.rb
|
@@ -125,9 +124,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
124
|
version: 1.8.7
|
126
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
126
|
requirements:
|
128
|
-
- - "
|
127
|
+
- - ">="
|
129
128
|
- !ruby/object:Gem::Version
|
130
|
-
version:
|
129
|
+
version: '0'
|
131
130
|
requirements: []
|
132
131
|
rubyforge_project:
|
133
132
|
rubygems_version: 2.2.3
|
@@ -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
|