hwp_script_to_latex 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1326 @@
1
+ #
2
+ # Author: osh
3
+ # Created: 2019-05-27
4
+ # Last modified: 2019-05-27
5
+
6
+ module HwpScriptToLatex
7
+ module Syntax
8
+ # Keyword Command: 파라미터가 없는 명령어
9
+ # Default Command: 우측에 1개의 파라미터를 가지는 명령어
10
+ # Block Command: begin/end 블록을 가지는 명령어(행렬, 케이스)
11
+ # Meta: 공백, 줄바꿈, left right 등 특수문자
12
+ # Symbol: 기호
13
+ # Reserved Word: 로만체로 표시되는 예약어
14
+
15
+ KEYWORD_COMMANDS = [
16
+ {
17
+ regex: ["eqalign", "Eqalign", "EQALIGN"],
18
+ latex: ""
19
+ },
20
+ {
21
+ regex: ["rm", "Rm", "RM"],
22
+ latex: " \\rm "
23
+ },
24
+ {
25
+ regex: ["it", "It", "IT"],
26
+ latex: " \\it "
27
+ },
28
+ {
29
+ regex: ["sum", "Sum", "SUM"],
30
+ latex: " \\sum "
31
+ },
32
+ {
33
+ regex: ["int(?!er)", "Int(?!er)", "INT(?!ER)"],
34
+ latex: " \\int "
35
+ },
36
+ {
37
+ regex: ["oint", "Oint", "OINT"],
38
+ latex: " \\oint "
39
+ }
40
+ ]
41
+
42
+ DEFAULT_COMMANDS = [
43
+ {
44
+ regex: "sub(?!set)",
45
+ latex: "_"
46
+ },
47
+ {
48
+ regex: "sup(?!set)",
49
+ latex: "^"
50
+ },
51
+ {
52
+ regex: "box",
53
+ latex: "\\fbox"
54
+ },
55
+ {
56
+ regex: "arch",
57
+ latex: "\\stackrel\\frown"
58
+ },
59
+ {
60
+ regex: "bar",
61
+ latex: "\\overline"
62
+ },
63
+ {
64
+ regex: "overline",
65
+ latex: "\\overline"
66
+ },
67
+ {
68
+ regex: "acute",
69
+ latex: "\\acute"
70
+ },
71
+ {
72
+ regex: "grave",
73
+ latex: "\\grave"
74
+ },
75
+ {
76
+ regex: "check",
77
+ latex: "\\check"
78
+ },
79
+ {
80
+ regex: "breve",
81
+ latex: "\\breve"
82
+ },
83
+ {
84
+ regex: "tilde",
85
+ latex: "\\tilde"
86
+ },
87
+ {
88
+ regex: "hat",
89
+ latex: "\\hat"
90
+ },
91
+ {
92
+ regex: "widehat",
93
+ latex: "\\widehat"
94
+ },
95
+ {
96
+ regex: "vec",
97
+ latex: "\\vec"
98
+ },
99
+ {
100
+ regex: "dot(?!eq)",
101
+ latex: "\\dot"
102
+ },
103
+ {
104
+ regex: "ddot(?!s)",
105
+ latex: "\\ddot"
106
+ },
107
+ {
108
+ regex: "dyad",
109
+ latex: "\\overleftrightarrow"
110
+ },
111
+ {
112
+ regex: "under",
113
+ latex: "\\underline"
114
+ }
115
+ ]
116
+
117
+ BLOCK_COMMANDS = [
118
+ {
119
+ regex: "cases",
120
+ latex: "cases"
121
+ },
122
+ {
123
+ regex: "dmatrix",
124
+ latex: "vmatrix"
125
+ },
126
+ {
127
+ regex: "bmatrix",
128
+ latex: "Bmatrix"
129
+ },
130
+ {
131
+ regex: "pmatrix",
132
+ latex: "pmatrix"
133
+ },
134
+ {
135
+ regex: "matrix",
136
+ latex: "matrix"
137
+ }
138
+ ]
139
+
140
+ META = [
141
+ {
142
+ regex: "(?<![a-zA-Z])(?i:left|right)\\b\\s*+(?:(?=[^{}\\[\\]\\|\\(\\)<>])|(?:$))",
143
+ latex: "",
144
+ alphabetic: false
145
+ },
146
+ {
147
+ regex: "(?<![a-zA-Z])(?i:left)\\s*<",
148
+ latex: " \\langle ",
149
+ alphabetic: false
150
+ },
151
+ {
152
+ regex: "(?<![a-zA-Z])(?i:right)\\s*>",
153
+ latex: " \\rangle ",
154
+ alphabetic: false
155
+ },
156
+ {
157
+ regex: "(?<![a-zA-Z])(?i:left)\\s*\\[",
158
+ latex: " \\left [ ",
159
+ alphabetic: false
160
+ },
161
+ {
162
+ regex: "(?<![a-zA-Z])(?i:right)\\s*\\]",
163
+ latex: " \\right ] ",
164
+ alphabetic: false
165
+ },
166
+ {
167
+ regex: "(?<![a-zA-Z])(?i:left)\\s*{",
168
+ latex: " \\{ ",
169
+ alphabetic: false
170
+ },
171
+ {
172
+ regex: "(?<![a-zA-Z])(?i:right)\\s*}",
173
+ latex: " \\} ",
174
+ alphabetic: false
175
+ },
176
+ {
177
+ regex: "\"{\"",
178
+ latex: " \\{ ",
179
+ alphabetic: false
180
+ },
181
+ {
182
+ regex: "\"}\"",
183
+ latex: " \\} ",
184
+ alphabetic: false
185
+ },
186
+ {
187
+ regex: "(?<![a-zA-Z])(?i:right)\\s*}",
188
+ latex: " \\} ",
189
+ alphabetic: false
190
+ },
191
+ {
192
+ regex: "(?<![a-zA-Z])(?i:left)\\s*\\(",
193
+ latex: " \\left ( ",
194
+ alphabetic: false
195
+ },
196
+ {
197
+ regex: "(?<![a-zA-Z])(?i:right)\\s*\\)",
198
+ latex: " \\right ) ",
199
+ alphabetic: false
200
+ },
201
+ {
202
+ regex: "(?<![a-zA-Z])(?i:left)\\s*\\|",
203
+ latex: " \\left | ",
204
+ alphabetic: false
205
+ },
206
+ {
207
+ regex: "(?<![a-zA-Z])(?i:right)\\s*\\|",
208
+ latex: " \\right | ",
209
+ alphabetic: false
210
+ },
211
+ {
212
+ regex: "`",
213
+ latex: " \\, ",
214
+ alphabetic: false
215
+ },
216
+ {
217
+ regex: "#",
218
+ latex: "\\\\\\\\",
219
+ alphabetic: false
220
+ },
221
+ {
222
+ regex: "&amp;",
223
+ latex: "",
224
+ alphabetic: false
225
+ },
226
+ {
227
+ regex: "\r?\n",
228
+ latex: "",
229
+ alphabetic: false
230
+ },
231
+ {
232
+ regex: "%",
233
+ latex: " \\% "
234
+ }
235
+ ]
236
+
237
+ SYMBOL = [
238
+ {
239
+ regex: ["Alpha", "ALPHA"],
240
+ latex: " \\mathit {A} "
241
+ },
242
+ {
243
+ regex: "alpha",
244
+ latex: " \\alpha "
245
+ },
246
+ {
247
+ regex: ["Beta", "BETA"],
248
+ latex: " \\mathit {B} "
249
+ },
250
+ {
251
+ regex: "beta",
252
+ latex: " \\beta "
253
+ },
254
+ {
255
+ regex: ["Gamma","GAMMA"],
256
+ latex: " \\Gamma "
257
+ },
258
+ {
259
+ regex: "gamma",
260
+ latex: " \\gamma "
261
+ },
262
+ {
263
+ regex: ["Delta","DELTA"],
264
+ latex: " \\Delta "
265
+ },
266
+ {
267
+ regex: "delta",
268
+ latex: " \\delta "
269
+ },
270
+ {
271
+ regex: ["Epsilon","EPSILON"],
272
+ latex: "\\mathit {E}"
273
+ },
274
+ {
275
+ regex: "epsilon",
276
+ latex: " \\epsilon "
277
+ },
278
+ {
279
+ regex: ["Zeta","ZETA"],
280
+ latex: "\\mathit {Z}"
281
+ },
282
+ {
283
+ regex: "zeta",
284
+ latex: " \\zeta "
285
+ },
286
+ {
287
+ regex: ["Eta","ETA"],
288
+ latex: "\\mathit {H}"
289
+ },
290
+ {
291
+ regex: "eta",
292
+ latex: " \\eta "
293
+ },
294
+ {
295
+ regex: ["Theta","THETA"],
296
+ latex: " \\Theta "
297
+ },
298
+ {
299
+ regex: "theta",
300
+ latex: " \\theta "
301
+ },
302
+ {
303
+ regex: ["Iota","IOTA"],
304
+ latex: "\\mathit {I}"
305
+ },
306
+ {
307
+ regex: "iota",
308
+ latex: " \\iota "
309
+ },
310
+ {
311
+ regex: ["Kappa","KAPPA"],
312
+ latex: "\\mathit {K}"
313
+ },
314
+ {
315
+ regex: "kappa",
316
+ latex: " \\kappa "
317
+ },
318
+ {
319
+ regex: ["Lambda","LAMBDA"],
320
+ latex: " \\Lambda "
321
+ },
322
+ {
323
+ regex: "lambda",
324
+ latex: " \\lambda "
325
+ },
326
+ {
327
+ regex: ["Mu","MU"],
328
+ latex: "\\mathit {M}"
329
+ },
330
+ {
331
+ regex: "mu",
332
+ latex: " \\mu "
333
+ },
334
+ {
335
+ regex: ["Nu","NU"],
336
+ latex: "\\mathit {N}"
337
+ },
338
+ {
339
+ regex: "nu",
340
+ latex: " \\nu "
341
+ },
342
+ {
343
+ regex: ["Xi","XI"],
344
+ latex: " \\Xi "
345
+ },
346
+ {
347
+ regex: "xi",
348
+ latex: " \\xi "
349
+ },
350
+ {
351
+ regex: ["Omicron", "OMICRON"],
352
+ latex: " \\mathit {O} "
353
+ },
354
+ {
355
+ regex: "omicron",
356
+ latex: " \\omicron "
357
+ },
358
+ {
359
+ regex: ["Pi","PI"],
360
+ latex: " \\Pi "
361
+ },
362
+ {
363
+ regex: "pi",
364
+ latex: " \\pi "
365
+ },
366
+ {
367
+ regex: ["Rho","RHO"],
368
+ latex: "\\mathit {P}"
369
+ },
370
+ {
371
+ regex: "rho",
372
+ latex: " \\rho "
373
+ },
374
+ {
375
+ regex: ["Sigma", "SIGMA"],
376
+ latex: " \\Sigma "
377
+ },
378
+ {
379
+ regex: "sigma",
380
+ latex: " \\sigma "
381
+ },
382
+ {
383
+ regex: ["Tau","TAU"],
384
+ latex: "\\mathit {T}"
385
+ },
386
+ {
387
+ regex: "tau",
388
+ latex: " \\tau "
389
+ },
390
+ {
391
+ regex: ["Upsilon","UPSILON"],
392
+ latex: "\\mathit {Y}"
393
+ },
394
+ {
395
+ regex: "upsilon",
396
+ latex: " \\upsilon "
397
+ },
398
+ {
399
+ regex: ["Phi","PHI"],
400
+ latex: " \\Phi "
401
+ },
402
+ {
403
+ regex: "phi",
404
+ latex: " \\phi "
405
+ },
406
+ {
407
+ regex: ["Chi","CHI"],
408
+ latex: "\\mathit {X}"
409
+ },
410
+ {
411
+ regex: "chi",
412
+ latex: " \\chi "
413
+ },
414
+ {
415
+ regex: ["Psi","PSI"],
416
+ latex: " \\Psi "
417
+ },
418
+ {
419
+ regex: "psi",
420
+ latex: " \\psi "
421
+ },
422
+ {
423
+ regex: ["Omega","OMEGA"],
424
+ latex: " \\Omega "
425
+ },
426
+ {
427
+ regex: "omega",
428
+ latex: " \\omega "
429
+ },
430
+ {
431
+ regex: ["aleph", "Aleph", "ALEPH"],
432
+ latex: " \\aleph "
433
+ },
434
+ {
435
+ regex: ["hbar", "Hbar", "HBAR"],
436
+ latex: " \\hbar "
437
+ },
438
+ {
439
+ regex: ["imath", "Imath", "IMATH"],
440
+ latex: " \\imath "
441
+ },
442
+ {
443
+ regex: ["jmath", "Jmath", "JMATH"],
444
+ latex: " \\jmath "
445
+ },
446
+ {
447
+ regex: ["ell", "Ell", "ELL"],
448
+ latex: " \\ell "
449
+ },
450
+ {
451
+ regex: ["liter", "Liter", "LITER"],
452
+ latex: " \\ell "
453
+ },
454
+ {
455
+ regex: ["wp", "Wp", "WP"],
456
+ latex: " \\wp "
457
+ },
458
+ {
459
+ regex: "IMAG",
460
+ latex: " \\Im "
461
+ },
462
+ {
463
+ regex: "ANGSTROM",
464
+ latex: " \\mathit {\\unicode{x212b}} "
465
+ },
466
+ {
467
+ regex: "vartheta",
468
+ latex: " \\vartheta "
469
+ },
470
+ {
471
+ regex: "varpi",
472
+ latex: " \\varpi "
473
+ },
474
+ {
475
+ regex: "varsigma",
476
+ latex: " \\varsigma "
477
+ },
478
+ {
479
+ regex: "varupsilon",
480
+ latex: " \\Upsilon "
481
+ },
482
+ {
483
+ regex: "varphi",
484
+ latex: " \\varphi "
485
+ },
486
+ {
487
+ regex: "varepsilon",
488
+ latex: " \\varepsilon "
489
+ },
490
+ {
491
+ regex: ["mho", "Mho", "MHO"],
492
+ latex: " \\mho "
493
+ },
494
+ {
495
+ regex: "varrho",
496
+ latex: " \\varrho "
497
+ },
498
+
499
+
500
+ {
501
+ regex: ["prod", "PROD"],
502
+ latex: " \\prod "
503
+ },
504
+ {
505
+ regex: ["coprod", "Coprod", "COPROD"],
506
+ latex: " \\coprod "
507
+ },
508
+ {
509
+ regex: ["inter", "Inter", "INTER"],
510
+ latex: " \\bigcap "
511
+ },
512
+ {
513
+ regex: ["bigcap", "Bigcap", "BIGCAP"],
514
+ latex: " \\bigcap "
515
+ },
516
+ {
517
+ regex: ["union", "Union", "UNION"],
518
+ latex: " \\bigcup "
519
+ },
520
+ {
521
+ regex: ["bigcup", "Bigcup", "BIGCUP"],
522
+ latex: " \\bigcup "
523
+ },
524
+ {
525
+ regex: ["cap", "Cap", "CAP"],
526
+ latex: " \\cap "
527
+ },
528
+ {
529
+ regex: ["smallinter", "Smallinter", "SMALLINTER"],
530
+ latex: " \\cap "
531
+ },
532
+ {
533
+ regex: ["cup", "Cup", "CUP"],
534
+ latex: " \\cup "
535
+ },
536
+ {
537
+ regex: ["smallunion", "Smallunion", "SMALLUNION"],
538
+ latex: " \\cup "
539
+ },
540
+ {
541
+ regex: ["sqcap", "Sqcap", "SQCAP"],
542
+ latex: " \\sqcap "
543
+ },
544
+ {
545
+ regex: ["sqcup", "Sqcup", "SQCUP"],
546
+ latex: " \\sqcup "
547
+ },
548
+ {
549
+ regex: ["bigsqcup", "Bigsqcup", "BIGSQCUP"],
550
+ latex: " \\bigsqcup "
551
+ },
552
+ {
553
+ regex: ["uplus", "Uplus", "UPLUS"],
554
+ latex: " \\uplus "
555
+ },
556
+ {
557
+ regex: ["biguplus", "Biguplus", "BIGUPLUS"],
558
+ latex: " \\biguplus "
559
+ },
560
+ {
561
+ regex: ["subset", "Subset", "SUBSET"],
562
+ latex: " \\subset "
563
+ },
564
+ {
565
+ regex: ["supset", "Supset", "SUPSET"],
566
+ latex: " \\supset "
567
+ },
568
+ {
569
+ regex: ["subseteq", "Subseteq", "SUBSETEQ"],
570
+ latex: " \\subseteq "
571
+ },
572
+ {
573
+ regex: ["supseteq", "Supseteq", "SUPSETEQ"],
574
+ latex: " \\supseteq "
575
+ },
576
+ {
577
+ regex: ["nsubseteq", "Nsubseteq", "NSUBSETEQ"],
578
+ latex: " \\nsubseteq "
579
+ },
580
+ {
581
+ regex: ["nsupseteq", "Nsupseteq", "NSUPSETEQ"],
582
+ latex: " \\nsupseteq "
583
+ },
584
+ {
585
+ regex: ["sqsubset", "Sqsubset", "SQSUBSET"],
586
+ latex: " \\sqsubset "
587
+ },
588
+ {
589
+ regex: ["sqsupset", "Sqsupset", "SQSUPSET"],
590
+ latex: " \\sqsupset "
591
+ },
592
+ {
593
+ regex: ["sqsubseteq", "Sqsubseteq", "SQSUBSETEQ"],
594
+ latex: " \\sqsubseteq "
595
+ },
596
+ {
597
+ regex: ["sqsupseteq", "Sqsupseteq", "SQSUPSETEQ"],
598
+ latex: " \\sqsupseteq "
599
+ },
600
+ {
601
+ regex: ["in(?!t|f)", "In(?!t|f)", "IN(?!T|F)"],
602
+ latex: " \\in "
603
+ },
604
+ {
605
+ regex: ["not(?!in)", "Not(?!in)", "NOT(?!IN)"],
606
+ latex: " \\not "
607
+ },
608
+ {
609
+ regex: ["ni", "Ni", "NI"],
610
+ latex: " \\ni "
611
+ },
612
+ {
613
+ regex: ["owns", "Owns", "OWNS"],
614
+ latex: " \\owns "
615
+ },
616
+ {
617
+ regex: ["notin", "Notin", "NOTIN"],
618
+ latex: " \\not \\in "
619
+ },
620
+ {
621
+ regex: ["nin", "Nin", "NIN"],
622
+ latex: " \\not \\in "
623
+ },
624
+ {
625
+ regex: ["notni", "Notni", "NOTNI"],
626
+ latex: " \\not \\ni "
627
+ },
628
+ {
629
+ regex: ["leq", "Leq", "LEQ"],
630
+ latex: " \\leq "
631
+ },
632
+ {
633
+ regex: ["le", "Le", "LE"],
634
+ latex: " \\le "
635
+ },
636
+ {
637
+ regex: "<=",
638
+ latex: " \\leqq ",
639
+ alphabetic: false
640
+ },
641
+ {
642
+ regex: ["geq", "Geq", "GEQ"],
643
+ latex: " \\geq "
644
+ },
645
+ {
646
+ regex: ["ge", "Ge", "GE"],
647
+ latex: " \\ge "
648
+ },
649
+ {
650
+ regex: ">=",
651
+ latex: " \\geqq ",
652
+ alphabetic: false
653
+ },
654
+ {
655
+ regex: "(?<![>\\-])(?:(?<!\\s)>|>(?!\\s))(?![=>])",
656
+ latex: " > ",
657
+ alphabetic: false
658
+ },
659
+ {
660
+ regex: "(?<![s<])(?:(?<!\\s)<|<(?!\\s))(?![<=])",
661
+ latex: " < ",
662
+ alphabetic: false
663
+ },
664
+
665
+ {
666
+ regex: ["oplus", "Oplus", "OPLUS"],
667
+ latex: " \\oplus "
668
+ },
669
+ {
670
+ regex: ["ominus", "Ominus", "OMINUS"],
671
+ latex: " \\ominus "
672
+ },
673
+ {
674
+ regex: ["otimes", "Otimes", "OTIMES"],
675
+ latex: " \\otimes "
676
+ },
677
+ {
678
+ regex: ["odot", "Odot", "ODOT"],
679
+ latex: " \\odot "
680
+ },
681
+ {
682
+ regex: ["oslash", "Oslash", "OSLASH"],
683
+ latex: " \\oslash "
684
+ },
685
+ {
686
+ regex: ["lor", "Lor", "LOR"],
687
+ latex: " \\lor "
688
+ },
689
+ {
690
+ regex: ["vee", "Vee", "VEE"],
691
+ latex: " \\vee "
692
+ },
693
+ {
694
+ regex: ["bigvee", "Bigvee", "BIGVEE"],
695
+ latex: " \\bigvee "
696
+ },
697
+ {
698
+ regex: ["land", "Land", "LAND"],
699
+ latex: " \\land "
700
+ },
701
+ {
702
+ regex: ["wedge", "Wedge", "WEDGE"],
703
+ latex: " \\wedge "
704
+ },
705
+ {
706
+ regex: ["bigwedge", "Bigwedge", "BIGWEDGE"],
707
+ latex: " \\bigwedge "
708
+ },
709
+ {
710
+ regex: "(?<!<)<<(?!<)",
711
+ latex: " \\ll ",
712
+ alphabetic: false
713
+ },
714
+ {
715
+ regex: "(?<!>)>>(?!>)",
716
+ latex: " \\gg ",
717
+ alphabetic: false
718
+ },
719
+ {
720
+ regex: "<<<",
721
+ latex: " \\lll ",
722
+ alphabetic: false
723
+ },
724
+ {
725
+ regex: ["lll", "Lll", "LLL"],
726
+ latex: " \\lll "
727
+ },
728
+ {
729
+ regex: ">>>",
730
+ latex: " \\ggg ",
731
+ alphabetic: false
732
+ },
733
+ {
734
+ regex: "ggg",
735
+ latex: " \\ggg "
736
+ },
737
+ {
738
+ regex: ["prec", "PREC"],
739
+ latex: " \\prec "
740
+ },
741
+ {
742
+ regex: ["succ", "Succ", "SUCC"],
743
+ latex: " \\succ "
744
+ },
745
+
746
+
747
+ {
748
+ regex: "\\+\\-",
749
+ latex: " \\pm "
750
+ },
751
+ {
752
+ regex: ["plusminus", "Plusminus", "PLUSMINUS"],
753
+ latex: " \\pm "
754
+ },
755
+ {
756
+ regex: "\\-\\+",
757
+ latex: " \\mp "
758
+ },
759
+ {
760
+ regex: ["minusplus", "Minusplus", "MINUSPLUS"],
761
+ latex: " \\mp "
762
+ },
763
+ {
764
+ regex: ["dsum", "Dsum", "DSUM"],
765
+ latex: " \\dotplus "
766
+ },
767
+ {
768
+ regex: ["times", "Times", "TIMES"],
769
+ latex: " \\times "
770
+ },
771
+ {
772
+ regex: ["divide", "Divide", "DIVIDE"],
773
+ latex: " \\div "
774
+ },
775
+ {
776
+ regex: ["div", "Div", "DIV"],
777
+ latex: " \\div "
778
+ },
779
+ {
780
+ regex: ["circ", "Circ", "CIRC"],
781
+ latex: " \\circ "
782
+ },
783
+ {
784
+ regex: ["bullet", "Bullet", "BULLET"],
785
+ latex: " \\bullet "
786
+ },
787
+ {
788
+ regex: ["Deg", "DEG"],
789
+ latex: " \\,^{\\circ} "
790
+ },
791
+ {
792
+ regex: ["ast", "Ast", "AST"],
793
+ latex: " \\ast "
794
+ },
795
+ {
796
+ regex: ["star", "Star", "STAR"],
797
+ latex: " \\star "
798
+ },
799
+ {
800
+ regex: ["bigcirc", "Bigcirc", "BIGCIRC"],
801
+ latex: " \\bigcirc "
802
+ },
803
+ {
804
+ regex: ["emptyset", "Emptyset", "EMPTYSET"],
805
+ latex: " \\emptyset "
806
+ },
807
+ {
808
+ regex: ["therefore", "Therefore", "THEREFORE"],
809
+ latex: " \\therefore "
810
+ },
811
+ {
812
+ regex: ["because", "Because", "BECAUSE"],
813
+ latex: " \\because "
814
+ },
815
+ {
816
+ regex: ["exists?", "Exists?", "EXISTS?"],
817
+ latex: " \\exists "
818
+ },
819
+ {
820
+ regex: ["ne", "Ne", "NE"],
821
+ latex: " \\ne "
822
+ },
823
+ {
824
+ regex: "!=",
825
+ latex: " \\ne ",
826
+ alphabetic: false
827
+ },
828
+ {
829
+ regex: ["neq", "Neq", "NEQ"],
830
+ latex: " \\neq "
831
+ },
832
+ {
833
+ regex: ["doteq", "Doteq", "DOTEQ"],
834
+ latex: " \\doteq "
835
+ },
836
+ {
837
+ regex: ["image", "Image"],
838
+ latex: " \\fallingdotseq "
839
+ },
840
+ {
841
+ regex: ["reimage", "Reimage", "REIMAGE"],
842
+ latex: " \\risingdotseq "
843
+ },
844
+ {
845
+ regex: ["sim", "Sim", "SIM"],
846
+ latex: " \\backsim "
847
+ },
848
+ {
849
+ regex: "∾",
850
+ latex: " \\backsim ",
851
+ alphabetic: false
852
+ },
853
+ {
854
+ regex: "\\xf3\\xb0\\x81\\x80",
855
+ latex: " \\backsim ",
856
+ alphabetic: false
857
+ },
858
+ {
859
+ regex: ["simeq", "Simeq", "SIMEQ"],
860
+ latex: " \\simeq "
861
+ },
862
+ {
863
+ regex: ["approx", "Approx", "APPROX"],
864
+ latex: " \\approx "
865
+ },
866
+ {
867
+ regex: ["cong", "Cong", "CONG"],
868
+ latex: " \\cong "
869
+ },
870
+ {
871
+ regex: ["equiv", "Equiv", "EQUIV"],
872
+ latex: " \\equiv "
873
+ },
874
+ {
875
+ regex: "==",
876
+ latex: " \\equiv ",
877
+ alphabetic: false
878
+ },
879
+ {
880
+ regex: ["asymp", "Asymp", "ASYMP"],
881
+ latex: " \\asymp "
882
+ },
883
+ {
884
+ regex: ["iso", "Iso", "ISO"],
885
+ latex: " \\Bumpeq "
886
+ },
887
+ {
888
+ regex: ["diamond", "Diamond", "DIAMOND"],
889
+ latex: " \\diamond "
890
+ },
891
+ {
892
+ regex: ["Forall", "FORALL"],
893
+ latex: " \\forall "
894
+ },
895
+ {
896
+ regex: "prime",
897
+ latex: " ' "
898
+ },
899
+ {
900
+ regex: ["partial", "Partial", "PARTIAL"],
901
+ latex: " \\partial "
902
+ },
903
+ {
904
+ regex: ["infty", "Infty", "INFTY"],
905
+ latex: " \\infty "
906
+ },
907
+ {
908
+ regex: ["inf", "Inf", "INF"],
909
+ latex: " \\infty "
910
+ },
911
+ {
912
+ regex: ["infinity", "Infinity", "INFINITY"],
913
+ latex: " \\infty "
914
+ },
915
+ {
916
+ regex: ["LNOT"],
917
+ latex: " \\lnot "
918
+ },
919
+ {
920
+ regex: ["neg", "Neg", "NEG"],
921
+ latex: " \\neg "
922
+ },
923
+ {
924
+ regex: ["propto", "PROPTO"],
925
+ latex: " \\propto "
926
+ },
927
+ {
928
+ regex: ["xor", "Xor", "XOR"],
929
+ latex: " \\veebar "
930
+ },
931
+ {
932
+ regex: ["dagger", "Dagger", "DAGGER"],
933
+ latex: " \\dagger "
934
+ },
935
+ {
936
+ regex: ["ddagger", "Ddagger", "DDAGGER"],
937
+ latex: " \\ddagger "
938
+ },
939
+ {
940
+ regex: ["parallel", "Parallel", "PARALLEL"],
941
+ latex: " \\parallel "
942
+ },
943
+
944
+
945
+ {
946
+ regex: ["larrow", "leftarrow"],
947
+ latex: " \\leftarrow "
948
+ },
949
+ {
950
+ regex: ["Leftarrow", "LEFTARROW", "LARROW", "Larrow"],
951
+ latex: " \\Leftarrow "
952
+ },
953
+ {
954
+ regex: ["rarrow", "rightarrow"],
955
+ latex: " \\rightarrow "
956
+ },
957
+ {
958
+ regex: ["Rightarrow", "RIGHTARROW", "RARROW", "Rarrow"],
959
+ latex: " \\Rightarrow "
960
+ },
961
+ {
962
+ regex: "uparrow",
963
+ latex: " \\uparrow "
964
+ },
965
+ {
966
+ regex: ["Uparrow", "UPARROW"],
967
+ latex: " \\Uparrow "
968
+ },
969
+ {
970
+ regex: "downarrow",
971
+ latex: " \\downarrow "
972
+ },
973
+ {
974
+ regex: ["Downarrow", "DOWNARROW"],
975
+ latex: " \\Downarrow "
976
+ },
977
+ {
978
+ regex: "udarrow",
979
+ latex: " \\updownarrow "
980
+ },
981
+ {
982
+ regex: ["Udarrow", "UDARROW"],
983
+ latex: " \\Updownarrow "
984
+ },
985
+ {
986
+ regex: "lrarrow",
987
+ latex: " \\leftrightarrow "
988
+ },
989
+ {
990
+ regex: ["Lrarrow", "LRARROW"],
991
+ latex: " \\Leftrightarrow "
992
+ },
993
+ {
994
+ regex: ["nwarrow", "Nwarrow", "NWARROW"],
995
+ latex: " \\nwarrow "
996
+ },
997
+ {
998
+ regex: ["searrow", "Searrow", "SEARROW"],
999
+ latex: " \\searrow "
1000
+ },
1001
+ {
1002
+ regex: ["nearrow", "Nearrow", "NEARROW"],
1003
+ latex: " \\nearrow "
1004
+ },
1005
+ {
1006
+ regex: ["swarrow", "Swarrow", "SWARROW"],
1007
+ latex: " \\swarrow "
1008
+ },
1009
+ {
1010
+ regex: ["hookleft", "Hookleft", "HOOKLEFT"],
1011
+ latex: " \\hookleftarrow "
1012
+ },
1013
+ {
1014
+ regex: ["hookright", "Hookright", "HOOKRIGHT"],
1015
+ latex: " \\hookrightarrow "
1016
+ },
1017
+ {
1018
+ regex: ["mapsto", "Mapsto", "MAPSTO"],
1019
+ latex: " \\mapsto "
1020
+ },
1021
+ {
1022
+ regex: ["Vert", "VERT"],
1023
+ latex: " \\Vert "
1024
+ },
1025
+ {
1026
+ regex: "vert",
1027
+ latex: " \\vert "
1028
+ },
1029
+
1030
+
1031
+ {
1032
+ regex: ["backslash", "Backslash", "BACKSLASH"],
1033
+ latex: " \\backslash "
1034
+ },
1035
+ {
1036
+ regex: ["cdot(?!s)", "Cdot(?!s)", "CDOT(?!S)"],
1037
+ latex: " \\cdot "
1038
+ },
1039
+ {
1040
+ regex: ["cdots", "Cdots", "CDOTS"],
1041
+ latex: " \\cdots "
1042
+ },
1043
+ {
1044
+ regex: ["ldots", "Ldots", "LDOTS"],
1045
+ latex: " \\ldots "
1046
+ },
1047
+ {
1048
+ regex: ["vdots", "Vdots", "VDOTS"],
1049
+ latex: " \\vdots "
1050
+ },
1051
+ {
1052
+ regex: ["ddots", "Ddots", "DDOTS"],
1053
+ latex: " \\ddots "
1054
+ },
1055
+ {
1056
+ regex: ["triangle(?![dlr])", "Triangle(?![dlr])", "TRIANGLE(?![DLR])"],
1057
+ latex: " \\triangle "
1058
+ },
1059
+ {
1060
+ regex: ["triangled", "Triangled", "TRIANGLED"],
1061
+ latex: " \\triangledown "
1062
+ },
1063
+ {
1064
+ regex: ["trianglel", "Trianglel", "TRIANGLEL"],
1065
+ latex: " \\triangleleft "
1066
+ },
1067
+ {
1068
+ regex: ["triangler", "Triangler", "TRIANGLER"],
1069
+ latex: " \\triangleright "
1070
+ },
1071
+ {
1072
+ regex: ["nabla", "Nabla", "NABLA"],
1073
+ latex: " \\nabla "
1074
+ },
1075
+ {
1076
+ regex: ["angle", "Angle", "ANGLE"],
1077
+ latex: " \\angle "
1078
+ },
1079
+ {
1080
+ regex: ["langle", "Langle", "LANGLE"],
1081
+ latex: " \\langle "
1082
+ },
1083
+ {
1084
+ regex: ["rangle", "Rangle", "RANGLE"],
1085
+ latex: " \\rangle "
1086
+ },
1087
+ {
1088
+ regex: ["msangle", "Msangle", "MSANGLE"],
1089
+ latex: " \\measuredangle "
1090
+ },
1091
+ {
1092
+ regex: ["sangle", "Sangle", "SANGLE"],
1093
+ latex: " \\sphericalangle "
1094
+ },
1095
+ {
1096
+ regex: ["vdash", "Vdash", "VDASH"],
1097
+ latex: " \\vdash "
1098
+ },
1099
+ {
1100
+ regex: ["hright", "Hright", "HRIGHT"],
1101
+ latex: " \\vdash "
1102
+ },
1103
+ {
1104
+ regex: ["dashv", "Dashv", "DASHV"],
1105
+ latex: " \\dashv "
1106
+ },
1107
+ {
1108
+ regex: ["hleft", "Hleft", "HLEFT"],
1109
+ latex: " \\dashv "
1110
+ },
1111
+ {
1112
+ regex: ["bot", "Bot", "BOT"],
1113
+ latex: " \\bot "
1114
+ },
1115
+ {
1116
+ regex: ["top", "Top", "TOP"],
1117
+ latex: " \\top "
1118
+ },
1119
+ {
1120
+ regex: ["Models", "MODELS"],
1121
+ latex: " \\models "
1122
+ },
1123
+ {
1124
+ regex: ["laplace", "Laplace", "LAPLACE"],
1125
+ latex: " \\mathscr {L} "
1126
+ },
1127
+ {
1128
+ regex: ["centigrade", "Centigrade", "CENTIGRADE"],
1129
+ latex: " \\,^{\\circ}\\mathrm {C} "
1130
+ },
1131
+ {
1132
+ regex: ["fahrenheit", "Fahrenheit", "FAHRENHEIT"],
1133
+ latex: " \\,^{\\circ}\\mathrm {F} "
1134
+ },
1135
+ {
1136
+ regex: ["amalg", "Amalg", "AMALG"],
1137
+ latex: " \\amalg "
1138
+ },
1139
+ {
1140
+ regex: ["lfloor", "Lfloor", "LFLOOR"],
1141
+ latex: " \\lfloor "
1142
+ },
1143
+ {
1144
+ regex: ["rfloor", "Rfloor", "RFLOOR"],
1145
+ latex: " \\rfloor "
1146
+ },
1147
+ {
1148
+ regex: ["lceil", "Lceil", "LCEIL"],
1149
+ latex: " \\lceil "
1150
+ },
1151
+ {
1152
+ regex: ["rceil", "Rceil", "RCEIL"],
1153
+ latex: " \\rceil "
1154
+ },
1155
+ {
1156
+ regex: "->",
1157
+ latex: " \\to ",
1158
+ alphabetic: false
1159
+ }
1160
+ ]
1161
+
1162
+ RESERVED_WORD = [
1163
+ {
1164
+ regex: "(?<!mathrm\\s{)sin(?!h)",
1165
+ latex: " \\mathrm {sin} "
1166
+ },
1167
+ {
1168
+ regex: "(?<!mathrm\\s{)cos(?!ec|h)",
1169
+ latex: " \\mathrm {cos} "
1170
+ },
1171
+ {
1172
+ regex: "(?<!mathrm\\s{)coth",
1173
+ latex: " \\mathrm {coth} "
1174
+ },
1175
+ {
1176
+ regex: "(?<!mathrm\\s{)log",
1177
+ latex: " \\mathrm {log} "
1178
+ },
1179
+ {
1180
+ regex: "(?<!mathrm\\s{)tan(?!h)",
1181
+ latex: " \\mathrm {tan} "
1182
+ },
1183
+ {
1184
+ regex: "(?<!mathrm\\s{)cot(?!h)",
1185
+ latex: " \\mathrm {cot} "
1186
+ },
1187
+ {
1188
+ regex: "(?<!mathrm\\s{)ln(?!ot)",
1189
+ latex: " \\mathrm {ln} "
1190
+ },
1191
+ {
1192
+ regex: "(?<!mathrm\\s{)lg",
1193
+ latex: " \\mathrm {lg} "
1194
+ },
1195
+ {
1196
+ regex: "(?<!mathrm\\s{)sec",
1197
+ latex: " \\mathrm {sec} "
1198
+ },
1199
+ {
1200
+ regex: "(?<!mathrm\\s{)cosec",
1201
+ latex: " \\mathrm {cosec} "
1202
+ },
1203
+ {
1204
+ regex: "(?<!mathrm\\s{)max",
1205
+ latex: " \\mathrm {max} "
1206
+ },
1207
+ {
1208
+ regex: "(?<!mathrm\\s{)min",
1209
+ latex: " \\mathrm {min} "
1210
+ },
1211
+ {
1212
+ regex: "(?<!mathrm\\s{)csc",
1213
+ latex: " \\mathrm {csc} "
1214
+ },
1215
+ {
1216
+ regex: "(?<!mathrm\\s{)arcsin",
1217
+ latex: " \\mathrm {arcsin} "
1218
+ },
1219
+ {
1220
+ regex: "(?<!mathrm\\s{)lim",
1221
+ latex: " \\mathrm {lim} "
1222
+ },
1223
+ {
1224
+ regex: "(?<!mathrm\\s{)Lim",
1225
+ latex: " \\mathrm {Lim} "
1226
+ },
1227
+ {
1228
+ regex: "(?<!mathrm\\s{)arccos",
1229
+ latex: " \\mathrm {arccos} "
1230
+ },
1231
+ {
1232
+ regex: "(?<!mathrm\\s{)arctan",
1233
+ latex: " \\mathrm {arctan} "
1234
+ },
1235
+ {
1236
+ regex: "(?<!mathrm\\s{)exp",
1237
+ latex: " \\mathrm {exp} "
1238
+ },
1239
+ {
1240
+ regex: "(?<!mathrm\\s{)Exp",
1241
+ latex: " \\mathrm {Exp} "
1242
+ },
1243
+ {
1244
+ regex: "(?<!mathrm\\s{)arc(?!h|sin|cos|tan)",
1245
+ latex: " \\mathrm {arc} "
1246
+ },
1247
+ {
1248
+ regex: "(?<!mathrm\\s{)sinh",
1249
+ latex: " \\mathrm {sinh} "
1250
+ },
1251
+ {
1252
+ regex: "(?<!mathrm\\s{)det",
1253
+ latex: " \\mathrm {det} "
1254
+ },
1255
+ {
1256
+ regex: "(?<!mathrm\\s{)gcd",
1257
+ latex: " \\mathrm {gcd} "
1258
+ },
1259
+ {
1260
+ regex: "(?<!mathrm\\s{)cosh",
1261
+ latex: " \\mathrm {cosh} "
1262
+ },
1263
+ {
1264
+ regex: "(?<!mathrm\\s{)tanh",
1265
+ latex: " \\mathrm {tanh} "
1266
+ },
1267
+ {
1268
+ regex: "(?<!mathrm\\s{)mod",
1269
+ latex: " \\mathrm {mod} "
1270
+ },
1271
+
1272
+ {
1273
+ regex: "(?<!mathrm\\s{)if",
1274
+ latex: " \\mathrm {if} "
1275
+ },
1276
+ {
1277
+ regex: "(?<!mathrm\\s{)for",
1278
+ latex: " \\mathrm {for} "
1279
+ },
1280
+ {
1281
+ regex: "(?<!mathrm\\s{)and",
1282
+ latex: " \\mathrm {and} "
1283
+ },
1284
+ {
1285
+ regex: "(?<!mathrm\\s{)hom",
1286
+ latex: " \\mathrm {hom} "
1287
+ },
1288
+ {
1289
+ regex: "(?<!mathrm\\s{)ker",
1290
+ latex: " \\mathrm {ker} "
1291
+ },
1292
+ {
1293
+ regex: "(?<!mathrm\\s{)deg",
1294
+ latex: " \\mathrm {deg} "
1295
+ },
1296
+ {
1297
+ regex: "(?<!mathrm\\s{)arg",
1298
+ latex: " \\mathrm {arg} "
1299
+ },
1300
+ {
1301
+ regex: "(?<!mathrm\\s{)dim",
1302
+ latex: " \\mathrm {dim} "
1303
+ },
1304
+ {
1305
+ regex: "(?<!mathrm\\s{)Pr",
1306
+ latex: " \\mathrm {Pr} "
1307
+ }
1308
+ ]
1309
+
1310
+ def rule_regex(rule)
1311
+ regexes = []
1312
+ if rule[:regex].class == Array
1313
+ regexes = rule[:regex]
1314
+ else
1315
+ regexes << rule[:regex]
1316
+ end
1317
+
1318
+ is_alphabetic = rule[:alphabetic].nil? ? true : rule[:alphabetic]
1319
+ if is_alphabetic
1320
+ return %r((?<![a-zA-Z\\])(#{regexes.join('|')}))
1321
+ else
1322
+ return %r((?<![\\])(#{regexes.join('|')}))
1323
+ end
1324
+ end
1325
+ end
1326
+ end