tumblargh 0.1.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.
Files changed (59) hide show
  1. data/.gitignore +2 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +15 -0
  4. data/Gemfile.lock +52 -0
  5. data/LICENSE +20 -0
  6. data/README.md +84 -0
  7. data/Rakefile +43 -0
  8. data/VERSION +1 -0
  9. data/examples/confg.ru +18 -0
  10. data/examples/middleman_config.rb +7 -0
  11. data/lib/middleman/features/tumblargh.rb +41 -0
  12. data/lib/rack/tumblargh.rb +51 -0
  13. data/lib/tumblargh.rb +60 -0
  14. data/lib/tumblargh/api.rb +60 -0
  15. data/lib/tumblargh/grammar.rb +560 -0
  16. data/lib/tumblargh/grammar.treetop +42 -0
  17. data/lib/tumblargh/node.rb +14 -0
  18. data/lib/tumblargh/node/base.rb +21 -0
  19. data/lib/tumblargh/node/block.rb +31 -0
  20. data/lib/tumblargh/node/block_end.rb +9 -0
  21. data/lib/tumblargh/node/block_start.rb +22 -0
  22. data/lib/tumblargh/node/literal.rb +9 -0
  23. data/lib/tumblargh/node/root.rb +17 -0
  24. data/lib/tumblargh/node/tag.rb +33 -0
  25. data/lib/tumblargh/parser.rb +96 -0
  26. data/lib/tumblargh/renderer.rb +316 -0
  27. data/lib/tumblargh/renderer/base.rb +64 -0
  28. data/lib/tumblargh/renderer/blocks/answer.rb +22 -0
  29. data/lib/tumblargh/renderer/blocks/audio.rb +70 -0
  30. data/lib/tumblargh/renderer/blocks/base.rb +35 -0
  31. data/lib/tumblargh/renderer/blocks/dates.rb +62 -0
  32. data/lib/tumblargh/renderer/blocks/navigation.rb +65 -0
  33. data/lib/tumblargh/renderer/blocks/notes.rb +68 -0
  34. data/lib/tumblargh/renderer/blocks/posts.rb +50 -0
  35. data/lib/tumblargh/renderer/blocks/reblogs.rb +50 -0
  36. data/lib/tumblargh/renderer/blocks/tags.rb +37 -0
  37. data/lib/tumblargh/renderer/document.rb +70 -0
  38. data/lib/tumblargh/renderer/literal.rb +9 -0
  39. data/lib/tumblargh/renderer/tag.rb +37 -0
  40. data/lib/tumblargh/resource.rb +12 -0
  41. data/lib/tumblargh/resource/base.rb +39 -0
  42. data/lib/tumblargh/resource/blog.rb +49 -0
  43. data/lib/tumblargh/resource/note.rb +8 -0
  44. data/lib/tumblargh/resource/post.rb +63 -0
  45. data/lib/tumblargh/resource/tag.rb +8 -0
  46. data/lib/tumblargh/resource/user.rb +8 -0
  47. data/spec/api_spec.rb +1 -0
  48. data/spec/fixtures/data/staff.tumblr.com-2012-05-06/posts.json +1203 -0
  49. data/spec/fixtures/themes/fluid.html +1138 -0
  50. data/spec/fixtures/themes/solstice.html +392 -0
  51. data/spec/parser_spec.rb +159 -0
  52. data/spec/renderer/blocks/posts_spec.rb +17 -0
  53. data/spec/renderer/document_spec.rb +57 -0
  54. data/spec/resource/post_spec.rb +38 -0
  55. data/spec/resource_spec.rb +23 -0
  56. data/spec/spec_helper.rb +24 -0
  57. data/spec/tumblargh_spec.rb +50 -0
  58. data/tumblargh.gemspec +120 -0
  59. metadata +237 -0
@@ -0,0 +1,560 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Tumblr
5
+ include Treetop::Runtime
6
+
7
+ def root
8
+ @root ||= :root
9
+ end
10
+
11
+ def _nt_root
12
+ start_index = index
13
+ if node_cache[:root].has_key?(index)
14
+ cached = node_cache[:root][index]
15
+ if cached
16
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
17
+ @index = cached.interval.end
18
+ end
19
+ return cached
20
+ end
21
+
22
+ s0, i0 = [], index
23
+ loop do
24
+ i1 = index
25
+ r2 = _nt_block
26
+ if r2
27
+ r1 = r2
28
+ else
29
+ r3 = _nt_tag
30
+ if r3
31
+ r1 = r3
32
+ else
33
+ r4 = _nt_orphan
34
+ if r4
35
+ r1 = r4
36
+ else
37
+ r5 = _nt_literal
38
+ if r5
39
+ r1 = r5
40
+ else
41
+ @index = i1
42
+ r1 = nil
43
+ end
44
+ end
45
+ end
46
+ end
47
+ if r1
48
+ s0 << r1
49
+ else
50
+ break
51
+ end
52
+ end
53
+ r0 = instantiate_node(Tumblargh::Node::Root,input, i0...index, s0)
54
+
55
+ node_cache[:root][start_index] = r0
56
+
57
+ r0
58
+ end
59
+
60
+ module Block0
61
+ def block_start
62
+ elements[0]
63
+ end
64
+
65
+ def block_end
66
+ elements[2]
67
+ end
68
+ end
69
+
70
+ def _nt_block
71
+ start_index = index
72
+ if node_cache[:block].has_key?(index)
73
+ cached = node_cache[:block][index]
74
+ if cached
75
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
76
+ @index = cached.interval.end
77
+ end
78
+ return cached
79
+ end
80
+
81
+ i0, s0 = index, []
82
+ r1 = _nt_block_start
83
+ s0 << r1
84
+ if r1
85
+ s2, i2 = [], index
86
+ loop do
87
+ i3 = index
88
+ r4 = _nt_block
89
+ if r4
90
+ r3 = r4
91
+ else
92
+ r5 = _nt_tag
93
+ if r5
94
+ r3 = r5
95
+ else
96
+ r6 = _nt_orphan
97
+ if r6
98
+ r3 = r6
99
+ else
100
+ r7 = _nt_literal
101
+ if r7
102
+ r3 = r7
103
+ else
104
+ @index = i3
105
+ r3 = nil
106
+ end
107
+ end
108
+ end
109
+ end
110
+ if r3
111
+ s2 << r3
112
+ else
113
+ break
114
+ end
115
+ end
116
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
117
+ s0 << r2
118
+ if r2
119
+ r8 = _nt_block_end
120
+ s0 << r8
121
+ end
122
+ end
123
+ if s0.last
124
+ r0 = instantiate_node(Tumblargh::Node::Block,input, i0...index, s0)
125
+ r0.extend(Block0)
126
+ else
127
+ @index = i0
128
+ r0 = nil
129
+ end
130
+
131
+ node_cache[:block][start_index] = r0
132
+
133
+ r0
134
+ end
135
+
136
+ module BlockStart0
137
+ end
138
+
139
+ def _nt_block_start
140
+ start_index = index
141
+ if node_cache[:block_start].has_key?(index)
142
+ cached = node_cache[:block_start][index]
143
+ if cached
144
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
145
+ @index = cached.interval.end
146
+ end
147
+ return cached
148
+ end
149
+
150
+ i0, s0 = index, []
151
+ if has_terminal?('{block:', false, index)
152
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
153
+ @index += 7
154
+ else
155
+ terminal_parse_failure('{block:')
156
+ r1 = nil
157
+ end
158
+ s0 << r1
159
+ if r1
160
+ s2, i2 = [], index
161
+ loop do
162
+ if has_terminal?('\G[^\\s}:;]', true, index)
163
+ r3 = true
164
+ @index += 1
165
+ else
166
+ r3 = nil
167
+ end
168
+ if r3
169
+ s2 << r3
170
+ else
171
+ break
172
+ end
173
+ end
174
+ if s2.empty?
175
+ @index = i2
176
+ r2 = nil
177
+ else
178
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
179
+ end
180
+ s0 << r2
181
+ if r2
182
+ if has_terminal?('}', false, index)
183
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
184
+ @index += 1
185
+ else
186
+ terminal_parse_failure('}')
187
+ r4 = nil
188
+ end
189
+ s0 << r4
190
+ if r4
191
+ r6 = _nt_space
192
+ if r6
193
+ r5 = r6
194
+ else
195
+ r5 = instantiate_node(SyntaxNode,input, index...index)
196
+ end
197
+ s0 << r5
198
+ end
199
+ end
200
+ end
201
+ if s0.last
202
+ r0 = instantiate_node(Tumblargh::Node::BlockStart,input, i0...index, s0)
203
+ r0.extend(BlockStart0)
204
+ else
205
+ @index = i0
206
+ r0 = nil
207
+ end
208
+
209
+ node_cache[:block_start][start_index] = r0
210
+
211
+ r0
212
+ end
213
+
214
+ module BlockEnd0
215
+ end
216
+
217
+ def _nt_block_end
218
+ start_index = index
219
+ if node_cache[:block_end].has_key?(index)
220
+ cached = node_cache[:block_end][index]
221
+ if cached
222
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
223
+ @index = cached.interval.end
224
+ end
225
+ return cached
226
+ end
227
+
228
+ i0, s0 = index, []
229
+ if has_terminal?('{/block:', false, index)
230
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
231
+ @index += 8
232
+ else
233
+ terminal_parse_failure('{/block:')
234
+ r1 = nil
235
+ end
236
+ s0 << r1
237
+ if r1
238
+ s2, i2 = [], index
239
+ loop do
240
+ if has_terminal?('\G[^\\s}]', true, index)
241
+ r3 = true
242
+ @index += 1
243
+ else
244
+ r3 = nil
245
+ end
246
+ if r3
247
+ s2 << r3
248
+ else
249
+ break
250
+ end
251
+ end
252
+ if s2.empty?
253
+ @index = i2
254
+ r2 = nil
255
+ else
256
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
257
+ end
258
+ s0 << r2
259
+ if r2
260
+ if has_terminal?('}', false, index)
261
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
262
+ @index += 1
263
+ else
264
+ terminal_parse_failure('}')
265
+ r4 = nil
266
+ end
267
+ s0 << r4
268
+ if r4
269
+ r6 = _nt_space
270
+ if r6
271
+ r5 = r6
272
+ else
273
+ r5 = instantiate_node(SyntaxNode,input, index...index)
274
+ end
275
+ s0 << r5
276
+ end
277
+ end
278
+ end
279
+ if s0.last
280
+ r0 = instantiate_node(Tumblargh::Node::BlockEnd,input, i0...index, s0)
281
+ r0.extend(BlockEnd0)
282
+ else
283
+ @index = i0
284
+ r0 = nil
285
+ end
286
+
287
+ node_cache[:block_end][start_index] = r0
288
+
289
+ r0
290
+ end
291
+
292
+ module Tag0
293
+ def tag_name
294
+ elements[1]
295
+ end
296
+
297
+ end
298
+
299
+ def _nt_tag
300
+ start_index = index
301
+ if node_cache[:tag].has_key?(index)
302
+ cached = node_cache[:tag][index]
303
+ if cached
304
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
305
+ @index = cached.interval.end
306
+ end
307
+ return cached
308
+ end
309
+
310
+ i0, s0 = index, []
311
+ if has_terminal?('{', false, index)
312
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
313
+ @index += 1
314
+ else
315
+ terminal_parse_failure('{')
316
+ r1 = nil
317
+ end
318
+ s0 << r1
319
+ if r1
320
+ r2 = _nt_tag_name
321
+ s0 << r2
322
+ if r2
323
+ if has_terminal?('}', false, index)
324
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
325
+ @index += 1
326
+ else
327
+ terminal_parse_failure('}')
328
+ r3 = nil
329
+ end
330
+ s0 << r3
331
+ end
332
+ end
333
+ if s0.last
334
+ r0 = instantiate_node(Tumblargh::Node::Tag,input, i0...index, s0)
335
+ r0.extend(Tag0)
336
+ else
337
+ @index = i0
338
+ r0 = nil
339
+ end
340
+
341
+ node_cache[:tag][start_index] = r0
342
+
343
+ r0
344
+ end
345
+
346
+ module TagName0
347
+ end
348
+
349
+ def _nt_tag_name
350
+ start_index = index
351
+ if node_cache[:tag_name].has_key?(index)
352
+ cached = node_cache[:tag_name][index]
353
+ if cached
354
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
355
+ @index = cached.interval.end
356
+ end
357
+ return cached
358
+ end
359
+
360
+ i0, s0 = index, []
361
+ s1, i1 = [], index
362
+ loop do
363
+ if has_terminal?('\G[a-zA-Z0-9]', true, index)
364
+ r2 = true
365
+ @index += 1
366
+ else
367
+ r2 = nil
368
+ end
369
+ if r2
370
+ s1 << r2
371
+ else
372
+ break
373
+ end
374
+ end
375
+ if s1.empty?
376
+ @index = i1
377
+ r1 = nil
378
+ else
379
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
380
+ end
381
+ s0 << r1
382
+ if r1
383
+ if has_terminal?(':', false, index)
384
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
385
+ @index += 1
386
+ else
387
+ terminal_parse_failure(':')
388
+ r4 = nil
389
+ end
390
+ if r4
391
+ r3 = r4
392
+ else
393
+ r3 = instantiate_node(SyntaxNode,input, index...index)
394
+ end
395
+ s0 << r3
396
+ if r3
397
+ s5, i5 = [], index
398
+ loop do
399
+ if has_terminal?('\G[^\\n:/{};\\[\\]\\(\\)]', true, index)
400
+ r6 = true
401
+ @index += 1
402
+ else
403
+ r6 = nil
404
+ end
405
+ if r6
406
+ s5 << r6
407
+ else
408
+ break
409
+ end
410
+ end
411
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
412
+ s0 << r5
413
+ end
414
+ end
415
+ if s0.last
416
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
417
+ r0.extend(TagName0)
418
+ else
419
+ @index = i0
420
+ r0 = nil
421
+ end
422
+
423
+ node_cache[:tag_name][start_index] = r0
424
+
425
+ r0
426
+ end
427
+
428
+ module Orphan0
429
+ end
430
+
431
+ def _nt_orphan
432
+ start_index = index
433
+ if node_cache[:orphan].has_key?(index)
434
+ cached = node_cache[:orphan][index]
435
+ if cached
436
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
437
+ @index = cached.interval.end
438
+ end
439
+ return cached
440
+ end
441
+
442
+ i0, s0 = index, []
443
+ if has_terminal?('{', false, index)
444
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
445
+ @index += 1
446
+ else
447
+ terminal_parse_failure('{')
448
+ r1 = nil
449
+ end
450
+ s0 << r1
451
+ if r1
452
+ i2 = index
453
+ if has_terminal?('/', false, index)
454
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
455
+ @index += 1
456
+ else
457
+ terminal_parse_failure('/')
458
+ r3 = nil
459
+ end
460
+ if r3
461
+ r2 = nil
462
+ else
463
+ @index = i2
464
+ r2 = instantiate_node(SyntaxNode,input, index...index)
465
+ end
466
+ s0 << r2
467
+ end
468
+ if s0.last
469
+ r0 = instantiate_node(Tumblargh::Node::Literal,input, i0...index, s0)
470
+ r0.extend(Orphan0)
471
+ else
472
+ @index = i0
473
+ r0 = nil
474
+ end
475
+
476
+ node_cache[:orphan][start_index] = r0
477
+
478
+ r0
479
+ end
480
+
481
+ def _nt_literal
482
+ start_index = index
483
+ if node_cache[:literal].has_key?(index)
484
+ cached = node_cache[:literal][index]
485
+ if cached
486
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
487
+ @index = cached.interval.end
488
+ end
489
+ return cached
490
+ end
491
+
492
+ s0, i0 = [], index
493
+ loop do
494
+ if has_terminal?('\G[^{]', true, index)
495
+ r1 = true
496
+ @index += 1
497
+ else
498
+ r1 = nil
499
+ end
500
+ if r1
501
+ s0 << r1
502
+ else
503
+ break
504
+ end
505
+ end
506
+ if s0.empty?
507
+ @index = i0
508
+ r0 = nil
509
+ else
510
+ r0 = instantiate_node(Tumblargh::Node::Literal,input, i0...index, s0)
511
+ end
512
+
513
+ node_cache[:literal][start_index] = r0
514
+
515
+ r0
516
+ end
517
+
518
+ def _nt_space
519
+ start_index = index
520
+ if node_cache[:space].has_key?(index)
521
+ cached = node_cache[:space][index]
522
+ if cached
523
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
524
+ @index = cached.interval.end
525
+ end
526
+ return cached
527
+ end
528
+
529
+ s0, i0 = [], index
530
+ loop do
531
+ if has_terminal?('\G[\\s]', true, index)
532
+ r1 = true
533
+ @index += 1
534
+ else
535
+ r1 = nil
536
+ end
537
+ if r1
538
+ s0 << r1
539
+ else
540
+ break
541
+ end
542
+ end
543
+ if s0.empty?
544
+ @index = i0
545
+ r0 = nil
546
+ else
547
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
548
+ end
549
+
550
+ node_cache[:space][start_index] = r0
551
+
552
+ r0
553
+ end
554
+
555
+ end
556
+
557
+ class TumblrParser < Treetop::Runtime::CompiledParser
558
+ include Tumblr
559
+ end
560
+