zotica 1.0.0 → 1.0.1
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/source/zotica/builder.rb +141 -149
- data/source/zotica/parser.rb +82 -84
- data/source/zotica/resource/style/math.scss +6 -0
- data/source/zotica.rb +11 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46424f38382db4c95bd3a2a11ea8a51702749b173031b9c3a5ea34db5236e410
|
4
|
+
data.tar.gz: e31907a1bbe6768ab69fd8341e461c94f0889bdb78616ec5fbc77bb858c2252a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e0f6c7468c73604664eca91f23c8a9e9ac26edde468b20c0dadaee5ed1c32682478cdc688d58ef37cc6e17914eee1897b312ad73c344b0be5c88a06a659e3a5
|
7
|
+
data.tar.gz: 9c5a39b83b6c6d39650836d89915b26f5f09713f03b9c7c85627f5fef310a52decaaacd55c2456e3f34e49d5baa46d0dec904afaf4133d31e841d2d3e424c5ef
|
data/source/zotica/builder.rb
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
require 'pp'
|
6
|
-
require 'rexml/document'
|
7
|
-
require 'sassc'
|
8
|
-
require 'ttfunk'
|
9
|
-
include REXML
|
10
|
-
|
11
|
-
|
12
|
-
module ZoticaBuilder
|
4
|
+
module Zenithal::ZoticaBuilder
|
13
5
|
|
14
6
|
DATA_PATH = "resource/math.json"
|
15
7
|
COMMON_STYLE_PATH = "resource/style/math.scss"
|
@@ -36,7 +28,7 @@ module ZoticaBuilder
|
|
36
28
|
|
37
29
|
def apply_options(nodes, options)
|
38
30
|
nodes.each do |node|
|
39
|
-
if node.is_a?(Element) && options[:role]
|
31
|
+
if node.is_a?(REXML::Element) && options[:role]
|
40
32
|
classes = node["class"].split(" ") - ROLES
|
41
33
|
classes << options[:role]
|
42
34
|
node["class"] = classes.join(" ")
|
@@ -62,9 +54,9 @@ module ZoticaBuilder
|
|
62
54
|
end
|
63
55
|
|
64
56
|
def build_number(text, options = {})
|
65
|
-
this = Nodes[]
|
57
|
+
this = REXML::Nodes[]
|
66
58
|
element = nil
|
67
|
-
this << Element.build("math-n") do |this|
|
59
|
+
this << REXML::Element.build("math-n") do |this|
|
68
60
|
this << ~text
|
69
61
|
element = this
|
70
62
|
end
|
@@ -84,10 +76,10 @@ module ZoticaBuilder
|
|
84
76
|
end
|
85
77
|
|
86
78
|
def build_identifier(text, types, options = {})
|
87
|
-
this = Nodes[]
|
79
|
+
this = REXML::Nodes[]
|
88
80
|
element = nil
|
89
81
|
font_type = (types.include?("alt")) ? "math" : "main"
|
90
|
-
this << Element.build("math-i") do |this|
|
82
|
+
this << REXML::Element.build("math-i") do |this|
|
91
83
|
this["class"] = types.join(" ")
|
92
84
|
this["data-cont"] = text
|
93
85
|
this << ~text
|
@@ -104,10 +96,10 @@ module ZoticaBuilder
|
|
104
96
|
end
|
105
97
|
|
106
98
|
def build_operator(symbol, types, options = {}, &block)
|
107
|
-
this = Nodes[]
|
99
|
+
this = REXML::Nodes[]
|
108
100
|
element = nil
|
109
101
|
font_type = (types.include?("txt")) ? "main" : "math"
|
110
|
-
this << Element.build("math-o") do |this|
|
102
|
+
this << REXML::Element.build("math-o") do |this|
|
111
103
|
this["class"] = types.join(" ")
|
112
104
|
this << ~symbol
|
113
105
|
element = this
|
@@ -136,8 +128,8 @@ module ZoticaBuilder
|
|
136
128
|
end
|
137
129
|
|
138
130
|
def build_strut(type, options = {})
|
139
|
-
this = Nodes[]
|
140
|
-
this << Element.build("math-strut") do |this|
|
131
|
+
this = REXML::Nodes[]
|
132
|
+
this << REXML::Element.build("math-strut") do |this|
|
141
133
|
if type == "upper" || type == "dupper"
|
142
134
|
this["style"] += "margin-bottom: -0.5em;"
|
143
135
|
elsif type == "dlower" || type == "dfull"
|
@@ -154,7 +146,7 @@ module ZoticaBuilder
|
|
154
146
|
top_margin = options[:fonts]&.dig(:main, "72", 1) || DEFAULT_FONTS.dig(:main, "72", 1)
|
155
147
|
this["style"] += "margin-top: #{top_margin}em;"
|
156
148
|
end
|
157
|
-
this << Element.build("math-text") do |this|
|
149
|
+
this << REXML::Element.build("math-text") do |this|
|
158
150
|
this["style"] += "line-height: 1;"
|
159
151
|
this << ~" "
|
160
152
|
end
|
@@ -164,24 +156,24 @@ module ZoticaBuilder
|
|
164
156
|
end
|
165
157
|
|
166
158
|
def build_subsuper(options = {}, &block)
|
167
|
-
this = Nodes[]
|
159
|
+
this = REXML::Nodes[]
|
168
160
|
base_element, sub_element, super_element, left_sub_element, left_super_element = nil
|
169
161
|
main_element = nil
|
170
|
-
this << Element.build("math-subsup") do |this|
|
162
|
+
this << REXML::Element.build("math-subsup") do |this|
|
171
163
|
main_element = this
|
172
|
-
this << Element.build("math-lsub") do |this|
|
164
|
+
this << REXML::Element.build("math-lsub") do |this|
|
173
165
|
left_sub_element = this
|
174
166
|
end
|
175
|
-
this << Element.build("math-lsup") do |this|
|
167
|
+
this << REXML::Element.build("math-lsup") do |this|
|
176
168
|
left_super_element = this
|
177
169
|
end
|
178
|
-
this << Element.build("math-base") do |this|
|
170
|
+
this << REXML::Element.build("math-base") do |this|
|
179
171
|
base_element = this
|
180
172
|
end
|
181
|
-
this << Element.build("math-sub") do |this|
|
173
|
+
this << REXML::Element.build("math-sub") do |this|
|
182
174
|
sub_element = this
|
183
175
|
end
|
184
|
-
this << Element.build("math-sup") do |this|
|
176
|
+
this << REXML::Element.build("math-sup") do |this|
|
185
177
|
super_element = this
|
186
178
|
end
|
187
179
|
end
|
@@ -208,19 +200,19 @@ module ZoticaBuilder
|
|
208
200
|
end
|
209
201
|
|
210
202
|
def build_underover(options = {}, &block)
|
211
|
-
this = Nodes[]
|
203
|
+
this = REXML::Nodes[]
|
212
204
|
base_element, under_element, over_element = nil
|
213
205
|
main_element = nil
|
214
|
-
this << Element.build("math-underover") do |this|
|
206
|
+
this << REXML::Element.build("math-underover") do |this|
|
215
207
|
main_element = this
|
216
|
-
this << Element.build("math-over") do |this|
|
208
|
+
this << REXML::Element.build("math-over") do |this|
|
217
209
|
over_element = this
|
218
210
|
end
|
219
|
-
this << Element.build("math-basewrap") do |this|
|
220
|
-
this << Element.build("math-base") do |this|
|
211
|
+
this << REXML::Element.build("math-basewrap") do |this|
|
212
|
+
this << REXML::Element.build("math-base") do |this|
|
221
213
|
base_element = this
|
222
214
|
end
|
223
|
-
this << Element.build("math-under") do |this|
|
215
|
+
this << REXML::Element.build("math-under") do |this|
|
224
216
|
under_element = this
|
225
217
|
end
|
226
218
|
end
|
@@ -242,15 +234,15 @@ module ZoticaBuilder
|
|
242
234
|
end
|
243
235
|
|
244
236
|
def build_fraction(options = {}, &block)
|
245
|
-
this = Nodes[]
|
237
|
+
this = REXML::Nodes[]
|
246
238
|
numerator_element, denominator_element = nil
|
247
|
-
this << Element.build("math-frac") do |this|
|
248
|
-
this << Element.build("math-num") do |this|
|
239
|
+
this << REXML::Element.build("math-frac") do |this|
|
240
|
+
this << REXML::Element.build("math-num") do |this|
|
249
241
|
numerator_element = this
|
250
242
|
end
|
251
|
-
this << Element.build("math-denwrap") do |this|
|
252
|
-
this << Element.new("math-line")
|
253
|
-
this << Element.build("math-den") do |this|
|
243
|
+
this << REXML::Element.build("math-denwrap") do |this|
|
244
|
+
this << REXML::Element.new("math-line")
|
245
|
+
this << REXML::Element.build("math-den") do |this|
|
254
246
|
denominator_element = this
|
255
247
|
end
|
256
248
|
end
|
@@ -273,22 +265,22 @@ module ZoticaBuilder
|
|
273
265
|
end
|
274
266
|
|
275
267
|
def build_radical(symbol, modify, options = {}, &block)
|
276
|
-
this = Nodes[]
|
268
|
+
this = REXML::Nodes[]
|
277
269
|
content_element, index_element = nil
|
278
|
-
this << Element.build("math-rad") do |this|
|
270
|
+
this << REXML::Element.build("math-rad") do |this|
|
279
271
|
if modify
|
280
272
|
this["class"] = "mod"
|
281
273
|
end
|
282
|
-
this << Element.build("math-index") do |this|
|
274
|
+
this << REXML::Element.build("math-index") do |this|
|
283
275
|
index_element = this
|
284
276
|
end
|
285
|
-
this << Element.build("math-sqrt") do |this|
|
286
|
-
this << Element.build("math-surd") do |this|
|
287
|
-
this << Element.build("math-o") do |this|
|
288
|
-
this << Text.new(symbol, true, nil, false)
|
277
|
+
this << REXML::Element.build("math-sqrt") do |this|
|
278
|
+
this << REXML::Element.build("math-surd") do |this|
|
279
|
+
this << REXML::Element.build("math-o") do |this|
|
280
|
+
this << REXML::Text.new(symbol, true, nil, false)
|
289
281
|
end
|
290
282
|
end
|
291
|
-
this << Element.build("math-cont") do |this|
|
283
|
+
this << REXML::Element.build("math-cont") do |this|
|
292
284
|
content_element = this
|
293
285
|
end
|
294
286
|
end
|
@@ -313,26 +305,26 @@ module ZoticaBuilder
|
|
313
305
|
end
|
314
306
|
|
315
307
|
def build_fence(left_kind, right_kind, left_symbol, right_symbol, modify, options = {}, &block)
|
316
|
-
this = Nodes[]
|
308
|
+
this = REXML::Nodes[]
|
317
309
|
content_element = nil
|
318
|
-
this << Element.build("math-fence") do |this|
|
310
|
+
this << REXML::Element.build("math-fence") do |this|
|
319
311
|
this["class"] = "par"
|
320
312
|
if modify
|
321
313
|
this["class"] = [*this["class"].split(" "), "mod"].join(" ")
|
322
314
|
this["data-left"] = left_kind
|
323
315
|
this["data-right"] = right_kind
|
324
316
|
end
|
325
|
-
this << Element.build("math-left") do |this|
|
326
|
-
this << Element.build("math-o") do |this|
|
327
|
-
this << Text.new(left_symbol, true, nil, false)
|
317
|
+
this << REXML::Element.build("math-left") do |this|
|
318
|
+
this << REXML::Element.build("math-o") do |this|
|
319
|
+
this << REXML::Text.new(left_symbol, true, nil, false)
|
328
320
|
end
|
329
321
|
end
|
330
|
-
this << Element.build("math-cont") do |this|
|
322
|
+
this << REXML::Element.build("math-cont") do |this|
|
331
323
|
content_element = this
|
332
324
|
end
|
333
|
-
this << Element.build("math-right") do |this|
|
334
|
-
this << Element.build("math-o") do |this|
|
335
|
-
this << Text.new(right_symbol, true, nil, false)
|
325
|
+
this << REXML::Element.build("math-right") do |this|
|
326
|
+
this << REXML::Element.build("math-o") do |this|
|
327
|
+
this << REXML::Text.new(right_symbol, true, nil, false)
|
336
328
|
end
|
337
329
|
end
|
338
330
|
end
|
@@ -342,9 +334,9 @@ module ZoticaBuilder
|
|
342
334
|
end
|
343
335
|
|
344
336
|
def build_set(left_kind, right_kind, center_kind, left_symbol, right_symbol, center_symbol, modify, options = {}, &block)
|
345
|
-
this = Nodes[]
|
337
|
+
this = REXML::Nodes[]
|
346
338
|
left_element, right_element = nil
|
347
|
-
this << Element.build("math-fence") do |this|
|
339
|
+
this << REXML::Element.build("math-fence") do |this|
|
348
340
|
this["class"] = "par"
|
349
341
|
if modify
|
350
342
|
this["class"] = [*this["class"].split(" "), "mod"].join(" ")
|
@@ -352,26 +344,26 @@ module ZoticaBuilder
|
|
352
344
|
this["data-right"] = right_kind
|
353
345
|
this["data-center"] = center_kind
|
354
346
|
end
|
355
|
-
this << Element.build("math-left") do |this|
|
356
|
-
this << Element.build("math-o") do |this|
|
357
|
-
this << Text.new(left_symbol, true, nil, false)
|
347
|
+
this << REXML::Element.build("math-left") do |this|
|
348
|
+
this << REXML::Element.build("math-o") do |this|
|
349
|
+
this << REXML::Text.new(left_symbol, true, nil, false)
|
358
350
|
end
|
359
351
|
end
|
360
|
-
this << Element.build("math-cont") do |this|
|
352
|
+
this << REXML::Element.build("math-cont") do |this|
|
361
353
|
left_element = this
|
362
354
|
end
|
363
|
-
this << Element.build("math-center") do |this|
|
355
|
+
this << REXML::Element.build("math-center") do |this|
|
364
356
|
this["class"] = "cpar"
|
365
|
-
this << Element.build("math-o") do |this|
|
366
|
-
this << Text.new(right_symbol, true, nil, false)
|
357
|
+
this << REXML::Element.build("math-o") do |this|
|
358
|
+
this << REXML::Text.new(right_symbol, true, nil, false)
|
367
359
|
end
|
368
360
|
end
|
369
|
-
this << Element.build("math-cont") do |this|
|
361
|
+
this << REXML::Element.build("math-cont") do |this|
|
370
362
|
right_element = this
|
371
363
|
end
|
372
|
-
this << Element.build("math-right") do |this|
|
373
|
-
this << Element.build("math-o") do |this|
|
374
|
-
this << Text.new(right_symbol, true, nil, false)
|
364
|
+
this << REXML::Element.build("math-right") do |this|
|
365
|
+
this << REXML::Element.build("math-o") do |this|
|
366
|
+
this << REXML::Text.new(right_symbol, true, nil, false)
|
375
367
|
end
|
376
368
|
end
|
377
369
|
end
|
@@ -387,27 +379,27 @@ module ZoticaBuilder
|
|
387
379
|
end
|
388
380
|
|
389
381
|
def build_integral(symbol, size, options = {}, &block)
|
390
|
-
this = Nodes[]
|
382
|
+
this = REXML::Nodes[]
|
391
383
|
base_element, sub_element, super_element = nil
|
392
|
-
this << Element.build("math-subsup") do |this|
|
384
|
+
this << REXML::Element.build("math-subsup") do |this|
|
393
385
|
this["class"] = "int"
|
394
386
|
unless size == "lrg"
|
395
387
|
this["class"] = [*this["class"].split(" "), size].join(" ")
|
396
388
|
end
|
397
|
-
this << Element.build("math-base") do |this|
|
389
|
+
this << REXML::Element.build("math-base") do |this|
|
398
390
|
base_element = this
|
399
|
-
this << Element.build("math-o") do |this|
|
391
|
+
this << REXML::Element.build("math-o") do |this|
|
400
392
|
this["class"] = "int"
|
401
393
|
unless size == "lrg"
|
402
394
|
this["class"] = [*this["class"].split(" "), size].join(" ")
|
403
395
|
end
|
404
|
-
this << Text.new(symbol, true, nil, false)
|
396
|
+
this << REXML::Text.new(symbol, true, nil, false)
|
405
397
|
end
|
406
398
|
end
|
407
|
-
this << Element.build("math-sub") do |this|
|
399
|
+
this << REXML::Element.build("math-sub") do |this|
|
408
400
|
sub_element = this
|
409
401
|
end
|
410
|
-
this << Element.build("math-sup") do |this|
|
402
|
+
this << REXML::Element.build("math-sup") do |this|
|
411
403
|
super_element = this
|
412
404
|
end
|
413
405
|
end
|
@@ -424,22 +416,22 @@ module ZoticaBuilder
|
|
424
416
|
end
|
425
417
|
|
426
418
|
def build_sum(symbol, size, options = {}, &block)
|
427
|
-
this = Nodes[]
|
419
|
+
this = REXML::Nodes[]
|
428
420
|
if size == "lrg"
|
429
421
|
under_element, over_element = nil
|
430
|
-
this << Element.build("math-underover") do |this|
|
422
|
+
this << REXML::Element.build("math-underover") do |this|
|
431
423
|
this["class"] = "sum"
|
432
|
-
this << Element.build("math-over") do |this|
|
424
|
+
this << REXML::Element.build("math-over") do |this|
|
433
425
|
over_element = this
|
434
426
|
end
|
435
|
-
this << Element.build("math-basewrap") do |this|
|
436
|
-
this << Element.build("math-base") do |this|
|
437
|
-
this << Element.build("math-o") do |this|
|
427
|
+
this << REXML::Element.build("math-basewrap") do |this|
|
428
|
+
this << REXML::Element.build("math-base") do |this|
|
429
|
+
this << REXML::Element.build("math-o") do |this|
|
438
430
|
this["class"] = "sum"
|
439
|
-
this << Text.new(symbol, true, nil, false)
|
431
|
+
this << REXML::Text.new(symbol, true, nil, false)
|
440
432
|
end
|
441
433
|
end
|
442
|
-
this << Element.build("math-under") do |this|
|
434
|
+
this << REXML::Element.build("math-under") do |this|
|
443
435
|
under_element = this
|
444
436
|
end
|
445
437
|
end
|
@@ -449,19 +441,19 @@ module ZoticaBuilder
|
|
449
441
|
modify_underover(under_element, over_element)
|
450
442
|
else
|
451
443
|
base_element, sub_element, super_element = nil
|
452
|
-
this << Element.build("math-subsup") do |this|
|
444
|
+
this << REXML::Element.build("math-subsup") do |this|
|
453
445
|
this["class"] = "sum inl"
|
454
|
-
this << Element.build("math-base") do |this|
|
446
|
+
this << REXML::Element.build("math-base") do |this|
|
455
447
|
base_element = this
|
456
|
-
this << Element.build("math-o") do |this|
|
448
|
+
this << REXML::Element.build("math-o") do |this|
|
457
449
|
this["class"] = "sum inl"
|
458
|
-
this << Text.new(symbol, true, nil, false)
|
450
|
+
this << REXML::Text.new(symbol, true, nil, false)
|
459
451
|
end
|
460
452
|
end
|
461
|
-
this << Element.build("math-sub") do |this|
|
453
|
+
this << REXML::Element.build("math-sub") do |this|
|
462
454
|
sub_element = this
|
463
455
|
end
|
464
|
-
this << Element.build("math-sup") do |this|
|
456
|
+
this << REXML::Element.build("math-sup") do |this|
|
465
457
|
super_element = this
|
466
458
|
end
|
467
459
|
end
|
@@ -473,31 +465,31 @@ module ZoticaBuilder
|
|
473
465
|
end
|
474
466
|
|
475
467
|
def build_accent(under_symbol, over_symbol, options = {}, &block)
|
476
|
-
this = Nodes[]
|
468
|
+
this = REXML::Nodes[]
|
477
469
|
base_element, under_element, over_element = nil
|
478
470
|
main_element = nil
|
479
|
-
this << Element.build("math-underover") do |this|
|
471
|
+
this << REXML::Element.build("math-underover") do |this|
|
480
472
|
main_element = this
|
481
473
|
this["class"] = "acc"
|
482
|
-
this << Element.build("math-over") do |this|
|
474
|
+
this << REXML::Element.build("math-over") do |this|
|
483
475
|
over_element = this
|
484
476
|
if over_symbol
|
485
|
-
this << Element.build("math-o") do |this|
|
477
|
+
this << REXML::Element.build("math-o") do |this|
|
486
478
|
this["class"] = "acc"
|
487
|
-
this << Text.new(over_symbol, true, nil, false)
|
479
|
+
this << REXML::Text.new(over_symbol, true, nil, false)
|
488
480
|
end
|
489
481
|
end
|
490
482
|
end
|
491
|
-
this << Element.build("math-basewrap") do |this|
|
492
|
-
this << Element.build("math-base") do |this|
|
483
|
+
this << REXML::Element.build("math-basewrap") do |this|
|
484
|
+
this << REXML::Element.build("math-base") do |this|
|
493
485
|
base_element = this
|
494
486
|
end
|
495
|
-
this << Element.build("math-under") do |this|
|
487
|
+
this << REXML::Element.build("math-under") do |this|
|
496
488
|
under_element = this
|
497
489
|
if under_symbol
|
498
|
-
this << Element.build("math-o") do |this|
|
490
|
+
this << REXML::Element.build("math-o") do |this|
|
499
491
|
this["class"] = "acc"
|
500
|
-
this << Text.new(under_symbol, true, nil, false)
|
492
|
+
this << REXML::Text.new(under_symbol, true, nil, false)
|
501
493
|
end
|
502
494
|
end
|
503
495
|
end
|
@@ -540,34 +532,34 @@ module ZoticaBuilder
|
|
540
532
|
end
|
541
533
|
|
542
534
|
def build_wide(kind, under_symbol, over_symbol, modify, options = {}, &block)
|
543
|
-
this = Nodes[]
|
535
|
+
this = REXML::Nodes[]
|
544
536
|
base_element, under_element, over_element = nil
|
545
537
|
main_element = nil
|
546
|
-
this << Element.build("math-underover") do |this|
|
538
|
+
this << REXML::Element.build("math-underover") do |this|
|
547
539
|
this["class"] = "wid"
|
548
540
|
if modify
|
549
541
|
this["class"] = [*this["class"].split(" "), "mod"].join(" ")
|
550
542
|
this["data-kind"] = kind
|
551
543
|
end
|
552
544
|
main_element = this
|
553
|
-
this << Element.build("math-over") do |this|
|
545
|
+
this << REXML::Element.build("math-over") do |this|
|
554
546
|
if over_symbol
|
555
|
-
this << Element.build("math-o") do |this|
|
547
|
+
this << REXML::Element.build("math-o") do |this|
|
556
548
|
this["class"] = "wid"
|
557
|
-
this << Text.new(over_symbol, true, nil, false)
|
549
|
+
this << REXML::Text.new(over_symbol, true, nil, false)
|
558
550
|
end
|
559
551
|
end
|
560
552
|
over_element = this
|
561
553
|
end
|
562
|
-
this << Element.build("math-basewrap") do |this|
|
563
|
-
this << Element.build("math-base") do |this|
|
554
|
+
this << REXML::Element.build("math-basewrap") do |this|
|
555
|
+
this << REXML::Element.build("math-base") do |this|
|
564
556
|
base_element = this
|
565
557
|
end
|
566
|
-
this << Element.build("math-under") do |this|
|
558
|
+
this << REXML::Element.build("math-under") do |this|
|
567
559
|
if under_symbol
|
568
|
-
this << Element.build("math-o") do |this|
|
560
|
+
this << REXML::Element.build("math-o") do |this|
|
569
561
|
this["class"] = "wid"
|
570
|
-
this << Text.new(under_symbol, true, nil, false)
|
562
|
+
this << REXML::Text.new(under_symbol, true, nil, false)
|
571
563
|
end
|
572
564
|
end
|
573
565
|
under_element = this
|
@@ -582,9 +574,9 @@ module ZoticaBuilder
|
|
582
574
|
end
|
583
575
|
|
584
576
|
def build_table(type, align_config, raw, options = {}, &block)
|
585
|
-
this = Nodes[]
|
577
|
+
this = REXML::Nodes[]
|
586
578
|
table_element = nil
|
587
|
-
this << Element.build("math-table") do |this|
|
579
|
+
this << REXML::Element.build("math-table") do |this|
|
588
580
|
this["class"] = type
|
589
581
|
table_element = this
|
590
582
|
end
|
@@ -595,9 +587,9 @@ module ZoticaBuilder
|
|
595
587
|
end
|
596
588
|
|
597
589
|
def build_diagram(vertical_gaps_string, horizontal_gaps_string, options = {}, &block)
|
598
|
-
this = Nodes[]
|
590
|
+
this = REXML::Nodes[]
|
599
591
|
table_element = nil
|
600
|
-
this << Element.build("math-diagram") do |this|
|
592
|
+
this << REXML::Element.build("math-diagram") do |this|
|
601
593
|
if vertical_gaps_string
|
602
594
|
this["class"] = [*this["class"].split(" "), "vnon"].join(" ")
|
603
595
|
end
|
@@ -674,9 +666,9 @@ module ZoticaBuilder
|
|
674
666
|
end
|
675
667
|
|
676
668
|
def build_table_cell(options = {}, &block)
|
677
|
-
this = Nodes[]
|
669
|
+
this = REXML::Nodes[]
|
678
670
|
cell_element = nil
|
679
|
-
this << Element.build("math-cell") do |this|
|
671
|
+
this << REXML::Element.build("math-cell") do |this|
|
680
672
|
cell_element = this
|
681
673
|
end
|
682
674
|
apply_options(this, options)
|
@@ -685,13 +677,13 @@ module ZoticaBuilder
|
|
685
677
|
end
|
686
678
|
|
687
679
|
def build_diagram_vertex(name, options = {}, &block)
|
688
|
-
this = Nodes[]
|
680
|
+
this = REXML::Nodes[]
|
689
681
|
vertex_element = nil
|
690
|
-
this << Element.build("math-cellwrap") do |this|
|
682
|
+
this << REXML::Element.build("math-cellwrap") do |this|
|
691
683
|
if name
|
692
684
|
this["data-name"] = name
|
693
685
|
end
|
694
|
-
this << Element.build("math-cell") do |this|
|
686
|
+
this << REXML::Element.build("math-cell") do |this|
|
695
687
|
vertex_element = this
|
696
688
|
end
|
697
689
|
end
|
@@ -701,9 +693,9 @@ module ZoticaBuilder
|
|
701
693
|
end
|
702
694
|
|
703
695
|
def build_arrow(name, configs, options = {}, &block)
|
704
|
-
this = Nodes[]
|
696
|
+
this = REXML::Nodes[]
|
705
697
|
label_element = nil
|
706
|
-
this << Element.build("math-arrow") do |this|
|
698
|
+
this << REXML::Element.build("math-arrow") do |this|
|
707
699
|
this["data-start"] = configs[:start_config]
|
708
700
|
this["data-end"] = configs[:end_config]
|
709
701
|
if configs[:tip_kinds]
|
@@ -741,9 +733,9 @@ module ZoticaBuilder
|
|
741
733
|
end
|
742
734
|
|
743
735
|
def build_tree(options = {}, &block)
|
744
|
-
this = Nodes[]
|
736
|
+
this = REXML::Nodes[]
|
745
737
|
content_element = nil
|
746
|
-
this << Element.build("math-tree") do |this|
|
738
|
+
this << REXML::Element.build("math-tree") do |this|
|
747
739
|
content_element = this
|
748
740
|
end
|
749
741
|
apply_options(this, options)
|
@@ -764,8 +756,8 @@ module ZoticaBuilder
|
|
764
756
|
left_label_element = child.get_elements("math-sys-llabel").first
|
765
757
|
right_label_element = child.get_elements("math-sys-rlabel").first
|
766
758
|
antecedent_elements = stack.pop(number)
|
767
|
-
inference_element = Element.build("math-infer") do |this|
|
768
|
-
this << Element.build("math-label") do |this|
|
759
|
+
inference_element = REXML::Element.build("math-infer") do |this|
|
760
|
+
this << REXML::Element.build("math-label") do |this|
|
769
761
|
if left_label_element.to_a.empty?
|
770
762
|
this["class"] = "non"
|
771
763
|
end
|
@@ -773,22 +765,22 @@ module ZoticaBuilder
|
|
773
765
|
this << each_element
|
774
766
|
end
|
775
767
|
end
|
776
|
-
this << Element.build("math-step") do |this|
|
777
|
-
this << Element.build("math-ant") do |this|
|
768
|
+
this << REXML::Element.build("math-step") do |this|
|
769
|
+
this << REXML::Element.build("math-ant") do |this|
|
778
770
|
antecedent_elements.each do |antecedent_element|
|
779
771
|
this << antecedent_element
|
780
772
|
end
|
781
773
|
end
|
782
|
-
this << Element.build("math-conwrap") do |this|
|
783
|
-
this << Element.new("math-line")
|
784
|
-
this << Element.build("math-con") do |this|
|
774
|
+
this << REXML::Element.build("math-conwrap") do |this|
|
775
|
+
this << REXML::Element.new("math-line")
|
776
|
+
this << REXML::Element.build("math-con") do |this|
|
785
777
|
this << ZoticaBuilder.build_strut("upper").first
|
786
778
|
this << ZoticaBuilder.build_strut("dlower").first
|
787
779
|
this << child.get_elements("math-cont").first
|
788
780
|
end
|
789
781
|
end
|
790
782
|
end
|
791
|
-
this << Element.build("math-label") do |this|
|
783
|
+
this << REXML::Element.build("math-label") do |this|
|
792
784
|
if right_label_element.to_a.empty?
|
793
785
|
this["class"] = "non"
|
794
786
|
end
|
@@ -807,9 +799,9 @@ module ZoticaBuilder
|
|
807
799
|
end
|
808
800
|
|
809
801
|
def build_tree_axiom(options = {}, &block)
|
810
|
-
this = Nodes[]
|
802
|
+
this = REXML::Nodes[]
|
811
803
|
content_element = nil
|
812
|
-
this << Element.build("math-axiom") do |this|
|
804
|
+
this << REXML::Element.build("math-axiom") do |this|
|
813
805
|
content_element = this
|
814
806
|
end
|
815
807
|
apply_options(this, options)
|
@@ -818,17 +810,17 @@ module ZoticaBuilder
|
|
818
810
|
end
|
819
811
|
|
820
812
|
def build_tree_inference(number, options = {}, &block)
|
821
|
-
this = Nodes[]
|
813
|
+
this = REXML::Nodes[]
|
822
814
|
content_element, right_label_element, left_label_element = nil
|
823
|
-
this << Element.build("math-sys-infer") do |this|
|
815
|
+
this << REXML::Element.build("math-sys-infer") do |this|
|
824
816
|
this["data-num"] = number.to_s
|
825
|
-
this << Element.build("math-cont") do |this|
|
817
|
+
this << REXML::Element.build("math-cont") do |this|
|
826
818
|
content_element = this
|
827
819
|
end
|
828
|
-
this << Element.build("math-sys-rlabel") do |this|
|
820
|
+
this << REXML::Element.build("math-sys-rlabel") do |this|
|
829
821
|
right_label_element = this
|
830
822
|
end
|
831
|
-
this << Element.build("math-sys-llabel") do |this|
|
823
|
+
this << REXML::Element.build("math-sys-llabel") do |this|
|
832
824
|
left_label_element = this
|
833
825
|
end
|
834
826
|
end
|
@@ -838,9 +830,9 @@ module ZoticaBuilder
|
|
838
830
|
end
|
839
831
|
|
840
832
|
def build_group(transform_configs, options = {}, &block)
|
841
|
-
this = Nodes[]
|
833
|
+
this = REXML::Nodes[]
|
842
834
|
content_element = nil
|
843
|
-
this << Element.build("math-group") do |this|
|
835
|
+
this << REXML::Element.build("math-group") do |this|
|
844
836
|
transforms = []
|
845
837
|
if transform_configs[:rotate]
|
846
838
|
transforms << "rotate(#{transform_configs[:rotate]}deg)"
|
@@ -856,8 +848,8 @@ module ZoticaBuilder
|
|
856
848
|
end
|
857
849
|
|
858
850
|
def build_space(type, options = {})
|
859
|
-
this = Nodes[]
|
860
|
-
this << Element.build("math-space") do |this|
|
851
|
+
this = REXML::Nodes[]
|
852
|
+
this << REXML::Element.build("math-space") do |this|
|
861
853
|
this["class"] = type
|
862
854
|
end
|
863
855
|
apply_options(this, options)
|
@@ -865,9 +857,9 @@ module ZoticaBuilder
|
|
865
857
|
end
|
866
858
|
|
867
859
|
def build_phantom(type, options = {}, &block)
|
868
|
-
this = Nodes[]
|
860
|
+
this = REXML::Nodes[]
|
869
861
|
content_element = nil
|
870
|
-
this << Element.build("math-phantom") do |this|
|
862
|
+
this << REXML::Element.build("math-phantom") do |this|
|
871
863
|
this["class"] = ["lpres", "rpres"].join(" ")
|
872
864
|
unless type == "bth"
|
873
865
|
this["class"] = [*this["class"].split(" "), type].join(" ")
|
@@ -880,9 +872,9 @@ module ZoticaBuilder
|
|
880
872
|
end
|
881
873
|
|
882
874
|
def build_text(text, options = {}, &block)
|
883
|
-
this = Nodes[]
|
884
|
-
this << Element.build("math-text") do |this|
|
885
|
-
this << Text.new(text, true, nil, false)
|
875
|
+
this = REXML::Nodes[]
|
876
|
+
this << REXML::Element.build("math-text") do |this|
|
877
|
+
this << REXML::Text.new(text, true, nil, false)
|
886
878
|
end
|
887
879
|
apply_options(this, options)
|
888
880
|
return this
|
@@ -901,7 +893,7 @@ module ZoticaBuilder
|
|
901
893
|
def create_script_string
|
902
894
|
dir = File.expand_path("../" + SCRIPT_DIR, __FILE__)
|
903
895
|
string = "const DATA = "
|
904
|
-
string << JSON.generate(ZoticaBuilder::DATA.slice("radical", "fence", "wide", "shift", "arrow"))
|
896
|
+
string << JSON.generate(Zenithal::ZoticaBuilder::DATA.slice("radical", "fence", "wide", "shift", "arrow"))
|
905
897
|
string << ";\n"
|
906
898
|
string << File.read(dir + "/main.js")
|
907
899
|
string << "\n"
|
@@ -949,10 +941,10 @@ module ZoticaBuilder
|
|
949
941
|
main_font_path = File.expand_path("../" + DEFAULT_FONT_PATHS[:main], __FILE__)
|
950
942
|
math_font_path = File.expand_path("../" + DEFAULT_FONT_PATHS[:math], __FILE__)
|
951
943
|
File.open(main_font_path, "w") do |file|
|
952
|
-
file.write(ZoticaBuilder.create_font_string(:main))
|
944
|
+
file.write(Zenithal::ZoticaBuilder.create_font_string(:main))
|
953
945
|
end
|
954
946
|
File.open(math_font_path, "w") do |file|
|
955
|
-
file.write(ZoticaBuilder.create_font_string(:math))
|
947
|
+
file.write(Zenithal::ZoticaBuilder.create_font_string(:math))
|
956
948
|
end
|
957
949
|
end
|
958
950
|
|
data/source/zotica/parser.rb
CHANGED
@@ -1,14 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
require 'rexml/document'
|
6
|
-
include REXML
|
7
|
-
|
8
|
-
|
9
|
-
module ZoticaSingleParserMethod
|
10
|
-
|
11
|
-
DATA = ZoticaBuilder::DATA
|
4
|
+
module Zenithal::ZoticaSingleParserMethod
|
12
5
|
|
13
6
|
SPACE_ALTERNATIVES = {"sfun" => "afun", "sbin" => "abin", "srel" => "arel", "ssbin" => "asbin", "ssrel" => "asrel", "scas" => "acas", "quad" => "sgl", "qquad" => "dbl"}
|
14
7
|
PHANTOM_TYPES = {"ph" => "bth", "vph" => "ver", "hph" => "hor"}
|
@@ -17,7 +10,7 @@ module ZoticaSingleParserMethod
|
|
17
10
|
if @block
|
18
11
|
inner_element = parse_math_root
|
19
12
|
raw_nodes = @block.call(@attributes, [inner_element])
|
20
|
-
nodes = raw_nodes.inject(Nodes[], :<<)
|
13
|
+
nodes = raw_nodes.inject(REXML::Nodes[], :<<)
|
21
14
|
else
|
22
15
|
nodes = parse_math_root
|
23
16
|
end
|
@@ -27,7 +20,7 @@ module ZoticaSingleParserMethod
|
|
27
20
|
private
|
28
21
|
|
29
22
|
def create_math_element(name, attributes, children_list, options = {})
|
30
|
-
this = Nodes[]
|
23
|
+
this = REXML::Nodes[]
|
31
24
|
options[:role] = determine_role(attributes)
|
32
25
|
options[:class] = attributes["class"]
|
33
26
|
options[:fonts] = @fonts
|
@@ -81,7 +74,7 @@ module ZoticaSingleParserMethod
|
|
81
74
|
right_symbol = ZoticaBuilder.fetch_fence_symbol(right_kind, 1, stretch_level)
|
82
75
|
modify = !stretch_level
|
83
76
|
this << ZoticaBuilder.build_fence(left_kind, right_kind, left_symbol, right_symbol, modify, options) do |content_this|
|
84
|
-
content_this << children_list.fetch(0, Nodes[])
|
77
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
85
78
|
end
|
86
79
|
when "set"
|
87
80
|
stretch_level = attributes["s"]
|
@@ -93,8 +86,8 @@ module ZoticaSingleParserMethod
|
|
93
86
|
center_symbol = ZoticaBuilder.fetch_fence_symbol(center_kind, 0, stretch_level)
|
94
87
|
modify = !stretch_level
|
95
88
|
this << ZoticaBuilder.build_set(left_kind, right_kind, center_kind, left_symbol, right_symbol, center_symbol, modify, options) do |left_this, right_this|
|
96
|
-
left_this << children_list.fetch(0, Nodes[])
|
97
|
-
right_this << children_list.fetch(1, Nodes[])
|
89
|
+
left_this << children_list.fetch(0, REXML::Nodes[])
|
90
|
+
right_this << children_list.fetch(1, REXML::Nodes[])
|
98
91
|
end
|
99
92
|
when DATA["fence"].method(:key?)
|
100
93
|
stretch_level = attributes["s"]
|
@@ -102,50 +95,50 @@ module ZoticaSingleParserMethod
|
|
102
95
|
right_symbol = ZoticaBuilder.fetch_fence_symbol(name, 1, stretch_level)
|
103
96
|
modify = !stretch_level
|
104
97
|
this << ZoticaBuilder.build_fence(name, name, left_symbol, right_symbol, modify, options) do |content_this|
|
105
|
-
content_this << children_list.fetch(0, Nodes[])
|
98
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
106
99
|
end
|
107
100
|
when "intlike"
|
108
101
|
kind = attributes["k"] || "int"
|
109
102
|
size = (attributes["in"]) ? "inl" : "lrg"
|
110
103
|
symbol = ZoticaBuilder.fetch_integral_symbol(kind, size)
|
111
104
|
this << ZoticaBuilder.build_integral(symbol, size, options) do |sub_this, super_this|
|
112
|
-
sub_this << children_list.fetch(0, Nodes[])
|
113
|
-
super_this << children_list.fetch(1, Nodes[])
|
105
|
+
sub_this << children_list.fetch(0, REXML::Nodes[])
|
106
|
+
super_this << children_list.fetch(1, REXML::Nodes[])
|
114
107
|
end
|
115
108
|
when DATA["integral"].method(:key?)
|
116
109
|
size = (attributes["in"]) ? "inl" : "lrg"
|
117
110
|
symbol = ZoticaBuilder.fetch_integral_symbol(name, size)
|
118
111
|
this << ZoticaBuilder.build_integral(symbol, size, options) do |sub_this, super_this|
|
119
|
-
sub_this << children_list.fetch(0, Nodes[])
|
120
|
-
super_this << children_list.fetch(1, Nodes[])
|
112
|
+
sub_this << children_list.fetch(0, REXML::Nodes[])
|
113
|
+
super_this << children_list.fetch(1, REXML::Nodes[])
|
121
114
|
end
|
122
115
|
when "sumlike"
|
123
116
|
kind = attributes["k"] || "sum"
|
124
117
|
size = (attributes["in"]) ? "inl" : "lrg"
|
125
118
|
symbol = ZoticaBuilder.fetch_sum_symbol(kind, size)
|
126
119
|
this << ZoticaBuilder.build_sum(symbol, size, options) do |under_this, over_this|
|
127
|
-
under_this << children_list.fetch(0, Nodes[])
|
128
|
-
over_this << children_list.fetch(1, Nodes[])
|
120
|
+
under_this << children_list.fetch(0, REXML::Nodes[])
|
121
|
+
over_this << children_list.fetch(1, REXML::Nodes[])
|
129
122
|
end
|
130
123
|
when DATA["sum"].method(:key?)
|
131
124
|
size = (attributes["in"]) ? "inl" : "lrg"
|
132
125
|
symbol = ZoticaBuilder.fetch_sum_symbol(name, size)
|
133
126
|
this << ZoticaBuilder.build_sum(symbol, size, options) do |under_this, over_this|
|
134
|
-
under_this << children_list.fetch(0, Nodes[])
|
135
|
-
over_this << children_list.fetch(1, Nodes[])
|
127
|
+
under_this << children_list.fetch(0, REXML::Nodes[])
|
128
|
+
over_this << children_list.fetch(1, REXML::Nodes[])
|
136
129
|
end
|
137
130
|
when "accent"
|
138
131
|
kind = attributes["k"]
|
139
132
|
under_symbol = ZoticaBuilder.fetch_accent_symbol(kind, 0)
|
140
133
|
over_symbol = ZoticaBuilder.fetch_accent_symbol(kind, 1)
|
141
134
|
this << ZoticaBuilder.build_accent(under_symbol, over_symbol, options) do |base_this|
|
142
|
-
base_this << children_list.fetch(0, Nodes[])
|
135
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
143
136
|
end
|
144
137
|
when DATA["accent"].method(:key?)
|
145
138
|
under_symbol = ZoticaBuilder.fetch_accent_symbol(name, 0)
|
146
139
|
over_symbol = ZoticaBuilder.fetch_accent_symbol(name, 1)
|
147
140
|
this << ZoticaBuilder.build_accent(under_symbol, over_symbol, options) do |base_this|
|
148
|
-
base_this << children_list.fetch(0, Nodes[])
|
141
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
149
142
|
end
|
150
143
|
when "wide"
|
151
144
|
kind = attributes["k"]
|
@@ -154,7 +147,7 @@ module ZoticaSingleParserMethod
|
|
154
147
|
over_symbol = ZoticaBuilder.fetch_wide_symbol(kind, 1, stretch_level)
|
155
148
|
modify = !stretch_level
|
156
149
|
this << ZoticaBuilder.build_wide(kind, under_symbol, over_symbol, modify, options) do |base_this|
|
157
|
-
base_this << children_list.fetch(0, Nodes[])
|
150
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
158
151
|
end
|
159
152
|
when DATA["wide"].method(:key?)
|
160
153
|
stretch_level = attributes["s"]
|
@@ -162,98 +155,98 @@ module ZoticaSingleParserMethod
|
|
162
155
|
over_symbol = ZoticaBuilder.fetch_wide_symbol(name, 1, stretch_level)
|
163
156
|
modify = !stretch_level
|
164
157
|
this << ZoticaBuilder.build_wide(name, under_symbol, over_symbol, modify, options) do |base_this|
|
165
|
-
base_this << children_list.fetch(0, Nodes[])
|
158
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
166
159
|
end
|
167
160
|
when "multi"
|
168
161
|
this << ZoticaBuilder.build_subsuper(options) do |base_this, sub_this, super_this, left_sub_this, left_super_this|
|
169
|
-
base_this << children_list.fetch(0, Nodes[])
|
170
|
-
sub_this << children_list.fetch(1, Nodes[])
|
171
|
-
super_this << children_list.fetch(2, Nodes[])
|
172
|
-
left_sub_this << children_list.fetch(3, Nodes[])
|
173
|
-
left_super_this << children_list.fetch(4, Nodes[])
|
162
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
163
|
+
sub_this << children_list.fetch(1, REXML::Nodes[])
|
164
|
+
super_this << children_list.fetch(2, REXML::Nodes[])
|
165
|
+
left_sub_this << children_list.fetch(3, REXML::Nodes[])
|
166
|
+
left_super_this << children_list.fetch(4, REXML::Nodes[])
|
174
167
|
end
|
175
168
|
when "sb"
|
176
169
|
this << ZoticaBuilder.build_subsuper(options) do |base_this, sub_this, super_this, left_sub_element, left_super_element|
|
177
|
-
base_this << children_list.fetch(0, Nodes[])
|
178
|
-
sub_this << children_list.fetch(1, Nodes[])
|
170
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
171
|
+
sub_this << children_list.fetch(1, REXML::Nodes[])
|
179
172
|
end
|
180
173
|
when "sp"
|
181
174
|
this << ZoticaBuilder.build_subsuper(options) do |base_this, sub_this, super_this, left_sub_element, left_super_element|
|
182
|
-
base_this << children_list.fetch(0, Nodes[])
|
183
|
-
super_this << children_list.fetch(1, Nodes[])
|
175
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
176
|
+
super_this << children_list.fetch(1, REXML::Nodes[])
|
184
177
|
end
|
185
178
|
when "sbsp"
|
186
179
|
this << ZoticaBuilder.build_subsuper(options) do |base_this, sub_this, super_this, left_sub_element, left_super_element|
|
187
|
-
base_this << children_list.fetch(0, Nodes[])
|
188
|
-
sub_this << children_list.fetch(1, Nodes[])
|
189
|
-
super_this << children_list.fetch(2, Nodes[])
|
180
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
181
|
+
sub_this << children_list.fetch(1, REXML::Nodes[])
|
182
|
+
super_this << children_list.fetch(2, REXML::Nodes[])
|
190
183
|
end
|
191
184
|
when "unov"
|
192
185
|
this << ZoticaBuilder.build_underover(options) do |base_this, under_this, over_this|
|
193
|
-
base_this << children_list.fetch(0, Nodes[])
|
194
|
-
under_this << children_list.fetch(1, Nodes[])
|
195
|
-
over_this << children_list.fetch(2, Nodes[])
|
186
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
187
|
+
under_this << children_list.fetch(1, REXML::Nodes[])
|
188
|
+
over_this << children_list.fetch(2, REXML::Nodes[])
|
196
189
|
end
|
197
190
|
when "un"
|
198
191
|
this << ZoticaBuilder.build_underover(options) do |base_this, under_this, over_this|
|
199
|
-
base_this << children_list.fetch(0, Nodes[])
|
200
|
-
under_this << children_list.fetch(1, Nodes[])
|
192
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
193
|
+
under_this << children_list.fetch(1, REXML::Nodes[])
|
201
194
|
end
|
202
195
|
when "ov"
|
203
196
|
this << ZoticaBuilder.build_underover(options) do |base_this, under_this, over_this|
|
204
|
-
base_this << children_list.fetch(0, Nodes[])
|
205
|
-
over_this << children_list.fetch(1, Nodes[])
|
197
|
+
base_this << children_list.fetch(0, REXML::Nodes[])
|
198
|
+
over_this << children_list.fetch(1, REXML::Nodes[])
|
206
199
|
end
|
207
200
|
when "frac"
|
208
201
|
this << ZoticaBuilder.build_fraction(options) do |numerator_this, denominator_this|
|
209
|
-
numerator_this << children_list.fetch(0, Nodes[])
|
210
|
-
denominator_this << children_list.fetch(1, Nodes[])
|
202
|
+
numerator_this << children_list.fetch(0, REXML::Nodes[])
|
203
|
+
denominator_this << children_list.fetch(1, REXML::Nodes[])
|
211
204
|
end
|
212
205
|
when "sqrt"
|
213
206
|
stretch_level = attributes["s"]
|
214
207
|
symbol = ZoticaBuilder.fetch_radical_symbol(stretch_level)
|
215
208
|
modify = !stretch_level
|
216
209
|
this << ZoticaBuilder.build_radical(symbol, modify, options) do |content_this, index_this|
|
217
|
-
content_this << children_list.fetch(0, Nodes[])
|
218
|
-
index_this << children_list.fetch(1, Nodes[])
|
210
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
211
|
+
index_this << children_list.fetch(1, REXML::Nodes[])
|
219
212
|
end
|
220
213
|
when "table"
|
221
214
|
type = attributes["t"]
|
222
215
|
align_config = attributes["align"]
|
223
216
|
raw = !!attributes["raw"]
|
224
217
|
this << ZoticaBuilder.build_table(type, align_config, raw, options) do |table_this|
|
225
|
-
table_this << children_list.fetch(0, Nodes[])
|
218
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
226
219
|
end
|
227
220
|
when "array"
|
228
221
|
align_config = attributes["align"]
|
229
222
|
this << ZoticaBuilder.build_table("std", align_config, true, options) do |table_this|
|
230
|
-
table_this << children_list.fetch(0, Nodes[])
|
223
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
231
224
|
end
|
232
225
|
when "stack"
|
233
226
|
this << ZoticaBuilder.build_table("stk", nil, true, options) do |table_this|
|
234
|
-
table_this << children_list.fetch(0, Nodes[])
|
227
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
235
228
|
end
|
236
229
|
when "matrix"
|
237
230
|
this << ZoticaBuilder.build_table("mat", nil, false, options) do |table_this|
|
238
|
-
table_this << children_list.fetch(0, Nodes[])
|
231
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
239
232
|
end
|
240
233
|
when "case"
|
241
234
|
left_symbol = ZoticaBuilder.fetch_fence_symbol("brace", 0, nil)
|
242
235
|
right_symbol = ZoticaBuilder.fetch_fence_symbol("none", 1, nil)
|
243
236
|
this << ZoticaBuilder.build_fence("brace", "none", left_symbol, right_symbol, true, options) do |this|
|
244
237
|
this << ZoticaBuilder.build_table("cas", "ll", false) do |table_this|
|
245
|
-
table_this << children_list.fetch(0, Nodes[])
|
238
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
246
239
|
end
|
247
240
|
end
|
248
241
|
when "diag"
|
249
242
|
vertical_gaps_string = attributes["ver"]
|
250
243
|
horizontal_gaps_string = attributes["hor"]
|
251
244
|
this << ZoticaBuilder.build_diagram(vertical_gaps_string, horizontal_gaps_string, options) do |table_this|
|
252
|
-
table_this << children_list.fetch(0, Nodes[])
|
245
|
+
table_this << children_list.fetch(0, REXML::Nodes[])
|
253
246
|
end
|
254
247
|
when "c"
|
255
248
|
this << ZoticaBuilder.build_table_cell(options) do |cell_this|
|
256
|
-
cell_this << children_list.fetch(0, Nodes[])
|
249
|
+
cell_this << children_list.fetch(0, REXML::Nodes[])
|
257
250
|
end
|
258
251
|
when "cc"
|
259
252
|
children_list.each do |children|
|
@@ -261,11 +254,11 @@ module ZoticaSingleParserMethod
|
|
261
254
|
cell_this << children
|
262
255
|
end
|
263
256
|
end
|
264
|
-
this << Element.new("math-sys-br")
|
257
|
+
this << REXML::Element.new("math-sys-br")
|
265
258
|
when "v"
|
266
259
|
vertex_name = attributes["name"]
|
267
260
|
this << ZoticaBuilder.build_diagram_vertex(vertex_name, options) do |vertex_this|
|
268
|
-
vertex_this << children_list.fetch(0, Nodes[])
|
261
|
+
vertex_this << children_list.fetch(0, REXML::Nodes[])
|
269
262
|
end
|
270
263
|
when "vv"
|
271
264
|
children_list.each do |children|
|
@@ -273,7 +266,7 @@ module ZoticaSingleParserMethod
|
|
273
266
|
vertex_this << children
|
274
267
|
end
|
275
268
|
end
|
276
|
-
this << Element.new("math-sys-br")
|
269
|
+
this << REXML::Element.new("math-sys-br")
|
277
270
|
when "ar"
|
278
271
|
configs = {}
|
279
272
|
configs[:start_config] = attributes["s"]
|
@@ -288,35 +281,35 @@ module ZoticaSingleParserMethod
|
|
288
281
|
configs[:mark] = attributes["mark"]
|
289
282
|
arrow_name = attributes["name"]
|
290
283
|
this << ZoticaBuilder.build_arrow(arrow_name, configs, options) do |label_this|
|
291
|
-
label_this << children_list.fetch(0, Nodes[])
|
284
|
+
label_this << children_list.fetch(0, REXML::Nodes[])
|
292
285
|
end
|
293
286
|
when "tree"
|
294
287
|
this << ZoticaBuilder.build_tree(options) do |content_this|
|
295
|
-
content_this << children_list.fetch(0, Nodes[])
|
288
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
296
289
|
end
|
297
290
|
when "axm"
|
298
291
|
this << ZoticaBuilder.build_tree_axiom(options) do |content_this|
|
299
|
-
content_this << children_list.fetch(0, Nodes[])
|
292
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
300
293
|
end
|
301
294
|
when "infr"
|
302
295
|
number = attributes["n"].to_i
|
303
296
|
this << ZoticaBuilder.build_tree_inference(number, options) do |content_this, right_label_this, left_label_this|
|
304
|
-
content_this << children_list.fetch(0, Nodes[])
|
305
|
-
right_label_this << children_list.fetch(1, Nodes[])
|
306
|
-
left_label_this << children_list.fetch(2, Nodes[])
|
297
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
298
|
+
right_label_this << children_list.fetch(1, REXML::Nodes[])
|
299
|
+
left_label_this << children_list.fetch(2, REXML::Nodes[])
|
307
300
|
end
|
308
301
|
when "br"
|
309
|
-
this << Element.new("math-sys-br")
|
302
|
+
this << REXML::Element.new("math-sys-br")
|
310
303
|
when "g"
|
311
304
|
transform_configs = {}
|
312
305
|
transform_configs[:rotate] = attributes["rotate"]
|
313
306
|
this << ZoticaBuilder.build_group(transform_configs, options) do |content_this|
|
314
|
-
content_this << children_list.fetch(0, Nodes[])
|
307
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
315
308
|
end
|
316
309
|
when "ph", "vph", "hph"
|
317
310
|
type = PHANTOM_TYPES[name] || attributes["t"] || "bth"
|
318
311
|
this << ZoticaBuilder.build_phantom(type, options) do |content_this|
|
319
|
-
content_this << children_list.fetch(0, Nodes[])
|
312
|
+
content_this << children_list.fetch(0, REXML::Nodes[])
|
320
313
|
end
|
321
314
|
when "s"
|
322
315
|
type = attributes["t"] || "medium"
|
@@ -325,18 +318,18 @@ module ZoticaSingleParserMethod
|
|
325
318
|
type = SPACE_ALTERNATIVES[name]
|
326
319
|
this << ZoticaBuilder.build_space(type, options)
|
327
320
|
else
|
328
|
-
this << Element.build(name) do |this|
|
321
|
+
this << REXML::Element.build(name) do |this|
|
329
322
|
attributes.each do |key, value|
|
330
323
|
this[key] = value
|
331
324
|
end
|
332
|
-
this << children_list.fetch(0, Nodes[])
|
325
|
+
this << children_list.fetch(0, REXML::Nodes[])
|
333
326
|
end
|
334
327
|
end
|
335
328
|
return this
|
336
329
|
end
|
337
330
|
|
338
331
|
def create_math_text(text, options = {})
|
339
|
-
this = Nodes[]
|
332
|
+
this = REXML::Nodes[]
|
340
333
|
options[:fonts] = @fonts
|
341
334
|
text.each_char do |char|
|
342
335
|
if char =~ /\p{Number}/
|
@@ -367,7 +360,7 @@ module ZoticaSingleParserMethod
|
|
367
360
|
end
|
368
361
|
|
369
362
|
def parse_math_root
|
370
|
-
element = Element.new("math-root")
|
363
|
+
element = REXML::Element.new("math-root")
|
371
364
|
children = parse_nodes({})
|
372
365
|
if @exact
|
373
366
|
parse_eof
|
@@ -427,12 +420,17 @@ module ZoticaSingleParserMethod
|
|
427
420
|
return escape
|
428
421
|
end
|
429
422
|
|
423
|
+
ZoticaBuilder = Zenithal::ZoticaBuilder
|
424
|
+
|
425
|
+
DATA = ZoticaBuilder::DATA
|
426
|
+
DEFAULT_FONTS = ZoticaBuilder::DEFAULT_FONTS
|
427
|
+
|
430
428
|
end
|
431
429
|
|
432
430
|
|
433
|
-
class ZoticaSingleParser < ZenithalParser
|
431
|
+
class Zenithal::ZoticaSingleParser < Zenithal::ZenithalParser
|
434
432
|
|
435
|
-
include ZoticaSingleParserMethod
|
433
|
+
include Zenithal::ZoticaSingleParserMethod
|
436
434
|
|
437
435
|
attr_accessor :exact
|
438
436
|
attr_accessor :fonts
|
@@ -459,7 +457,7 @@ class ZoticaSingleParser < ZenithalParser
|
|
459
457
|
end
|
460
458
|
|
461
459
|
|
462
|
-
class ZoticaParser < ZenithalParser
|
460
|
+
class Zenithal::ZoticaParser < Zenithal::ZenithalParser
|
463
461
|
|
464
462
|
def initialize(source)
|
465
463
|
super(source)
|
@@ -477,7 +475,7 @@ class ZoticaParser < ZenithalParser
|
|
477
475
|
def register_math_macro(name, &block)
|
478
476
|
outer_self = self
|
479
477
|
register_plugin(name) do |attributes|
|
480
|
-
parser = ZoticaSingleParser.new(@source)
|
478
|
+
parser = Zenithal::ZoticaSingleParser.new(@source)
|
481
479
|
@raw_macro_names.each do |raw_macro_name|
|
482
480
|
parser.register_plugin(raw_macro_name) do |_|
|
483
481
|
raw_parser = outer_self.clone
|
@@ -522,14 +520,14 @@ class ZoticaParser < ZenithalParser
|
|
522
520
|
|
523
521
|
def register_resource_macro(name)
|
524
522
|
register_macro(name) do |attributes, children_list|
|
525
|
-
style_string = ZoticaBuilder.create_style_string(attributes["font-url"])
|
526
|
-
script_string = ZoticaBuilder.create_script_string
|
527
|
-
nodes = Nodes[]
|
528
|
-
nodes << Element.build("style") do |element|
|
529
|
-
element << Text.new(style_string, true, nil, true)
|
530
|
-
end
|
531
|
-
nodes << Element.build("script") do |element|
|
532
|
-
element << CData.new(script_string)
|
523
|
+
style_string = Zenithal::ZoticaBuilder.create_style_string(attributes["font-url"])
|
524
|
+
script_string = Zenithal::ZoticaBuilder.create_script_string
|
525
|
+
nodes = REXML::Nodes[]
|
526
|
+
nodes << REXML::Element.build("style") do |element|
|
527
|
+
element << REXML::Text.new(style_string, true, nil, true)
|
528
|
+
end
|
529
|
+
nodes << REXML::Element.build("script") do |element|
|
530
|
+
element << REXML::CData.new(script_string)
|
533
531
|
end
|
534
532
|
next nodes
|
535
533
|
end
|
data/source/zotica.rb
CHANGED
@@ -1,14 +1,19 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
|
4
|
-
|
4
|
+
module Zenithal
|
5
5
|
|
6
|
+
ZOTICA_VERSION = "1.0.1"
|
7
|
+
ZOTICA_VERSION_ARRAY = VERSION.split(/\./).map(&:to_i)
|
6
8
|
|
7
|
-
|
9
|
+
end
|
8
10
|
|
9
|
-
ZOTICA_VERSION = "1.0.0"
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
require 'json'
|
13
|
+
require 'rexml/document'
|
14
|
+
require 'sassc'
|
15
|
+
require 'ttfunk'
|
16
|
+
require 'zenml'
|
13
17
|
|
14
|
-
|
18
|
+
require_relative 'zotica/builder'
|
19
|
+
require_relative 'zotica/parser'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zotica
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ziphil
|
8
8
|
autorequire:
|
9
9
|
bindir: exec
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zenml
|