raf 0.1.1 → 1.0.0

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.
@@ -1,415 +0,0 @@
1
- # Copyright (C) garin <garin54@gmail.com> 2011
2
- # See the included file COPYING for details.
3
- class InlineParser
4
- token EM_OPEN EM_CLOSE ITALIC_OPEN ITALIC_CLOSE STRIKE_OPEN STRIKE_CLOSE LABEL_OPEN LABEL_CLOSE REFERENCE_OPEN REFERENCE_CLOSE VERB_OPEN VERB_CLOSE ERB_OPEN ERB_CLOSE HERB_OPEN FOOTNOTE_OPEN FOOTNOTE_CLOSE RUBY_OPEN RUBY_CLOSE IMAGE_OPEN IMAGE_CLOSE MANUEDO_OPEN MANUEDO_CLOSE OTHER
5
- options no_result_var
6
- rule
7
- content :
8
- | elements
9
-
10
- elements : elements element { val[0].push(val[1]) }
11
- | element { val }
12
-
13
- element : emphasis
14
- | italic
15
- | strike
16
- | label
17
- | reference
18
- | ruby
19
- | footnote
20
- | image
21
- | verb
22
- | erb
23
- | herb
24
- | manuedo
25
- | normal_strings
26
-
27
- # --- inline
28
- emphasis : EM_OPEN content EM_CLOSE { Emphasis.new(val[1]) }
29
- italic : ITALIC_OPEN content ITALIC_CLOSE { Italic.new(val[1]) }
30
- strike : STRIKE_OPEN content STRIKE_CLOSE { Strike.new(val[1]) }
31
- footnote : FOOTNOTE_OPEN content FOOTNOTE_CLOSE {
32
- @index[:footnote] ||= []
33
- @index[:footnote] << {:content => val[1] }
34
- Footnote.new([val[1], @index[:footnote].size])
35
- }
36
-
37
- # --- inline end
38
-
39
- # --- image
40
- image_string : OTHER
41
- | EM_OPEN
42
- | EM_CLOSE
43
- | ITALIC_OPEN
44
- | ITALIC_CLOSE
45
- | STRIKE_OPEN
46
- | STRIKE_CLOSE
47
- | RUBY_OPEN
48
- | RUBY_CLOSE
49
- | MANUEDO_OPEN
50
- | MANUEDO_CLOSE
51
- | ERB_OPEN
52
- | ERB_CLOSE
53
- | HERB_OPEN
54
- | REFERENCE_OPEN
55
- | REFERENCE_CLOSE
56
- | LABEL_OPEN
57
- | LABEL_CLOSE
58
- | FOOTNOTE_OPEN
59
- | FOOTNOTE_CLOSE
60
- | VERB_OPEN
61
- | VERB_CLOSE
62
- | IMAGE_OPEN
63
-
64
- image_strings : image_strings image_string { val.join }
65
- | image_string { val[0] }
66
- image : IMAGE_OPEN image_strings IMAGE_CLOSE { Image.new(val[1]) }
67
-
68
- # --- image end
69
- # --- ruby
70
- ruby_string : OTHER
71
- | EM_OPEN
72
- | EM_CLOSE
73
- | ITALIC_OPEN
74
- | ITALIC_CLOSE
75
- | STRIKE_OPEN
76
- | STRIKE_CLOSE
77
- | IMAGE_OPEN
78
- | IMAGE_CLOSE
79
- | MANUEDO_OPEN
80
- | MANUEDO_CLOSE
81
- | ERB_OPEN
82
- | ERB_CLOSE
83
- | HERB_OPEN
84
- | REFERENCE_OPEN
85
- | REFERENCE_CLOSE
86
- | LABEL_OPEN
87
- | LABEL_CLOSE
88
- | RUBY_OPEN
89
- | FOOTNOTE_OPEN
90
- | FOOTNOTE_CLOSE
91
- | VERB_OPEN
92
- | VERB_CLOSE
93
-
94
- ruby_strings : ruby_strings ruby_string { val.join }
95
- | ruby_string { val[0] }
96
-
97
- ruby : RUBY_OPEN ruby_strings RUBY_CLOSE {
98
- base, text = val[1].split("|",2)
99
- text ||= base
100
- Ruby.new([base, text])
101
- }
102
-
103
- # --- ruby end
104
- # --- erb
105
- erb : ERB_OPEN verb_string ERB_CLOSE {
106
- e = ERB.new("<%= #{val[1]} %>")
107
- Plain.new(e.result) }
108
- herb : HERB_OPEN verb_string ERB_CLOSE {
109
- e = ERB.new("<% #{val[1]} %>")
110
- Plain.new(e.result) }
111
- # --- erb end
112
- # --- manuedo
113
- manuedo : MANUEDO_OPEN content MANUEDO_CLOSE { Manuedo.new(val[1]) }
114
-
115
- # --- manuedo end
116
-
117
- # --- label
118
- label_string : OTHER { val[0] }
119
-
120
-
121
- label_strings : label_strings label_string { val.join }
122
- | label_string { val[0] }
123
-
124
- label : LABEL_OPEN label_strings LABEL_CLOSE {
125
- label, title = val[1].split("|",2)
126
- title ||= label
127
- @index[:label] ||= []
128
- @index[:label] << {:title => title }
129
- Label.new([label.to_code, title, @index[:label].size])
130
- }
131
-
132
- # --- labe end
133
- # --- reference : start
134
- reference_string : OTHER { val[0] }
135
-
136
- reference_strings : reference_strings reference_string { val.join }
137
- | reference_string { val[0] }
138
-
139
- reference : REFERENCE_OPEN reference_strings REFERENCE_CLOSE {
140
- title, uri = val[1].split("|",2)
141
- uri ||= title
142
- uri = "#" + uri.to_code if uri.gsub(/^\s*https*:\/\//,"") == uri
143
- Reference.new([title, uri])
144
- }
145
- # --- reference : end
146
- # --- verb
147
- verb_string : OTHER
148
- | EM_OPEN
149
- | EM_CLOSE
150
- | ITALIC_OPEN
151
- | ITALIC_CLOSE
152
- | STRIKE_OPEN
153
- | STRIKE_CLOSE
154
- | IMAGE_OPEN
155
- | IMAGE_CLOSE
156
- | MANUEDO_OPEN
157
- | MANUEDO_CLOSE
158
- | ERB_OPEN
159
- | ERB_CLOSE
160
- | HERB_OPEN
161
- | REFERENCE_OPEN
162
- | REFERENCE_CLOSE
163
- | LABEL_OPEN
164
- | LABEL_CLOSE
165
- | RUBY_OPEN
166
- | RUBY_CLOSE
167
- | FOOTNOTE_OPEN
168
- | FOOTNOTE_CLOSE
169
- | VERB_OPEN
170
-
171
- verb_strings : verb_string
172
- | verb_strings verb_string { val }
173
-
174
- verb : VERB_OPEN verb_strings VERB_CLOSE { Verb.new(val[1])}
175
-
176
- # --- verb end
177
- # --- normal
178
- normal_strings : normal_string { Plain.new(val[0]) }
179
- | normal_strings normal_string { Plain.new([val[0].contents, val[1]]) }
180
-
181
- normal_string : OTHER { val[0] }
182
- # --- normal end
183
-
184
- ---- inner
185
- include ParserUtility
186
-
187
- EM_OPEN = '((*'
188
- EM_OPEN_RE = /\A#{Regexp.quote(EM_OPEN)}/
189
- EM_CLOSE = '*))'
190
- EM_CLOSE_RE = /\A#{Regexp.quote(EM_CLOSE)}/
191
-
192
- ITALIC_OPEN = '((_'
193
- ITALIC_OPEN_RE = /\A#{Regexp.quote(ITALIC_OPEN)}/
194
- ITALIC_CLOSE = '_))'
195
- ITALIC_CLOSE_RE = /\A#{Regexp.quote(ITALIC_CLOSE)}/
196
-
197
- STRIKE_OPEN = '((-'
198
- STRIKE_OPEN_RE = /\A#{Regexp.quote(STRIKE_OPEN)}/
199
- STRIKE_CLOSE = '-))'
200
- STRIKE_CLOSE_RE = /\A#{Regexp.quote(STRIKE_CLOSE)}/
201
-
202
- RUBY_OPEN = '((^'
203
- RUBY_OPEN_RE = /\A#{Regexp.quote(RUBY_OPEN)}/
204
- RUBY_CLOSE = '^))'
205
- RUBY_CLOSE_RE = /\A#{Regexp.quote(RUBY_CLOSE)}/
206
-
207
- FOOTNOTE_OPEN = '((['
208
- FOOTNOTE_OPEN_RE = /\A#{Regexp.quote(FOOTNOTE_OPEN)}/
209
- FOOTNOTE_CLOSE = ']))'
210
- FOOTNOTE_CLOSE_RE = /\A#{Regexp.quote(FOOTNOTE_CLOSE)}/
211
-
212
- IMAGE_OPEN = '(($'
213
- IMAGE_OPEN_RE = /\A#{Regexp.quote(IMAGE_OPEN)}/
214
- IMAGE_CLOSE = '$))'
215
- IMAGE_CLOSE_RE = /\A#{Regexp.quote(IMAGE_CLOSE)}/
216
-
217
- LABEL_OPEN = '((>'
218
- LABEL_OPEN_RE = /\A#{Regexp.quote(LABEL_OPEN)}/
219
- LABEL_CLOSE = '<))'
220
- LABEL_CLOSE_RE = /\A#{Regexp.quote(LABEL_CLOSE)}/
221
-
222
- LABEL_HTML_OPEN = '((&gt;'
223
- LABEL_HTML_OPEN_RE = /\A#{Regexp.quote(LABEL_HTML_OPEN)}/
224
- LABEL_HTML_CLOSE = '&lt;))'
225
- LABEL_HTML_CLOSE_RE = /\A#{Regexp.quote(LABEL_HTML_CLOSE)}/
226
-
227
- REFERENCE_OPEN = '((<'
228
- REFERENCE_OPEN_RE = /\A#{Regexp.quote(REFERENCE_OPEN)}/
229
- REFERENCE_CLOSE = '>))'
230
- REFERENCE_CLOSE_RE = /\A#{Regexp.quote(REFERENCE_CLOSE)}/
231
-
232
- REFERENCE_HTML_OPEN = '((<'
233
- REFERENCE_HTML_OPEN_RE = /\A#{Regexp.quote(REFERENCE_HTML_OPEN)}/
234
- REFERENCE_HTML_CLOSE = '>))'
235
- REFERENCE_HTML_CLOSE_RE = /\A#{Regexp.quote(REFERENCE_HTML_CLOSE)}/
236
-
237
- VERB_OPEN = "(('"
238
- VERB_OPEN_RE = /\A#{Regexp.quote(VERB_OPEN)}/
239
- VERB_CLOSE = "'))"
240
- VERB_CLOSE_RE = /\A#{Regexp.quote(VERB_CLOSE)}/
241
-
242
- MANUEDO_OPEN = "((/"
243
- MANUEDO_OPEN_RE = /\A#{Regexp.quote(MANUEDO_OPEN)}/
244
- MANUEDO_CLOSE = "/))"
245
- MANUEDO_CLOSE_RE = /\A#{Regexp.quote(MANUEDO_CLOSE)}/
246
-
247
- ERB_OPEN = "<%="
248
- ERB_OPEN_RE = /\A#{Regexp.quote(ERB_OPEN)}/
249
- ERB_CLOSE = "%>"
250
- ERB_CLOSE_RE = /\A#{Regexp.quote(ERB_CLOSE)}/
251
-
252
- HERB_OPEN = "<%"
253
- HERB_OPEN_RE = /\A#{Regexp.quote(HERB_OPEN)}/
254
-
255
- # URL = "URL:"
256
- # URL_RE = /\A#{Regexp.quote(URL)}/
257
-
258
- #other_re_mode = Regexp::EXTENDED
259
- other_re_mode = Regexp::MULTILINE
260
- OTHER_RE = Regexp.new(
261
- "\\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(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|#{Regexp.quote(RUBY_OPEN)}|#{Regexp.quote(RUBY_CLOSE)}|#{Regexp.quote(IMAGE_OPEN)}|#{Regexp.quote(IMAGE_CLOSE)}|#{Regexp.quote(LABEL_OPEN)}|#{Regexp.quote(LABEL_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)}|#{Regexp.quote(ERB_OPEN)}|#{Regexp.quote(ERB_CLOSE)}|#{Regexp.quote(HERB_OPEN)})", other_re_mode)
262
-
263
- def parse(src)
264
- @src = StringScanner.new(Array(src).join)
265
- @pre = ""
266
- @@yydebug = false
267
- @view_token_type = false
268
- do_parse
269
- end
270
- def initialize
271
- @index = {}
272
- end
273
- attr_reader :index
274
-
275
- def next_token
276
- return [false, false] if @src.eos?
277
- if ret = @src.scan(EM_OPEN_RE)
278
- puts "i: EM_OPEN: #{ret}" if @view_token_type
279
- @pre << ret
280
- [:EM_OPEN, ret]
281
- elsif ret = @src.scan(EM_CLOSE_RE)
282
- puts "i: EM_CLOSE: #{ret}" if @view_token_type
283
- @pre << ret
284
- [:EM_CLOSE, ret]
285
- elsif ret = @src.scan(ITALIC_OPEN_RE)
286
- puts "i: ITALIC_OPEN: #{ret}" if @view_token_type
287
- @pre << ret
288
- [:ITALIC_OPEN, ret]
289
- elsif ret = @src.scan(ITALIC_CLOSE_RE)
290
- puts "i: ITALIC_CLOSE: #{ret}" if @view_token_type
291
- @pre << ret
292
- [:ITALIC_CLOSE, ret]
293
- elsif ret = @src.scan(STRIKE_OPEN_RE)
294
- @pre << ret
295
- puts "i: STRIKE_OPEN: #{ret}" if @view_token_type
296
- [:STRIKE_OPEN, ret]
297
- elsif ret = @src.scan(STRIKE_CLOSE_RE)
298
- @pre << ret
299
- puts "i: STRIKE_CLOSE: #{ret}" if @view_token_type
300
- [:STRIKE_CLOSE, ret]
301
- elsif ret = @src.scan(LABEL_OPEN_RE)
302
- @pre << ret
303
- puts "i: LABEL_OPEN: #{ret}" if @view_token_type
304
- [:LABEL_OPEN, ret]
305
- elsif ret = @src.scan(LABEL_CLOSE_RE)
306
- puts "i: LABEL_CLOSE: #{ret}" if @view_token_type
307
- @pre << ret
308
- [:LABEL_CLOSE, ret]
309
- elsif ret = @src.scan(LABEL_HTML_OPEN_RE)
310
- @pre << ret
311
- puts "i: LABEL_OPEN: #{ret}" if @view_token_type
312
- [:LABEL_OPEN, ret]
313
- elsif ret = @src.scan(LABEL_HTML_CLOSE_RE)
314
- puts "i: LABEL_CLOSE: #{ret}" if @view_token_type
315
- @pre << ret
316
- [:LABEL_CLOSE, ret]
317
- elsif ret = @src.scan(REFERENCE_OPEN_RE)
318
- puts "i: REFERENCE_OPEN: #{ret}" if @view_token_type
319
- @pre << ret
320
- [:REFERENCE_OPEN, ret]
321
- elsif ret = @src.scan(REFERENCE_CLOSE_RE)
322
- puts "i: REFERENCE_CLOSE: #{ret}" if @view_token_type
323
- @pre << ret
324
- [:REFERENCE_CLOSE, ret]
325
- elsif ret = @src.scan(REFERENCE_HTML_OPEN_RE)
326
- puts "i: REFERENCE_HTML_OPEN: #{ret}" if @view_token_type
327
- @pre << ret
328
- [:REFERENCE_OPEN, ret]
329
- elsif ret = @src.scan(REFERENCE_HTML_CLOSE_RE)
330
- puts "i: REFERENCE_HTML_CLOSE: #{ret}" if @view_token_type
331
- @pre << ret
332
- [:REFERENCE_CLOSE, ret]
333
- elsif ret = @src.scan(VERB_OPEN_RE)
334
- puts "i: VERB_OPEN: #{ret}" if @view_token_type
335
- @pre << ret
336
- [:VERB_OPEN, ret]
337
- elsif ret = @src.scan(VERB_CLOSE_RE)
338
- puts "i: VERB_CLOSE: #{ret}" if @view_token_type
339
- @pre << ret
340
- [:VERB_CLOSE, ret]
341
- elsif ret = @src.scan(RUBY_OPEN_RE)
342
- puts "i: RUBY_OPEN: #{ret}" if @view_token_type
343
- @pre << ret
344
- [:RUBY_OPEN, ret]
345
- elsif ret = @src.scan(RUBY_CLOSE_RE)
346
- puts "i: RUBY_CLOSE: #{ret}" if @view_token_type
347
- @pre << ret
348
- [:RUBY_CLOSE, ret]
349
- elsif ret = @src.scan(FOOTNOTE_OPEN_RE)
350
- puts "i: FOOTNOTE_OPEN: #{ret}" if @view_token_type
351
- @pre << ret
352
- [:FOOTNOTE_OPEN, ret]
353
- elsif ret = @src.scan(FOOTNOTE_CLOSE_RE)
354
- puts "i: FOOTNOTE_CLOSE: #{ret}" if @view_token_type
355
- @pre << ret
356
- [:FOOTNOTE_CLOSE, ret]
357
- elsif ret = @src.scan(IMAGE_OPEN_RE)
358
- puts "i: IMAGE_OPEN: #{ret}" if @view_token_type
359
- @pre << ret
360
- [:IMAGE_OPEN, ret]
361
- elsif ret = @src.scan(IMAGE_CLOSE_RE)
362
- puts "i: IMAGE_CLOSE: #{ret}" if @view_token_type
363
- @pre << ret
364
- [:IMAGE_CLOSE, ret]
365
- elsif ret = @src.scan(MANUEDO_OPEN_RE)
366
- puts "i: MANUEDO_OPEN: #{ret}" if @view_token_type
367
- @pre << ret
368
- [:MANUEDO_OPEN, ret]
369
- elsif ret = @src.scan(MANUEDO_CLOSE_RE)
370
- puts "i: MANUED_CLOSE: #{ret}" if @view_token_type
371
- @pre << ret
372
- [:MANUEDO_CLOSE, ret]
373
- elsif ret = @src.scan(ERB_OPEN_RE)
374
- puts "i: ERB_OPEN: #{ret}" if @view_token_type
375
- @pre << ret
376
- [:ERB_OPEN, ret]
377
- elsif ret = @src.scan(ERB_CLOSE_RE)
378
- puts "i: ERB_CLOSE: #{ret}" if @view_token_type
379
- @pre << ret
380
- [:ERB_CLOSE, ret]
381
- elsif ret = @src.scan(HERB_OPEN_RE)
382
- puts "i: HERB_OPEN: #{ret}" if @view_token_type
383
- @pre << ret
384
- [:HERB_OPEN, ret]
385
- elsif ret = @src.scan(OTHER_RE)
386
- puts "i: OTHER_RE: #{ret}" if @view_token_type
387
- @pre << ret
388
- [:OTHER, ret]
389
- else
390
- puts "i: OTHER_RE(else): #{ret}" if @view_token_type
391
- ret = @src.rest
392
- @pre << ret
393
- @src.terminate
394
- [:OTHER, ret]
395
- end
396
- end
397
-
398
- ---- header
399
- require "parserutility"
400
- require 'strscan'
401
- require 'erb'
402
- require 'rafelement'
403
-
404
- module Raf
405
- ---- footer
406
- if __FILE__ == $0
407
- raf = InlineParser.new
408
- src = $stdin.readline
409
- nodes = raf.parse(src)
410
- puts "----- output -----"
411
- nodes.each do |n|
412
- puts n.apply
413
- end
414
- end
415
- end # end of module Raf