pseudohikiparser 0.0.3.develop → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pseudohiki/blockparser.rb +15 -49
- data/lib/pseudohiki/htmlformat.rb +0 -24
- 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 -29
- data/test/test_htmlformat.rb +0 -63
- data/test/test_markdownformat.rb +0 -60
- 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: 32c71494df02c4ef6701259bd2f7731e2ec14508
|
4
|
+
data.tar.gz: fb7bceffb5fc2f9d67c6959bd71485862e71bff2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a3a20edf96dba9d41d837dc44009f4b1bb6eb6136476abd08cfaf882bcde8a213ded999647f2a067548b7b3f089e768390399d7e8f69fdccdbb6f4bcdff871b
|
7
|
+
data.tar.gz: 14cb9c5b77e7e4cdc9f153e91c0c8d2f4ae85a292637dcfa5c55d0982ef5b3adb3faa92e140184f318e33b76c00e1106affabf252c270d38e3d4aeca1e369ca5
|
@@ -37,14 +37,14 @@ module PseudoHiki
|
|
37
37
|
end
|
38
38
|
|
39
39
|
class BlockStack < TreeStack
|
40
|
-
def
|
41
|
-
self.current_node.parse_leafs
|
42
|
-
|
40
|
+
def pop
|
41
|
+
self.current_node.parse_leafs
|
42
|
+
super
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
class BlockLeaf < BlockStack::Leaf
|
47
|
-
attr_accessor :nominal_level, :node_id
|
47
|
+
attr_accessor :nominal_level, :node_id
|
48
48
|
|
49
49
|
def self.head_re=(head_regex)
|
50
50
|
@self_head_re = head_regex
|
@@ -84,7 +84,7 @@ module PseudoHiki
|
|
84
84
|
super(stack)
|
85
85
|
end
|
86
86
|
|
87
|
-
def parse_leafs
|
87
|
+
def parse_leafs
|
88
88
|
parsed = InlineParser.parse(self.join)
|
89
89
|
self.clear
|
90
90
|
self.concat(parsed)
|
@@ -134,10 +134,6 @@ module PseudoHiki
|
|
134
134
|
first.nominal_level if first # @cached_nominal_level ||= (first.nominal_level if first)
|
135
135
|
end
|
136
136
|
|
137
|
-
def decorator
|
138
|
-
first.decorator if first
|
139
|
-
end
|
140
|
-
|
141
137
|
def push_self(stack)
|
142
138
|
@stack = stack
|
143
139
|
super(stack)
|
@@ -147,7 +143,7 @@ module PseudoHiki
|
|
147
143
|
not (kind_of?(breaker.block) and nominal_level == breaker.nominal_level)
|
148
144
|
end
|
149
145
|
|
150
|
-
def parse_leafs
|
146
|
+
def parse_leafs; end
|
151
147
|
|
152
148
|
def in_link_tag?(preceding_str)
|
153
149
|
preceding_str[-2, 2] == "[[".freeze or preceding_str[-1, 1] == "|".freeze
|
@@ -159,7 +155,7 @@ module PseudoHiki
|
|
159
155
|
|
160
156
|
def add_leaf(line, blockparser)
|
161
157
|
leaf = create_leaf(line, blockparser)
|
162
|
-
blockparser.stack.
|
158
|
+
blockparser.stack.pop while blockparser.breakable?(leaf)
|
163
159
|
blockparser.stack.push leaf
|
164
160
|
end
|
165
161
|
|
@@ -171,8 +167,8 @@ module PseudoHiki
|
|
171
167
|
end
|
172
168
|
|
173
169
|
class NonNestedBlockNode < BlockNode
|
174
|
-
def parse_leafs
|
175
|
-
self.each {|leaf| leaf.parse_leafs
|
170
|
+
def parse_leafs
|
171
|
+
self.each {|leaf| leaf.parse_leafs }
|
176
172
|
end
|
177
173
|
end
|
178
174
|
|
@@ -192,11 +188,11 @@ module PseudoHiki
|
|
192
188
|
|
193
189
|
module BlockElement
|
194
190
|
{
|
195
|
-
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf
|
191
|
+
BlockLeaf => %w(DescLeaf VerbatimLeaf TableLeaf CommentOutLeaf BlockNodeEnd HrLeaf),
|
196
192
|
NonNestedBlockLeaf => %w(QuoteLeaf ParagraphLeaf),
|
197
193
|
NestedBlockLeaf => %w(HeadingLeaf),
|
198
194
|
ListTypeLeaf => %w(ListLeaf EnumLeaf),
|
199
|
-
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode
|
195
|
+
BlockNode => %w(DescNode VerbatimNode TableNode CommentOutNode HrNode),
|
200
196
|
NonNestedBlockNode => %w(QuoteNode ParagraphNode),
|
201
197
|
NestedBlockNode => %w(HeadingNode),
|
202
198
|
ListTypeBlockNode => %w(ListNode EnumNode),
|
@@ -221,43 +217,15 @@ module PseudoHiki
|
|
221
217
|
attr_accessor :in_block_tag
|
222
218
|
|
223
219
|
def add_leaf(line, blockparser)
|
224
|
-
return @stack.
|
220
|
+
return @stack.pop if LINE_PAT::VERBATIM_END =~ line
|
225
221
|
return super(line, blockparser) unless @in_block_tag
|
226
222
|
line = " ".concat(line) if BlockElement::BlockNodeEnd.head_re =~ line and not @in_block_tag
|
227
223
|
@stack.push BlockElement::VerbatimLeaf.create(line, @in_block_tag)
|
228
224
|
end
|
229
225
|
end
|
230
226
|
|
231
|
-
class BlockElement::DecoratorNode
|
232
|
-
DECORATOR_PAT = /\A(?:([^\[\]:]+))?(?:\[([^\[\]]+)\])?(?::\s*(\S.*))?/o
|
233
|
-
|
234
|
-
class DecoratorItem < Struct.new(:string, :type, :id, :value)
|
235
|
-
def initialize(*args)
|
236
|
-
super
|
237
|
-
self.value = InlineParser.parse(self.value) if self.value
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
def parse_leafs(breaker)
|
242
|
-
decorator = {}
|
243
|
-
breaker.decorator = decorator
|
244
|
-
@stack.remove_current_node.each do |leaf|
|
245
|
-
m = DECORATOR_PAT.match(leaf.join)
|
246
|
-
return nil unless m
|
247
|
-
item = DecoratorItem.new(*(m.to_a))
|
248
|
-
decorator[item.type||:id] = item
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
def breakable?(breaker)
|
253
|
-
return super if breaker.kind_of?(BlockElement::DecoratorLeaf)
|
254
|
-
parse_leafs(breaker)
|
255
|
-
@stack.current_node.breakable?(breaker)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
227
|
class BlockElement::QuoteNode
|
260
|
-
def parse_leafs
|
228
|
+
def parse_leafs
|
261
229
|
self[0] = BlockParser.parse(self[0])
|
262
230
|
end
|
263
231
|
end
|
@@ -315,8 +283,7 @@ module PseudoHiki
|
|
315
283
|
[ParagraphLeaf, ParagraphNode],
|
316
284
|
[HrLeaf, HrNode],
|
317
285
|
[ListLeaf, ListNode],
|
318
|
-
[EnumLeaf, EnumNode]
|
319
|
-
[DecoratorLeaf, DecoratorNode]
|
286
|
+
[EnumLeaf, EnumNode]
|
320
287
|
].each do |leaf, node|
|
321
288
|
ParentNode[leaf] = node
|
322
289
|
end
|
@@ -334,7 +301,6 @@ module PseudoHiki
|
|
334
301
|
['!', HeadingLeaf],
|
335
302
|
['""', QuoteLeaf],
|
336
303
|
['||', TableLeaf],
|
337
|
-
['//@', DecoratorLeaf],
|
338
304
|
['//', CommentOutLeaf],
|
339
305
|
['----\s*$', HrLeaf]
|
340
306
|
].each do |head, leaf|
|
@@ -373,7 +339,7 @@ module PseudoHiki
|
|
373
339
|
def read_lines(lines)
|
374
340
|
each_line = lines.respond_to?(:each_line) ? :each_line : :each
|
375
341
|
lines.send(each_line) {|line| @stack.current_node.add_leaf(line, self) }
|
376
|
-
@stack.
|
342
|
+
@stack.pop
|
377
343
|
end
|
378
344
|
end
|
379
345
|
end
|
@@ -61,7 +61,6 @@ module PseudoHiki
|
|
61
61
|
|
62
62
|
def visit(tree)
|
63
63
|
htmlelement = create_self_element(tree)
|
64
|
-
decorate(htmlelement, tree)
|
65
64
|
push_visited_results(htmlelement, tree)
|
66
65
|
htmlelement
|
67
66
|
end
|
@@ -79,21 +78,6 @@ module PseudoHiki
|
|
79
78
|
chunks.push tree
|
80
79
|
end
|
81
80
|
|
82
|
-
def decorate(htmlelement, tree)
|
83
|
-
each_decorator(htmlelement, tree) do |element, decorator|
|
84
|
-
element[CLASS] = HtmlElement.escape(decorator[CLASS].id) if decorator[CLASS]
|
85
|
-
if id_item = decorator[ID]||decorator[:id]
|
86
|
-
element[ID] = HtmlElement.escape(id_item.id).upcase
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def each_decorator(element, tree)
|
92
|
-
return unless element.kind_of? HtmlElement
|
93
|
-
return unless tree.kind_of? BlockParser::BlockNode and tree.decorator
|
94
|
-
tree.decorator.tap {|decorator| yield element, decorator }
|
95
|
-
end
|
96
|
-
|
97
81
|
class ListLeafNodeFormatter < self
|
98
82
|
def create_self_element(tree)
|
99
83
|
super(tree).tap do |element|
|
@@ -192,14 +176,6 @@ module PseudoHiki
|
|
192
176
|
|
193
177
|
#for BlockParser
|
194
178
|
|
195
|
-
class << Formatter[TableNode]
|
196
|
-
def decorate(htmlelement, tree)
|
197
|
-
each_decorator(htmlelement, tree) do |element, decorator|
|
198
|
-
htmlelement["summary"] = HtmlElement.escape(decorator["summary"].value.join) if decorator["summary"]
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
179
|
class << Formatter[VerbatimNode]
|
204
180
|
def visit(tree)
|
205
181
|
create_self_element.tap do |element|
|
@@ -284,14 +284,13 @@ module PseudoHiki
|
|
284
284
|
class VerbatimNodeFormatter < self
|
285
285
|
def visit(tree)
|
286
286
|
element = super(tree)
|
287
|
-
@language_name = language_name(tree)
|
288
287
|
return gfm_verbatim(element) if @options.gfm_style
|
289
288
|
md_verbatim(element)
|
290
289
|
end
|
291
290
|
|
292
291
|
def gfm_verbatim(element)
|
293
292
|
element.tap do |lines|
|
294
|
-
lines.unshift "```#{
|
293
|
+
lines.unshift "```#{$/}"
|
295
294
|
lines.push "```#{$/ * 2}"
|
296
295
|
end
|
297
296
|
end
|
@@ -299,12 +298,6 @@ module PseudoHiki
|
|
299
298
|
def md_verbatim(element)
|
300
299
|
element.join.gsub(/^/o, " ").sub(/ \Z/o, "").concat $/
|
301
300
|
end
|
302
|
-
|
303
|
-
def language_name(tree)
|
304
|
-
tree.decorator.tap do |decorator|
|
305
|
-
return decorator ? decorator["code"].id : ""
|
306
|
-
end
|
307
|
-
end
|
308
301
|
end
|
309
302
|
|
310
303
|
class QuoteNodeFormatter < self
|
data/lib/pseudohiki/version.rb
CHANGED
data/lib/pseudohikiparser.rb
CHANGED
data/test/test_blockparser.rb
CHANGED
@@ -311,35 +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
314
|
def test_comment_out_followed_by_a_verbatim_block
|
344
315
|
text = <<TEXT
|
345
316
|
the first paragraph
|
data/test/test_htmlformat.rb
CHANGED
@@ -696,69 +696,6 @@ HTML
|
|
696
696
|
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
697
697
|
end
|
698
698
|
|
699
|
-
def test_decorator
|
700
|
-
text = <<TEXT
|
701
|
-
//@class[section_type]
|
702
|
-
!!title of section
|
703
|
-
|
704
|
-
a paragraph.
|
705
|
-
|
706
|
-
//@class[class_name]
|
707
|
-
//@id[id_name]
|
708
|
-
another paragraph.
|
709
|
-
TEXT
|
710
|
-
|
711
|
-
xhtml = <<HTML
|
712
|
-
<div class="section_type">
|
713
|
-
<h2>title of section</h2>
|
714
|
-
<p>
|
715
|
-
a paragraph.</p>
|
716
|
-
<p class="class_name" id="ID_NAME">
|
717
|
-
another paragraph.</p>
|
718
|
-
<!-- end of section_type -->
|
719
|
-
</div>
|
720
|
-
HTML
|
721
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
722
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
723
|
-
end
|
724
|
-
|
725
|
-
def test_decorator_for_table
|
726
|
-
text = <<TEXT
|
727
|
-
//@summary: Summary of the table
|
728
|
-
||!header 1||! header 2
|
729
|
-
||cell 1||cell 2
|
730
|
-
TEXT
|
731
|
-
|
732
|
-
xhtml = <<HTML
|
733
|
-
<table summary="Summary of the table">
|
734
|
-
<tr><th>header 1</th><th> header 2</th></tr>
|
735
|
-
<tr><td>cell 1</td><td>cell 2</td></tr>
|
736
|
-
</table>
|
737
|
-
HTML
|
738
|
-
tree = BlockParser.parse(text.lines.to_a.map {|line| line.chomp })
|
739
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
740
|
-
end
|
741
|
-
|
742
|
-
def test_decorator_for_verbatim
|
743
|
-
text = <<TEXT
|
744
|
-
//@code[ruby]
|
745
|
-
def bonjour!
|
746
|
-
puts "Bonjour!"
|
747
|
-
end
|
748
|
-
TEXT
|
749
|
-
|
750
|
-
xhtml = <<HTML
|
751
|
-
<pre>
|
752
|
-
def bonjour!
|
753
|
-
puts "Bonjour!"
|
754
|
-
end
|
755
|
-
</pre>
|
756
|
-
HTML
|
757
|
-
|
758
|
-
tree = BlockParser.parse(text.lines.to_a)
|
759
|
-
assert_equal(xhtml, XhtmlFormat.format(tree).to_s)
|
760
|
-
end
|
761
|
-
|
762
699
|
def test_comment_out_followed_by_a_verbatim_block
|
763
700
|
text = <<TEXT
|
764
701
|
the first paragraph
|
data/test/test_markdownformat.rb
CHANGED
@@ -518,66 +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
521
|
def test_collect_headings
|
582
522
|
text = <<TEXT
|
583
523
|
!![main-heading] heading
|
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.3
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASHIMOTO, Naoki
|
@@ -74,7 +74,6 @@ files:
|
|
74
74
|
- lib/pseudohiki/inlineparser.rb
|
75
75
|
- lib/pseudohiki/markdownformat.rb
|
76
76
|
- lib/pseudohiki/plaintextformat.rb
|
77
|
-
- lib/pseudohiki/sinatra_helpers.rb
|
78
77
|
- lib/pseudohiki/treestack.rb
|
79
78
|
- lib/pseudohiki/utils.rb
|
80
79
|
- lib/pseudohiki/version.rb
|
@@ -107,9 +106,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
106
|
version: 1.8.7
|
108
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
108
|
requirements:
|
110
|
-
- - "
|
109
|
+
- - ">="
|
111
110
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
111
|
+
version: '0'
|
113
112
|
requirements: []
|
114
113
|
rubyforge_project:
|
115
114
|
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
|