nora_mark 0.2beta6 → 0.2beta7

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.
@@ -6,262 +6,320 @@ class NoraMark::Parser < KPeg::CompiledParser
6
6
  module ::NoraMark
7
7
  class Node; end
8
8
  class Block < Node
9
- def initialize(name, ids, classes, parameters, content)
9
+ def initialize(name, ids, classes, parameters, named_parameters, content, line_no)
10
10
  @name = name
11
11
  @ids = ids
12
12
  @classes = classes
13
13
  @parameters = parameters
14
+ @named_parameters = named_parameters
14
15
  @content = content
16
+ @line_no = line_no
15
17
  end
16
18
  attr_reader :name
17
19
  attr_reader :ids
18
20
  attr_reader :classes
19
21
  attr_reader :parameters
22
+ attr_reader :named_parameters
20
23
  attr_reader :content
24
+ attr_reader :line_no
21
25
  end
22
26
  class Breakline < Node
23
- def initialize()
27
+ def initialize(line_no)
28
+ @line_no = line_no
24
29
  end
30
+ attr_reader :line_no
25
31
  end
26
32
  class DefinitionList < Node
27
- def initialize(ids, classes, parameters, content)
33
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
28
34
  @ids = ids
29
35
  @classes = classes
30
36
  @parameters = parameters
37
+ @named_parameters = named_parameters
31
38
  @content = content
39
+ @line_no = line_no
32
40
  end
33
41
  attr_reader :ids
34
42
  attr_reader :classes
35
43
  attr_reader :parameters
44
+ attr_reader :named_parameters
36
45
  attr_reader :content
46
+ attr_reader :line_no
37
47
  end
38
48
  class DLItem < Node
39
- def initialize(ids, classes, parameters, content)
49
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
40
50
  @ids = ids
41
51
  @classes = classes
42
52
  @parameters = parameters
53
+ @named_parameters = named_parameters
43
54
  @content = content
55
+ @line_no = line_no
44
56
  end
45
57
  attr_reader :ids
46
58
  attr_reader :classes
47
59
  attr_reader :parameters
60
+ attr_reader :named_parameters
48
61
  attr_reader :content
62
+ attr_reader :line_no
49
63
  end
50
64
  class Frontmatter < Node
51
- def initialize(content)
65
+ def initialize(content, line_no)
52
66
  @content = content
67
+ @line_no = line_no
53
68
  end
54
69
  attr_reader :content
70
+ attr_reader :line_no
55
71
  end
56
72
  class HeadedSection < Node
57
- def initialize(level, heading, content)
73
+ def initialize(level, heading, content, line_no)
58
74
  @level = level
59
75
  @heading = heading
60
76
  @content = content
77
+ @line_no = line_no
61
78
  end
62
79
  attr_reader :level
63
80
  attr_reader :heading
64
81
  attr_reader :content
82
+ attr_reader :line_no
65
83
  end
66
84
  class Inline < Node
67
- def initialize(name, ids, classes, parameters, content)
68
- @name = name
69
- @ids = ids
70
- @classes = classes
71
- @parameters = parameters
72
- @content = content
73
- end
74
- attr_reader :name
75
- attr_reader :ids
76
- attr_reader :classes
77
- attr_reader :parameters
78
- attr_reader :content
79
- end
80
- class LineCommand < Node
81
- def initialize(name, ids, classes, parameters, content)
85
+ def initialize(name, ids, classes, parameters, named_parameters, content, line_no)
82
86
  @name = name
83
87
  @ids = ids
84
88
  @classes = classes
85
89
  @parameters = parameters
90
+ @named_parameters = named_parameters
86
91
  @content = content
92
+ @line_no = line_no
87
93
  end
88
94
  attr_reader :name
89
95
  attr_reader :ids
90
96
  attr_reader :classes
91
97
  attr_reader :parameters
98
+ attr_reader :named_parameters
92
99
  attr_reader :content
100
+ attr_reader :line_no
93
101
  end
94
102
  class Newpage < Node
95
- def initialize(ids, classes, parameters, content)
103
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
96
104
  @ids = ids
97
105
  @classes = classes
98
106
  @parameters = parameters
107
+ @named_parameters = named_parameters
99
108
  @content = content
109
+ @line_no = line_no
100
110
  end
101
111
  attr_reader :ids
102
112
  attr_reader :classes
103
113
  attr_reader :parameters
114
+ attr_reader :named_parameters
104
115
  attr_reader :content
116
+ attr_reader :line_no
105
117
  end
106
118
  class OlItem < Node
107
- def initialize(ids, classes, parameters, content)
119
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
108
120
  @ids = ids
109
121
  @classes = classes
110
122
  @parameters = parameters
123
+ @named_parameters = named_parameters
111
124
  @content = content
125
+ @line_no = line_no
112
126
  end
113
127
  attr_reader :ids
114
128
  attr_reader :classes
115
129
  attr_reader :parameters
130
+ attr_reader :named_parameters
116
131
  attr_reader :content
132
+ attr_reader :line_no
117
133
  end
118
134
  class OrderedList < Node
119
- def initialize(ids, classes, parameters, content)
135
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
120
136
  @ids = ids
121
137
  @classes = classes
122
138
  @parameters = parameters
139
+ @named_parameters = named_parameters
123
140
  @content = content
141
+ @line_no = line_no
124
142
  end
125
143
  attr_reader :ids
126
144
  attr_reader :classes
127
145
  attr_reader :parameters
146
+ attr_reader :named_parameters
128
147
  attr_reader :content
148
+ attr_reader :line_no
129
149
  end
130
150
  class Page < Node
131
- def initialize(content)
151
+ def initialize(content, line_no)
132
152
  @content = content
153
+ @line_no = line_no
133
154
  end
134
155
  attr_reader :content
156
+ attr_reader :line_no
135
157
  end
136
158
  class Paragraph < Node
137
- def initialize(ids, classes, parameters, content)
159
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
138
160
  @ids = ids
139
161
  @classes = classes
140
162
  @parameters = parameters
163
+ @named_parameters = named_parameters
141
164
  @content = content
165
+ @line_no = line_no
142
166
  end
143
167
  attr_reader :ids
144
168
  attr_reader :classes
145
169
  attr_reader :parameters
170
+ attr_reader :named_parameters
146
171
  attr_reader :content
172
+ attr_reader :line_no
147
173
  end
148
174
  class ParagraphGroup < Node
149
- def initialize(ids, classes, parameters, content)
175
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
150
176
  @ids = ids
151
177
  @classes = classes
152
178
  @parameters = parameters
179
+ @named_parameters = named_parameters
153
180
  @content = content
181
+ @line_no = line_no
154
182
  end
155
183
  attr_reader :ids
156
184
  attr_reader :classes
157
185
  attr_reader :parameters
186
+ attr_reader :named_parameters
158
187
  attr_reader :content
188
+ attr_reader :line_no
159
189
  end
160
190
  class PreformattedBlock < Node
161
- def initialize(name, ids, classes, parameters, codelanguage, content)
191
+ def initialize(name, ids, classes, parameters, named_parameters, codelanguage, content, line_no)
162
192
  @name = name
163
193
  @ids = ids
164
194
  @classes = classes
165
195
  @parameters = parameters
196
+ @named_parameters = named_parameters
166
197
  @codelanguage = codelanguage
167
198
  @content = content
199
+ @line_no = line_no
168
200
  end
169
201
  attr_reader :name
170
202
  attr_reader :ids
171
203
  attr_reader :classes
172
204
  attr_reader :parameters
205
+ attr_reader :named_parameters
173
206
  attr_reader :codelanguage
174
207
  attr_reader :content
208
+ attr_reader :line_no
175
209
  end
176
- class Text < Node
210
+ class Root < Node
177
211
  def initialize(content)
178
212
  @content = content
179
213
  end
180
214
  attr_reader :content
181
215
  end
216
+ class Text < Node
217
+ def initialize(content, line_no)
218
+ @content = content
219
+ @line_no = line_no
220
+ end
221
+ attr_reader :content
222
+ attr_reader :line_no
223
+ end
182
224
  class UlItem < Node
183
- def initialize(ids, classes, parameters, content)
225
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
184
226
  @ids = ids
185
227
  @classes = classes
186
228
  @parameters = parameters
229
+ @named_parameters = named_parameters
187
230
  @content = content
231
+ @line_no = line_no
188
232
  end
189
233
  attr_reader :ids
190
234
  attr_reader :classes
191
235
  attr_reader :parameters
236
+ attr_reader :named_parameters
192
237
  attr_reader :content
238
+ attr_reader :line_no
193
239
  end
194
240
  class UnorderedList < Node
195
- def initialize(ids, classes, parameters, content)
241
+ def initialize(ids, classes, parameters, named_parameters, content, line_no)
196
242
  @ids = ids
197
243
  @classes = classes
198
244
  @parameters = parameters
245
+ @named_parameters = named_parameters
199
246
  @content = content
247
+ @line_no = line_no
200
248
  end
201
249
  attr_reader :ids
202
250
  attr_reader :classes
203
251
  attr_reader :parameters
252
+ attr_reader :named_parameters
204
253
  attr_reader :content
254
+ attr_reader :line_no
205
255
  end
206
256
  end
207
257
  module ::NoraMarkConstruction
208
- def block(name, ids, classes, parameters, content)
209
- ::NoraMark::Block.new(name, ids, classes, parameters, content)
258
+ def block(name, ids, classes, parameters, named_parameters, content, line_no)
259
+ ::NoraMark::Block.new(name, ids, classes, parameters, named_parameters, content, line_no)
210
260
  end
211
- def br()
212
- ::NoraMark::Breakline.new()
261
+ def br(line_no)
262
+ ::NoraMark::Breakline.new(line_no)
213
263
  end
214
- def definition_list(ids, classes, parameters, content)
215
- ::NoraMark::DefinitionList.new(ids, classes, parameters, content)
264
+ def definition_list(ids, classes, parameters, named_parameters, content, line_no)
265
+ ::NoraMark::DefinitionList.new(ids, classes, parameters, named_parameters, content, line_no)
216
266
  end
217
- def dl_item(ids, classes, parameters, content)
218
- ::NoraMark::DLItem.new(ids, classes, parameters, content)
267
+ def dl_item(ids, classes, parameters, named_parameters, content, line_no)
268
+ ::NoraMark::DLItem.new(ids, classes, parameters, named_parameters, content, line_no)
219
269
  end
220
- def frontmatter(content)
221
- ::NoraMark::Frontmatter.new(content)
270
+ def frontmatter(content, line_no)
271
+ ::NoraMark::Frontmatter.new(content, line_no)
222
272
  end
223
- def h_section(level, heading, content)
224
- ::NoraMark::HeadedSection.new(level, heading, content)
273
+ def h_section(level, heading, content, line_no)
274
+ ::NoraMark::HeadedSection.new(level, heading, content, line_no)
225
275
  end
226
- def inline(name, ids, classes, parameters, content)
227
- ::NoraMark::Inline.new(name, ids, classes, parameters, content)
276
+ def inline(name, ids, classes, parameters, named_parameters, content, line_no)
277
+ ::NoraMark::Inline.new(name, ids, classes, parameters, named_parameters, content, line_no)
228
278
  end
229
- def line_command(name, ids, classes, parameters, content)
230
- ::NoraMark::LineCommand.new(name, ids, classes, parameters, content)
279
+ def newpage(ids, classes, parameters, named_parameters, content, line_no)
280
+ ::NoraMark::Newpage.new(ids, classes, parameters, named_parameters, content, line_no)
231
281
  end
232
- def newpage(ids, classes, parameters, content)
233
- ::NoraMark::Newpage.new(ids, classes, parameters, content)
282
+ def ol_item(ids, classes, parameters, named_parameters, content, line_no)
283
+ ::NoraMark::OlItem.new(ids, classes, parameters, named_parameters, content, line_no)
234
284
  end
235
- def ol_item(ids, classes, parameters, content)
236
- ::NoraMark::OlItem.new(ids, classes, parameters, content)
285
+ def ordered_list(ids, classes, parameters, named_parameters, content, line_no)
286
+ ::NoraMark::OrderedList.new(ids, classes, parameters, named_parameters, content, line_no)
237
287
  end
238
- def ordered_list(ids, classes, parameters, content)
239
- ::NoraMark::OrderedList.new(ids, classes, parameters, content)
288
+ def page(content, line_no)
289
+ ::NoraMark::Page.new(content, line_no)
240
290
  end
241
- def page(content)
242
- ::NoraMark::Page.new(content)
291
+ def paragraph(ids, classes, parameters, named_parameters, content, line_no)
292
+ ::NoraMark::Paragraph.new(ids, classes, parameters, named_parameters, content, line_no)
243
293
  end
244
- def paragraph(ids, classes, parameters, content)
245
- ::NoraMark::Paragraph.new(ids, classes, parameters, content)
294
+ def paragraph_group(ids, classes, parameters, named_parameters, content, line_no)
295
+ ::NoraMark::ParagraphGroup.new(ids, classes, parameters, named_parameters, content, line_no)
246
296
  end
247
- def paragraph_group(ids, classes, parameters, content)
248
- ::NoraMark::ParagraphGroup.new(ids, classes, parameters, content)
297
+ def preformatted_block(name, ids, classes, parameters, named_parameters, codelanguage, content, line_no)
298
+ ::NoraMark::PreformattedBlock.new(name, ids, classes, parameters, named_parameters, codelanguage, content, line_no)
249
299
  end
250
- def preformatted_block(name, ids, classes, parameters, codelanguage, content)
251
- ::NoraMark::PreformattedBlock.new(name, ids, classes, parameters, codelanguage, content)
300
+ def root(content)
301
+ ::NoraMark::Root.new(content)
252
302
  end
253
- def text(content)
254
- ::NoraMark::Text.new(content)
303
+ def text(content, line_no)
304
+ ::NoraMark::Text.new(content, line_no)
255
305
  end
256
- def ul_item(ids, classes, parameters, content)
257
- ::NoraMark::UlItem.new(ids, classes, parameters, content)
306
+ def ul_item(ids, classes, parameters, named_parameters, content, line_no)
307
+ ::NoraMark::UlItem.new(ids, classes, parameters, named_parameters, content, line_no)
258
308
  end
259
- def unordered_list(ids, classes, parameters, content)
260
- ::NoraMark::UnorderedList.new(ids, classes, parameters, content)
309
+ def unordered_list(ids, classes, parameters, named_parameters, content, line_no)
310
+ ::NoraMark::UnorderedList.new(ids, classes, parameters, named_parameters, content, line_no)
261
311
  end
262
312
  end
263
313
  include ::NoraMarkConstruction
264
314
 
315
+ # ln = { current_line }
316
+ def _ln
317
+ @result = begin; current_line ; end
318
+ _tmp = true
319
+ set_failed_rule :_ln unless _tmp
320
+ return _tmp
321
+ end
322
+
265
323
  # BOM = /\uFEFF/
266
324
  def _BOM
267
325
  _tmp = scan(/\A(?-mix:\uFEFF)/)
@@ -710,7 +768,7 @@ class NoraMark::Parser < KPeg::CompiledParser
710
768
  return _tmp
711
769
  end
712
770
 
713
- # CommandName = Word:name IdNames?:idnames ClassNames?:classes { {name: name, ids: idnames, classes: classes} }
771
+ # CommandName = Word:name IdNames?:idnames ClassNames?:classes ln:ln { {name: name, ids: idnames, classes: classes, ln:ln } }
714
772
  def _CommandName
715
773
 
716
774
  _save = self.pos
@@ -745,7 +803,13 @@ class NoraMark::Parser < KPeg::CompiledParser
745
803
  self.pos = _save
746
804
  break
747
805
  end
748
- @result = begin; {name: name, ids: idnames, classes: classes} ; end
806
+ _tmp = apply(:_ln)
807
+ ln = @result
808
+ unless _tmp
809
+ self.pos = _save
810
+ break
811
+ end
812
+ @result = begin; {name: name, ids: idnames, classes: classes, ln:ln } ; end
749
813
  _tmp = true
750
814
  unless _tmp
751
815
  self.pos = _save
@@ -928,6 +992,177 @@ class NoraMark::Parser < KPeg::CompiledParser
928
992
  return _tmp
929
993
  end
930
994
 
995
+ # NParameterNormal = < /[^,\]]/* > { text }
996
+ def _NParameterNormal
997
+
998
+ _save = self.pos
999
+ while true # sequence
1000
+ _text_start = self.pos
1001
+ while true
1002
+ _tmp = scan(/\A(?-mix:[^,\]])/)
1003
+ break unless _tmp
1004
+ end
1005
+ _tmp = true
1006
+ if _tmp
1007
+ text = get_text(_text_start)
1008
+ end
1009
+ unless _tmp
1010
+ self.pos = _save
1011
+ break
1012
+ end
1013
+ @result = begin; text ; end
1014
+ _tmp = true
1015
+ unless _tmp
1016
+ self.pos = _save
1017
+ end
1018
+ break
1019
+ end # end sequence
1020
+
1021
+ set_failed_rule :_NParameterNormal unless _tmp
1022
+ return _tmp
1023
+ end
1024
+
1025
+ # NParameterQuoted = "\"" < /[^"]/* > "\"" - &/[,\]]/ { text }
1026
+ def _NParameterQuoted
1027
+
1028
+ _save = self.pos
1029
+ while true # sequence
1030
+ _tmp = match_string("\"")
1031
+ unless _tmp
1032
+ self.pos = _save
1033
+ break
1034
+ end
1035
+ _text_start = self.pos
1036
+ while true
1037
+ _tmp = scan(/\A(?-mix:[^"])/)
1038
+ break unless _tmp
1039
+ end
1040
+ _tmp = true
1041
+ if _tmp
1042
+ text = get_text(_text_start)
1043
+ end
1044
+ unless _tmp
1045
+ self.pos = _save
1046
+ break
1047
+ end
1048
+ _tmp = match_string("\"")
1049
+ unless _tmp
1050
+ self.pos = _save
1051
+ break
1052
+ end
1053
+ _tmp = apply(:__hyphen_)
1054
+ unless _tmp
1055
+ self.pos = _save
1056
+ break
1057
+ end
1058
+ _save2 = self.pos
1059
+ _tmp = scan(/\A(?-mix:[,\]])/)
1060
+ self.pos = _save2
1061
+ unless _tmp
1062
+ self.pos = _save
1063
+ break
1064
+ end
1065
+ @result = begin; text ; end
1066
+ _tmp = true
1067
+ unless _tmp
1068
+ self.pos = _save
1069
+ end
1070
+ break
1071
+ end # end sequence
1072
+
1073
+ set_failed_rule :_NParameterQuoted unless _tmp
1074
+ return _tmp
1075
+ end
1076
+
1077
+ # NParameterSingleQuoted = "'" < /[^']/* > "'" - &/[,\]]/ { text }
1078
+ def _NParameterSingleQuoted
1079
+
1080
+ _save = self.pos
1081
+ while true # sequence
1082
+ _tmp = match_string("'")
1083
+ unless _tmp
1084
+ self.pos = _save
1085
+ break
1086
+ end
1087
+ _text_start = self.pos
1088
+ while true
1089
+ _tmp = scan(/\A(?-mix:[^'])/)
1090
+ break unless _tmp
1091
+ end
1092
+ _tmp = true
1093
+ if _tmp
1094
+ text = get_text(_text_start)
1095
+ end
1096
+ unless _tmp
1097
+ self.pos = _save
1098
+ break
1099
+ end
1100
+ _tmp = match_string("'")
1101
+ unless _tmp
1102
+ self.pos = _save
1103
+ break
1104
+ end
1105
+ _tmp = apply(:__hyphen_)
1106
+ unless _tmp
1107
+ self.pos = _save
1108
+ break
1109
+ end
1110
+ _save2 = self.pos
1111
+ _tmp = scan(/\A(?-mix:[,\]])/)
1112
+ self.pos = _save2
1113
+ unless _tmp
1114
+ self.pos = _save
1115
+ break
1116
+ end
1117
+ @result = begin; text ; end
1118
+ _tmp = true
1119
+ unless _tmp
1120
+ self.pos = _save
1121
+ end
1122
+ break
1123
+ end # end sequence
1124
+
1125
+ set_failed_rule :_NParameterSingleQuoted unless _tmp
1126
+ return _tmp
1127
+ end
1128
+
1129
+ # NParameter = (NParameterQuoted | NParameterSingleQuoted | NParameterNormal):value { value }
1130
+ def _NParameter
1131
+
1132
+ _save = self.pos
1133
+ while true # sequence
1134
+
1135
+ _save1 = self.pos
1136
+ while true # choice
1137
+ _tmp = apply(:_NParameterQuoted)
1138
+ break if _tmp
1139
+ self.pos = _save1
1140
+ _tmp = apply(:_NParameterSingleQuoted)
1141
+ break if _tmp
1142
+ self.pos = _save1
1143
+ _tmp = apply(:_NParameterNormal)
1144
+ break if _tmp
1145
+ self.pos = _save1
1146
+ break
1147
+ end # end choice
1148
+
1149
+ value = @result
1150
+ unless _tmp
1151
+ self.pos = _save
1152
+ break
1153
+ end
1154
+ @result = begin; value ; end
1155
+ _tmp = true
1156
+ unless _tmp
1157
+ self.pos = _save
1158
+ end
1159
+ break
1160
+ end # end sequence
1161
+
1162
+ set_failed_rule :_NParameter unless _tmp
1163
+ return _tmp
1164
+ end
1165
+
931
1166
  # Parameters = (Parameter:parameter "," - Parameters:parameters { [ parameter ] + parameters } | Parameter:parameter { [ parameter ] })
932
1167
  def _Parameters
933
1168
 
@@ -994,7 +1229,122 @@ class NoraMark::Parser < KPeg::CompiledParser
994
1229
  return _tmp
995
1230
  end
996
1231
 
997
- # Command = CommandName:cn ("(" - Parameters:args - ")")? { args ||= []; cn.merge({ args: args }) }
1232
+ # NamedParameter = Word:key - ":" - NParameter:parameter { { key.to_sym => parameter } }
1233
+ def _NamedParameter
1234
+
1235
+ _save = self.pos
1236
+ while true # sequence
1237
+ _tmp = apply(:_Word)
1238
+ key = @result
1239
+ unless _tmp
1240
+ self.pos = _save
1241
+ break
1242
+ end
1243
+ _tmp = apply(:__hyphen_)
1244
+ unless _tmp
1245
+ self.pos = _save
1246
+ break
1247
+ end
1248
+ _tmp = match_string(":")
1249
+ unless _tmp
1250
+ self.pos = _save
1251
+ break
1252
+ end
1253
+ _tmp = apply(:__hyphen_)
1254
+ unless _tmp
1255
+ self.pos = _save
1256
+ break
1257
+ end
1258
+ _tmp = apply(:_NParameter)
1259
+ parameter = @result
1260
+ unless _tmp
1261
+ self.pos = _save
1262
+ break
1263
+ end
1264
+ @result = begin; { key.to_sym => parameter } ; end
1265
+ _tmp = true
1266
+ unless _tmp
1267
+ self.pos = _save
1268
+ end
1269
+ break
1270
+ end # end sequence
1271
+
1272
+ set_failed_rule :_NamedParameter unless _tmp
1273
+ return _tmp
1274
+ end
1275
+
1276
+ # NamedParameters = (NamedParameter:parameter - "," - NamedParameters:parameters { parameter.merge parameters } | NamedParameter:parameter { parameter })
1277
+ def _NamedParameters
1278
+
1279
+ _save = self.pos
1280
+ while true # choice
1281
+
1282
+ _save1 = self.pos
1283
+ while true # sequence
1284
+ _tmp = apply(:_NamedParameter)
1285
+ parameter = @result
1286
+ unless _tmp
1287
+ self.pos = _save1
1288
+ break
1289
+ end
1290
+ _tmp = apply(:__hyphen_)
1291
+ unless _tmp
1292
+ self.pos = _save1
1293
+ break
1294
+ end
1295
+ _tmp = match_string(",")
1296
+ unless _tmp
1297
+ self.pos = _save1
1298
+ break
1299
+ end
1300
+ _tmp = apply(:__hyphen_)
1301
+ unless _tmp
1302
+ self.pos = _save1
1303
+ break
1304
+ end
1305
+ _tmp = apply(:_NamedParameters)
1306
+ parameters = @result
1307
+ unless _tmp
1308
+ self.pos = _save1
1309
+ break
1310
+ end
1311
+ @result = begin; parameter.merge parameters ; end
1312
+ _tmp = true
1313
+ unless _tmp
1314
+ self.pos = _save1
1315
+ end
1316
+ break
1317
+ end # end sequence
1318
+
1319
+ break if _tmp
1320
+ self.pos = _save
1321
+
1322
+ _save2 = self.pos
1323
+ while true # sequence
1324
+ _tmp = apply(:_NamedParameter)
1325
+ parameter = @result
1326
+ unless _tmp
1327
+ self.pos = _save2
1328
+ break
1329
+ end
1330
+ @result = begin; parameter ; end
1331
+ _tmp = true
1332
+ unless _tmp
1333
+ self.pos = _save2
1334
+ end
1335
+ break
1336
+ end # end sequence
1337
+
1338
+ break if _tmp
1339
+ self.pos = _save
1340
+ break
1341
+ end # end choice
1342
+
1343
+ set_failed_rule :_NamedParameters unless _tmp
1344
+ return _tmp
1345
+ end
1346
+
1347
+ # Command = CommandName:cn ("(" - Parameters:args - ")")? ("[" - NamedParameters:named_args - "]")? { cn.merge({ args: args || [] , named_args: named_args || {}}) }
998
1348
  def _Command
999
1349
 
1000
1350
  _save = self.pos
@@ -1005,47 +1355,87 @@ class NoraMark::Parser < KPeg::CompiledParser
1005
1355
  self.pos = _save
1006
1356
  break
1007
1357
  end
1008
- _save1 = self.pos
1358
+ _save1 = self.pos
1359
+
1360
+ _save2 = self.pos
1361
+ while true # sequence
1362
+ _tmp = match_string("(")
1363
+ unless _tmp
1364
+ self.pos = _save2
1365
+ break
1366
+ end
1367
+ _tmp = apply(:__hyphen_)
1368
+ unless _tmp
1369
+ self.pos = _save2
1370
+ break
1371
+ end
1372
+ _tmp = apply(:_Parameters)
1373
+ args = @result
1374
+ unless _tmp
1375
+ self.pos = _save2
1376
+ break
1377
+ end
1378
+ _tmp = apply(:__hyphen_)
1379
+ unless _tmp
1380
+ self.pos = _save2
1381
+ break
1382
+ end
1383
+ _tmp = match_string(")")
1384
+ unless _tmp
1385
+ self.pos = _save2
1386
+ end
1387
+ break
1388
+ end # end sequence
1389
+
1390
+ unless _tmp
1391
+ _tmp = true
1392
+ self.pos = _save1
1393
+ end
1394
+ unless _tmp
1395
+ self.pos = _save
1396
+ break
1397
+ end
1398
+ _save3 = self.pos
1009
1399
 
1010
- _save2 = self.pos
1400
+ _save4 = self.pos
1011
1401
  while true # sequence
1012
- _tmp = match_string("(")
1402
+ _tmp = match_string("[")
1013
1403
  unless _tmp
1014
- self.pos = _save2
1404
+ self.pos = _save4
1015
1405
  break
1016
1406
  end
1017
1407
  _tmp = apply(:__hyphen_)
1018
1408
  unless _tmp
1019
- self.pos = _save2
1409
+ self.pos = _save4
1020
1410
  break
1021
1411
  end
1022
- _tmp = apply(:_Parameters)
1023
- args = @result
1412
+ _tmp = apply(:_NamedParameters)
1413
+ named_args = @result
1024
1414
  unless _tmp
1025
- self.pos = _save2
1415
+ self.pos = _save4
1026
1416
  break
1027
1417
  end
1028
1418
  _tmp = apply(:__hyphen_)
1029
1419
  unless _tmp
1030
- self.pos = _save2
1420
+ self.pos = _save4
1031
1421
  break
1032
1422
  end
1033
- _tmp = match_string(")")
1423
+ _tmp = match_string("]")
1034
1424
  unless _tmp
1035
- self.pos = _save2
1425
+ self.pos = _save4
1036
1426
  end
1037
1427
  break
1038
1428
  end # end sequence
1039
1429
 
1040
1430
  unless _tmp
1041
1431
  _tmp = true
1042
- self.pos = _save1
1432
+ self.pos = _save3
1043
1433
  end
1044
1434
  unless _tmp
1045
1435
  self.pos = _save
1046
1436
  break
1047
1437
  end
1048
- @result = begin; args ||= []; cn.merge({ args: args }) ; end
1438
+ @result = begin; cn.merge({ args: args || [] , named_args: named_args || {}}) ; end
1049
1439
  _tmp = true
1050
1440
  unless _tmp
1051
1441
  self.pos = _save
@@ -1057,7 +1447,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1057
1447
  return _tmp
1058
1448
  end
1059
1449
 
1060
- # ImplicitParagraph = - !ParagraphDelimiter Comment* DocumentLine:content Comment* EofComment? {paragraph([],[], [], content)}
1450
+ # ImplicitParagraph = - !ParagraphDelimiter Comment* DocumentLine:content ln:ln Comment* EofComment? {paragraph([],[], [], [], content, ln)}
1061
1451
  def _ImplicitParagraph
1062
1452
 
1063
1453
  _save = self.pos
@@ -1090,6 +1480,12 @@ class NoraMark::Parser < KPeg::CompiledParser
1090
1480
  self.pos = _save
1091
1481
  break
1092
1482
  end
1483
+ _tmp = apply(:_ln)
1484
+ ln = @result
1485
+ unless _tmp
1486
+ self.pos = _save
1487
+ break
1488
+ end
1093
1489
  while true
1094
1490
  _tmp = apply(:_Comment)
1095
1491
  break unless _tmp
@@ -1109,7 +1505,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1109
1505
  self.pos = _save
1110
1506
  break
1111
1507
  end
1112
- @result = begin; paragraph([],[], [], content); end
1508
+ @result = begin; paragraph([],[], [], [], content, ln); end
1113
1509
  _tmp = true
1114
1510
  unless _tmp
1115
1511
  self.pos = _save
@@ -1145,7 +1541,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1145
1541
  return _tmp
1146
1542
  end
1147
1543
 
1148
- # ExplicitParagraph = - ExplicitParagraphCommand:c ":" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}
1544
+ # ExplicitParagraph = - ExplicitParagraphCommand:c ":" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}
1149
1545
  def _ExplicitParagraph
1150
1546
 
1151
1547
  _save = self.pos
@@ -1197,7 +1593,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1197
1593
  self.pos = _save
1198
1594
  break
1199
1595
  end
1200
- @result = begin; paragraph(c[:ids], c[:classes], c[:args], content); end
1596
+ @result = begin; paragraph(c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln]); end
1201
1597
  _tmp = true
1202
1598
  unless _tmp
1203
1599
  self.pos = _save
@@ -1227,11 +1623,17 @@ class NoraMark::Parser < KPeg::CompiledParser
1227
1623
  return _tmp
1228
1624
  end
1229
1625
 
1230
- # ParagraphGroup = Paragraph+:p EmptyLine* {paragraph_group([],[],[],p)}
1626
+ # ParagraphGroup = ln:ln Paragraph+:p EmptyLine* {paragraph_group([],[],[],[],p, ln)}
1231
1627
  def _ParagraphGroup
1232
1628
 
1233
1629
  _save = self.pos
1234
1630
  while true # sequence
1631
+ _tmp = apply(:_ln)
1632
+ ln = @result
1633
+ unless _tmp
1634
+ self.pos = _save
1635
+ break
1636
+ end
1235
1637
  _save1 = self.pos
1236
1638
  _ary = []
1237
1639
  _tmp = apply(:_Paragraph)
@@ -1261,7 +1663,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1261
1663
  self.pos = _save
1262
1664
  break
1263
1665
  end
1264
- @result = begin; paragraph_group([],[],[],p); end
1666
+ @result = begin; paragraph_group([],[],[],[],p, ln); end
1265
1667
  _tmp = true
1266
1668
  unless _tmp
1267
1669
  self.pos = _save
@@ -1273,16 +1675,11 @@ class NoraMark::Parser < KPeg::CompiledParser
1273
1675
  return _tmp
1274
1676
  end
1275
1677
 
1276
- # BlockHead = - Command:command - "{" - Nl EmptyLine* { command }
1678
+ # BlockHead = Command:command - "{" - Nl EmptyLine* { command }
1277
1679
  def _BlockHead
1278
1680
 
1279
1681
  _save = self.pos
1280
1682
  while true # sequence
1281
- _tmp = apply(:__hyphen_)
1282
- unless _tmp
1283
- self.pos = _save
1284
- break
1285
- end
1286
1683
  _tmp = apply(:_Command)
1287
1684
  command = @result
1288
1685
  unless _tmp
@@ -1441,11 +1838,16 @@ class NoraMark::Parser < KPeg::CompiledParser
1441
1838
  return _tmp
1442
1839
  end
1443
1840
 
1444
- # ExplicitBlock = BlockHead:c - BlockBody:content - BlockEnd {block(c[:name], c[:ids], c[:classes], c[:args], content)}
1841
+ # ExplicitBlock = - BlockHead:c - BlockBody:content - BlockEnd {block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}
1445
1842
  def _ExplicitBlock
1446
1843
 
1447
1844
  _save = self.pos
1448
1845
  while true # sequence
1846
+ _tmp = apply(:__hyphen_)
1847
+ unless _tmp
1848
+ self.pos = _save
1849
+ break
1850
+ end
1449
1851
  _tmp = apply(:_BlockHead)
1450
1852
  c = @result
1451
1853
  unless _tmp
@@ -1473,7 +1875,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1473
1875
  self.pos = _save
1474
1876
  break
1475
1877
  end
1476
- @result = begin; block(c[:name], c[:ids], c[:classes], c[:args], content); end
1878
+ @result = begin; block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln]); end
1477
1879
  _tmp = true
1478
1880
  unless _tmp
1479
1881
  self.pos = _save
@@ -1509,16 +1911,11 @@ class NoraMark::Parser < KPeg::CompiledParser
1509
1911
  return _tmp
1510
1912
  end
1511
1913
 
1512
- # PreformattedCommandHeadSimple = - PreformattedCommand:command - "{" - Nl { command }
1914
+ # PreformattedCommandHeadSimple = PreformattedCommand:command - "{" - Nl { command }
1513
1915
  def _PreformattedCommandHeadSimple
1514
1916
 
1515
1917
  _save = self.pos
1516
1918
  while true # sequence
1517
- _tmp = apply(:__hyphen_)
1518
- unless _tmp
1519
- self.pos = _save
1520
- break
1521
- end
1522
1919
  _tmp = apply(:_PreformattedCommand)
1523
1920
  command = @result
1524
1921
  unless _tmp
@@ -1557,16 +1954,11 @@ class NoraMark::Parser < KPeg::CompiledParser
1557
1954
  return _tmp
1558
1955
  end
1559
1956
 
1560
- # PreformattedCommandHeadComplex = - PreformattedCommand:command - "{//" Word?:codelanguage - Nl { command.merge({codelanguage: codelanguage}) }
1957
+ # PreformattedCommandHeadComplex = PreformattedCommand:command - "{//" Word?:codelanguage - Nl { command.merge({codelanguage: codelanguage}) }
1561
1958
  def _PreformattedCommandHeadComplex
1562
1959
 
1563
1960
  _save = self.pos
1564
1961
  while true # sequence
1565
- _tmp = apply(:__hyphen_)
1566
- unless _tmp
1567
- self.pos = _save
1568
- break
1569
- end
1570
1962
  _tmp = apply(:_PreformattedCommand)
1571
1963
  command = @result
1572
1964
  unless _tmp
@@ -1715,11 +2107,16 @@ class NoraMark::Parser < KPeg::CompiledParser
1715
2107
  return _tmp
1716
2108
  end
1717
2109
 
1718
- # PreformattedBlockSimple = PreformattedCommandHeadSimple:c (!PreformatEndSimple CharString Nl)+:content PreformatEndSimple {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content)}
2110
+ # PreformattedBlockSimple = - PreformattedCommandHeadSimple:c (!PreformatEndSimple CharString Nl)+:content PreformatEndSimple {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln])}
1719
2111
  def _PreformattedBlockSimple
1720
2112
 
1721
2113
  _save = self.pos
1722
2114
  while true # sequence
2115
+ _tmp = apply(:__hyphen_)
2116
+ unless _tmp
2117
+ self.pos = _save
2118
+ break
2119
+ end
1723
2120
  _tmp = apply(:_PreformattedCommandHeadSimple)
1724
2121
  c = @result
1725
2122
  unless _tmp
@@ -1795,7 +2192,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1795
2192
  self.pos = _save
1796
2193
  break
1797
2194
  end
1798
- @result = begin; preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content); end
2195
+ @result = begin; preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln]); end
1799
2196
  _tmp = true
1800
2197
  unless _tmp
1801
2198
  self.pos = _save
@@ -1807,11 +2204,16 @@ class NoraMark::Parser < KPeg::CompiledParser
1807
2204
  return _tmp
1808
2205
  end
1809
2206
 
1810
- # PreformattedBlockComplex = PreformattedCommandHeadComplex:c (!PreformatEndComplex CharString Nl)+:content PreformatEndComplex {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content)}
2207
+ # PreformattedBlockComplex = - PreformattedCommandHeadComplex:c (!PreformatEndComplex CharString Nl)+:content PreformatEndComplex {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln])}
1811
2208
  def _PreformattedBlockComplex
1812
2209
 
1813
2210
  _save = self.pos
1814
2211
  while true # sequence
2212
+ _tmp = apply(:__hyphen_)
2213
+ unless _tmp
2214
+ self.pos = _save
2215
+ break
2216
+ end
1815
2217
  _tmp = apply(:_PreformattedCommandHeadComplex)
1816
2218
  c = @result
1817
2219
  unless _tmp
@@ -1887,7 +2289,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1887
2289
  self.pos = _save
1888
2290
  break
1889
2291
  end
1890
- @result = begin; preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content); end
2292
+ @result = begin; preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln]); end
1891
2293
  _tmp = true
1892
2294
  unless _tmp
1893
2295
  self.pos = _save
@@ -1935,7 +2337,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1935
2337
  return _tmp
1936
2338
  end
1937
2339
 
1938
- # CommonInline = "[" Command:c "{" - DocumentContentExcept('}'):content "}" "]" {inline(c[:name], c[:ids], c[:classes], c[:args], content)}
2340
+ # CommonInline = "[" Command:c "{" - DocumentContentExcept('}'):content "}" "]" {inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}
1939
2341
  def _CommonInline
1940
2342
 
1941
2343
  _save = self.pos
@@ -1977,7 +2379,7 @@ class NoraMark::Parser < KPeg::CompiledParser
1977
2379
  self.pos = _save
1978
2380
  break
1979
2381
  end
1980
- @result = begin; inline(c[:name], c[:ids], c[:classes], c[:args], content); end
2382
+ @result = begin; inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln]); end
1981
2383
  _tmp = true
1982
2384
  unless _tmp
1983
2385
  self.pos = _save
@@ -2013,7 +2415,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2013
2415
  return _tmp
2014
2416
  end
2015
2417
 
2016
- # ImgInline = "[" ImgCommand:c "]" {inline(c[:name], c[:ids], c[:classes], c[:args], nil)}
2418
+ # ImgInline = "[" ImgCommand:c "]" {inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], nil, c[:ln])}
2017
2419
  def _ImgInline
2018
2420
 
2019
2421
  _save = self.pos
@@ -2034,7 +2436,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2034
2436
  self.pos = _save
2035
2437
  break
2036
2438
  end
2037
- @result = begin; inline(c[:name], c[:ids], c[:classes], c[:args], nil); end
2439
+ @result = begin; inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], nil, c[:ln]); end
2038
2440
  _tmp = true
2039
2441
  unless _tmp
2040
2442
  self.pos = _save
@@ -2088,7 +2490,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2088
2490
  return _tmp
2089
2491
  end
2090
2492
 
2091
- # Newpage = - NewpageCommand:c ":" - DocumentContent?:content - Nl {newpage(c[:ids],c[:classes],c[:args], content)}
2493
+ # Newpage = - NewpageCommand:c ":" - DocumentContent?:content - Nl {newpage(c[:ids],c[:classes],c[:args], c[:named_args], content, c[:ln])}
2092
2494
  def _Newpage
2093
2495
 
2094
2496
  _save = self.pos
@@ -2136,7 +2538,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2136
2538
  self.pos = _save
2137
2539
  break
2138
2540
  end
2139
- @result = begin; newpage(c[:ids],c[:classes],c[:args], content); end
2541
+ @result = begin; newpage(c[:ids],c[:classes],c[:args], c[:named_args], content, c[:ln]); end
2140
2542
  _tmp = true
2141
2543
  unless _tmp
2142
2544
  self.pos = _save
@@ -2148,11 +2550,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2148
2550
  return _tmp
2149
2551
  end
2150
2552
 
2151
- # UnorderedList = UnorderedItem+:items {unordered_list([],[],[], items)}
2553
+ # UnorderedList = ln:ln UnorderedItem+:items {unordered_list([],[],[],[], items, ln)}
2152
2554
  def _UnorderedList
2153
2555
 
2154
2556
  _save = self.pos
2155
2557
  while true # sequence
2558
+ _tmp = apply(:_ln)
2559
+ ln = @result
2560
+ unless _tmp
2561
+ self.pos = _save
2562
+ break
2563
+ end
2156
2564
  _save1 = self.pos
2157
2565
  _ary = []
2158
2566
  _tmp = apply(:_UnorderedItem)
@@ -2173,7 +2581,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2173
2581
  self.pos = _save
2174
2582
  break
2175
2583
  end
2176
- @result = begin; unordered_list([],[],[], items); end
2584
+ @result = begin; unordered_list([],[],[],[], items, ln); end
2177
2585
  _tmp = true
2178
2586
  unless _tmp
2179
2587
  self.pos = _save
@@ -2185,11 +2593,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2185
2593
  return _tmp
2186
2594
  end
2187
2595
 
2188
- # UnorderedItem = "*:" - DocumentContent:content Le {ul_item([], [], [], content)}
2596
+ # UnorderedItem = ln:ln "*:" - DocumentContent:content Le {ul_item([], [], [], [], content, ln)}
2189
2597
  def _UnorderedItem
2190
2598
 
2191
2599
  _save = self.pos
2192
2600
  while true # sequence
2601
+ _tmp = apply(:_ln)
2602
+ ln = @result
2603
+ unless _tmp
2604
+ self.pos = _save
2605
+ break
2606
+ end
2193
2607
  _tmp = match_string("*:")
2194
2608
  unless _tmp
2195
2609
  self.pos = _save
@@ -2211,7 +2625,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2211
2625
  self.pos = _save
2212
2626
  break
2213
2627
  end
2214
- @result = begin; ul_item([], [], [], content); end
2628
+ @result = begin; ul_item([], [], [], [], content, ln); end
2215
2629
  _tmp = true
2216
2630
  unless _tmp
2217
2631
  self.pos = _save
@@ -2223,11 +2637,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2223
2637
  return _tmp
2224
2638
  end
2225
2639
 
2226
- # OrderedList = OrderedItem+:items {ordered_list([],[],[], items)}
2640
+ # OrderedList = ln:ln OrderedItem+:items {ordered_list([],[],[], [], items, ln)}
2227
2641
  def _OrderedList
2228
2642
 
2229
2643
  _save = self.pos
2230
2644
  while true # sequence
2645
+ _tmp = apply(:_ln)
2646
+ ln = @result
2647
+ unless _tmp
2648
+ self.pos = _save
2649
+ break
2650
+ end
2231
2651
  _save1 = self.pos
2232
2652
  _ary = []
2233
2653
  _tmp = apply(:_OrderedItem)
@@ -2248,7 +2668,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2248
2668
  self.pos = _save
2249
2669
  break
2250
2670
  end
2251
- @result = begin; ordered_list([],[],[], items); end
2671
+ @result = begin; ordered_list([],[],[], [], items, ln); end
2252
2672
  _tmp = true
2253
2673
  unless _tmp
2254
2674
  self.pos = _save
@@ -2260,11 +2680,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2260
2680
  return _tmp
2261
2681
  end
2262
2682
 
2263
- # OrderedItem = Num ":" - DocumentContent:content Le {ol_item([], [], [], content)}
2683
+ # OrderedItem = ln:ln Num ":" - DocumentContent:content Le {ol_item([], [], [], [], content, ln)}
2264
2684
  def _OrderedItem
2265
2685
 
2266
2686
  _save = self.pos
2267
2687
  while true # sequence
2688
+ _tmp = apply(:_ln)
2689
+ ln = @result
2690
+ unless _tmp
2691
+ self.pos = _save
2692
+ break
2693
+ end
2268
2694
  _tmp = apply(:_Num)
2269
2695
  unless _tmp
2270
2696
  self.pos = _save
@@ -2291,7 +2717,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2291
2717
  self.pos = _save
2292
2718
  break
2293
2719
  end
2294
- @result = begin; ol_item([], [], [], content); end
2720
+ @result = begin; ol_item([], [], [], [], content, ln); end
2295
2721
  _tmp = true
2296
2722
  unless _tmp
2297
2723
  self.pos = _save
@@ -2303,11 +2729,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2303
2729
  return _tmp
2304
2730
  end
2305
2731
 
2306
- # DefinitionList = DefinitionItem+:items {definition_list([], [], [], items)}
2732
+ # DefinitionList = ln:ln DefinitionItem+:items {definition_list([], [], [], [], items, ln)}
2307
2733
  def _DefinitionList
2308
2734
 
2309
2735
  _save = self.pos
2310
2736
  while true # sequence
2737
+ _tmp = apply(:_ln)
2738
+ ln = @result
2739
+ unless _tmp
2740
+ self.pos = _save
2741
+ break
2742
+ end
2311
2743
  _save1 = self.pos
2312
2744
  _ary = []
2313
2745
  _tmp = apply(:_DefinitionItem)
@@ -2328,7 +2760,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2328
2760
  self.pos = _save
2329
2761
  break
2330
2762
  end
2331
- @result = begin; definition_list([], [], [], items); end
2763
+ @result = begin; definition_list([], [], [], [], items, ln); end
2332
2764
  _tmp = true
2333
2765
  unless _tmp
2334
2766
  self.pos = _save
@@ -2340,7 +2772,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2340
2772
  return _tmp
2341
2773
  end
2342
2774
 
2343
- # DefinitionItem = - ";:" - DocumentContentExcept(':'):term ":" - DocumentContent:definition Le {dl_item([], [], [term], definition)}
2775
+ # DefinitionItem = - ln:ln ";:" - DocumentContentExcept(':'):term ":" - DocumentContent:definition Le {dl_item([], [], [term], [], definition, ln)}
2344
2776
  def _DefinitionItem
2345
2777
 
2346
2778
  _save = self.pos
@@ -2350,6 +2782,12 @@ class NoraMark::Parser < KPeg::CompiledParser
2350
2782
  self.pos = _save
2351
2783
  break
2352
2784
  end
2785
+ _tmp = apply(:_ln)
2786
+ ln = @result
2787
+ unless _tmp
2788
+ self.pos = _save
2789
+ break
2790
+ end
2353
2791
  _tmp = match_string(";:")
2354
2792
  unless _tmp
2355
2793
  self.pos = _save
@@ -2387,7 +2825,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2387
2825
  self.pos = _save
2388
2826
  break
2389
2827
  end
2390
- @result = begin; dl_item([], [], [term], definition); end
2828
+ @result = begin; dl_item([], [], [term], [], definition, ln); end
2391
2829
  _tmp = true
2392
2830
  unless _tmp
2393
2831
  self.pos = _save
@@ -2399,11 +2837,17 @@ class NoraMark::Parser < KPeg::CompiledParser
2399
2837
  return _tmp
2400
2838
  end
2401
2839
 
2402
- # LongDefinitionList = LongDefinitionItem+:items {definition_list([], [], [], items)}
2840
+ # LongDefinitionList = ln:ln LongDefinitionItem+:items {definition_list([], [], [], [], items, ln)}
2403
2841
  def _LongDefinitionList
2404
2842
 
2405
2843
  _save = self.pos
2406
2844
  while true # sequence
2845
+ _tmp = apply(:_ln)
2846
+ ln = @result
2847
+ unless _tmp
2848
+ self.pos = _save
2849
+ break
2850
+ end
2407
2851
  _save1 = self.pos
2408
2852
  _ary = []
2409
2853
  _tmp = apply(:_LongDefinitionItem)
@@ -2424,7 +2868,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2424
2868
  self.pos = _save
2425
2869
  break
2426
2870
  end
2427
- @result = begin; definition_list([], [], [], items); end
2871
+ @result = begin; definition_list([], [], [], [], items, ln); end
2428
2872
  _tmp = true
2429
2873
  unless _tmp
2430
2874
  self.pos = _save
@@ -2436,7 +2880,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2436
2880
  return _tmp
2437
2881
  end
2438
2882
 
2439
- # LongDefinitionItem = - ";:" - DocumentContentExcept('{'):term "{" - Nl - BlockBody:definition - BlockEnd {dl_item([], [], [term], definition)}
2883
+ # LongDefinitionItem = - ln:ln ";:" - DocumentContentExcept('{'):term "{" - Nl - BlockBody:definition - BlockEnd {dl_item([], [], [term], [], definition, ln)}
2440
2884
  def _LongDefinitionItem
2441
2885
 
2442
2886
  _save = self.pos
@@ -2446,6 +2890,12 @@ class NoraMark::Parser < KPeg::CompiledParser
2446
2890
  self.pos = _save
2447
2891
  break
2448
2892
  end
2893
+ _tmp = apply(:_ln)
2894
+ ln = @result
2895
+ unless _tmp
2896
+ self.pos = _save
2897
+ break
2898
+ end
2449
2899
  _tmp = match_string(";:")
2450
2900
  unless _tmp
2451
2901
  self.pos = _save
@@ -2498,7 +2948,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2498
2948
  self.pos = _save
2499
2949
  break
2500
2950
  end
2501
- @result = begin; dl_item([], [], [term], definition); end
2951
+ @result = begin; dl_item([], [], [term], [], definition, ln); end
2502
2952
  _tmp = true
2503
2953
  unless _tmp
2504
2954
  self.pos = _save
@@ -2534,7 +2984,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2534
2984
  return _tmp
2535
2985
  end
2536
2986
 
2537
- # LineCommand = - !CommandNameForSpecialLineCommand Command:c ":" - DocumentContent?:content - Le EmptyLine* {line_command(c[:name], c[:ids], c[:classes], c[:args], content)}
2987
+ # LineCommand = - !CommandNameForSpecialLineCommand Command:c ":" - DocumentContent?:content - Le EmptyLine* {block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}
2538
2988
  def _LineCommand
2539
2989
 
2540
2990
  _save = self.pos
@@ -2599,7 +3049,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2599
3049
  self.pos = _save
2600
3050
  break
2601
3051
  end
2602
- @result = begin; line_command(c[:name], c[:ids], c[:classes], c[:args], content); end
3052
+ @result = begin; block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln]); end
2603
3053
  _tmp = true
2604
3054
  unless _tmp
2605
3055
  self.pos = _save
@@ -2629,38 +3079,29 @@ class NoraMark::Parser < KPeg::CompiledParser
2629
3079
  return _tmp
2630
3080
  end
2631
3081
 
2632
- # Block = EmptyLine* (PreformattedBlock | HeadedSection | LineBlock | ExplicitBlock | ParagraphGroup):block EmptyLine* {block}
3082
+ # Block = (PreformattedBlock | HeadedSection | LineBlock | ExplicitBlock | ParagraphGroup):block EmptyLine* {block}
2633
3083
  def _Block
2634
3084
 
2635
3085
  _save = self.pos
2636
3086
  while true # sequence
2637
- while true
2638
- _tmp = apply(:_EmptyLine)
2639
- break unless _tmp
2640
- end
2641
- _tmp = true
2642
- unless _tmp
2643
- self.pos = _save
2644
- break
2645
- end
2646
3087
 
2647
- _save2 = self.pos
3088
+ _save1 = self.pos
2648
3089
  while true # choice
2649
3090
  _tmp = apply(:_PreformattedBlock)
2650
3091
  break if _tmp
2651
- self.pos = _save2
3092
+ self.pos = _save1
2652
3093
  _tmp = apply(:_HeadedSection)
2653
3094
  break if _tmp
2654
- self.pos = _save2
3095
+ self.pos = _save1
2655
3096
  _tmp = apply(:_LineBlock)
2656
3097
  break if _tmp
2657
- self.pos = _save2
3098
+ self.pos = _save1
2658
3099
  _tmp = apply(:_ExplicitBlock)
2659
3100
  break if _tmp
2660
- self.pos = _save2
3101
+ self.pos = _save1
2661
3102
  _tmp = apply(:_ParagraphGroup)
2662
3103
  break if _tmp
2663
- self.pos = _save2
3104
+ self.pos = _save1
2664
3105
  break
2665
3106
  end # end choice
2666
3107
 
@@ -2786,63 +3227,88 @@ class NoraMark::Parser < KPeg::CompiledParser
2786
3227
  return _tmp
2787
3228
  end
2788
3229
 
2789
- # HMarkupTerminator = - < "="+ ":" > &{ text.length - 1 <= n }
3230
+ # HMarkupTerminator = (- < "="+ ":" > &{ text.length - 1 <= n } | - Eof)
2790
3231
  def _HMarkupTerminator(n)
2791
3232
 
2792
3233
  _save = self.pos
2793
- while true # sequence
2794
- _tmp = apply(:__hyphen_)
2795
- unless _tmp
2796
- self.pos = _save
2797
- break
2798
- end
2799
- _text_start = self.pos
3234
+ while true # choice
2800
3235
 
2801
3236
  _save1 = self.pos
2802
3237
  while true # sequence
3238
+ _tmp = apply(:__hyphen_)
3239
+ unless _tmp
3240
+ self.pos = _save1
3241
+ break
3242
+ end
3243
+ _text_start = self.pos
3244
+
2803
3245
  _save2 = self.pos
2804
- _tmp = match_string("=")
2805
- if _tmp
2806
- while true
2807
- _tmp = match_string("=")
2808
- break unless _tmp
3246
+ while true # sequence
3247
+ _save3 = self.pos
3248
+ _tmp = match_string("=")
3249
+ if _tmp
3250
+ while true
3251
+ _tmp = match_string("=")
3252
+ break unless _tmp
3253
+ end
3254
+ _tmp = true
3255
+ else
3256
+ self.pos = _save3
2809
3257
  end
2810
- _tmp = true
2811
- else
2812
- self.pos = _save2
3258
+ unless _tmp
3259
+ self.pos = _save2
3260
+ break
3261
+ end
3262
+ _tmp = match_string(":")
3263
+ unless _tmp
3264
+ self.pos = _save2
3265
+ end
3266
+ break
3267
+ end # end sequence
3268
+
3269
+ if _tmp
3270
+ text = get_text(_text_start)
2813
3271
  end
2814
3272
  unless _tmp
2815
3273
  self.pos = _save1
2816
3274
  break
2817
3275
  end
2818
- _tmp = match_string(":")
3276
+ _save4 = self.pos
3277
+ _tmp = begin; text.length - 1 <= n ; end
3278
+ self.pos = _save4
2819
3279
  unless _tmp
2820
3280
  self.pos = _save1
2821
3281
  end
2822
3282
  break
2823
3283
  end # end sequence
2824
3284
 
2825
- if _tmp
2826
- text = get_text(_text_start)
2827
- end
2828
- unless _tmp
2829
- self.pos = _save
3285
+ break if _tmp
3286
+ self.pos = _save
3287
+
3288
+ _save5 = self.pos
3289
+ while true # sequence
3290
+ _tmp = apply(:__hyphen_)
3291
+ unless _tmp
3292
+ self.pos = _save5
3293
+ break
3294
+ end
3295
+ _tmp = apply(:_Eof)
3296
+ unless _tmp
3297
+ self.pos = _save5
3298
+ end
2830
3299
  break
2831
- end
2832
- _save3 = self.pos
2833
- _tmp = begin; text.length - 1 <= n ; end
2834
- self.pos = _save3
2835
- unless _tmp
2836
- self.pos = _save
2837
- end
3300
+ end # end sequence
3301
+
3302
+ break if _tmp
3303
+ self.pos = _save
2838
3304
  break
2839
- end # end sequence
3305
+ end # end choice
2840
3306
 
2841
3307
  set_failed_rule :_HMarkupTerminator unless _tmp
2842
3308
  return _tmp
2843
3309
  end
2844
3310
 
2845
- # HStart = - HStartMark(n) - DocumentContent:s Le { { level: n, heading: s } }
3311
+ # HStart = - HStartMark(n) ln:ln - DocumentContent:s Le { { level: n, heading: s, ln: ln} }
2846
3312
  def _HStart(n)
2847
3313
 
2848
3314
  _save = self.pos
@@ -2857,6 +3323,12 @@ class NoraMark::Parser < KPeg::CompiledParser
2857
3323
  self.pos = _save
2858
3324
  break
2859
3325
  end
3326
+ _tmp = apply(:_ln)
3327
+ ln = @result
3328
+ unless _tmp
3329
+ self.pos = _save
3330
+ break
3331
+ end
2860
3332
  _tmp = apply(:__hyphen_)
2861
3333
  unless _tmp
2862
3334
  self.pos = _save
@@ -2873,7 +3345,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2873
3345
  self.pos = _save
2874
3346
  break
2875
3347
  end
2876
- @result = begin; { level: n, heading: s } ; end
3348
+ @result = begin; { level: n, heading: s, ln: ln} ; end
2877
3349
  _tmp = true
2878
3350
  unless _tmp
2879
3351
  self.pos = _save
@@ -2885,7 +3357,7 @@ class NoraMark::Parser < KPeg::CompiledParser
2885
3357
  return _tmp
2886
3358
  end
2887
3359
 
2888
- # HSection = HStart(n):h (!HMarkupTerminator(n) !Eof Block)*:content {h_section(h[:level], h[:heading], content)}
3360
+ # HSection = HStart(n):h EmptyLine* (!HMarkupTerminator(n) Block)*:content EmptyLine* {h_section(h[:level], h[:heading], content, h[:ln])}
2889
3361
  def _HSection(n)
2890
3362
 
2891
3363
  _save = self.pos
@@ -2896,30 +3368,31 @@ class NoraMark::Parser < KPeg::CompiledParser
2896
3368
  self.pos = _save
2897
3369
  break
2898
3370
  end
3371
+ while true
3372
+ _tmp = apply(:_EmptyLine)
3373
+ break unless _tmp
3374
+ end
3375
+ _tmp = true
3376
+ unless _tmp
3377
+ self.pos = _save
3378
+ break
3379
+ end
2899
3380
  _ary = []
2900
3381
  while true
2901
3382
 
2902
- _save2 = self.pos
3383
+ _save3 = self.pos
2903
3384
  while true # sequence
2904
- _save3 = self.pos
2905
- _tmp = apply_with_args(:_HMarkupTerminator, n)
2906
- _tmp = _tmp ? nil : true
2907
- self.pos = _save3
2908
- unless _tmp
2909
- self.pos = _save2
2910
- break
2911
- end
2912
3385
  _save4 = self.pos
2913
- _tmp = apply(:_Eof)
3386
+ _tmp = apply_with_args(:_HMarkupTerminator, n)
2914
3387
  _tmp = _tmp ? nil : true
2915
3388
  self.pos = _save4
2916
3389
  unless _tmp
2917
- self.pos = _save2
3390
+ self.pos = _save3
2918
3391
  break
2919
3392
  end
2920
3393
  _tmp = apply(:_Block)
2921
3394
  unless _tmp
2922
- self.pos = _save2
3395
+ self.pos = _save3
2923
3396
  end
2924
3397
  break
2925
3398
  end # end sequence
@@ -2934,7 +3407,16 @@ class NoraMark::Parser < KPeg::CompiledParser
2934
3407
  self.pos = _save
2935
3408
  break
2936
3409
  end
2937
- @result = begin; h_section(h[:level], h[:heading], content); end
3410
+ while true
3411
+ _tmp = apply(:_EmptyLine)
3412
+ break unless _tmp
3413
+ end
3414
+ _tmp = true
3415
+ unless _tmp
3416
+ self.pos = _save
3417
+ break
3418
+ end
3419
+ @result = begin; h_section(h[:level], h[:heading], content, h[:ln]); end
2938
3420
  _tmp = true
2939
3421
  unless _tmp
2940
3422
  self.pos = _save
@@ -3037,7 +3519,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3037
3519
  return _tmp
3038
3520
  end
3039
3521
 
3040
- # Frontmatter = FrontmatterSeparator (!FrontmatterSeparator CharString Nl)+:yaml FrontmatterSeparator EmptyLine* {frontmatter(yaml)}
3522
+ # Frontmatter = FrontmatterSeparator ln:ln (!FrontmatterSeparator CharString Nl)+:yaml FrontmatterSeparator EmptyLine* {frontmatter(yaml, ln)}
3041
3523
  def _Frontmatter
3042
3524
 
3043
3525
  _save = self.pos
@@ -3047,6 +3529,12 @@ class NoraMark::Parser < KPeg::CompiledParser
3047
3529
  self.pos = _save
3048
3530
  break
3049
3531
  end
3532
+ _tmp = apply(:_ln)
3533
+ ln = @result
3534
+ unless _tmp
3535
+ self.pos = _save
3536
+ break
3537
+ end
3050
3538
  _save1 = self.pos
3051
3539
  _ary = []
3052
3540
 
@@ -3125,7 +3613,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3125
3613
  self.pos = _save
3126
3614
  break
3127
3615
  end
3128
- @result = begin; frontmatter(yaml); end
3616
+ @result = begin; frontmatter(yaml, ln); end
3129
3617
  _tmp = true
3130
3618
  unless _tmp
3131
3619
  self.pos = _save
@@ -3217,7 +3705,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3217
3705
  return _tmp
3218
3706
  end
3219
3707
 
3220
- # DocumentTextExcept = < (!Inline CharExcept(e))+ > {text(text)}
3708
+ # DocumentTextExcept = < (!Inline CharExcept(e))+ > ln:ln {text(text, ln)}
3221
3709
  def _DocumentTextExcept(e)
3222
3710
 
3223
3711
  _save = self.pos
@@ -3275,7 +3763,13 @@ class NoraMark::Parser < KPeg::CompiledParser
3275
3763
  self.pos = _save
3276
3764
  break
3277
3765
  end
3278
- @result = begin; text(text); end
3766
+ _tmp = apply(:_ln)
3767
+ ln = @result
3768
+ unless _tmp
3769
+ self.pos = _save
3770
+ break
3771
+ end
3772
+ @result = begin; text(text, ln); end
3279
3773
  _tmp = true
3280
3774
  unless _tmp
3281
3775
  self.pos = _save
@@ -3346,7 +3840,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3346
3840
  return _tmp
3347
3841
  end
3348
3842
 
3349
- # DocumentText = < (!Inline Char)+ > {text(text)}
3843
+ # DocumentText = < (!Inline Char)+ > ln:ln {text(text, ln)}
3350
3844
  def _DocumentText
3351
3845
 
3352
3846
  _save = self.pos
@@ -3404,7 +3898,13 @@ class NoraMark::Parser < KPeg::CompiledParser
3404
3898
  self.pos = _save
3405
3899
  break
3406
3900
  end
3407
- @result = begin; text(text); end
3901
+ _tmp = apply(:_ln)
3902
+ ln = @result
3903
+ unless _tmp
3904
+ self.pos = _save
3905
+ break
3906
+ end
3907
+ @result = begin; text(text, ln); end
3408
3908
  _tmp = true
3409
3909
  unless _tmp
3410
3910
  self.pos = _save
@@ -3503,7 +4003,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3503
4003
  return _tmp
3504
4004
  end
3505
4005
 
3506
- # Page = Frontmatter?:frontmatter - (!Newpage Block)*:blocks {page(([frontmatter] + blocks).select{ |x| !x.nil?})}
4006
+ # Page = Frontmatter?:frontmatter - (!Newpage Block)*:blocks EmptyLine* {page(([frontmatter] + blocks).select{ |x| !x.nil?}, 1)}
3507
4007
  def _Page
3508
4008
 
3509
4009
  _save = self.pos
@@ -3555,7 +4055,16 @@ class NoraMark::Parser < KPeg::CompiledParser
3555
4055
  self.pos = _save
3556
4056
  break
3557
4057
  end
3558
- @result = begin; page(([frontmatter] + blocks).select{ |x| !x.nil?}); end
4058
+ while true
4059
+ _tmp = apply(:_EmptyLine)
4060
+ break unless _tmp
4061
+ end
4062
+ _tmp = true
4063
+ unless _tmp
4064
+ self.pos = _save
4065
+ break
4066
+ end
4067
+ @result = begin; page(([frontmatter] + blocks).select{ |x| !x.nil?}, 1); end
3559
4068
  _tmp = true
3560
4069
  unless _tmp
3561
4070
  self.pos = _save
@@ -3629,7 +4138,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3629
4138
  return _tmp
3630
4139
  end
3631
4140
 
3632
- # root = BOM? Pages:pages - EofComment? Eof { pages }
4141
+ # root = BOM? EmptyLine* Pages:pages EofComment? Eof {root(pages)}
3633
4142
  def _root
3634
4143
 
3635
4144
  _save = self.pos
@@ -3644,22 +4153,26 @@ class NoraMark::Parser < KPeg::CompiledParser
3644
4153
  self.pos = _save
3645
4154
  break
3646
4155
  end
3647
- _tmp = apply(:_Pages)
3648
- pages = @result
4156
+ while true
4157
+ _tmp = apply(:_EmptyLine)
4158
+ break unless _tmp
4159
+ end
4160
+ _tmp = true
3649
4161
  unless _tmp
3650
4162
  self.pos = _save
3651
4163
  break
3652
4164
  end
3653
- _tmp = apply(:__hyphen_)
4165
+ _tmp = apply(:_Pages)
4166
+ pages = @result
3654
4167
  unless _tmp
3655
4168
  self.pos = _save
3656
4169
  break
3657
4170
  end
3658
- _save2 = self.pos
4171
+ _save3 = self.pos
3659
4172
  _tmp = apply(:_EofComment)
3660
4173
  unless _tmp
3661
4174
  _tmp = true
3662
- self.pos = _save2
4175
+ self.pos = _save3
3663
4176
  end
3664
4177
  unless _tmp
3665
4178
  self.pos = _save
@@ -3670,7 +4183,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3670
4183
  self.pos = _save
3671
4184
  break
3672
4185
  end
3673
- @result = begin; pages ; end
4186
+ @result = begin; root(pages); end
3674
4187
  _tmp = true
3675
4188
  unless _tmp
3676
4189
  self.pos = _save
@@ -3683,6 +4196,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3683
4196
  end
3684
4197
 
3685
4198
  Rules = {}
4199
+ Rules[:_ln] = rule_info("ln", "{ current_line }")
3686
4200
  Rules[:_BOM] = rule_info("BOM", "/\\uFEFF/")
3687
4201
  Rules[:_Eof] = rule_info("Eof", "!.")
3688
4202
  Rules[:_Space] = rule_info("Space", "(\" \" | \"\\\\t\")")
@@ -3698,70 +4212,76 @@ class NoraMark::Parser < KPeg::CompiledParser
3698
4212
  Rules[:_ClassNames] = rule_info("ClassNames", "ClassName*:classnames { classnames }")
3699
4213
  Rules[:_IdName] = rule_info("IdName", "\"\#\" Word:idname { idname }")
3700
4214
  Rules[:_IdNames] = rule_info("IdNames", "IdName*:idnames { idnames }")
3701
- Rules[:_CommandName] = rule_info("CommandName", "Word:name IdNames?:idnames ClassNames?:classes { {name: name, ids: idnames, classes: classes} }")
4215
+ Rules[:_CommandName] = rule_info("CommandName", "Word:name IdNames?:idnames ClassNames?:classes ln:ln { {name: name, ids: idnames, classes: classes, ln:ln } }")
3702
4216
  Rules[:_ParameterNormal] = rule_info("ParameterNormal", "< /[^,)]/* > { text }")
3703
4217
  Rules[:_ParameterQuoted] = rule_info("ParameterQuoted", "\"\\\"\" < /[^\"]/* > \"\\\"\" - &/[,)]/ { text }")
3704
4218
  Rules[:_ParameterSingleQuoted] = rule_info("ParameterSingleQuoted", "\"'\" < /[^']/* > \"'\" - &/[,)]/ { text }")
3705
4219
  Rules[:_Parameter] = rule_info("Parameter", "(ParameterQuoted | ParameterSingleQuoted | ParameterNormal):value { value }")
4220
+ Rules[:_NParameterNormal] = rule_info("NParameterNormal", "< /[^,\\]]/* > { text }")
4221
+ Rules[:_NParameterQuoted] = rule_info("NParameterQuoted", "\"\\\"\" < /[^\"]/* > \"\\\"\" - &/[,\\]]/ { text }")
4222
+ Rules[:_NParameterSingleQuoted] = rule_info("NParameterSingleQuoted", "\"'\" < /[^']/* > \"'\" - &/[,\\]]/ { text }")
4223
+ Rules[:_NParameter] = rule_info("NParameter", "(NParameterQuoted | NParameterSingleQuoted | NParameterNormal):value { value }")
3706
4224
  Rules[:_Parameters] = rule_info("Parameters", "(Parameter:parameter \",\" - Parameters:parameters { [ parameter ] + parameters } | Parameter:parameter { [ parameter ] })")
3707
- Rules[:_Command] = rule_info("Command", "CommandName:cn (\"(\" - Parameters:args - \")\")? { args ||= []; cn.merge({ args: args }) }")
3708
- Rules[:_ImplicitParagraph] = rule_info("ImplicitParagraph", "- !ParagraphDelimiter Comment* DocumentLine:content Comment* EofComment? {paragraph([],[], [], content)}")
4225
+ Rules[:_NamedParameter] = rule_info("NamedParameter", "Word:key - \":\" - NParameter:parameter { { key.to_sym => parameter } }")
4226
+ Rules[:_NamedParameters] = rule_info("NamedParameters", "(NamedParameter:parameter - \",\" - NamedParameters:parameters { parameter.merge parameters } | NamedParameter:parameter { parameter })")
4227
+ Rules[:_Command] = rule_info("Command", "CommandName:cn (\"(\" - Parameters:args - \")\")? (\"[\" - NamedParameters:named_args - \"]\")? { cn.merge({ args: args || [] , named_args: named_args || {}}) }")
4228
+ Rules[:_ImplicitParagraph] = rule_info("ImplicitParagraph", "- !ParagraphDelimiter Comment* DocumentLine:content ln:ln Comment* EofComment? {paragraph([],[], [], [], content, ln)}")
3709
4229
  Rules[:_ExplicitParagraphCommand] = rule_info("ExplicitParagraphCommand", "Command:c &{ c[:name] == 'p' }")
3710
- Rules[:_ExplicitParagraph] = rule_info("ExplicitParagraph", "- ExplicitParagraphCommand:c \":\" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}")
4230
+ Rules[:_ExplicitParagraph] = rule_info("ExplicitParagraph", "- ExplicitParagraphCommand:c \":\" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}")
3711
4231
  Rules[:_Paragraph] = rule_info("Paragraph", "(ExplicitParagraph | ImplicitParagraph)")
3712
- Rules[:_ParagraphGroup] = rule_info("ParagraphGroup", "Paragraph+:p EmptyLine* {paragraph_group([],[],[],p)}")
3713
- Rules[:_BlockHead] = rule_info("BlockHead", "- Command:command - \"{\" - Nl EmptyLine* { command }")
4232
+ Rules[:_ParagraphGroup] = rule_info("ParagraphGroup", "ln:ln Paragraph+:p EmptyLine* {paragraph_group([],[],[],[],p, ln)}")
4233
+ Rules[:_BlockHead] = rule_info("BlockHead", "Command:command - \"{\" - Nl EmptyLine* { command }")
3714
4234
  Rules[:_BlockEnd] = rule_info("BlockEnd", "- \"}\" - Le EmptyLine*")
3715
4235
  Rules[:_BlockBody] = rule_info("BlockBody", "(!BlockEnd Block)+:body { body }")
3716
- Rules[:_ExplicitBlock] = rule_info("ExplicitBlock", "BlockHead:c - BlockBody:content - BlockEnd {block(c[:name], c[:ids], c[:classes], c[:args], content)}")
4236
+ Rules[:_ExplicitBlock] = rule_info("ExplicitBlock", "- BlockHead:c - BlockBody:content - BlockEnd {block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}")
3717
4237
  Rules[:_PreformattedCommand] = rule_info("PreformattedCommand", "Command:command &{ ['pre', 'code'].include? command[:name] }")
3718
- Rules[:_PreformattedCommandHeadSimple] = rule_info("PreformattedCommandHeadSimple", "- PreformattedCommand:command - \"{\" - Nl { command }")
3719
- Rules[:_PreformattedCommandHeadComplex] = rule_info("PreformattedCommandHeadComplex", "- PreformattedCommand:command - \"{//\" Word?:codelanguage - Nl { command.merge({codelanguage: codelanguage}) }")
4238
+ Rules[:_PreformattedCommandHeadSimple] = rule_info("PreformattedCommandHeadSimple", "PreformattedCommand:command - \"{\" - Nl { command }")
4239
+ Rules[:_PreformattedCommandHeadComplex] = rule_info("PreformattedCommandHeadComplex", "PreformattedCommand:command - \"{//\" Word?:codelanguage - Nl { command.merge({codelanguage: codelanguage}) }")
3720
4240
  Rules[:_PreformattedCommandHead] = rule_info("PreformattedCommandHead", "(PreformattedCommandHeadComplex | PreformattedCommandHeadSimple)")
3721
4241
  Rules[:_PreformatEndSimple] = rule_info("PreformatEndSimple", "- \"}\" - Le EmptyLine*")
3722
4242
  Rules[:_PreformatEndComplex] = rule_info("PreformatEndComplex", "- \"//}\" - Le EmptyLine*")
3723
- Rules[:_PreformattedBlockSimple] = rule_info("PreformattedBlockSimple", "PreformattedCommandHeadSimple:c (!PreformatEndSimple CharString Nl)+:content PreformatEndSimple {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content)}")
3724
- Rules[:_PreformattedBlockComplex] = rule_info("PreformattedBlockComplex", "PreformattedCommandHeadComplex:c (!PreformatEndComplex CharString Nl)+:content PreformatEndComplex {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:codelanguage], content)}")
4243
+ Rules[:_PreformattedBlockSimple] = rule_info("PreformattedBlockSimple", "- PreformattedCommandHeadSimple:c (!PreformatEndSimple CharString Nl)+:content PreformatEndSimple {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln])}")
4244
+ Rules[:_PreformattedBlockComplex] = rule_info("PreformattedBlockComplex", "- PreformattedCommandHeadComplex:c (!PreformatEndComplex CharString Nl)+:content PreformatEndComplex {preformatted_block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], c[:codelanguage], content, c[:ln])}")
3725
4245
  Rules[:_PreformattedBlock] = rule_info("PreformattedBlock", "(PreformattedBlockComplex | PreformattedBlockSimple)")
3726
4246
  Rules[:_Inline] = rule_info("Inline", "(ImgInline | CommonInline)")
3727
- Rules[:_CommonInline] = rule_info("CommonInline", "\"[\" Command:c \"{\" - DocumentContentExcept('}'):content \"}\" \"]\" {inline(c[:name], c[:ids], c[:classes], c[:args], content)}")
4247
+ Rules[:_CommonInline] = rule_info("CommonInline", "\"[\" Command:c \"{\" - DocumentContentExcept('}'):content \"}\" \"]\" {inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}")
3728
4248
  Rules[:_ImgCommand] = rule_info("ImgCommand", "Command:c &{ c[:name] == 'img' && c[:args].size == 2}")
3729
- Rules[:_ImgInline] = rule_info("ImgInline", "\"[\" ImgCommand:c \"]\" {inline(c[:name], c[:ids], c[:classes], c[:args], nil)}")
4249
+ Rules[:_ImgInline] = rule_info("ImgInline", "\"[\" ImgCommand:c \"]\" {inline(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], nil, c[:ln])}")
3730
4250
  Rules[:_CommandNameForSpecialLineCommand] = rule_info("CommandNameForSpecialLineCommand", "(NewpageCommand | ExplicitParagraphCommand)")
3731
4251
  Rules[:_NewpageCommand] = rule_info("NewpageCommand", "Command:command &{ command[:name] == 'newpage' }")
3732
- Rules[:_Newpage] = rule_info("Newpage", "- NewpageCommand:c \":\" - DocumentContent?:content - Nl {newpage(c[:ids],c[:classes],c[:args], content)}")
3733
- Rules[:_UnorderedList] = rule_info("UnorderedList", "UnorderedItem+:items {unordered_list([],[],[], items)}")
3734
- Rules[:_UnorderedItem] = rule_info("UnorderedItem", "\"*:\" - DocumentContent:content Le {ul_item([], [], [], content)}")
3735
- Rules[:_OrderedList] = rule_info("OrderedList", "OrderedItem+:items {ordered_list([],[],[], items)}")
3736
- Rules[:_OrderedItem] = rule_info("OrderedItem", "Num \":\" - DocumentContent:content Le {ol_item([], [], [], content)}")
3737
- Rules[:_DefinitionList] = rule_info("DefinitionList", "DefinitionItem+:items {definition_list([], [], [], items)}")
3738
- Rules[:_DefinitionItem] = rule_info("DefinitionItem", "- \";:\" - DocumentContentExcept(':'):term \":\" - DocumentContent:definition Le {dl_item([], [], [term], definition)}")
3739
- Rules[:_LongDefinitionList] = rule_info("LongDefinitionList", "LongDefinitionItem+:items {definition_list([], [], [], items)}")
3740
- Rules[:_LongDefinitionItem] = rule_info("LongDefinitionItem", "- \";:\" - DocumentContentExcept('{'):term \"{\" - Nl - BlockBody:definition - BlockEnd {dl_item([], [], [term], definition)}")
4252
+ Rules[:_Newpage] = rule_info("Newpage", "- NewpageCommand:c \":\" - DocumentContent?:content - Nl {newpage(c[:ids],c[:classes],c[:args], c[:named_args], content, c[:ln])}")
4253
+ Rules[:_UnorderedList] = rule_info("UnorderedList", "ln:ln UnorderedItem+:items {unordered_list([],[],[],[], items, ln)}")
4254
+ Rules[:_UnorderedItem] = rule_info("UnorderedItem", "ln:ln \"*:\" - DocumentContent:content Le {ul_item([], [], [], [], content, ln)}")
4255
+ Rules[:_OrderedList] = rule_info("OrderedList", "ln:ln OrderedItem+:items {ordered_list([],[],[], [], items, ln)}")
4256
+ Rules[:_OrderedItem] = rule_info("OrderedItem", "ln:ln Num \":\" - DocumentContent:content Le {ol_item([], [], [], [], content, ln)}")
4257
+ Rules[:_DefinitionList] = rule_info("DefinitionList", "ln:ln DefinitionItem+:items {definition_list([], [], [], [], items, ln)}")
4258
+ Rules[:_DefinitionItem] = rule_info("DefinitionItem", "- ln:ln \";:\" - DocumentContentExcept(':'):term \":\" - DocumentContent:definition Le {dl_item([], [], [term], [], definition, ln)}")
4259
+ Rules[:_LongDefinitionList] = rule_info("LongDefinitionList", "ln:ln LongDefinitionItem+:items {definition_list([], [], [], [], items, ln)}")
4260
+ Rules[:_LongDefinitionItem] = rule_info("LongDefinitionItem", "- ln:ln \";:\" - DocumentContentExcept('{'):term \"{\" - Nl - BlockBody:definition - BlockEnd {dl_item([], [], [term], [], definition, ln)}")
3741
4261
  Rules[:_ItemsList] = rule_info("ItemsList", "(UnorderedList | OrderedList | DefinitionList | LongDefinitionList)")
3742
- Rules[:_LineCommand] = rule_info("LineCommand", "- !CommandNameForSpecialLineCommand Command:c \":\" - DocumentContent?:content - Le EmptyLine* {line_command(c[:name], c[:ids], c[:classes], c[:args], content)}")
4262
+ Rules[:_LineCommand] = rule_info("LineCommand", "- !CommandNameForSpecialLineCommand Command:c \":\" - DocumentContent?:content - Le EmptyLine* {block(c[:name], c[:ids], c[:classes], c[:args], c[:named_args], content, c[:ln])}")
3743
4263
  Rules[:_LineBlock] = rule_info("LineBlock", "(ItemsList | LineCommand)")
3744
- Rules[:_Block] = rule_info("Block", "EmptyLine* (PreformattedBlock | HeadedSection | LineBlock | ExplicitBlock | ParagraphGroup):block EmptyLine* {block}")
4264
+ Rules[:_Block] = rule_info("Block", "(PreformattedBlock | HeadedSection | LineBlock | ExplicitBlock | ParagraphGroup):block EmptyLine* {block}")
3745
4265
  Rules[:_BlockDelimiter] = rule_info("BlockDelimiter", "(BlockHead | BlockEnd)")
3746
4266
  Rules[:_ParagraphDelimiter] = rule_info("ParagraphDelimiter", "(BlockDelimiter | PreformattedCommandHead | LineBlock | Newpage | HeadedStart)")
3747
4267
  Rules[:_HStartMark] = rule_info("HStartMark", "< \"=\"+ \":\" > &{ text.length - 1 == n }")
3748
- Rules[:_HMarkupTerminator] = rule_info("HMarkupTerminator", "- < \"=\"+ \":\" > &{ text.length - 1 <= n }")
3749
- Rules[:_HStart] = rule_info("HStart", "- HStartMark(n) - DocumentContent:s Le { { level: n, heading: s } }")
3750
- Rules[:_HSection] = rule_info("HSection", "HStart(n):h (!HMarkupTerminator(n) !Eof Block)*:content {h_section(h[:level], h[:heading], content)}")
4268
+ Rules[:_HMarkupTerminator] = rule_info("HMarkupTerminator", "(- < \"=\"+ \":\" > &{ text.length - 1 <= n } | - Eof)")
4269
+ Rules[:_HStart] = rule_info("HStart", "- HStartMark(n) ln:ln - DocumentContent:s Le { { level: n, heading: s, ln: ln} }")
4270
+ Rules[:_HSection] = rule_info("HSection", "HStart(n):h EmptyLine* (!HMarkupTerminator(n) Block)*:content EmptyLine* {h_section(h[:level], h[:heading], content, h[:ln])}")
3751
4271
  Rules[:_HeadedStart] = rule_info("HeadedStart", "(HStart(1) | HStart(2) | HStart(3) | HStart(4) | HStart(5) | HStart(6))")
3752
4272
  Rules[:_HeadedSection] = rule_info("HeadedSection", "(HSection(1) | HSection(2) | HSection(3) | HSection(4) | HSection(5) | HSection(6))")
3753
4273
  Rules[:_FrontmatterSeparator] = rule_info("FrontmatterSeparator", "- \"---\" - Nl")
3754
- Rules[:_Frontmatter] = rule_info("Frontmatter", "FrontmatterSeparator (!FrontmatterSeparator CharString Nl)+:yaml FrontmatterSeparator EmptyLine* {frontmatter(yaml)}")
4274
+ Rules[:_Frontmatter] = rule_info("Frontmatter", "FrontmatterSeparator ln:ln (!FrontmatterSeparator CharString Nl)+:yaml FrontmatterSeparator EmptyLine* {frontmatter(yaml, ln)}")
3755
4275
  Rules[:_Char] = rule_info("Char", "< /[[:print:]]/ > { text }")
3756
4276
  Rules[:_CharString] = rule_info("CharString", "< Char* > { text }")
3757
4277
  Rules[:_CharExcept] = rule_info("CharExcept", "Char:c &{ c != e }")
3758
- Rules[:_DocumentTextExcept] = rule_info("DocumentTextExcept", "< (!Inline CharExcept(e))+ > {text(text)}")
4278
+ Rules[:_DocumentTextExcept] = rule_info("DocumentTextExcept", "< (!Inline CharExcept(e))+ > ln:ln {text(text, ln)}")
3759
4279
  Rules[:_DocumentContentExcept] = rule_info("DocumentContentExcept", "(Inline | DocumentTextExcept(e))+:content { content }")
3760
- Rules[:_DocumentText] = rule_info("DocumentText", "< (!Inline Char)+ > {text(text)}")
4280
+ Rules[:_DocumentText] = rule_info("DocumentText", "< (!Inline Char)+ > ln:ln {text(text, ln)}")
3761
4281
  Rules[:_DocumentContent] = rule_info("DocumentContent", "(Inline | DocumentText)+:content { content }")
3762
4282
  Rules[:_DocumentLine] = rule_info("DocumentLine", "DocumentContent:content Le { content }")
3763
- Rules[:_Page] = rule_info("Page", "Frontmatter?:frontmatter - (!Newpage Block)*:blocks {page(([frontmatter] + blocks).select{ |x| !x.nil?})}")
4283
+ Rules[:_Page] = rule_info("Page", "Frontmatter?:frontmatter - (!Newpage Block)*:blocks EmptyLine* {page(([frontmatter] + blocks).select{ |x| !x.nil?}, 1)}")
3764
4284
  Rules[:_Pages] = rule_info("Pages", "(Page:page Newpage:newpage Pages:pages { [ page, newpage ] + pages } | Page:page { [ page ] })")
3765
- Rules[:_root] = rule_info("root", "BOM? Pages:pages - EofComment? Eof { pages }")
4285
+ Rules[:_root] = rule_info("root", "BOM? EmptyLine* Pages:pages EofComment? Eof {root(pages)}")
3766
4286
  # :startdoc:
3767
4287
  end