arti_mark 0.0.1.beta4 → 0.1.beta1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +2 -2
- data/Rakefile +10 -0
- data/arti_mark.gemspec +4 -2
- data/lib/arti_mark/block_image_parser.rb +2 -2
- data/lib/arti_mark/{context.rb → html/context.rb} +6 -1
- data/lib/arti_mark/html/generator.rb +159 -0
- data/lib/arti_mark/html/header_writer.rb +32 -0
- data/lib/arti_mark/html/result.rb +27 -0
- data/lib/arti_mark/html/tag_writer.rb +110 -0
- data/lib/arti_mark/html/util.rb +12 -0
- data/lib/arti_mark/html/writer_selector.rb +24 -0
- data/lib/arti_mark/parser.kpeg +97 -0
- data/lib/arti_mark/parser.kpeg.rb +2533 -0
- data/lib/arti_mark/parser.rb +31 -0
- data/lib/arti_mark/version.rb +1 -1
- data/lib/arti_mark.rb +10 -21
- data/spec/arti_mark_spec.rb +108 -218
- metadata +40 -17
- data/lib/arti_mark/result.rb +0 -25
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'arti_mark/parser.kpeg'
|
2
|
+
|
3
|
+
module ArtiMark
|
4
|
+
class Parser
|
5
|
+
def create_item(type, command, children = [], raw: nil)
|
6
|
+
children[0].sub!(/^[[:space:]]+/, '') if !children.nil? && children[0].is_a?(String)
|
7
|
+
item = {:type => type, :children => children, :raw_text => raw }.merge command || {}
|
8
|
+
item[:args] ||= []
|
9
|
+
item[:named_args] = Hash[*(item[:args].select { |x| x.include?(':') }.map { |x| v = x.split(':', 2); [v[0].strip.to_sym, v[1]]}.flatten)]
|
10
|
+
item
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse_text(content)
|
14
|
+
content.inject([]) do
|
15
|
+
|result, item|
|
16
|
+
if item.is_a? String
|
17
|
+
s = result.last
|
18
|
+
if s.is_a? String
|
19
|
+
result.pop
|
20
|
+
else
|
21
|
+
s = ''
|
22
|
+
end
|
23
|
+
result.push s + item
|
24
|
+
else
|
25
|
+
result.push item
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
data/lib/arti_mark/version.rb
CHANGED
data/lib/arti_mark.rb
CHANGED
@@ -15,47 +15,36 @@ require "arti_mark/unordered_list_parser"
|
|
15
15
|
require "arti_mark/definition_list_parser"
|
16
16
|
require "arti_mark/universal_block_parser"
|
17
17
|
require 'arti_mark/syntax'
|
18
|
-
|
19
|
-
require 'arti_mark/
|
18
|
+
|
19
|
+
require 'arti_mark/html/generator'
|
20
|
+
require 'arti_mark/parser'
|
20
21
|
|
21
22
|
module ArtiMark
|
22
23
|
class Document
|
23
24
|
def initialize(param = {})
|
24
|
-
@context = Context.new(param)
|
25
|
-
@syntax = Syntax.new
|
26
25
|
@preprocessors = [
|
27
26
|
Proc.new { |text| text.gsub(/\r?\n(\r?\n)+/, "\n\n") },
|
28
27
|
Proc.new { |text| text.strip.gsub(/ /, ' ') } # convert Japanese full-width spece to normal space
|
29
28
|
]
|
29
|
+
@generator = Html::Generator.new(param)
|
30
30
|
end
|
31
31
|
|
32
32
|
def preprocessor(&block)
|
33
33
|
@preprocessors << block
|
34
34
|
end
|
35
35
|
|
36
|
-
def parser(parser)
|
37
|
-
@syntax.append_parser(parser)
|
38
|
-
end
|
39
|
-
|
40
36
|
def convert(text)
|
41
37
|
@preprocessors.each {
|
42
38
|
|pr|
|
43
39
|
text = pr.call(text)
|
44
40
|
}
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
def toc
|
52
|
-
@context.toc
|
53
|
-
end
|
54
|
-
|
55
|
-
def process_lines(lines, context)
|
56
|
-
while (lines.size > 0)
|
57
|
-
@syntax.parse(lines, context)
|
41
|
+
@parser = Parser.new(text)
|
42
|
+
if (!@parser.parse)
|
43
|
+
puts @parser.show_error
|
44
|
+
exit -1
|
58
45
|
end
|
46
|
+
@generator.convert(@parser.result)
|
47
|
+
|
59
48
|
end
|
60
49
|
|
61
50
|
end
|
data/spec/arti_mark_spec.rb
CHANGED
@@ -23,7 +23,6 @@ describe ArtiMark do
|
|
23
23
|
converted = artimark.convert(text)
|
24
24
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
25
25
|
expect(body.element_children.size).to eq 2
|
26
|
-
|
27
26
|
expect(body.element_children[0].selector_and_children).to eq(
|
28
27
|
['div.pgroup',
|
29
28
|
['p', 'ここから、パラグラフがはじまります。'],
|
@@ -72,33 +71,34 @@ describe ArtiMark do
|
|
72
71
|
)
|
73
72
|
end
|
74
73
|
|
75
|
-
it 'should convert div
|
76
|
-
text = "d {
|
74
|
+
it 'should convert div without pgroup' do
|
75
|
+
text = "d(wo-pgroup) {\n1st line. \n}"
|
77
76
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
78
77
|
converted = artimark.convert(text)
|
79
78
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
80
79
|
expect(body.element_children[0].selector_and_children).to eq(
|
81
80
|
['div',
|
82
|
-
['div.pgroup',
|
83
81
|
['p', '1st line.']
|
84
|
-
]
|
85
82
|
]
|
86
83
|
)
|
87
84
|
end
|
88
|
-
|
89
|
-
|
85
|
+
|
86
|
+
it 'should nest div without pgroup' do
|
87
|
+
text = "d(wo-pgroup) {\nd {\nnested.\n} \n}"
|
90
88
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
91
89
|
converted = artimark.convert(text)
|
92
90
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
93
91
|
expect(body.element_children[0].selector_and_children).to eq(
|
94
92
|
['div',
|
95
|
-
|
93
|
+
['div',
|
94
|
+
['p', 'nested.']
|
95
|
+
]
|
96
96
|
]
|
97
97
|
)
|
98
98
|
end
|
99
99
|
|
100
|
-
it 'should nest div without pgroup' do
|
101
|
-
text = "d(wo-pgroup) {\nd {\nnested.\n} \n}"
|
100
|
+
it 'should nest div without pgroup and with pgroup' do
|
101
|
+
text = "d(wo-pgroup) {\nd {\nnested.\n} \n}\nd {\nin pgroup\n}"
|
102
102
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
103
103
|
converted = artimark.convert(text)
|
104
104
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
@@ -107,10 +107,16 @@ describe ArtiMark do
|
|
107
107
|
['div',
|
108
108
|
['p', 'nested.']
|
109
109
|
]
|
110
|
-
]
|
111
|
-
)
|
110
|
+
])
|
111
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
112
|
+
['div',
|
113
|
+
['div.pgroup',
|
114
|
+
['p', 'in pgroup']
|
115
|
+
]
|
116
|
+
])
|
112
117
|
end
|
113
118
|
|
119
|
+
|
114
120
|
it 'should convert div with class' do
|
115
121
|
text = "d.preface-one {\n h1: title.\n}"
|
116
122
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -124,7 +130,7 @@ describe ArtiMark do
|
|
124
130
|
end
|
125
131
|
|
126
132
|
it 'should convert div with id and class' do
|
127
|
-
text = "d#thecontents.preface-one {\
|
133
|
+
text = "d#thecontents.preface-one {\nh1: title.\n}"
|
128
134
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
129
135
|
converted = artimark.convert(text)
|
130
136
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
@@ -156,52 +162,7 @@ describe ArtiMark do
|
|
156
162
|
]
|
157
163
|
)
|
158
164
|
end
|
159
|
-
|
160
|
-
it 'should convert nested div with alternate style inside' do
|
161
|
-
text = "d.preface {\n outer div. \n d.nested {---\n nested!\n---}\nouter div again.\n}"
|
162
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
163
|
-
converted = artimark.convert(text)
|
164
|
-
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
165
|
-
expect(body.element_children[0].selector_and_children).to eq(
|
166
|
-
['div.preface',
|
167
|
-
['div.pgroup',
|
168
|
-
['p', 'outer div.']
|
169
|
-
],
|
170
|
-
['div.nested',
|
171
|
-
['div.pgroup',
|
172
|
-
['p', 'nested!']
|
173
|
-
]
|
174
|
-
],
|
175
|
-
['div.pgroup',
|
176
|
-
['p', 'outer div again.']
|
177
|
-
],
|
178
|
-
]
|
179
|
-
)
|
180
|
-
end
|
181
165
|
|
182
|
-
it 'should convert nested div with alternate style outside' do
|
183
|
-
text = "d.preface {---\n outer div. \n}\nyou can write curly brace as above.\nd.nested {\n nested!\n}\nouter div again.\n---}"
|
184
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
185
|
-
converted = artimark.convert(text)
|
186
|
-
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
187
|
-
expect(body.element_children[0].selector_and_children).to eq(
|
188
|
-
['div.preface',
|
189
|
-
['div.pgroup',
|
190
|
-
['p', 'outer div.'],
|
191
|
-
['p', '}'],
|
192
|
-
['p', 'you can write curly brace as above.']
|
193
|
-
],
|
194
|
-
['div.nested',
|
195
|
-
['div.pgroup',
|
196
|
-
['p', 'nested!']
|
197
|
-
]
|
198
|
-
],
|
199
|
-
['div.pgroup',
|
200
|
-
['p', 'outer div again.']
|
201
|
-
],
|
202
|
-
]
|
203
|
-
)
|
204
|
-
end
|
205
166
|
it 'should convert article' do
|
206
167
|
text = "art {\n in the article.\n}"
|
207
168
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -252,6 +213,22 @@ describe ArtiMark do
|
|
252
213
|
)
|
253
214
|
end
|
254
215
|
|
216
|
+
it 'should handle block image without caption' do
|
217
|
+
text = "this is normal line.\nimage(./image1.jpg, alt text):"
|
218
|
+
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
219
|
+
converted = artimark.convert(text)
|
220
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
221
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
222
|
+
['div.pgroup',
|
223
|
+
['p', 'this is normal line.']
|
224
|
+
]
|
225
|
+
)
|
226
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
227
|
+
['div.img-wrap',
|
228
|
+
["img[src='./image1.jpg'][alt='alt text']", '']
|
229
|
+
]
|
230
|
+
)
|
231
|
+
end
|
255
232
|
|
256
233
|
it 'should handle page change article' do
|
257
234
|
text = "this is start.\nnewpage(page changed):\nthis is second page.\nnewpage:\nand the third."
|
@@ -295,7 +272,7 @@ describe ArtiMark do
|
|
295
272
|
end
|
296
273
|
|
297
274
|
it 'should handle link' do
|
298
|
-
text = "link to [link(http://github.com/skoji/artimark){artimark repository}]. \ncan you see this?"
|
275
|
+
text = " link to [link(http://github.com/skoji/artimark){artimark repository}]. \ncan you see this?"
|
299
276
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
300
277
|
converted = artimark.convert(text)
|
301
278
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
@@ -310,6 +287,7 @@ describe ArtiMark do
|
|
310
287
|
]
|
311
288
|
)
|
312
289
|
end
|
290
|
+
|
313
291
|
it 'should handle link with l' do
|
314
292
|
text = "link to [l(http://github.com/skoji/artimark){artimark repository}]. \ncan you see this?"
|
315
293
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -326,6 +304,7 @@ describe ArtiMark do
|
|
326
304
|
]
|
327
305
|
)
|
328
306
|
end
|
307
|
+
|
329
308
|
it 'should handle custom paragraph' do
|
330
309
|
text = "this is normal line.\np.custom: this text is in custom class."
|
331
310
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -338,6 +317,7 @@ describe ArtiMark do
|
|
338
317
|
]
|
339
318
|
)
|
340
319
|
end
|
320
|
+
|
341
321
|
it 'should handle span' do
|
342
322
|
text = "p.custom: this text is in [s.keyword{custom}] class."
|
343
323
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -349,6 +329,7 @@ describe ArtiMark do
|
|
349
329
|
]]
|
350
330
|
)
|
351
331
|
end
|
332
|
+
|
352
333
|
it 'should handle any block' do
|
353
334
|
text = "this is normal line.\ncite {\n this block should be in cite. \n}"
|
354
335
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -367,15 +348,16 @@ describe ArtiMark do
|
|
367
348
|
]
|
368
349
|
)
|
369
350
|
end
|
351
|
+
|
370
352
|
it 'should handle inline image' do
|
371
|
-
text = "simple image [img(
|
353
|
+
text = "simple image [img(./image1.jpg, alt)]."
|
372
354
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
373
355
|
converted = artimark.convert(text)
|
374
356
|
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
375
357
|
expect(body.element_children[0].selector_and_children).to eq(
|
376
358
|
['div.pgroup',
|
377
359
|
['p',
|
378
|
-
'simple image ', ["img[src='./image1.jpg'][alt='
|
360
|
+
'simple image ', ["img[src='./image1.jpg'][alt='alt']", ''], '.']]
|
379
361
|
)
|
380
362
|
end
|
381
363
|
|
@@ -390,28 +372,6 @@ describe ArtiMark do
|
|
390
372
|
)
|
391
373
|
end
|
392
374
|
|
393
|
-
it 'should generate toc: with newpage parameter' do
|
394
|
-
text = "newpage(1st chapter):\n1st chapter.\nnewpage(2nd chapter):\n2nd chapger.\nnewpage: 2nd chapter continued.\nnewpage(3rd chapter):\n3rd chapter."
|
395
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
396
|
-
artimark.convert(text)
|
397
|
-
toc = artimark.toc
|
398
|
-
expect(toc[0]).to eq('1st chapter')
|
399
|
-
expect(toc[1]).to eq('2nd chapter')
|
400
|
-
expect(toc[2]).to be_nil
|
401
|
-
expect(toc[3]).to eq('3rd chapter')
|
402
|
-
end
|
403
|
-
|
404
|
-
it 'should generate toc with h parameter' do
|
405
|
-
text = "newpage:\nh1(in-toc): 1st chapter\n content.\nnewpage:\nh1(in-toc): 2nd chapter\ncontent.\nnewpage: 2nd chapter continued.\nnewpage:\nh1(in-toc): 3rd chapter\n content."
|
406
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
407
|
-
artimark.convert(text)
|
408
|
-
toc = artimark.toc
|
409
|
-
expect(toc[0]).to eq('1st chapter')
|
410
|
-
expect(toc[1]).to eq('2nd chapter')
|
411
|
-
expect(toc[2]).to be_nil
|
412
|
-
expect(toc[3]).to eq('3rd chapter')
|
413
|
-
end
|
414
|
-
|
415
375
|
it 'should convert inline command within line block' do
|
416
376
|
text = "h1: [tcy{20}]縦中横タイトル"
|
417
377
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -424,19 +384,14 @@ describe ArtiMark do
|
|
424
384
|
text = "[ruby(とんぼ){蜻蛉}]の[ruby(めがね){眼鏡}]はみずいろめがね"
|
425
385
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
426
386
|
converted = artimark.convert(text)
|
427
|
-
|
428
|
-
expect(
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
expect(r.shift.strip).to eq('<body>')
|
434
|
-
expect(r.shift.strip).to eq("<div class='pgroup'>")
|
435
|
-
expect(r.shift.strip).to eq("<p><ruby>蜻蛉<rp>(</rp><rt>とんぼ</rt><rp>)</rp></ruby>の<ruby>眼鏡<rp>(</rp><rt>めがね</rt><rp>)</rp></ruby>はみずいろめがね</p>")
|
436
|
-
expect(r.shift.strip).to eq("</div>")
|
437
|
-
expect(r.shift.strip).to eq("</body>")
|
438
|
-
expect(r.shift.strip).to eq("</html>")
|
387
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
388
|
+
expect(body.element_children[0].selector_and_children).to eq ['div.pgroup', ['p',
|
389
|
+
['ruby', '蜻蛉', ['rp','('],['rt','とんぼ'],['rp', ')']],
|
390
|
+
'の',
|
391
|
+
['ruby', '眼鏡', ['rp','('],['rt','めがね'],['rp', ')']],
|
392
|
+
'はみずいろめがね']]
|
439
393
|
end
|
394
|
+
|
440
395
|
it 'should handle tatechuyoko' do
|
441
396
|
text = "[tcy{10}]年前のことだった"
|
442
397
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -452,92 +407,79 @@ describe ArtiMark do
|
|
452
407
|
text = "this is normal line.\n1: for the 1st.\n2: secondly, blah.\n3: and last...\nthe ordered list ends."
|
453
408
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
454
409
|
converted = artimark.convert(text)
|
455
|
-
|
456
|
-
expect(
|
457
|
-
expect(
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
expect(
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
expect(
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
expect(r.shift.strip).to eq("<p>the ordered list ends.</p>")
|
472
|
-
expect(r.shift.strip).to eq("</div>")
|
473
|
-
expect(r.shift.strip).to eq("</body>")
|
474
|
-
expect(r.shift.strip).to eq("</html>")
|
410
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
411
|
+
expect(body.element_children.size).to eq 3
|
412
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
413
|
+
['div.pgroup',
|
414
|
+
['p', 'this is normal line.']
|
415
|
+
])
|
416
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
417
|
+
['ol',
|
418
|
+
['li', 'for the 1st.'],
|
419
|
+
['li', 'secondly, blah.'],
|
420
|
+
['li', 'and last...']
|
421
|
+
])
|
422
|
+
expect(body.element_children[2].selector_and_children).to eq(
|
423
|
+
['div.pgroup',
|
424
|
+
['p', 'the ordered list ends.']
|
425
|
+
])
|
475
426
|
end
|
427
|
+
|
476
428
|
it 'should handle unordered list ' do
|
477
429
|
text = "this is normal line.\n*: for the 1st.\n*: secondly, blah.\n*: and last...\nthe ordered list ends."
|
478
430
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
479
431
|
converted = artimark.convert(text)
|
480
|
-
|
481
|
-
expect(
|
482
|
-
expect(
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
expect(
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
expect(
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
expect(r.shift.strip).to eq("<p>the ordered list ends.</p>")
|
497
|
-
expect(r.shift.strip).to eq("</div>")
|
498
|
-
expect(r.shift.strip).to eq("</body>")
|
499
|
-
expect(r.shift.strip).to eq("</html>")
|
432
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
433
|
+
expect(body.element_children.size).to eq 3
|
434
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
435
|
+
['div.pgroup',
|
436
|
+
['p', 'this is normal line.']
|
437
|
+
])
|
438
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
439
|
+
['ul',
|
440
|
+
['li', 'for the 1st.'],
|
441
|
+
['li', 'secondly, blah.'],
|
442
|
+
['li', 'and last...']
|
443
|
+
])
|
444
|
+
expect(body.element_children[2].selector_and_children).to eq(
|
445
|
+
['div.pgroup',
|
446
|
+
['p', 'the ordered list ends.']
|
447
|
+
])
|
500
448
|
end
|
449
|
+
|
501
450
|
it 'should handle definition list ' do
|
502
451
|
text = "this is normal line.\n;: 1st : this is the first definition\n;: 2nd : blah :blah.\n;: 3rd: this term is the last.\nthe list ends."
|
503
452
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
504
453
|
converted = artimark.convert(text)
|
505
|
-
|
506
|
-
expect(
|
507
|
-
expect(
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
expect(
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
expect(
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
expect(r.shift.strip).to eq("<p>the list ends.</p>")
|
522
|
-
expect(r.shift.strip).to eq("</div>")
|
523
|
-
expect(r.shift.strip).to eq("</body>")
|
524
|
-
expect(r.shift.strip).to eq("</html>")
|
454
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
455
|
+
expect(body.element_children.size).to eq 3
|
456
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
457
|
+
['div.pgroup',
|
458
|
+
['p', 'this is normal line.']
|
459
|
+
])
|
460
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
461
|
+
['dl',
|
462
|
+
['dt', '1st'],['dd', 'this is the first definition'],
|
463
|
+
['dt', '2nd'],['dd', 'blah :blah.'],
|
464
|
+
['dt', '3rd'],['dd', 'this term is the last.'],
|
465
|
+
])
|
466
|
+
expect(body.element_children[2].selector_and_children).to eq(
|
467
|
+
['div.pgroup',
|
468
|
+
['p', 'the list ends.']
|
469
|
+
])
|
525
470
|
end
|
526
471
|
|
527
472
|
it 'should escape html' do
|
528
|
-
text = ";:definition
|
473
|
+
text = ";:definition<div>:</div>&"
|
529
474
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
530
475
|
converted = artimark.convert(text)
|
531
|
-
|
532
|
-
expect(
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
expect(r.shift.strip).to eq('</head>')
|
537
|
-
expect(r.shift.strip).to eq('<body>')
|
538
|
-
expect(r.shift.strip).to eq('<dl>')
|
539
|
-
expect(r.shift.strip).to eq('<dt>definition<></dt><dd><>&</dd>')
|
476
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
477
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
478
|
+
['dl',
|
479
|
+
['dt', 'definition<div>'],['dd', '</div>&']
|
480
|
+
])
|
540
481
|
end
|
482
|
+
|
541
483
|
it 'should specify stylesheets' do
|
542
484
|
text = "stylesheets:css/default.css, css/specific.css, css/iphone.css:(only screen and (min-device-width : 320px) and (max-device-width : 480px))\n\ntext."
|
543
485
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -571,6 +513,7 @@ describe ArtiMark do
|
|
571
513
|
expect(root['lang']).to eq 'ja'
|
572
514
|
end
|
573
515
|
|
516
|
+
|
574
517
|
it 'should ignore comments' do
|
575
518
|
text = "#この行はコメントです\nここから、パラグラフがはじまります。\n#これもコメント\n「二行目です。」\n三行目です。\n\n#これもコメント\n\n ここから、次のパラグラフです。"
|
576
519
|
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
@@ -607,58 +550,5 @@ describe ArtiMark do
|
|
607
550
|
]
|
608
551
|
)
|
609
552
|
end
|
610
|
-
it 'should handle custom block parser' do
|
611
|
-
class TheParser
|
612
|
-
include ArtiMark::BaseParser
|
613
|
-
def accept?(lines)
|
614
|
-
lex_line_command(lines[0])[:cmd] =~ /svg/
|
615
|
-
end
|
616
|
-
def parse(lines, r, syntax)
|
617
|
-
lexed = lex_line_command(lines[0])
|
618
|
-
lines.shift
|
619
|
-
src = lexed[:params][0].strip
|
620
|
-
caption = lexed[:text].strip
|
621
|
-
r << "<div><svg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' width='100%' height='100%' viewBox='0 0 200 200' ><image xlink:href='#{src}' /><p>#{caption}</p></sgv></div>"
|
622
|
-
end
|
623
|
-
end
|
624
|
-
text="svg(img.jpg):caption"
|
625
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
626
|
-
artimark.parser(TheParser.new)
|
627
|
-
converted = artimark.convert(text)
|
628
|
-
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
629
|
-
expect(body.element_children[0].selector_and_children).to eq(
|
630
|
-
['div',
|
631
|
-
["svg[version='1.1'][width='100%'][height='100%'][viewBox='0 0 200 200']", ["image[href='img.jpg']", ''], ['p', 'caption']]
|
632
|
-
]
|
633
|
-
)
|
634
|
-
end
|
635
|
-
it 'should handle custom block parser with named param' do
|
636
|
-
class TheParser
|
637
|
-
include ArtiMark::BaseParser
|
638
|
-
def accept?(lines)
|
639
|
-
lex_line_command(lines[0])[:cmd] =~ /svg/
|
640
|
-
end
|
641
|
-
def parse(lines, r, syntax)
|
642
|
-
lexed = lex_line_command(lines[0])
|
643
|
-
lines.shift
|
644
|
-
src = lexed[:params][0].strip
|
645
|
-
width = lexed[:named_params][:width]
|
646
|
-
height = lexed[:named_params][:height]
|
647
|
-
caption = lexed[:text].strip
|
648
|
-
r << "<div><svg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' width='100%' height='100%' viewBox='0 0 200 200' ><image xlink:href='#{src}' width='#{width}' height='#{height}' /><p>#{caption}</p></sgv></div>"
|
649
|
-
end
|
650
|
-
end
|
651
|
-
text="svg(img.jpg, width:200, height:200):caption"
|
652
|
-
artimark = ArtiMark::Document.new(:lang => 'ja', :title => 'the document title')
|
653
|
-
artimark.parser(TheParser.new)
|
654
|
-
converted = artimark.convert(text)
|
655
|
-
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
656
|
-
expect(body.element_children[0].selector_and_children).to eq(
|
657
|
-
['div',
|
658
|
-
["svg[version='1.1'][width='100%'][height='100%'][viewBox='0 0 200 200']", ["image[href='img.jpg'][width='200'][height='200']", ''], ['p', 'caption']]
|
659
|
-
]
|
660
|
-
)
|
661
|
-
end
|
662
553
|
end
|
663
554
|
end
|
664
|
-
|