mok-parser 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8d9c6ea441f7a52b43f6409470471656918817b
4
- data.tar.gz: 5ccf2028ee649ae65ed8b24a3d9abeba5d0227a6
3
+ metadata.gz: de67b5512a58b3922c5cff99c8ef6684992170b4
4
+ data.tar.gz: 08559b49ab0865d3a5707f9825c191ef89f6b692
5
5
  SHA512:
6
- metadata.gz: f1aa94bb504512f5e2d6ecd73fe811b03e8be38ede030a347457dae34bc22b09905b4c9f428c76e30deca025f178e68201e03b04e64340ce9c3bddf32d580cb0
7
- data.tar.gz: 01db7cdb5d42e0179d6f19d2b22f1e67aa8336dfeaaa0844778166eed55f8409693d515e393548c000136e3fca1fead56ea24d25e7a8bf0a88f2946f4ec18281
6
+ metadata.gz: 59c011913a4536fcfb66b784ce6033976d54f90682f5bdbad43aae2eb9f8e3c32a6c884546ffc05447bce332bed026a41d5e0031d5b083d2de188cf2641fbccf
7
+ data.tar.gz: fe0e0948eb27556e17abb0f55e95634dfd790651b0b48fcacb801f068f09b3e6f822e91190708d961d866bd08ef1e1ca96d767c2482f89cc59aac24996f799ed
data/History.rdoc CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.3.3 2013-12-31
2
+ * new: インラインのパーサーエラー時に行数と内容を表示
3
+ * new: ドキュメント内プログラムのスイッチオプション(@options[:erb])を追加
4
+ * fix: ドキュメントが空の時に Racc::ParseError の例外が発生しないように修正
5
+ * fix: 変数定義((@a=b@))内でオプション設定が必要な機能(リファレンスの.%など)が動いていなかった問題を修正
6
+
1
7
  == 0.3.2 2013-12-20
2
8
  * new: 部分テンプレート(partial)機能を試験的に追加
3
9
  * change: _base_directory オプションを *_directory に変更
data/RELEASE CHANGED
@@ -1 +1 @@
1
- 2013-12-21
1
+ 2013-12-31
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
@@ -47,7 +47,7 @@ class BlockParser
47
47
  @index[:head] << {:title => title, :level => level, :index => @head_index.to_s}
48
48
  HeadLine.new([level, title, @index[:head].size, @head_index.to_s]) }
49
49
  # ----- paragraph
50
- paragraph : plain_texts { Paragraph.new @inline_parser.parse(val) }
50
+ paragraph : plain_texts { Paragraph.new @inline_parser.parse(val, @no) }
51
51
 
52
52
  plain_texts : PLAIN { val[0] }
53
53
  | plain_texts PLAIN { val[0] + val[1] }
@@ -57,7 +57,7 @@ class BlockParser
57
57
  if val[1].nil?
58
58
  lines = [Plain.new("")]
59
59
  else
60
- lines = @inline_parser.parse(val[1])
60
+ lines = @inline_parser.parse(val[1], @no)
61
61
  end
62
62
  Desc.new([val[0], lines])
63
63
  }
@@ -76,7 +76,7 @@ class BlockParser
76
76
 
77
77
  # ----- preformat end
78
78
  # ----- quote
79
- quote_block : quotes { qu = val[0].strip ; Quote.new(@inline_parser.parse(qu)) unless qu.empty? }
79
+ quote_block : quotes { qu = val[0].strip ; Quote.new(@inline_parser.parse(qu, @no)) unless qu.empty? }
80
80
 
81
81
  quotes : QUOTE { val[0] }
82
82
  | quotes QUOTE { val[0] + val[1] }
@@ -91,8 +91,8 @@ class BlockParser
91
91
 
92
92
  itemlist_indent_blocks : INDENT itemlist_blocks DEDENT { val }
93
93
 
94
- itemlists : itemlistitems {[PlainTextBlock.new(@inline_parser.parse(val[0]))]}
95
- | itemlists itemlistitems { val[0] << PlainTextBlock.new(@inline_parser.parse(val[1])) }
94
+ itemlists : itemlistitems {[PlainTextBlock.new(@inline_parser.parse(val[0], @no))]}
95
+ | itemlists itemlistitems { val[0] << PlainTextBlock.new(@inline_parser.parse(val[1],@no)) }
96
96
 
97
97
  itemlistitems : ITEMLIST { val[0] }
98
98
  | ITEMLIST itemlist_continues { val[0] + val[1] }
@@ -110,8 +110,8 @@ class BlockParser
110
110
 
111
111
  numlist_indent_blocks : INDENT numlist_blocks DEDENT { val }
112
112
 
113
- numlists : NUMLIST { [PlainTextBlock.new(@inline_parser.parse(val[0]))] }
114
- | numlists NUMLIST { val[0] << PlainTextBlock.new(@inline_parser.parse(val[1])) }
113
+ numlists : NUMLIST { [PlainTextBlock.new(@inline_parser.parse(val[0],@no))] }
114
+ | numlists NUMLIST { val[0] << PlainTextBlock.new(@inline_parser.parse(val[1],@no)) }
115
115
 
116
116
  # ----- numlist end
117
117
 
@@ -158,8 +158,14 @@ attr_reader :metadata, :inline_index, :index
158
158
 
159
159
  def parse(src)
160
160
  @no = 0
161
+
162
+ # srcが空の時の対応
163
+ src = ["# No Document"] if src.size == 0
164
+
161
165
  # srcをerbで処理
162
- src = ERB.new(src.join,4).result(binding.taint).split("\n").map {|s| "#{s}\n"}
166
+ if @options[:erb]
167
+ src = ERB.new(src.join,4).result(binding.taint).split("\n").map {|s| "#{s}\n"}
168
+ end
163
169
 
164
170
  # 部分テンプレート(partial)
165
171
  src = insert_partial(src)
@@ -49,8 +49,14 @@ attr_reader :metadata, :inline_index, :index
49
49
 
50
50
  def parse(src)
51
51
  @no = 0
52
+
53
+ # srcが空の時の対応
54
+ src = ["# No Document"] if src.size == 0
55
+
52
56
  # srcをerbで処理
53
- src = ERB.new(src.join,4).result(binding.taint).split("\n").map {|s| "#{s}\n"}
57
+ if @options[:erb]
58
+ src = ERB.new(src.join,4).result(binding.taint).split("\n").map {|s| "#{s}\n"}
59
+ end
54
60
 
55
61
  # 部分テンプレート(partial)
56
62
  src = insert_partial(src)
@@ -568,7 +574,7 @@ module_eval(<<'.,.,', 'mokblockparser.ry', 36)
568
574
 
569
575
  module_eval(<<'.,.,', 'mokblockparser.ry', 49)
570
576
  def _reduce_16(val, _values)
571
- Paragraph.new @inline_parser.parse(val)
577
+ Paragraph.new @inline_parser.parse(val, @no)
572
578
  end
573
579
  .,.,
574
580
 
@@ -589,7 +595,7 @@ module_eval(<<'.,.,', 'mokblockparser.ry', 56)
589
595
  if val[1].nil?
590
596
  lines = [Plain.new("")]
591
597
  else
592
- lines = @inline_parser.parse(val[1])
598
+ lines = @inline_parser.parse(val[1], @no)
593
599
  end
594
600
  Desc.new([val[0], lines])
595
601
 
@@ -630,7 +636,7 @@ module_eval(<<'.,.,', 'mokblockparser.ry', 74)
630
636
 
631
637
  module_eval(<<'.,.,', 'mokblockparser.ry', 78)
632
638
  def _reduce_26(val, _values)
633
- qu = val[0].strip ; Quote.new(@inline_parser.parse(qu)) unless qu.empty?
639
+ qu = val[0].strip ; Quote.new(@inline_parser.parse(qu, @no)) unless qu.empty?
634
640
  end
635
641
  .,.,
636
642
 
@@ -678,13 +684,13 @@ module_eval(<<'.,.,', 'mokblockparser.ry', 91)
678
684
 
679
685
  module_eval(<<'.,.,', 'mokblockparser.ry', 93)
680
686
  def _reduce_34(val, _values)
681
- [PlainTextBlock.new(@inline_parser.parse(val[0]))]
687
+ [PlainTextBlock.new(@inline_parser.parse(val[0], @no))]
682
688
  end
683
689
  .,.,
684
690
 
685
691
  module_eval(<<'.,.,', 'mokblockparser.ry', 94)
686
692
  def _reduce_35(val, _values)
687
- val[0] << PlainTextBlock.new(@inline_parser.parse(val[1]))
693
+ val[0] << PlainTextBlock.new(@inline_parser.parse(val[1],@no))
688
694
  end
689
695
  .,.,
690
696
 
@@ -744,13 +750,13 @@ module_eval(<<'.,.,', 'mokblockparser.ry', 110)
744
750
 
745
751
  module_eval(<<'.,.,', 'mokblockparser.ry', 112)
746
752
  def _reduce_45(val, _values)
747
- [PlainTextBlock.new(@inline_parser.parse(val[0]))]
753
+ [PlainTextBlock.new(@inline_parser.parse(val[0],@no))]
748
754
  end
749
755
  .,.,
750
756
 
751
757
  module_eval(<<'.,.,', 'mokblockparser.ry', 113)
752
758
  def _reduce_46(val, _values)
753
- val[0] << PlainTextBlock.new(@inline_parser.parse(val[1]))
759
+ val[0] << PlainTextBlock.new(@inline_parser.parse(val[1],@no))
754
760
  end
755
761
  .,.,
756
762
 
@@ -164,7 +164,7 @@ class InlineParser
164
164
  @variables[base] = text unless text.nil?
165
165
  value = @variables[base]
166
166
  unless value.nil?
167
- parser = InlineParser.new
167
+ parser = InlineParser.new(@options)
168
168
  value = parser.parse(value).map do |n| n.apply end
169
169
  else # 変数が未定義
170
170
  value = base
@@ -357,13 +357,20 @@ other_re_mode = Regexp::MULTILINE
357
357
  OTHER_RE = Regexp.new(
358
358
  "\\A.+?(?=#{Regexp.quote(EM_OPEN)}|#{Regexp.quote(EM_CLOSE)}|#{Regexp.quote(ITALIC_OPEN)}|#{Regexp.quote(ITALIC_CLOSE)}|#{Regexp.quote(STRIKE_OPEN)}|#{Regexp.quote(STRIKE_CLOSE)}|#{Regexp.quote(CODE_OPEN)}|#{Regexp.quote(CODE_CLOSE)}|#{Regexp.quote(KBD_OPEN)}|#{Regexp.quote(KBD_CLOSE)}|#{Regexp.quote(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|#{Regexp.quote(RUBY_OPEN)}|#{Regexp.quote(RUBY_CLOSE)}|#{Regexp.quote(VARIABLE_OPEN)}|#{Regexp.quote(VARIABLE_CLOSE)}|#{Regexp.quote(MEDIA_OPEN)}|#{Regexp.quote(MEDIA_CLOSE)}|#{Regexp.quote(LABEL_OPEN)}|#{Regexp.quote(LABEL_CLOSE)}|#{Regexp.quote(LABEL_LINK_OPEN)}|#{Regexp.quote(LABEL_LINK_CLOSE)}|#{Regexp.quote(LABEL_HTML_OPEN)}|#{Regexp.quote(LABEL_HTML_CLOSE)}|#{Regexp.quote(REFERENCE_OPEN)}|#{Regexp.quote(REFERENCE_CLOSE)}|#{Regexp.quote(REFERENCE_HTML_OPEN)}|#{Regexp.quote(REFERENCE_HTML_CLOSE)}|#{Regexp.quote(MANUEDO_OPEN)}|#{Regexp.quote(MANUEDO_CLOSE)}|#{Regexp.quote(VERB_OPEN)}|#{Regexp.quote(VERB_CLOSE)})", other_re_mode)
359
359
 
360
- def parse(src)
360
+ def on_error(token_id, value, stack)
361
+ raise Racc::ParseError,
362
+ "mokinlinepaser: line #{@lineno} in document: syntax error on '#{stack[0][0].contents}#{stack[1]}'"
363
+ end
364
+
365
+ def parse(src, lineno = "?")
361
366
  @src = StringScanner.new(Array(src).join)
367
+ @lineno = lineno
362
368
  @pre = ""
363
369
  @@yydebug = false
364
370
  @view_token_type = false
365
371
  do_parse
366
372
  end
373
+
367
374
  def initialize(options = {})
368
375
  @options = options
369
376
  @variables = options[:variables]
@@ -107,12 +107,23 @@ other_re_mode = Regexp::MULTILINE
107
107
  OTHER_RE = Regexp.new(
108
108
  "\\A.+?(?=#{Regexp.quote(EM_OPEN)}|#{Regexp.quote(EM_CLOSE)}|#{Regexp.quote(ITALIC_OPEN)}|#{Regexp.quote(ITALIC_CLOSE)}|#{Regexp.quote(STRIKE_OPEN)}|#{Regexp.quote(STRIKE_CLOSE)}|#{Regexp.quote(CODE_OPEN)}|#{Regexp.quote(CODE_CLOSE)}|#{Regexp.quote(KBD_OPEN)}|#{Regexp.quote(KBD_CLOSE)}|#{Regexp.quote(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|#{Regexp.quote(RUBY_OPEN)}|#{Regexp.quote(RUBY_CLOSE)}|#{Regexp.quote(VARIABLE_OPEN)}|#{Regexp.quote(VARIABLE_CLOSE)}|#{Regexp.quote(MEDIA_OPEN)}|#{Regexp.quote(MEDIA_CLOSE)}|#{Regexp.quote(LABEL_OPEN)}|#{Regexp.quote(LABEL_CLOSE)}|#{Regexp.quote(LABEL_LINK_OPEN)}|#{Regexp.quote(LABEL_LINK_CLOSE)}|#{Regexp.quote(LABEL_HTML_OPEN)}|#{Regexp.quote(LABEL_HTML_CLOSE)}|#{Regexp.quote(REFERENCE_OPEN)}|#{Regexp.quote(REFERENCE_CLOSE)}|#{Regexp.quote(REFERENCE_HTML_OPEN)}|#{Regexp.quote(REFERENCE_HTML_CLOSE)}|#{Regexp.quote(MANUEDO_OPEN)}|#{Regexp.quote(MANUEDO_CLOSE)}|#{Regexp.quote(VERB_OPEN)}|#{Regexp.quote(VERB_CLOSE)})", other_re_mode)
109
109
 
110
- def parse(src)
110
+ def on_error(token_id, value, stack)
111
+
112
+ raise Racc::ParseError,
113
+ "mokinlinepaser: line #{@lineno} in document: syntax error on '#{stack[0][0].contents}#{stack[1]}'"
114
+ end
115
+
116
+ def parse(src, lineno = "?")
111
117
  @src = StringScanner.new(Array(src).join)
118
+ @lineno = lineno
112
119
  @pre = ""
113
120
  @@yydebug = false
114
121
  @view_token_type = false
115
- do_parse
122
+ # begin
123
+ do_parse
124
+ # rescue Racc::ParseError
125
+ # puts "Racc::ParseError desu"
126
+ # end
116
127
  end
117
128
  def initialize(options = {})
118
129
  @options = options
@@ -1068,7 +1079,7 @@ module_eval(<<'.,.,', 'mokinlineparser.ry', 161)
1068
1079
  @variables[base] = text unless text.nil?
1069
1080
  value = @variables[base]
1070
1081
  unless value.nil?
1071
- parser = InlineParser.new
1082
+ parser = InlineParser.new(@options)
1072
1083
  value = parser.parse(value).map do |n| n.apply end
1073
1084
  else # 変数が未定義
1074
1085
  value = base
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mok-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - garin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-21 00:00:00.000000000 Z
11
+ date: 2013-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler