pseudohikiparser 0.0.3 → 0.0.4.develop

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,9 +18,15 @@ module PseudoHiki
18
18
  GFM_STRIPPED_CHARS = " -&+$,/:;=?@\"{}#|^~[]`\\*()%.!'"
19
19
  GFM_STRIPPED_CHARS_PAT = Regexp.union(/\s+/o, /[#{Regexp.escape(GFM_STRIPPED_CHARS)}]/o)
20
20
 
21
- def self.format(tree, options={ :strict_mode=> false, :gfm_style => false })
21
+ @default_options = { :strict_mode => false, :gfm_style => false }
22
+
23
+ def self.default_options
24
+ @default_options
25
+ end
26
+
27
+ def self.format(tree, options=MarkDownFormat.default_options)
22
28
  if Formatters.empty?
23
- default_options = { :strict_mode=> false, :gfm_style => false }
29
+ default_options = MarkDownFormat.default_options
24
30
  Formatters[default_options] = create(default_options)
25
31
  end
26
32
 
@@ -28,15 +34,14 @@ module PseudoHiki
28
34
  Formatters[options].format(tree)
29
35
  end
30
36
 
31
- def self.convert_to_gfm_id_format(heading)
37
+ def self.convert_into_gfm_id_format(heading)
32
38
  heading.gsub(GFM_STRIPPED_CHARS_PAT) do |char|
33
39
  /\A\s+\Z/o =~ char ? '-'.freeze : ''.freeze
34
40
  end.downcase
35
41
  end
36
42
 
37
- def initialize(formatter={}, options={ :strict_mode=> false, :gfm_style => false })
43
+ def initialize(formatter={}, options=MarkDownFormat.default_options)
38
44
  @formatter = formatter
39
- options_given_via_block = nil
40
45
  if block_given?
41
46
  options_given_via_block = yield
42
47
  options.merge!(options_given_via_block)
@@ -49,7 +54,7 @@ module PseudoHiki
49
54
  end
50
55
 
51
56
  def visited_result(node)
52
- visitor = @formatter[node.class]||@formatter[PlainNode]
57
+ visitor = @formatter[node.class] || @formatter[PlainNode]
53
58
  node.accept(visitor)
54
59
  end
55
60
 
@@ -69,14 +74,14 @@ module PseudoHiki
69
74
 
70
75
  def format(tree)
71
76
  formatter = get_plain
72
- @formatter[LinkNode].id_conv_table = prepare_id_conv_table(tree) if @options.gfm_style
77
+ prepare_id_conv_table(tree) if @options.gfm_style
73
78
  tree.accept(formatter).join
74
79
  end
75
80
 
76
81
  def list_mark(tree, mark)
77
82
  mark = mark.dup
78
83
  mark << " " if /^ /o !~ tree.join
79
- " " * (tree.nominal_level - 1) * 2 + mark
84
+ " " * (tree.level - 1) * 2 + mark
80
85
  end
81
86
 
82
87
  def enclose_in(element, mark)
@@ -94,63 +99,56 @@ module PseudoHiki
94
99
  end
95
100
  end
96
101
 
102
+ def heading_to_gfm_id(heading)
103
+ heading_text = PlainTextFormat.format(heading).strip
104
+ MarkDownFormat.convert_into_gfm_id_format(heading_text)
105
+ end
106
+
97
107
  def prepare_id_conv_table(tree)
98
108
  {}.tap do |table|
99
109
  collect_headings(tree).each do |heading|
100
110
  if node_id = heading.node_id
101
- heading_text = PlainTextFormat.format(heading).strip
102
- table[node_id] = MarkDownFormat.convert_to_gfm_id_format(heading_text)
111
+ table[node_id] = heading_to_gfm_id(heading)
103
112
  end
104
113
  end
114
+ @formatter[LinkNode].id_conv_table = table
105
115
  end
106
116
  end
107
117
 
108
118
  def self.create(options={ :strict_mode => false })
109
119
  formatter = {}
110
- main_formatter = self.new(formatter, options)
111
- formatter.default = main_formatter
112
-
113
- # formatter[PlainNode] = PlainNodeFormatter.new(formatter, options)
114
- # formatter[InlineNode] = InlineNodeFormatter.new(formatter, options)
115
- formatter[InlineLeaf] = InlineLeafFormatter.new(formatter, options)
116
- formatter[LinkNode] = LinkNodeFormatter.new(formatter, options)
117
- formatter[EmNode] = EmNodeFormatter.new(formatter, options)
118
- formatter[StrongNode] = StrongNodeFormatter.new(formatter, options)
119
- formatter[DelNode] = DelNodeFormatter.new(formatter, options)
120
- formatter[LiteralNode] = LiteralNodeFormatter.new(formatter, options)
121
- formatter[PluginNode] = PluginNodeFormatter.new(formatter, options)
122
- # formatter[DescLeaf] = DescLeafFormatter.new(formatter, options)
123
- # formatter[TableCellNode] = TableCellNodeFormatter.new(formatter, options)
124
- formatter[VerbatimLeaf] = VerbatimLeafFormatter.new(formatter, options)
125
- # formatter[QuoteLeaf] = QuoteLeafFormatter.new(formatter, options)
126
- # formatter[TableLeaf] = TableLeafFormatter.new(formatter, options)
127
- formatter[CommentOutLeaf] = CommentOutLeafFormatter.new(formatter, options)
128
- formatter[HeadingLeaf] = HeadingLeafFormatter.new(formatter, options)
129
- # formatter[ParagraphLeaf] = ParagraphLeafFormatter.new(formatter, options)
130
- formatter[HrLeaf] = HrLeafFormatter.new(formatter, options)
131
- # formatter[BlockNodeEnd] = BlockNodeEndFormatter.new(formatter, options)
132
- # formatter[ListLeaf] = ListLeafFormatter.new(formatter, options)
133
- # formatter[EnumLeaf] = EnumLeafFormatter.new(formatter, options)
134
- formatter[DescNode] = DescNodeFormatter.new(formatter, options)
135
- formatter[VerbatimNode] = VerbatimNodeFormatter.new(formatter, options)
136
- formatter[QuoteNode] = QuoteNodeFormatter.new(formatter, options)
137
- formatter[TableNode] = TableNodeFormatter.new(formatter, options)
138
- # formatter[CommentOutNode] = CommentOutNodeFormatter.new(formatter, options)
139
- formatter[HeadingNode] = HeadingNodeFormatter.new(formatter, options)
140
- formatter[ParagraphNode] = ParagraphNodeFormatter.new(formatter, options)
141
- # formatter[HrNode] = HrNodeFormatter.new(formatter, options)
142
- formatter[ListNode] = ListNodeFormatter.new(formatter, options)
143
- formatter[EnumNode] = EnumNodeFormatter.new(formatter, options)
144
- formatter[ListWrapNode] = ListWrapNodeFormatter.new(formatter, options)
145
- formatter[EnumWrapNode] = EnumWrapNodeFormatter.new(formatter, options)
146
-
147
- main_formatter
148
- end
149
-
150
- ## Definitions of subclasses of MarkDownFormat begins here.
151
-
152
- # class PlainNodeFormatter < self; end
153
- # class InlineNodeFormatter < self; end
120
+
121
+ new(formatter, options).tap do |main_formatter|
122
+ formatter.default = main_formatter
123
+
124
+ [[InlineLeaf, InlineLeafFormatter],
125
+ [LinkNode, LinkNodeFormatter],
126
+ [EmNode, EmNodeFormatter],
127
+ [StrongNode, StrongNodeFormatter],
128
+ [DelNode, DelNodeFormatter],
129
+ [LiteralNode, LiteralNodeFormatter],
130
+ [PluginNode, PluginNodeFormatter],
131
+ [VerbatimLeaf, VerbatimLeafFormatter],
132
+ [CommentOutLeaf, CommentOutLeafFormatter],
133
+ [HeadingLeaf, HeadingLeafFormatter],
134
+ [HrLeaf, HrLeafFormatter],
135
+ [DescNode, DescNodeFormatter],
136
+ [VerbatimNode, VerbatimNodeFormatter],
137
+ [QuoteNode, QuoteNodeFormatter],
138
+ [TableNode, TableNodeFormatter],
139
+ [HeadingNode, HeadingNodeFormatter],
140
+ [ParagraphNode, ParagraphNodeFormatter],
141
+ [ListNode, ListNodeFormatter],
142
+ [EnumNode, EnumNodeFormatter],
143
+ [ListWrapNode, ListWrapNodeFormatter],
144
+ [EnumWrapNode, EnumWrapNodeFormatter]
145
+ ].each do |node, formatter_class|
146
+ formatter[node] = formatter_class.new(formatter, options)
147
+ end
148
+ end
149
+ end
150
+
151
+ ## Definitions of subclasses of MarkDownFormat begins here.
154
152
 
155
153
  class InlineLeafFormatter < self
156
154
  def visit(leaf)
@@ -173,15 +171,11 @@ module PseudoHiki
173
171
  tree = tree.dup
174
172
  element = create_self_element
175
173
  caption = get_caption(tree)
176
- begin
177
- ref = tree.last.join
178
- rescue NoMethodError
179
- raise NoMethodError unless tree.empty?
180
- STDERR.puts "No uri is specified for #{caption}"
174
+ if IMAGE_SUFFIX_RE =~ ref_tail(tree, caption) and not_from_thumbnail
175
+ element.push "!"
181
176
  end
182
- element.push "!" if ImageSuffix =~ ref and not_from_thumbnail
183
177
  link = format_link(tree)
184
- element.push "[#{(caption||tree).join}](#{link})"
178
+ element.push "[#{(caption || tree).join}](#{link})"
185
179
  element
186
180
  end
187
181
 
@@ -202,6 +196,13 @@ module PseudoHiki
202
196
  link
203
197
  end
204
198
  end
199
+
200
+ def ref_tail(tree, caption)
201
+ tree.last.join
202
+ rescue NoMethodError
203
+ raise NoMethodError unless tree.empty?
204
+ STDERR.puts "No uri is specified for #{caption}"
205
+ end
205
206
  end
206
207
 
207
208
  class EmNodeFormatter < self
@@ -234,24 +235,18 @@ module PseudoHiki
234
235
 
235
236
  class PluginNodeFormatter < self
236
237
  def visit(tree)
237
- str =tree.join
238
+ str = tree.join
238
239
  return str.strip * 2 if str == " {" or str == "} "
239
240
  super(tree)
240
241
  end
241
242
  end
242
243
 
243
- # class DescLeafFormatter < self; end
244
- # class TableCellNodeFormatter < self; end
245
-
246
244
  class VerbatimLeafFormatter < InlineLeafFormatter
247
245
  def visit(leaf)
248
246
  leaf.join
249
247
  end
250
248
  end
251
249
 
252
- # class QuoteLeafFormatter < self; end
253
- # class TableLeafFormatter < self; end
254
-
255
250
  class CommentOutLeafFormatter < self
256
251
  def visit(tree); ""; end
257
252
  end
@@ -261,7 +256,6 @@ module PseudoHiki
261
256
  super(tree).tap {|element| element.push $/ }
262
257
  end
263
258
  end
264
- # class ParagraphLeafFormatter < self; end
265
259
 
266
260
  class HrLeafFormatter < self
267
261
  def visit(tree)
@@ -269,9 +263,6 @@ module PseudoHiki
269
263
  end
270
264
  end
271
265
 
272
- # class BlockNodeEndFormatter < self; end
273
- # class ListLeafFormatter < self; end
274
- # class EnumLeafFormatter < self; end
275
266
  class DescNodeFormatter < self
276
267
  def visit(tree)
277
268
  desc_list = HtmlElement.create("dl").tap do |element|
@@ -284,13 +275,14 @@ module PseudoHiki
284
275
  class VerbatimNodeFormatter < self
285
276
  def visit(tree)
286
277
  element = super(tree)
278
+ @language_name = language_name(tree)
287
279
  return gfm_verbatim(element) if @options.gfm_style
288
280
  md_verbatim(element)
289
281
  end
290
282
 
291
283
  def gfm_verbatim(element)
292
284
  element.tap do |lines|
293
- lines.unshift "```#{$/}"
285
+ lines.unshift "```#{@language_name + $/}"
294
286
  lines.push "```#{$/ * 2}"
295
287
  end
296
288
  end
@@ -298,6 +290,12 @@ module PseudoHiki
298
290
  def md_verbatim(element)
299
291
  element.join.gsub(/^/o, " ").sub(/ \Z/o, "").concat $/
300
292
  end
293
+
294
+ def language_name(tree)
295
+ tree.decorator.tap do |decorator|
296
+ return decorator ? decorator["code"].id : ""
297
+ end
298
+ end
301
299
  end
302
300
 
303
301
  class QuoteNodeFormatter < self
@@ -323,13 +321,13 @@ module PseudoHiki
323
321
  cell_width = calculate_cell_width(table)
324
322
  header_delimiter = cell_width.map {|width| "-" * width }
325
323
  cell_formats = cell_width.map {|width| "%-#{width}s" }
326
- table[1,0] = [header_delimiter]
324
+ table[1, 0] = [header_delimiter]
327
325
  table.map do |row|
328
- formatted_row = row.zip(cell_formats).map do |cell, format|
329
- format%[cell]
326
+ formatted_row = row.zip(cell_formats).map do |cell, format_str|
327
+ sprintf(format_str, cell)
330
328
  end
331
329
  "|#{formatted_row.join("|") }|#{$/}"
332
- end.join+$/
330
+ end.join + $/
333
331
  end
334
332
 
335
333
  def format_html_table(tree)
@@ -344,15 +342,21 @@ module PseudoHiki
344
342
  return format_gfm_table(table) if @options.gfm_conformant
345
343
 
346
344
  if @options.gfm_style == :force
347
- begin
348
- raise NotConformantStyleError.new("The table is not conformant to GFM style. The first row will be treated as a header row.")
349
- rescue
350
- STDERR.puts "The table is not conformant to GFM style. The first row will be treated as a header row."
351
- end
352
- return format_gfm_table(table)
345
+ warning_for_non_comformant_style
346
+ format_gfm_table(table)
347
+ else
348
+ format_html_table(tree)
353
349
  end
350
+ end
354
351
 
355
- format_html_table(tree)
352
+ def warning_for_non_comformant_style
353
+ warning_message = <<ERROR
354
+ The table is not conformant to GFM style.
355
+ The first row will be treated as a header row.
356
+ ERROR
357
+ raise NotConformantStyleError.new(warning_message)
358
+ rescue
359
+ STDERR.puts warning_message
356
360
  end
357
361
 
358
362
  def calculate_cell_width(table)
@@ -369,8 +373,8 @@ module PseudoHiki
369
373
  rows.each_with_index do |row, i|
370
374
  row.each do |cell|
371
375
  return false if cell.rowspan > 1 or cell.colspan > 1
372
- #A table head row should be at the beginning and composed of <th> elements,
373
- #and other rows should not include <th> elements
376
+ # A table head row should be at the beginning and composed of <th>
377
+ # elements, and other rows should not include <th> elements
374
378
  return false unless (i == 0) == (cell.cell_type == "th")
375
379
  end
376
380
  end
@@ -378,12 +382,10 @@ module PseudoHiki
378
382
  end
379
383
  end
380
384
 
381
- # class CommentOutNodeFormatter < self; end
382
-
383
385
  class HeadingNodeFormatter < self
384
386
  def visit(tree)
385
387
  super(tree).tap do |element|
386
- heading_mark = "#" * tree.first.nominal_level
388
+ heading_mark = "#" * tree.first.level
387
389
  heading_mark << " " if /^ /o !~ tree.join
388
390
  element.unshift heading_mark
389
391
  end
@@ -396,14 +398,10 @@ module PseudoHiki
396
398
  end
397
399
  end
398
400
 
399
- # class HrNodeFormatter < self; end
400
-
401
401
  class ListNodeFormatter < self
402
402
  def visit(tree)
403
403
  super(tree).tap do |element|
404
- if /\A\*/o =~ element.first.join
405
- element.push $/
406
- end
404
+ element.push $/ if /\A\*/o =~ element.first.join
407
405
  end
408
406
  end
409
407
  end
@@ -411,9 +409,7 @@ module PseudoHiki
411
409
  class EnumNodeFormatter < self
412
410
  def visit(tree)
413
411
  super(tree).tap do |element|
414
- if /\A\d/o =~ element.first.join
415
- element.push $/
416
- end
412
+ element.push $/ if /\A\d/o =~ element.first.join
417
413
  end
418
414
  end
419
415
  end
@@ -429,7 +425,7 @@ module PseudoHiki
429
425
  class EnumWrapNodeFormatter < self
430
426
  def visit(tree)
431
427
  super(tree).tap do |element|
432
- element.unshift list_mark(tree, "#{tree.nominal_level}.")
428
+ element.unshift list_mark(tree, "#{tree.level}.")
433
429
  end
434
430
  end
435
431
  end
@@ -27,9 +27,8 @@ module PseudoHiki
27
27
  Formatters[options].format(tree)
28
28
  end
29
29
 
30
- def initialize(formatter={}, options = { :verbose_mode=> false })
30
+ def initialize(formatter={}, options={ :verbose_mode => false })
31
31
  @formatter = formatter
32
- options_given_via_block = nil
33
32
  if block_given?
34
33
  options_given_via_block = yield
35
34
  options.merge!(options_given_via_block)
@@ -42,7 +41,7 @@ module PseudoHiki
42
41
  end
43
42
 
44
43
  def visited_result(node)
45
- visitor = @formatter[node.class]||@formatter[PlainNode]
44
+ visitor = @formatter[node.class] || @formatter[PlainNode]
46
45
  node.accept(visitor)
47
46
  end
48
47
 
@@ -65,24 +64,39 @@ module PseudoHiki
65
64
  tree.accept(formatter).join
66
65
  end
67
66
 
68
- def self.create(options = { :verbose_mode => false })
67
+ def split_into_parts(tree, separator)
68
+ tree = tree.dup
69
+ first_part = nil
70
+ sep_index = tree.index(separator)
71
+ if sep_index
72
+ first_part = tree.shift(sep_index)
73
+ tree.shift
74
+ end
75
+ return first_part, tree
76
+ end
77
+
78
+ def self.create(options={ :verbose_mode => false })
69
79
  formatter = {}
70
- main_formatter = self.new(formatter, options)
71
- formatter.default = main_formatter
72
80
 
73
- formatter[InlineLeaf] = InlineLeafFormatter.new(formatter, options)
74
- formatter[LinkNode] = LinkNodeFormatter.new(formatter, options)
75
- formatter[DelNode] = DelNodeFormatter.new(formatter, options)
76
- formatter[DescLeaf] = DescLeafFormatter.new(formatter, options)
77
- formatter[VerbatimNode] = VerbatimNodeFormatter.new(formatter, options)
78
- formatter[TableNode] = TableNodeFormatter.new(formatter, options)
79
- formatter[CommentOutNode] = CommentOutNodeFormatter.new(formatter, options)
80
- formatter[ParagraphNode] = ParagraphNodeFormatter.new(formatter, options)
81
- formatter[PluginNode] = PluginNodeFormatter.new(formatter, options)
82
- main_formatter
81
+ new(formatter, options).tap do |main_formatter|
82
+ formatter.default = main_formatter
83
+
84
+ [[InlineLeaf, InlineLeafFormatter],
85
+ [LinkNode, LinkNodeFormatter],
86
+ [DelNode, DelNodeFormatter],
87
+ [DescLeaf, DescLeafFormatter],
88
+ [VerbatimNode, VerbatimNodeFormatter],
89
+ [TableNode, TableNodeFormatter],
90
+ [CommentOutNode, CommentOutNodeFormatter],
91
+ [ParagraphNode, ParagraphNodeFormatter],
92
+ [PluginNode, PluginNodeFormatter]
93
+ ].each do |node, formatter_class|
94
+ formatter[node] = formatter_class.new(formatter, options)
95
+ end
96
+ end
83
97
  end
84
98
 
85
- ## Definitions of subclasses of PlainTextFormat begins here.
99
+ ## Definitions of subclasses of PlainTextFormat begins here.
86
100
 
87
101
  class InlineLeafFormatter < self
88
102
  def visit(leaf)
@@ -92,30 +106,28 @@ module PseudoHiki
92
106
 
93
107
  class LinkNodeFormatter < self
94
108
  def visit(tree)
95
- tree = tree.dup
96
109
  element = Node.new
97
- caption = get_caption(tree)
98
- begin
99
- ref = tree.last.join
100
- rescue NoMethodError
101
- raise NoMethodError unless tree.empty?
102
- STDERR.puts "No uri is specified for #{caption}"
103
- end
104
- if ImageSuffix =~ ref
105
- element.push (caption||tree).join
110
+ caption, ref = get_caption(tree)
111
+ if IMAGE_SUFFIX_RE =~ ref_tail(ref, caption)
112
+ element.push (caption || ref).join
106
113
  else
107
- element.push caption||tree.join
108
- element.push " (#{tree.join('')})" if @options.verbose_mode and caption
114
+ element.push caption || ref.join
115
+ element.push " (#{ref.join})" if @options.verbose_mode and caption
109
116
  end
110
117
  element
111
118
  end
112
119
 
113
120
  def get_caption(tree)
114
- link_sep_index = tree.find_index([LinkSep])
115
- return nil unless link_sep_index
116
- caption_part = tree.shift(link_sep_index)
117
- tree.shift
118
- caption_part.map {|element| visited_result(element) }
121
+ caption, ref_part = split_into_parts(tree, [LinkSep])
122
+ caption = caption.map {|element| visited_result(element) } if caption
123
+ return caption, ref_part
124
+ end
125
+
126
+ def ref_tail(tree, caption)
127
+ tree.last.join
128
+ rescue NoMethodError
129
+ raise NoMethodError unless tree.empty?
130
+ STDERR.puts "No uri is specified for #{caption}"
119
131
  end
120
132
  end
121
133
 
@@ -128,14 +140,10 @@ module PseudoHiki
128
140
 
129
141
  class DescLeafFormatter < self
130
142
  def visit(tree)
131
- tree = tree.dup
132
143
  element = create_self_element(tree)
133
- dt_sep_index = tree.index(DescSep)
134
- if dt_sep_index
135
- push_visited_results(element, tree.shift(dt_sep_index))
136
- tree.shift
137
- end
138
- dd = tree.map {|token| visited_result(token) }.join.lstrip
144
+ dt_part, dd_part = split_into_parts(tree, DescSep)
145
+ push_visited_results(element, dt_part) if dt_part
146
+ dd = dd_part.map {|token| visited_result(token) }.join.lstrip
139
147
  unless dd.empty?
140
148
  element.push element.empty? ? "\t" : ":\t"
141
149
  element.push dd
@@ -160,11 +168,12 @@ ERROR_TEXT
160
168
  def visit(tree)
161
169
  table = create_self_element(tree)
162
170
  tree.length.times { table.push create_self_element(tree) }
163
- max_col = tree.map{|row| row.reduce(0) {|sum, cell| sum + cell.colspan }}.max - 1
171
+ max_col = tree.map {|row| row.reduce(0) {|sum, cell| sum + cell.colspan }}.max - 1
164
172
  max_row = tree.length - 1
165
173
  each_empty_cell_index(max_row, max_col, tree, table) do |r, c, cur_row|
166
- table[r][c] = cur_row.shift
167
- fill_expand(table, r, c, table[r][c])
174
+ cur_cell = cur_row.shift
175
+ table[r][c] = visited_result(cur_cell).join.lstrip.chomp
176
+ fill_expand(table, r, c, cur_cell)
168
177
  end
169
178
  format_table(table, tree)
170
179
  end
@@ -175,17 +184,20 @@ ERROR_TEXT
175
184
  each_cell_index(max_row, max_col) do |r, c|
176
185
  cur_row = rows.shift if c == 0
177
186
  next if table[r][c]
178
- begin
179
- raise MalFormedTableError.new(ERROR_MESSAGE%[table[r].inspect]) if cur_row.empty?
187
+ if cur_row.empty?
188
+ warning_for_malformed_row(table[r])
189
+ else
180
190
  yield r, c, cur_row
181
- rescue
182
- raise if @options.strict_mode
183
- STDERR.puts ERROR_MESSAGE%[table[r].inspect]
184
- next
185
191
  end
186
192
  end
187
193
  end
188
194
 
195
+ def warning_for_malformed_row(row)
196
+ message = sprintf(ERROR_MESSAGE, row.inspect)
197
+ raise MalFormedTableError.new(message) if @options.strict_mode
198
+ STDERR.puts message
199
+ end
200
+
189
201
  def deep_copy_tree(tree)
190
202
  tree.dup.clear.tap do |new_tree|
191
203
  new_tree.concat tree.map {|node| node.dup }
@@ -206,11 +218,9 @@ ERROR_TEXT
206
218
  max_col = initial_col + cur_cell.colspan - 1
207
219
  each_cell_index(max_row, max_col,
208
220
  initial_row, initial_col) do |r, c|
209
- if initial_row == r and initial_col == c
210
- table[r][c] = visited_result(cur_cell).join.lstrip.chomp
211
- next
221
+ unless initial_row == r and initial_col == c
222
+ table[r][c] = initial_row == r ? col_expand : row_expand
212
223
  end
213
- table[r][c] = initial_row == r ? col_expand : row_expand
214
224
  end
215
225
  end
216
226
  end
@@ -220,7 +230,7 @@ ERROR_TEXT
220
230
  end
221
231
 
222
232
  def format_table(table, tree)
223
- table.map {|row| row.join("\t")+$/ }.join
233
+ table.map {|row| row.join("\t") + $/ }.join
224
234
  end
225
235
 
226
236
  class CommentOutNodeFormatter < self
@@ -229,13 +239,13 @@ ERROR_TEXT
229
239
 
230
240
  class ParagraphNodeFormatter < self
231
241
  def visit(tree)
232
- super(tree).join+$/
242
+ super(tree).join + $/
233
243
  end
234
244
  end
235
245
 
236
246
  class PluginNodeFormatter < self
237
247
  def visit(tree)
238
- str =tree.join
248
+ str = tree.join
239
249
  return str.strip * 2 if str == " {" or str == "} "
240
250
  super(tree)
241
251
  end
@@ -0,0 +1,23 @@
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
@@ -34,7 +34,7 @@ class TreeStack
34
34
  def merge(leaf)
35
35
  raise NotLeafError unless leaf.kind_of? Leaf
36
36
  return nil unless leaf.kind_of? Mergeable
37
- self.concat(leaf)
37
+ concat(leaf)
38
38
  end
39
39
  end
40
40
 
@@ -48,7 +48,7 @@ class TreeStack
48
48
  include LeafType
49
49
 
50
50
  def self.create(content=nil)
51
- self.new.tap {|leaf| leaf.push content if content }
51
+ new.tap {|leaf| leaf.push content if content }
52
52
  end
53
53
  end
54
54
 
@@ -89,7 +89,7 @@ class TreeStack
89
89
  @current_node = node
90
90
  @stack.push node
91
91
  end
92
-
92
+
93
93
  def push_as_leaf(node)
94
94
  @current_node.push node
95
95
  end
@@ -102,7 +102,7 @@ class TreeStack
102
102
  end
103
103
 
104
104
  def remove_current_node
105
- removed_node = self.pop
105
+ removed_node = pop
106
106
  @current_node.pop
107
107
  removed_node
108
108
  end
@@ -5,7 +5,6 @@ require 'pseudohiki/blockparser'
5
5
 
6
6
  module PseudoHiki
7
7
  module Utils
8
-
9
8
  class NodeCollector
10
9
  attr_reader :nodes
11
10
 
@@ -15,7 +14,7 @@ module PseudoHiki
15
14
  collector.nodes
16
15
  end
17
16
 
18
- def initialize (&condition)
17
+ def initialize(&condition)
19
18
  @nodes = []
20
19
  @condition = condition
21
20
  end
@@ -1,3 +1,3 @@
1
1
  module PseudoHiki
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4.develop"
3
3
  end