From 16de14ea980aec9da2b6960adff6d08597bd88b0 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Mon, 11 Dec 2017 13:35:27 -0600 Subject: [PATCH 01/25] Updated katex library --- changelogs/unreleased/jivl-update-katex.yml | 5 + vendor/assets/fonts/KaTeX_AMS-Regular.eot | Bin 71656 -> 71656 bytes vendor/assets/fonts/KaTeX_AMS-Regular.ttf | Bin 71428 -> 71428 bytes vendor/assets/fonts/KaTeX_AMS-Regular.woff | Bin 40200 -> 40200 bytes vendor/assets/fonts/KaTeX_AMS-Regular.woff2 | Bin 33188 -> 33212 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.eot | Bin 19836 -> 19836 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 19588 -> 19588 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.woff | Bin 12136 -> 12136 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 10604 -> 10584 bytes .../fonts/KaTeX_Caligraphic-Regular.eot | Bin 19220 -> 19220 bytes .../fonts/KaTeX_Caligraphic-Regular.ttf | Bin 18960 -> 18960 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 11868 -> 11868 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 10396 -> 10396 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.eot | Bin 36200 -> 36200 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf | Bin 35968 -> 35968 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.woff | Bin 23388 -> 23388 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 20476 -> 20472 bytes vendor/assets/fonts/KaTeX_Fraktur-Regular.eot | Bin 34896 -> 34896 bytes vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf | Bin 34652 -> 34652 bytes .../assets/fonts/KaTeX_Fraktur-Regular.woff | Bin 22844 -> 22844 bytes .../assets/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 19868 -> 19872 bytes vendor/assets/fonts/KaTeX_Main-Bold.eot | Bin 60688 -> 63248 bytes vendor/assets/fonts/KaTeX_Main-Bold.ttf | Bin 60468 -> 63028 bytes vendor/assets/fonts/KaTeX_Main-Bold.woff | Bin 35480 -> 37160 bytes vendor/assets/fonts/KaTeX_Main-Bold.woff2 | Bin 29492 -> 31000 bytes vendor/assets/fonts/KaTeX_Main-Italic.eot | Bin 44132 -> 47864 bytes vendor/assets/fonts/KaTeX_Main-Italic.ttf | Bin 43904 -> 47636 bytes vendor/assets/fonts/KaTeX_Main-Italic.woff | Bin 24880 -> 27092 bytes vendor/assets/fonts/KaTeX_Main-Italic.woff2 | Bin 21032 -> 22972 bytes vendor/assets/fonts/KaTeX_Main-Regular.eot | Bin 68228 -> 71548 bytes vendor/assets/fonts/KaTeX_Main-Regular.ttf | Bin 67996 -> 71316 bytes vendor/assets/fonts/KaTeX_Main-Regular.woff | Bin 37620 -> 39576 bytes vendor/assets/fonts/KaTeX_Main-Regular.woff2 | Bin 31220 -> 32948 bytes vendor/assets/fonts/KaTeX_Math-BoldItalic.eot | Bin 39990 -> 39990 bytes vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf | Bin 39744 -> 39744 bytes .../assets/fonts/KaTeX_Math-BoldItalic.woff | Bin 23192 -> 23192 bytes .../assets/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 20036 -> 20028 bytes vendor/assets/fonts/KaTeX_Math-Italic.eot | Bin 41676 -> 41676 bytes vendor/assets/fonts/KaTeX_Math-Italic.ttf | Bin 41448 -> 41448 bytes vendor/assets/fonts/KaTeX_Math-Italic.woff | Bin 23820 -> 23820 bytes vendor/assets/fonts/KaTeX_Math-Italic.woff2 | Bin 20432 -> 20420 bytes vendor/assets/fonts/KaTeX_Math-Regular.eot | Bin 41536 -> 41536 bytes vendor/assets/fonts/KaTeX_Math-Regular.ttf | Bin 41304 -> 41304 bytes vendor/assets/fonts/KaTeX_Math-Regular.woff | Bin 23712 -> 23712 bytes vendor/assets/fonts/KaTeX_Math-Regular.woff2 | Bin 20344 -> 20384 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.eot | Bin 34204 -> 34204 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf | Bin 33964 -> 33964 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.woff | Bin 19196 -> 19196 bytes .../assets/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 16020 -> 16000 bytes .../assets/fonts/KaTeX_SansSerif-Italic.eot | Bin 31320 -> 31320 bytes .../assets/fonts/KaTeX_SansSerif-Italic.ttf | Bin 31072 -> 31072 bytes .../assets/fonts/KaTeX_SansSerif-Italic.woff | Bin 18080 -> 18080 bytes .../assets/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 15152 -> 15144 bytes .../assets/fonts/KaTeX_SansSerif-Regular.eot | Bin 30212 -> 30212 bytes .../assets/fonts/KaTeX_SansSerif-Regular.ttf | Bin 29960 -> 29960 bytes .../assets/fonts/KaTeX_SansSerif-Regular.woff | Bin 16744 -> 16744 bytes .../fonts/KaTeX_SansSerif-Regular.woff2 | Bin 13908 -> 13900 bytes vendor/assets/fonts/KaTeX_Script-Regular.eot | Bin 25104 -> 25104 bytes vendor/assets/fonts/KaTeX_Script-Regular.ttf | Bin 24864 -> 24864 bytes vendor/assets/fonts/KaTeX_Script-Regular.woff | Bin 13856 -> 13856 bytes .../assets/fonts/KaTeX_Script-Regular.woff2 | Bin 12276 -> 12284 bytes vendor/assets/fonts/KaTeX_Size1-Regular.eot | Bin 13408 -> 13408 bytes vendor/assets/fonts/KaTeX_Size1-Regular.ttf | Bin 13172 -> 13172 bytes vendor/assets/fonts/KaTeX_Size1-Regular.woff | Bin 6980 -> 6980 bytes vendor/assets/fonts/KaTeX_Size1-Regular.woff2 | Bin 5820 -> 5812 bytes vendor/assets/fonts/KaTeX_Size2-Regular.eot | Bin 12648 -> 12648 bytes vendor/assets/fonts/KaTeX_Size2-Regular.ttf | Bin 12412 -> 12412 bytes vendor/assets/fonts/KaTeX_Size2-Regular.woff | Bin 6684 -> 6684 bytes vendor/assets/fonts/KaTeX_Size2-Regular.woff2 | Bin 5560 -> 5556 bytes vendor/assets/fonts/KaTeX_Size3-Regular.eot | Bin 8596 -> 8596 bytes vendor/assets/fonts/KaTeX_Size3-Regular.ttf | Bin 8360 -> 8360 bytes vendor/assets/fonts/KaTeX_Size3-Regular.woff | Bin 4776 -> 4776 bytes vendor/assets/fonts/KaTeX_Size3-Regular.woff2 | Bin 3856 -> 3852 bytes vendor/assets/fonts/KaTeX_Size4-Regular.eot | Bin 11520 -> 11520 bytes vendor/assets/fonts/KaTeX_Size4-Regular.ttf | Bin 11284 -> 11284 bytes vendor/assets/fonts/KaTeX_Size4-Regular.woff | Bin 6456 -> 6456 bytes vendor/assets/fonts/KaTeX_Size4-Regular.woff2 | Bin 5172 -> 5168 bytes .../assets/fonts/KaTeX_Typewriter-Regular.eot | Bin 35784 -> 35984 bytes .../assets/fonts/KaTeX_Typewriter-Regular.ttf | Bin 35528 -> 35728 bytes .../fonts/KaTeX_Typewriter-Regular.woff | Bin 20712 -> 20812 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 17344 -> 17360 bytes vendor/assets/javascripts/katex.js | 14958 +++++++++++----- vendor/assets/stylesheets/katex.scss | 826 +- 83 files changed, 10864 insertions(+), 4925 deletions(-) create mode 100644 changelogs/unreleased/jivl-update-katex.yml mode change 100644 => 100755 vendor/assets/fonts/KaTeX_AMS-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_AMS-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_AMS-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_AMS-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Bold.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Bold.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Bold.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Bold.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Italic.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Italic.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Italic.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Italic.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Main-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Italic.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Italic.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Italic.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Italic.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Math-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Script-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Script-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Script-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Script-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size1-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size1-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size1-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size1-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size2-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size2-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size2-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size2-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size3-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size3-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size3-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size3-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size4-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size4-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size4-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Size4-Regular.woff2 mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.eot mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.woff mode change 100644 => 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 diff --git a/changelogs/unreleased/jivl-update-katex.yml b/changelogs/unreleased/jivl-update-katex.yml new file mode 100644 index 00000000000..99b5fe49620 --- /dev/null +++ b/changelogs/unreleased/jivl-update-katex.yml @@ -0,0 +1,5 @@ +--- +title: Updated the katex library +merge_request: 15864 +author: +type: other diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.eot b/vendor/assets/fonts/KaTeX_AMS-Regular.eot old mode 100644 new mode 100755 index 784276a3cbfb3d3b93c974594ffaf70514ab0eb7..97fd899ab05991ad76b96ce6ae36c91d36551e85 GIT binary patch delta 76 zcmaE{p5?`QmI*d2KlTXeOmx`7k|~|AYvPX_7Ovk>!ILu>8)S5Z_WX$FxB1E-&-{V` Z2(CWqUJ0X{S(vu7Ffl$5WdVxL1^}q}9rpkL delta 76 zcmaE{p5?`QmI*d2O5%#H6CJj&q`V8rT_o{ diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.ttf b/vendor/assets/fonts/KaTeX_AMS-Regular.ttf old mode 100644 new mode 100755 index 6f1e0be2028f8c9ccb9ca055f9091fd8495c2975..001c30f2f432dbb9c31f85ef5a3c85e5c452939f GIT binary patch delta 81 zcmZo!$I`NnMTCKofq{Xap@D&!p}@^8#5YqqVb?^F92TzMQNa^i8f0{Y_WX$FxB1E- d&-?%fY||5(NN?jSii&ivf9?1l8n=n`a;+zW@LL delta 82 zcmV-Y0ImOsx&ny00+2ieWbRS1kwAk9G5`PoHUgnMN0H2xDpy5urFeduuMG0cFMuKp o7q{0ehSA@y{xjs%Vtx(eaxgG~L;*wM488!fivf9?1ktyAl5V^sFaQ7m diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 b/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 old mode 100644 new mode 100755 index ea81079c4e2ec7160db9fe41ffa1ab70098f3d45..6b43fd937ab368f616ba801456886ff32c22cc45 GIT binary patch literal 33212 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≀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 diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot old mode 100644 new mode 100755 index 1a0db0c568e4697d56785a687649e98e9bacda7b..f4613bc7c397799e530ab83eeea8c1af14e944e9 GIT binary patch delta 73 zcmew}i}BAa#tAko|B90@O>{WHk|~|AdomAW4vTq W0}x!?Ub7fRZ&(R diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf b/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf old mode 100644 new mode 100755 index b94907dad11e545adaf8fb1aaf54c032b7de1796..e92c81860c57eea8f174272829f0d79eb8850bc9 GIT binary patch delta 77 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 GRnG!|BwAqr delta 10569 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 XiP`*b5u%u3&srS+(>FXsW979@c-~si diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot old mode 100644 new mode 100755 index 6cc83d0922c961a8e94dc0460bb583f14b6a041e..b7f66c8e206001e39ebae041731a8f38b5c8dab5 GIT binary patch delta 73 zcmbO-jd98}#tAko$HiXloak_cB~v>0Sw=H>)tc@n8Xp%mDxkd>rEd delta 73 zcmbO-jd98}#tAko9}9k5n&@zaCFNbk|ZMiB-^1_lOxh6V;^h5|RY5Z_GcgxwQGa#;BNqe>>WG|23HC3ZZX-{vcW ZJo5{nN`|XXx>v&J%?gZfJXnAta{yVE8V>*f delta 77 zcmbO*g>k|ZMiB-^1_lOxh6V;^h5|RY5Z{z{ftx0ZRhhy(`pJZO>3l`2a=3O>g3+k9n^XMO<`VYs-xW-*NZ h|LDI4OChr;kjufq1QG=Rus;sOvx@=EECkWFe3LYEBCG%a diff --git a/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 b/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 old mode 100644 new mode 100755 index dd76d3488d5b1722e8f929349a978d8cd953c4c2..d762739df6d9df34a5d4f1783857ab88dd045121 GIT binary patch delta 10381 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 ZXMO=x$#C^a_evPOS%ER8n*}H`2LLD$7<&K! delta 77 zcmZpe$<#2DNrZusfq{Xap@D&!p}@^8#5d(#;HHTpIV|icHbxU$8f2{g#%aX!+k9n^ ZXMO=x$#8Ld%@P>BS%ER8n*}H`8303@7<&K! diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff b/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff old mode 100644 new mode 100755 index dc325713291c91c9fef5967e0d52d0366704715e..fd2d1be5547a314ff193b2bc2dd08504c4e1b693 GIT binary patch delta 77 zcmV-T0J8twwgKF>0gyZdX&Yd>kwAz9558JFk<67U#rG^s@%%Pl8RVH?07V$CKIvWw jqyNABugG$P=?PFB2LlsG6aa6~4so-K0nJ$i)#QtuLjxjS delta 77 zcmV-T0J8twwgKF>0gyZdWbRS2kwAz92V^`lk<67UtG{s?@%%Pl8RVH?07V!sZm(Ga jqyNABugG$P=?PFB2LlsG6aart4vw>n0nJ$i(YJh)EFB>i diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 b/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 old mode 100644 new mode 100755 index fdc429227adb718aabf201bed2075bfbaff70a75..f5b9bc4611beec32e706aae6533d366c2e8849ea GIT binary patch literal 20472 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

||P}G8R*rF0zfsjq&eVzt+ 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 delta 1123 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 delta 1118 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 delta 32951 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 ~m$I@9c1^_oZ?N+bC+VVO{|w;) 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 T{sGxz0>=Q81Cb#F(YJh;Rr`~3 diff --git a/vendor/assets/fonts/KaTeX_Main-Bold.woff2 b/vendor/assets/fonts/KaTeX_Main-Bold.woff2 old mode 100644 new mode 100755 index af57a96c1488802f4a5a3d59cac03ad04860ea84..ad0487c9c3c65221a03ef7ae2d824884fa7c815b GIT binary patch literal 31000 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 Xf;9h=;B5aP!m4RV$0k;o00000frDRh diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.eot b/vendor/assets/fonts/KaTeX_Main-Italic.eot old mode 100644 new mode 100755 index fc770166b5e86b6a9c18440231ec09449c89b634..0c2537ba89c0b1fa01be82dc51fd968949b65c02 GIT binary patch delta 4368 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 OmxsR4DCj=`&-_2&$i_GT delta 588 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 Q1H{$&=b8k4^MCQb0lIj=SpWb4 delta 593 zcmX|8Ur1AN6#jm9cP3QKW=MgtWmAd;{bgHvx2f$97!gs#sx`fBbF;j9%Qa_=IeO?J zWRN%0Xb+J>NfN{!)Tbcm#a2s-6oe9q=plx|gdXmsqfkFMoO8bOan8s0dr;!i3)~zo30bk zSJJ$(Q;tZBJC{}g?RQ}7XhiIj39q7ke#(`R?t#ui_Sq|-+683t(Xcoe(iVliG*l@p zQ9>$4xDp*aPQ58A#S&|;ja}3)QvB)e4T>X=Z;%*0Ex@`YCS>-UGttaPy|G7>!fobM z7I;cWxAe%peX+OiqwTYzX5Ew8^eKf5_zfH!_QQsLs_rs>F2+7Ho*ly}C8`-UZzC@^T&*Q8c|klQRlBec zO|auK+Ho5xJi$0SqF8tvM=8l$>&@#8r_J6xx zMIw~n{0ZfNc1kJnHM{$0`Tuumvx?nH48;41WguCmiiYi;rk6sa5DL3@oKI%*?WdTychxqFDn^evSPF7(cR% diff --git a/vendor/assets/fonts/KaTeX_Main-Italic.woff b/vendor/assets/fonts/KaTeX_Main-Italic.woff old mode 100644 new mode 100755 index e623236bc44485389e5a1d77937699967818bbca..0c301bd6787c1791b97cbc3b06f514425ba924c4 GIT binary patch delta 24534 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 D>(h0| literal 21032 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 BmW}`b delta 1123 zcmZ8gdrVVT82@f5rIaX@FknO+VX&Yf#1U{>%A4_il=3RIJW6kGYia3KDr1B}C5_vV z;iNni*qflyy6GUuI<`2rF|#0H$`D#Oy>o0bF^-r`iD_}CEc<8Y7Rv^5M-9%8^)kxPL030ms0p6J|V#KBmgs`R?11QXyFI=%!%cI z8WUWdS0Dfpi*dMGXK0$b8Lwie?GNi3m`BEfR(3{H_@ytRw@pV;Dpe6 zxlTEot-b{CbU%RC8??T`u)gug4g_%p<7xVslJ4$w{)jIu!totIV2x#NJw#FMEBqT? z@L0nP{B*75lmD#i#MXwFkB13kF0jl2ti2%-?i?ZlEa2&m0v1Gp5MIMxGa(t3vAkJ6 zJTQCk;2;qI!K0n*C#=2c;IZ9pH?Tb-apW`@fdd)P3LnA+T%42kHQ+kuYIGfU8C==UKb;Sp_nm9bd(PjStIl7UQ_S1U38s~4 zVVapnrq1z$<6XyTN0+0+@uoxXc+TPN@IsH#U+6x%hrU9S=u2cpU!YO+Il6*ALzj^S zT|$HCEb2qO$c#>-cTg*8K}`arK_se0G9*P}Btmg07Wtx`E1N5KSIX?Ac9A{bo@EcQ zUA7G`MJ+`xy|@&%z$_fyg-2xG#rxiTn|D5CfN~FMd#M!&U{=Na0`N5^763ZkJUIh) zY=&yx0D5}Qp6lz^Z2N9Ch%5Q~)ai~Zk2M%Dt{=7eyt1P$=1}*cEkUzjSa3tI8Xpv& z5pRqi7y1dc!U5r|a5F)iP@ixyfk}KR(Udro_$cXMk}=7W%ulXO9#4T3Y06ZpC>5n? z|F_>t8%|qJ_e*a~pMTYoVa?=b#%5}>SXq)gBe48dLqQ4pocQCN*;;`N($~e@(aMRvo|YLfw4bmNrA%rJd99 zbuBtueN4So&)0Y8m+AdTO%NE?WV{t;i| aw&w;+z@2NIeBvgDfPP6J5z5A&YVaTD9JpTq diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.ttf b/vendor/assets/fonts/KaTeX_Main-Regular.ttf old mode 100644 new mode 100755 index da5797ffcce7d6bcf6155a5744398fc92ed15cc4..43145ee90cde4df1af43f3734b65edaae62db978 GIT binary patch delta 4371 zcmai1X>?oFwLa(ENmr6JShFHqvS!<|JV>%U#g^wm@es#$Y|F-T>^QcgI3|z;q7+_N zLI`gGrU`9BNkV@xl@&+`l*Q^}%n#aT(UbxqFV|TtpfoLgq7w)sgp_DMqENi9uA_PDy1_RP*53)Umex(V1-1Xxt3wEj z

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 delta 1128 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 bQN2>3SnL%GV(}jp^b&%T(2^ho)#Qt#VE;8^ delta 35052 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

->&lCcad2+JP*Eb5rbfHJERXZ(BBI~YKsfWYX;O#YEY`RXWg1NzJ=LII>X54wBF9#1 zLCu!e6l04hw-i|5-0|fUi|uyUq*YIL#Y0NK)f5;-7K!bNH)MS_Rc2QmOLwL#l_&Kj z3{TFgl^-n(VPI&{d}bi}4k$J1#Ebno#Wkfy0$p`gCYkAQUZ=z`-oANu=Q3OxpMF7` zfv+BG@>hR5Ggqibr=>Ymr7?4hh(bb3{(OQ>41UK zEafd^Yqpg{(9Ia4Xz*lR_Wv?ra?5t zb7(>eAt%LXV6`Os^Q$FA_D4BYxhJEj4-G zj2WBEOmugoe}tuLb-y9rL8n(M-j5722$Hp*4oUXmPPvjR))Q`w`nbDPDuf$!fd~C~ z59MZjoh>37x8yU8+2>X>PsRM|Mj^`!&Hs>;MwkFhK7sy3qduD6S`$)G>nMHI$5i<) z5LLPAk65Qc=_9DYB6+n#ON&SeDT@lXA`I26fL~{EbS%JMspFIcpRsY$*0`*XTt6@IDgPfc%dxR-OJzUyH#_YV$j5%tfHha39)!5QHI*Ppsi3ycZT z!ND>-G?{j=CzHBGDj1-VD-R50Uswko1mcS|Z69PcD&;Y^0(1ahs2=qQB`~iX(rW?J zK%N4+s%(zPno*;;49Qy4cJoZB?F}#PB11o%g_+ER4irRI^bMT=OvDR_V!d&fTAb4~ zw|9WYbysTr6Dq615-4Hvaj5LDWMO>yFqX|ssBx8)s7!R_sI>FH=YYZ_g?SWZFhx2< zv{j=e1pEXAB1KDYwAW(U&)W^JkdB^N2_SrL^%^c33{BzsOj+bJ5ZH=vH%Z}vn+;`$`gx!4I@yd@Xt%Z}53DQo=1we~@J+3GKl^B*J5HAIXj{)uv21pZvKUqHb8gnSs8 zY5CXolr_&0zhyP#qm+W~>Vm=TlL^oKgMH}F^C|Vm{5$Of$wNxCbP@P|whQ0z&w>Bu z|NevL7JuT_B8xt}Nd0RNU?2(Y%>yx0(EO*M>GkgZw0 zlzv&c8w(D#<^0qjGaVr>&BIbhEFjpBJ8>vDch4yTpN{bKabc_)Ma;feA;waIOqw^y z9`902WGwa5#31G%y_;fi7?N|o%#0^aXd*m`v8l^+Brz*#)Sue;V{`hJ@cuuLAvlSx zZRO@Yf1e7JJM*EveBM2d%&r4nlk3W_P)DChj5#dE3MZ2SnjWxS*A(lW>BB~m^J=@B z9^=wz^3=+BQ51z|eLS)P%PAc_j;}EC)RDBv%}H`bRyO6GalXd~x8~2A;r8sJ@}T!Q zpfqQAvXoX`PXy&jxh-TM-|NUr&R?M4>`q^8R8GWz0P*>Tm9j7*{b#7d$jx1oIa2CiVEa=iw$ z&^}~e#HoAXz;TOlPBQN-A`rN1t*HB=$i&YqO#KeZ$AyiY^E^->E#0rdgAE^~Nh3XF zpEMD!Z#?1IpPri&3)wb$)?@LTclPWi6!PdxYezj;6{7VUipp<+-FVE!)X_pR&$u=# z%^MP2#9Lfv)@!ALHVnr}sol_8qWH2^I``{r9T$H2SO6U zo*>yX{=$yWx6!c)KwF>}QFP|yM_YRGG~rR`Ht5Mn%CR9I!s>%s+7u|X@-=ZFHZQlK z1InQAK+Y@~xK${|{083znsUWrl z3cidIXk#V|?zpqX*Vb?RSA$SSyQi(-?JiDX=uj&gmCt%R;iF<5?b25pKv-Y!_X4{p z;l2PYM;g>AIoQzA;>EaPt|)v-dIjeq;*}TuSb#yUMZDTYi)uN8TAu_c!ue9{^I9!f z-{EBGUf{p>d#EiM-fg6>(QiCW6dD@z&DPF99l)NVxV2+MuZm3QyjJ_2A;SVN9DP6^ zOeqGR_wrrKxxkHtaqe?vFNnpds%{jy-ivWh9}dPvI?d;gDcfw&pu6!BbtpVr>x*4+ z&+1-&H^}oCe!EcA1LR!c?&25&&C658)~fWMIWZ+TrG8%9q5Ud>e41q&vcFrs-ykZqk>S#)_S*SWB3!xY(*+WSBY7yr?l3 ze~Z-xl6YWt6lQp+1me|D_l({VJTT!U?VJ~+eUpZOrjKgzA>lE6~2<#KY;p|}f= z&}f8m%w$FiSdc<@8kZ=~OTtzwH5Re2JrCQcek(SPMG}P2ek_MbbW$!ZRe=ioTPACE4ma~J}Hvkh~z(`VG}qlP}RC;M3Lgz^$j zTsq+(RB{tS|Aa2rQ##h457YZ6rLrRJWKl?UNv?h*mfMGgIrTDlM{3%Ikn)-Z z7rRWhnNb)~DWPiUWJAtLRKv}rtORrK7dm>ruLA@={c3nfrwUWkomoy(4(yux@vf|t z0#|*pIdXM_J9~4RoTe(#WC-oab8_<5z!<`jFS+zriqREmy50#ZRp&D6Ha#2%7do$I zc1g&-p`Dn&-F*lMMd_SrG~e}vPO_()4{VR?_OG6@v94^oOvz^X5Xzpnwzo2650Usl zOQo_RzrV-7a>}LyS*$7yY+r{CPA?$v4`vKG$VTPQ;jdGS+_VAiKM{9f_ zy%wLbJ3vJR&wz8I4FoqIA4KcEN|&F@i!}e}h`Yf-I*vQY~YD zIwM_{nJ6VcPlB9jO>^#Aid+_3L2`ngX9$9+lApyAc<=nL{BHZj z7rJ(GRlSrzvz!%1B&L;AnN4`xiQJOJu;BJ4i`6pSC|eb0k^1ZXMC0Cy61(vru<^?# zf4wxOAlvdkU9kT*ho(M7s-DwSNT+bR@;NnW|qG3N?h6F9N5%?QOrBbqgL z*WJSj9_hPKqAAgbv2C+JfM(y7tRGxWU}nQrF_4G?1+<{Y--kQ?2r91KJ{FP{YBf|c z2?6h28SpUUPy!a1BsPc1uY-z_Yx{Np;-!-W=oQ1dz@of{B&!;f1JCXjbP;1FAIf@r~Rpln&5Tb5=H;WsS8Xxhx#A`6xs_ciU zq)@~$XG9&INjMV=J+s;id*TcG_05h~5k0fZrLp=Uc|@G;?bTquuZR|$=ySz~SriO< zK!kj@Q~Modu=CLUgsy@2$^;p(7Wz(GujEzy3)PO&9BQl6ZM1zZw#FpL(tUadDn}^2 zh@j0)O!0>2EnbpX9$J}fNO2{!#){5YzZ@q+_M~2L+8n8z5Q)GzI5j2p8y!ZdjR8=6P)cO}6BGF}>;6=-<%Wc&RX6ICbLtBPo z)BT74nI(ENJ!;yx;pg3DGrvs&$uACYU(5y7$`A_s?!0TtT)F^kksH9ZS&X688O4AKL}&Uen|5`l(xVA3mB(T21B#{2u!J;X5ke(Lj3)7awZ-G zMKT}96<#Da2eBiFer;R^P)4hwNdV;9(J)cc&ROt%@U6=wTFfr6K3AoV0|Wru^y?O$ zyEj15+o;I0PD#td-Mj)rPOw;lYcY1`a#uUaT~jzzu1t?AEsQvxH1)VExO7de{!3xb z+&Mn3UXips5Uot~QRq2=b0X$vS``_=)5n?Rbj6B&r{^DCYhoTH%F4+SN(2qHsS=!*#$0xHhIH8ie9>Z7etuFSG~icWY%D`kmH=cNiMB zorFaWk^Q%X1eB^ODHl>TYm5Bz$`W*|qt`&wYdZUy*QqH`6wHu`5*!8MJdSGB(9^Qai>T1ZkJR4#>2gsA4t%gqJj@(NG0&L-i< zCuaX%4XPI{hWLcHR2MFIKRSK&O5o#C3L6)B1*e08SI-cvdxz-3lnOfDwSLzO;Y%L8 z7ZH!AvApN6y{(7b2+b$V~S*dvp8Tz{X`5$w9Oy!% zz>(BLVFc<=kzQCRHsH`k@YeX!@nyW?{{Z+1E{7-@2HcMArD5*95USxgkps4U@4`Q% z6>R=iGA7Vq@U2^XExp^q)LyceDl1iWPgKsirF)saw-l^0dPid3U6KZuKoP$QE62@ zzHWkSO$#6P)c;)OOe({AiRMCw`-<7a=^)-n7KW(J>9z*CGb8@%8V{BtbX(ae=KOc! zGx$avu3BGi$4->HsIv-L7LiaO`nW9Tfwvlz&Y4|zzeMEARyRzQvU*AAQiy8lQb(rS zLN%DvqfV~u7mR-P^;!kSo?-D7|Hh*w*fUde$Hq=UXC0qS2@xt-bZRx^h$-Lg;f0MH z`QZ=l_=bgr!RBD1&a$ica965#+wz#)SZ^V#oNX>)3(WbOzG(2ZQD7_@k}23AQ0(4? zFt()_1s|L%``gNgM}Sg3enwdu#m=EHAIXfB zKr+Rt!bQbX@fc5hR2kOAsnOmX3mEADCM zs;=b=3!lFghna%TnTTgcGuV>dsC;C%w6%)sGKq4JEmr7cY*-r^&(j>1sw1XOh4)*b9>x!C1BFsV$f zGuJ@yg%stSL*;>o>YhplT@np(w56pfiA{HN?wYG$K;yjhSY!|Stam0< zSNp#5x>k@+?X%W*OY(^Z_Ad7=%UF=v2a)uEujv~4*2+{JO~cJW-UFpuir3fG^FpuO zi4tly*pAW}=l!nw*jzw%cnJUa0?=#1tj04%Xc}FOL0k%gJ$(WOgV-G7@rc7g(AbG- z)H%;xFn{OFzwa+nSFEd0tBpUbQsjEWp@nk{TUHen2~MdOg?`&w{mI;2vlsTjd9`2a z$}(Hdy;C!jxcKFIJ(?W+JXlu0jMziqdz9^~5a_}~d%QCVT$hh(H8+KvwsV;QahCGL z$C+?NB}kjbVNWZL2vUdAgo|G&B$ag(C0~!3V>}UGxAUTEYGhVfJ(VL=mW>I5typP* zaOKtn2*F3NV8?ce@;{Y&d7p4nSn(lf*FnhIb&x{YoI~ERvrFd`@B&%x_7-1eL(MqZ zlm?|~`QcL#WfMe-MDW;{=O6!entgr#Q~S*apOdE4?wR{d&VyOoI<=Y`LeV1|)Voro zzxb#n=h2c>N!Y4aqFgq|hwz4Vj^gOkmC?Le)EJaGEj8hP=?eu`HAgh|{D^a`rY>`e zmnWc&hE?z1tu*i|x|U{~wLINkdW~H`^Q-7tc&+Lyn=W?|o|-&k-K{9qOL^=hcjXIO zjg;$*Rizh1T-1LU?ql;A6tybHGL<(lTIdNo5M0tYKZ~wq6qh!5%vh62Sa~Uin^Hjg zs)-<*E3aT0+BKgx}Jq-b>;%}wsnC6&>6i^m^)={@97dS05G))uR zAY=52HwWf}gPM9DuZP-qYty~+iom7ntf?K(u^GsAt zA}P3Z{e#?`udZJbaKj!vqU}hI)to+N4BwfR5gesI@?nobq>;BeqipiymVmJg`Tdg8 zT77`^RNQm{Q$1^zou`oV978pHw(^@}iSt4^xCT3U`XuRJhMdrO7~MYv=o9^dbAj0? zhwAg197)cc9%d^#&lv^2ksRQ+2x|85yt$`ibI zFWzT{C@}bull9Q^pF*9^stFTa*E|wQzD~N1I;!q6EU0^9-UGiLIuu)gkrt|kezJj9 z&XSKoR1MokxtpF$f#!c)cV$W-Q-ki$sJyzXp|ue-L(sHE(2<|k#3fXG^R_RxU9l6J zit#2UAuD7FrV)#p{17;T9|-IsQ9{w&90}?W2*kRo%6a9pl|N4zWt-RZHL&3-QVI>t zBc~R+vL~6OJa*aX({HC^z#THMj+raz_UPo}0;@tvO*lsujuAe-(ar_Fgxn3%G6 zdl+s)Qx^Ivs#cca!%mYxkyB#DN@oHHsMBwuls@Zxrf@u!J*_LB7f3g` zrk(y?ZcCiy%O~kKftAgvQ|k}Iy@*3^daQOh!uk2C*c(t_Wg>gweQL`IyT#b>u7}{dZCrVJb5E0*s>W(_h){Q{ z4uA5pr$&7p;-63zEc_|_ypZVTK}70bvu0BBLs5Tr0F^|kEI_35k2jgg@J}|CnAyDH zgWoO6cu3f&Wa#yf^roo?W{vo~yD^$C+l=UN4%-?rQ>IL=$O<5ytwrv3$D3vEBg~E^ zY@JSh|lFwCtJggZW19L&?HB}_tP76_~RT}F%<_N<-7If*N z>|nZOO+*KRLx2h zECfw-$Cl`!ytIii&m+$V=7^y9HmZi%&gb=c_-S1tZE+nX{@%V;u?Ag{Up8HLzV zltJ&kHFlC`T-e_5VnV1vw|R=NEyu%!A{Io6KHN+S2WX}|y4 zSZu<>OrfInVJJ+03&y-Y1`E(oOYuK_`=2DYi}|m7G&>OD^HGR<44@x=02D!VHXta~ zyaWrN4BnW9X4BQ5?7PeMk*=obQ$nyvAO{5r0Q%G#8OHQUeax_ZHGY~%2Q$Hla6#w# zGRG6R9Oe61Y$eHQcO~bzhWn`W%x0zHxs%#A?Al;eE##0&&cE6s-ghxTCs?$5{pPkYF*}T^cn_B=~HrShca{#~&ags=h{uw(fg9+2xqhDj_Tp!$MKd zGx+2)1%E;XwZbBWNX$0@VN{IKBE80`?0R~E##jOx8efLl0yXs-*~+20h9K9P5|UT4 z#u4h9hj6$xDZwjbVfRd8>Iq1a=NGX1Xtps0S}wnOHLrm|n`xuWS{Z&gjy1Ui})sKW^ zWh#D?P&I2Cmx@dj?c%6m2)5eJ&-BNR(W!whS8Z)wU45;>17pW9SP)!OQ+u(s8Z3CH zc@*_gHcxc90;%+47{z!db>ChmwZ{0UCB}lzPC67D{HpLvkelV& zzrdxbGUh`spyS6!s*CY4%(C+Pc~|IYG9B&sTV<_Gahct_eUiopn_h4J5Ap7e(`7V3 ziLW5!&(q(<>Pxf-yZYeb{W8$oZk8r19b_gz{I7}=65{is<8}wcm|T|!mZ#0hc2(5b z5sSB!!(YTBhk1TZ9W+SN+QL&(8%nfMjxcm`>__4sQ>VnCw(N*E2T=W`=dpPYsJMW_S%(Y z;fcP_dV&*noo&E6WRO5b%btI_LgeSBK6ASPP(p7+!sW5KvJm1~qaOs<)}jiLb@B-| zKxG7QCVsBae4D@t{GT$$G4+F_%Ypf_7!b;l`{cU7P-;IRbNkDK&;9H3pl(^kyHc8A z{K@p6_j${i&A%wC^+~BEWea+z83$lLKUk|67*r@27-Y4zM3m^$>z|ax8Z>?K94Ho< zvCS>XQreBaYDwY7d9#fAy|Dx|c* z>4YrM)Zq~*Y^=@hakBrg@D{+BV0WYcGs|kAoPfQI_5(eg<;T(`YbCm>K3cl`&_M+) zZIb`sC066l+S(&&Bh$sX3BIoRQ<)|>+mz@xJ)4ZM6qs_WlPx(0yq+eONmv;wbJE5o zRsXX?`q-4L;+%pR+e0l;LEA(An6Ska_kOC=>Mu681nJSHZ?w0`Z(ibAJ`P-0+wHea zP#o3l#ng$mRTellLGX+gN^>$4`)iOzYtvpWLRm{LEFt^aYl#cD&HGQIT>0d>h#Jg{ zOU%D%@bfp^)C&;D45mVK`M;v>rC{J%mw)L}hIyGei%KzyH6 zs%`JD(XZmvy1( zh-2}~-qZkOP#2v65mynP8A!xLST$Kmt)8}VF)RWCKzJThZ>GXIhgAkHU1V47=R8a` zuPJ)@%Ghch?f&;Au*$rfH7a7ikg^vpV#nsiWUVsKV!1LKhW?f7i{mb9a|SD<8O}oQ ztC1~g<-bbxuXQm}KF?>{Z+$SzBEd$Fqi`r2i!u^A^X8&oeu|C#jqoSn}o zMraVCMl(fJW;Mf{U69C+X$uHGr~v`uwwg!gz>Od(Q^Tync|i~blBKF*Zu6M)q3v6{ zt5q4UR1KfnH}9=YQz^|&=PoUDEhNm{GWn{PDK$-RDA`D)`wLxA%iJU? zMGfOVjt{^k&T>AF5wLK!tTeEEO}*dJ8vV-fnpp3xEM@MRz;apX>|XR02xTkg-lyl( zVF^zXVt+G*7r@Loa~nl04jwKkA+$(%f*Xe@JT$(hj8s9&Ezo`46P<4&NkZ$7{IJg zcLoRxLJEWdJCDT(JH^B&(t9^~;mokfdl)VbI9eNDfTI-t_}ZgM(<7jG$0_f;CBy`u zilhpO^p(T+O*-~elr&dFm7wo^s7Gio)=_9JpQYavbRWXrrPFNItW`hnWYT>*cDy3$ z6dnrg9G!RX-96w8gLa{ICc3`oFUpu-i1lL*W+;5-*-ycVg+gvW4c*04x!}}cwgM(h zx<%eQ7wl)s zvey|Ud^mcMUZ?h-RDZcMFL1$J+%f=f%Hax$PSo&E&YTW!mQ(Lda6bE<83^&QJ`No< z1*5E{<>iqbD~-0q_tM4whK=!-9#kN|V)Vu8>2@Z|&T!2s;M%lRZ?mhI;#+dI?u|(j zQs-vuE)y`$1=&luy-8EYz2VrBp{{2PACoX+v~mW=4ShcU9rmt`XX}=ISjOWTJ3af~ zY2{$4b~zrZPuC|fs~K29E%uDT^=2g%@CO3`^b-f6Zpg>h4{=e5fg}hEf;YL^qtbta z%i*ZwB8fD>f9JbL=fps=L>@hUUo3vebwVh*S#nIIgatPdbu{ z)i()>1rLPbb$P;qH}c>Bg%CAy=2TC~tcCOQGB)f?-z7~*YouwhjLNK_TK5-mMbkbw z)<$7r>|!3ha-A!nIy8h%{nmjZAMFH27cQgIZfR4e4P<^q?IteQtK~!6N74UCbOXQ2#*^? ze7ppDedxQ_^XBb)7`hhA2qJ#ukrgwPJu3dRPoi?SLX&^}*+St2B)`q2v$cuc^gw;6 z>?6P!8Y~P6;_Kh$(j<{Rj=~Y;Pu8gQH~3_1yL|{#z^axA zB}7_vo89l%AU3aGh1G3D8tjLJMz^5?CgKa2RhOfDjY>B$coZr^!e+Pve=AeB;5UYy z%fciORS4smjqOenuLv$dB2)^Wf%bI-n#${MY==s^Q9mU$GgydjmO6v~>@gwE_M+3#pI9ou4i^Wq7TzU;<737{l_u z>#))9D3ZS4LB+&K!miZPsH~;vZW$AXyn3nF@Y98#@3>r}qdE`lmZCts(Z&D0S+WGG z4#sskg#;L=VH@wom`{TkAIr+h&9y>6Mwita@+N2{{A3akF-G0-eUjpijo$Gcy4xCD z4fPmZ%!5$>Tu;VWP|N4Z0A$V0&B_`dBZe1M=3Iv?zCBzWgfd?RLOIiJWx#UtBAv&q zokfM?%l~l=joVes!hAL)DdQJf`}*>ij3mV7!+kdD=)0)p_R{KHOZ@8*axD&Sxh+(_ zvtpd&OXJbce~r(zRC_J)5 z7}PLHldJwNn{E5OCL>c-?p6tKR&HkU%7N@PvFQHi*jMRwB`%qnkqA12@S3V?(rcVx zPg}EV92Tvrp>ej4dK1Spb6GeKY4NlMbI|=OQ{0!S(B4b62W@*-KzD$N?Qg6 z<1;Jc(#MyjuKIC>m*HJ8U9z!nO7V|c6sIE@N?Y*ys_k0E9UyJ(JXc7xr`EW3%xde5 z(VzE!KyCy&-BHh@|D$jXn-#kwKfG^3S{bg=A(%pjL>9b8-r^H@|KB?;{FM$@gyirxeBIu=p4SY=K=%&(WnXxa?~r z&zg>o9bzqs2HKQa#JV$jvw~@}+lm_fe1~(jDbMD1U zTTnf7A40HbMnB89wb08KkV^lppCyCB5SDvlxnZO7^VO@fWzvRa+1{C9if3dfX+f~^0MEdnNB$APCM!(n z_oi5|I+7>+^S`L6f@BjPooODp?cY>^S2X!=JiF|0oCAcmfXM2C>c|m=$7?*iti(6V zG$+!b;{6KG**WK*jBOox|8z0z%81U04sCe*TMZYXG!8*hklji<->!mpZiFBl8m{a% zVQ2s44Umkfzow-{4$xQ%cMhj=v^G)T(H|`IxSf@;sX@ESD#d>Cd|{2#YE3e;R3e$d zEX1whyc|PEmU54O$n%IHg`e%**?KqE#7t(#j_U+@ghNqQ&2qa~8kam$j2Tx+uWel$ zvW~y&BDmZywV}W{zix>+fkSA2ChZ3rwsq(1qlv-3&0_&M68o6g6!FxYI35;O$Ow7! zI<^Q6&D*g#*cX1?of;%N08P!_ksE#BM`Xo*GCI4B-PM1*~$C_2q;upA8=$JZE_vX6F;uhN?8~juudNhRMEL(cDqY8J$Pu+0j}R zK;KE{n9szowyW?&Peh6Gc0vL{By(K~##kSCJ7??sbC@Q+p|UJIV>okHIDbaVRYi0S z|BY#0(Y|8l61aA4Ff^ug<$=yJv@&vNd0N;79dvND{ceZbF?w?5-wDqx53e8d3 z?%dI(rL7;bI~zk-J6gJr5``jw*H;AygqHqZ7xd-suRaW#$HEop{X4(^s$O}^Qhv4r zHGW%IHIg$ux9ZN!#_+U8MH%@f>zi<#m0(&T;e55A-rC}{I>6U)(lDNppCzszB3zfUN~hL=-&=Qd1skT3I1Fa5Iz3EaIKx6|pcM z(1D&Ax4)q2DBvY}19V4&PA`5AOUkOjm{D;K?dGOLiE zu%dggKmr&Gm+IF^K402=F;E8vlOSm5=fXL#e7ohgpoUiAQS~uC zSqOXJMe?)vuCBd}f6%W!)mG6~eyQI;8plMBY`PE-P zY8&7vm?$khvtrjcled5Mw7-8SowqJDQoK!R3u5(BISNwW7L#SZ;g9*}-^{Rt+?-9Q zONJWaIR2Kj%5<@IbGS?G8i{9n*6ZC{SsX=*y~ZxqZVJy-I~N74&9o0abkSdKGMAVP zJcjZ?sV(M7z#lS-acwFd5PPb$+)69PP%gPxY<&0z#E|KToi~U3qWe!a>)yO;n60ve zns^p_fDgyAw1y0CbjG1O{(-u=a?f+Bz$=AB<1r6|*<0*&p(oL9_fEg~*-oxm-yDEqAeG<{-A^cgw5&T^Y zp{R%&ywEXC<`5>Qq)lZD9fVb(f|1h^HbFvKs^G&49?-FO@grT8L-=KpWZx(;t0LW# zNqu{CEs zZc6osdFE);c&zri*nf7vIKeC1=CR-Jlpc(&J=iC-ZSA~mx*SX$3pSNkj1bi<#-WY~ z)T~Q;%Diul{TWEThUL_vn@}uhBwz$=Zht({n;LKx?N=i6L-C^+wSR!W23pEfaa2L7 zaI;p9e8a(fN+5=%z(5VvFoUw$!|1>@Tu#)9p)ovs&2ZXK+A5UxF7AWOK@07d|L2l! z2>;y}Wb@(wzF_#NW*~&8YiU{k{a8JeHk`iueFZy&i}|>NJFq6PTYDP`)vXb((S=%o z3wOxn+WxQ8twSNKO-f&pgX7CPxLAjgP+{DVJ`AKP; zGs+t|r((2=z?So!uHRH%O<%WwEPXz3!h|t1C#EHp_o0}UI|}q^LTiP{)s%# zo7fy|T4UmYOuTyRix`?Nl4TwRB>hY7i@bfA!fRMck@Q+tWmkAtW!Bj2r+*R4KFhqH zA5pHF(>%f25&-<_switi;$FqbE}@wR65qqbc7q093T%w{Wx{uzKnp%0h$|2lVBEEzO0gU8A5Q}Xv7KZ zaWXi8hT%8@U9M!=VRA9L%X<<{{#52)T}<|kGODq3Ehobm4dctEv&yA@LN_DV{nD z7TE3F%-2}K8+mI+p*DRAWm-vF+gD#I)*WQ_?Ag^b!{MG*()vyY2`lvhW~Edvs_x>o zd`nJBR$a>Q|7H}XvJWP|eRCE;{bYK9HSH&!tav4~mx3%(DBo2^yP6rL-5I-P3u~e| z?i0Dw_X!&QK{g)mFUoOakczI`*HniC!wp2BR|45CdZUC_M;$ReLb`FbP6162$i^Rz zSzw-4^y#k(DoW_CUpHdLnp{VqRE7D+AA?B-$sg_9{o|LGlCm-$Rf1*yt+u|A(904y z;4_Fq(ZMufz~|8a0;v$4MSUbbR1jIbkHvyu9N1I$uXH=WVTi@zrQ7;DX@!wI0I}#0 z8iPlV!TG1*yi@pa3k&h!+e^=MoB+p~FU`haKtLYn4W|bp0F3><37d-V-2S3%M;Y#c z*)10y7yKU@gYdjljLZO1hU|ZCuq%&I+T0-c2V)HU71)4>Ueb=`81G+CJkZpnJ0w1& zD=*(y^E%4<{r3v?mX|9|iBBn7n%9P)pZt9w@l5Ue_LY~TwKt*vJp35X@pmgn2D4#Pm@+f;2gr6Z+oYD(EgjP@>le>Vhf{yx{Ui#>Q8T2bAQ zS~OnKO&-IjP{NX`>At1@VJ5R=ng4WO)sh5=ify2?HYd3orqqWo>`j|&=axn*?kVZ) zj{HQjBLFN5Wy>IXXFnwwos!`Src+Up216LNvM>p63joVQSz)&>#g*Ifyb^u*8uG6b zM@Xqmi~@6eOOiX-bR|DOGO}QSf;v4Ew86Bw;_#heK}kv_75jFB(KCZ1oxyfnrwWy! z`V)NiwVz)xDZwFiZ;^2Ani%oYYWnC({xH>%QER$sHz?8(qAoL0x6 zn02vGJUIUddNT4|1(9adN=2`qkMkujCxb$>jK6AGaT!kIG8BgCtEN!e=W)`wnGfFHc=W;$f9Nc4U`hGW z|M#S+_|0FgS&8FmQ~ImYSaPz#J|)U+Wbbg5R#N^h~P-U)C$LBz=B^=r#aF~u1!qh4!?NTW5{KN)DoL*`7w;HXh= zGjFAerI=v-g=PP+**?(K0~z+dTV{~F>~+xlw>zEcq79ho(gmDq_dEE-P(hs<9{lk& zhiX6n%_-ZQnlRKCQnSwvpm%mcUFQo`Ntm@1uJ$U(7r)wUvD;5o>VV#q8@PE?*@Zy3 z8IMVUkPr%DqbdC?m3?2N$at;R)IM&(vMS5eff@ofQgH|}i?Sufc zUs{Q>I{AW#QCK2{M$@Pt&_W^~L1xm4O211P`GU2*BEiLns6R$eFQMgy&m;sM)82+a?Y<1rUT9+BcT+%279OIcqM`_s2!Z@22E{N002gu@ zV&pQZSV=(z5vCLh37K9i62yP5{%R8fCQtnM>#^*z&e)NUoJ!uJ= zx7IqXM3JKv8JovJR)>+cXJEm(EXnx_x<%<47PT%mSWL@|TDR=Q`&SR{-8w(qpN=+H zS}HZ(ojBETLm=@QT$g;_Ht1x=DTWgxsuXhj4~o;kC{j2Mt6LnZvyQ_ z5d~0%+Uklmd#SWENu7=nVrwtk#Rqp~#^%@_d6Bq6C_cHryE7VWt=_MK;kqjGjBf=K zVnI@kbcgh20p%zVyanL5o0Dj<~QQC zMxGk)aZ8zN(NOV2;ME*(Ln{b3zZ8TSzI^w^g>5wrcC%3M5k<>9i6#!Hg>V3zL9WQN z<11$DNUoAH&BZl<#FqfL72^_b0x;Mp2L?8U?~)ZRi}HNRf>k?!A@Md+wvYuJZNviy z=P)Bvj;Jb_m*t*_3~E2V(4Jk7adJl|X`8cRRMw=|UHcx-^Eevl6w~@0p=6r6=w}Np zSAxUj)-)w-JwpRlm@#`NGj>lP4dC94O)N3QYw6xrqkylF4fn#v$_#;+5pgy4Nw$UA z%J^Wb7o7>hgWfQJHK$(4h?}b@(Ar%4m=R2M1sw7GjNaE}fL4K*`LYM0MW|zPE$a-H~sS3c)SOf3fCJ&j;zj^THfVTGL{X$srH{ovetvkTk6 z!hx|KH2fAy#vq2pGNdXq@W2QY#{Iaz22m8j<7BP8BO1Vj8TlMbJWsdxNw~{c1m%qIEB0d+ajKliw>jE zJ?w}@XSYIo2NKWuti;fttyzONbdXiTZOMig)Vz(mC9lRl;0QW#`7J8kmr0f&S#vSF zPBVQOy*gz#+u1zTfo{tIoC3It8$-lTh_Ki)38i@+OA zQi84t7pOOxhI76NIJJH?C>qICKd*F%plT9gI@JI>|| z(1{=#TEVOEUo-{S%GOWVy~Y40Hz+c$--!TFs`U;3(-u zA8d`6LIAfEz?CjGb77TF=n1d~E6|wl866)NMs|I}U%;9+y zY0n_oQ>3!N6-q8q1OfnCY)6M-;_J`<$?xizA>V}uK3tro^ZrnV#q$UphH>}=Gj6TH zx5X6ADYWHX>-*)lR7B1}ESIY#<+%}Te_%(C%MM{w-hT1eY?!Hu2NTT5u(7orld~hU^AKapNEX5$Eh098kbpUigvmR zOs&0a=k}_ZDIcJS{8`9~1mex*%jqZuXT8EK5Q-B z^>=p?4Kb zrK4V0o1a*{38BevjE4CO2{d;j`nocBc*;1 z$!8XE9X(Y8-ZWEW5HjkQns`S6-J0Q|xu6~G$Sn8_)ZrnTVDe#zqJykcvv~;b4Y-VR zc#y3#>#(G(?j@FcE!m{$EA3GL4Hli0gGx>hmK2ySn%itf1Hq``lWhdNXBF zU5f0p3dKGtgLPe@FSjubhQ{k=mqXv5$Y8dIxY7|SzlgG7`?N+usnH4qurJdY*9maz+EJZHenvh}S>S<&P@QkhAPWQ~TZ zkzF^t@`!`j6HB6z=G2x=Jg7aqb9%J9S}x|($=ETgg#)*X-qWK(Y-zEE8?ijH{{=N{ zIv&R#LdIhnEU}joo6Vkim7w=X^XzQM4Th?LU5|CCm;s}2JoE-H_tl66C!qNe7lWzX z7x;W;LR z2<9()B}FNyn*V`=G>?un-zwS2-s73+%Ar0RsSooG=TKJ<8y&h!zfOQ(hN_s66{6UQ zsHuozRPg)7=%d!WQC^6gHk44jQBU=?cqBx#+K13(ByeypDfT(lKpu@~50O~TBgvbc z)MfZC5}QmsoRJlfoZTvb&(hBKW;8tIu%8=*?~`MSVwbe%d-rUE;xx_aZ|nFOv0k_z zimYozX_(QcT;38l+Zdx$Rnt?7=fvTPS=Un^ur-y>EH>^QEA#gc);(Ft#7 zehJw0WQM%tvGN_P3o`{{6h*H)fPylL4VE$wx0#bhtFAVr#{oncmbQ+32Dk-9_bC|} z@)<*uI^tBuSV>m~uH#1cA7*eTYZcIK9g4M@+t3kwPgOPTm#CK2bRixy?TDuPYMk=V zP6xXNEpdbOn6-jxOr10>1(!)KNw2u8r;^~>89a#J2I{CaiH|9I72)xauBZBZI#Y-9 zkag5Cd+bR(0L>gfB(s$gI$y`!&d_*lcCOkv{mBf0TNzZp-uyvI;5rVsKE)?nrx*bS zXffiRw>9Edn4w#I`$FgT|8l<0gzxT&!V(!`r5;#uD#B2%Fk%O-8qm(>}e&Iud(KS|flo>~Yn?BV; z1bP^oEk)LNyk;!;TH}1wicL{u(CG@E`h!CuK@SXAD2Ru7SIH+Zvi3#t2EwfiH%g zr_nCb;2I&c55_UHLeaEKVTSZUI2(>Ik9KboE+xzMrdLZHhGp=DEmQ2AtdwGjcWHPx zm2a}zt%m4ojKYJ6NDc+@P9Cr*KA9)|;o(;`~}&QIXY#PGngQwmDz76s77LFz-+&H;GawkZ^o zN*BP{l42k5*rc*=euK;tV|EhKsE@G~?L8>FGwF0%5^!Yp^Y|`~6tC&9;s!qZ8Ep@{k&2Lg9Y|Xk*X1Rb*RnWfiedyWmU>+ zj(VX3J5K5{ipHSD9y^MGzwb>S5z)zpz<-|HyR)+dF0|It73NDWv(Ptw5-(DmZ6;h2 z@xM_?3J~?a6q%JB<)7xj0 z0jhJbL~9u?7Roi{IDU4tPg+NPXk^$G1;9CFHF^d)oom#gwx^H|*(3>>FE*XcA{%PN z#S8=G(Thcc3$(Eu`S-W?Z(hE5`sny@Ipaood+&xJmTnEgxM|%dHDHOc8!P<66_ED6hLd@;KH)XVp!|CD&@c zWk690WymbLpDZ6A*JXX^3-@VjOXR66K=a@_XR$WKw{^|$t5w8{hI|3t?Yc6~nJg{y zsCbM%YPerTToQ&tD-8mx*pNUeQ$XO;)77F6H&-}6T35bro}iz06E+D4`v(`U>1rW9P$fuFfh zr_wK+6XCxiqQ->qv8~LOzidn7iguY+wG*sRHWN7N!pexikJ;$h2~P8 z?NCwkItGw%Z~p8_TA~CthJj*Hc1T!qM8>oL>^9mmotq`dQ`p+~o-~?s%AH#i_H~)u z_J%7!orm!=Q`Axhb(-{=pNzd3EZUbScSn2C4hhkVmT%*RG@G#JM*o*HJKx3L+{I~t zIIA;GyFWTpc%MGzQNk>(fJ4!szhT7c9OSbzPPw2p7@J3}-T;JWRiPYeNaH&DD8aSs zUU=c0yrES=im5QKiadR|;5}~o(~k}VkyBsi!f;l;sdy7+BxXgAU!sM8A_93!4dgRL z0Z^E_UVg!VN)6uj#iR@%{v9c|pMI3{(Z`5X5p;cEnYb0|q@nvRNiu7_o< zqBbBBzk1p&*9wF76W4E0>xs2S=FDX|#_~EV+Gl9@yxz?oiAq<5XcSpO>2u`)qnAuY zhFiC7>mpnpJeb3SJ{5=g-&l=`v3O~~PcEl>T(jf2&WY0rctA;&-=umFEq8uwj0GD0 z`DzW5dYwT{FgOVD85S7gW`v~ee*C^$Crgdo9FkvM4szN&U02QBEbUp7@g&8^M}f;G z06|0pA*UMLY!fJBQ<>XEV~OvnykNY}<&eY)Wtx2Atb;lQP22!5!4}OEQ5QpF1aFWU zLT=2b2h;v!f*`RG1V-e32QRpQjRvG(LQ`0zC{0gWcnPfBDx@t0-7Hqo>^K0}>p>Y8ZB-i79{-R9&= z++zz~2l-H~zSB@L!*h(_G=}YXzUZGG1&AqoM+CTQy*A_Fzi>*1D1k#B3a;=eaCa?{ zdYh%5lLZ9mmCrJk)J63~VU}ISXo$CJ2Ge0@&Jh72+}sm19x$`ev#=XdW13C2 zO-r_y zka&F8%v*6Rq=vNg*;8Q&?raR=;&?V4^cxGkmOP2v)xk0yU-Qmt^z`LJLZG`!t3NYk zKRw>i%O~j(6CC|LUEiVKCYHVoKb0P~>}`jNWz=O0*mVN<(Inl!&@yZ@ohHb*#{|2E zAv4wKCQ$tR?#1&v=f{Vmfn1d#3%T$d<2qw>!CY45T>!2sS3pnM?9{0J9O3bO9D!rL zt5)$tZvV9ker+eyb;2|mif8?&JWbQvIc~r?0;WnJ-a2S4bcX;@^K3+aD2h{6Y5X`v zJJrs^I7m{`go&&Xm@6>62Jtq-FPwNca={>`FLJ#F^)~5JTlcN)kOw78zhcxWU5_Ut zYCsuR@UhO(_nVz_OI$Tn4OOFeP1WWLUW38Yyk#G*(=B!{b5XnKr&0z*YEM@_O6`oM>sB zgouehVur%K7Jidmf<#x_(jsddZJgNL5_(4SS*Xn+uxFx?C*OX5bRZ0t0*j)LqWYzj zOfb1?=ulE{YWK`5=7{k-kcR*V;d|;2AP3%vM%y*}=R&8BY0@a_2W3=KrHPm3TUnRL zvwNKI#Pf3fO7J3-frvLI^PP)Y8}<-1>6{x?KvtwDD?DI}lJtezUJ_@`S(OVLwUh21 z2rn`nzCTwEZf8I}j3r!ZQsU-!l$sR>6~4qnv^r5z&1L5vsJbWde;@Ac1?@)7Z7VRP ztQ}c&!~IQU@vAY;QtBMA)}tA3?1^vfmYK?o#I$qe+UrW>=HO(B4>M%q?{A+zJbmJh z7u7(kgtSeH)wGg(B{P_v4X|IUfUVnA$9MzV#f<1D zsYM7O7QHe6LJx#+D%dCz$!kfp5jJOxCz;4qB`^A@qBFQsN4!lDtcHWo@mot_~MPn#MS{pPbEV>lWD)^cl z8@l2F9$ZjY*^oS601=$eb2RHpj=Cgb+}?$M#ECCoeHMu$=m_O}+Zs&-Y**NV6l`r!y(p4Hk9vYwRy z0RRFF*Y;h;oq8EK_ksU&%Gr$>|I^?6a1CSt0N6hbu^R%A=bHA4HrA5r$s?x!CPN%_ z-9I2Y*KPpo!T>svl^4n}i<1^(Xc!<|rwu9<#0X;AuZZ(!Vw!^~2?fa&Y_ttF4E0xF zLn8n{;=EyiTp>;d^Bp5E&`0F`f`6}EO#RxgyGgo~WC(q%B=rP^w+TbXwryQ40NeR? z^OMZ2KqDFLg&;i=VctRkBqt)IGF!zMp;`WJ5fZYkEMObrm5s#DamFeW{S!@^7XjOv zBtrE=qqpaauT)K(l5)5X6qM`*V6y~vHb4ZgB& zh#{LwSH{FQiPo-v`ne^`9$jkj%28Mce3o6pCBZ8P^)#jTIz) zJ6a=dW5FfHKH?vmCz1aqiC8_KAvMW+r~m)}cF}*T*#PJd3vSwk;mmP z7%k#@gfcbt6l6ZErwS}wk0P5^&(4(Pa6N}~^{dA*R@XuV+FA<%Ep!0DItPGy2;aSW z7$;ag!WMZwMNk&iQzhqQJu0ZmdUlJF;(CslonPy5{MB&d5IAeT8;DCmG?1`{Az(pU zgpIY-x4)8;brug-NHz<5@VU|$vAfnt3+^92Rgq4$z6FmAq+!oBRIiup3=Cbaagew% z0t(61$B4j$Ik z`XPvPut+fMqxiJyuB*+(lN!Wsb!oNMKmh|9(y(%n_c#7QeX5ZjxhIPq(8PuGV~~%l z3|FMJ_VutQ6wVLL4HNDn^~&CnemJ~9F6+6~RF%@N=E~1Dsh@%l(L3jU0;N8SBSgJ3 za6`(9){ZIo0zCZb-V^h^ie?$4`A^ntD~C>%ue>sG83ok!KWw3P2K#BzpywpP$1WS+XWiIGeJqs>fpBgEFNq)iA0bA70SWc&ojAczeTii+UH6;+! z=kxvvUL*O6;#1++77R#H9f`M_3b2c8v26)XVqFL~=kI`WP#KYUu)3Oc;wV{Vw%$Gs zR$p(PlwW*vKHB|fD&_xIA@}5;Zxp5peg_BsmW!aELeXI87?@btIJj^G5)Yq%kcgOs zlplWqWCF=4D5(Sq79x~dm~asyO`#Dr-v1?wrWYfYfl-`z2@*|}Bv}d*GYc!5RCW$& z(m7>t$&@9Vn@5gZUOsv96)04sScz#$l_^&d7%cO)A3(pAmKyT}j9X;F$F}+w?6of- z;5%>|qCiv#1wVqHz;!VG`W3h5FV+4p{j_Yy2Y^t!@Cb_G1WC1p&aj+7C~AKP`l!Pl z>`;B3td}d1%H#^AO0CiA^ai8JY_Zzx4yViQ@%nhbzJX!ujEqf8&CGjjvivAqGG)nb z2X`xYDFVedFET7cVS=uz~IpE$fD83OO`HMJ~qB$<*L zWzX{(B*@zl+r|!SE?Cn|!Y=9H+S90u~ejTXYV` zzYGaZJfUmXIP!-_-gx|z8;6tMF|!SR^v$qPGQXyC1Av&7t-~r-wML(OJN88gb<=JY zg#EqmB>a(*rm@4kgXD4dh$&@BnDf*}(Zb_sDVk|aDfBFLWHR@aSaCdaas^HGqv&&g zJ4oe@5^GKkHXs(pJydaAKuZfvlkyJsCMZR?q{+Spm*+zR{WFn|Zg20U;S z+LZHl?OjS4?F{uf3wdF*Q{Mjncsk?{v@-B zI+pr+JLACFx_!xwfmX8ejN{Urw54cE-aSYE{amra(GCtt&NjrxBrD6~SF7!Dudi8` zNJwchL61)zq!B!=k}vbDg$=uIBR`lCtYOU!wUKB8Z!F+!{Zb5TY?xB(Qq~^N5o=oc zRgv|gL)+56woYk*J3YTGhc&E=FY|1HRjp=qYgn_QZM* zwCrLV^uNj#dAI}g{18JR{H5ywNdUJ0WMUAutP`M#wDSuA0773g*g3#7c>=aq zLD0yZIh*M(1#70-64LF$dO^#sTqUhFV7o|4ooozZg@25be}uC16>OtZt5W~~06+!s AssI20 literal 31220 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 Zp7{k(CBxMx-78`AW(7u>Su8-2#Q<&?8Ib@0 delta 77 zcmX@Gjp@KPCJ_ck1_lOxh6V;^h5|RY5Z{z{fx9P)Su8-2IRIv&7?J=0 diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff b/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff old mode 100644 new mode 100755 index 8940e0b58013e7002cc8af7f77c2ad78460f9411..38c9cf2959a88123bd784e19b76f855f06a682a6 GIT binary patch delta 78 zcmV-U0I~m=wE>v50gyZdX&Yd|kwAz9535=v50gyZdWbRSBkwAz92T?pKk<67Vnf7Je@%%Pl8RVH?07V!sZm(Ga kqyNABufcMd=_&&=0|x^WNE85Tat;c!i~$H)1ktyAoH@E6BLDyZ diff --git a/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 b/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 old mode 100644 new mode 100755 index 15cf56d3408b3d1afa9ccae05dae5de94e91cdce..9d33f144720db53e74056ab394a573437594fad6 GIT binary patch literal 20028 zcmV)4K+3;&Pew8T0RR9108Tsr4*&oF0GmJn08QEe0RR9100000000000000000000 z0000#Mn+Uk90p(jgHi}+36~cU2nvDyV1d{K0X7081A`a~fldGfAO(*t2ZLP?W}+sLp^L9Ok*>q+5i6u$qgBTD{#8?>VGVSPGgqKGr7oc(2}rZ z*rG-vD`Dy#>Y5OjuFs$&4c;qm-jdF-Y?cD?MTW64QxK;T&qKv##f5nf^f4Q6^o8+b zku|2{yU8s6vXoeyu!9ZxVBrmyq8}9fb(*eLRHw@$=D><{nia+^ypS?D_JjxGZ~dQ{ zsTR=PRxRM_Nx&x>;OExASjCIIw+zN$u%Kd*)YkNf5hW4|SSJWZqm5VgKfO{f+W4Mc zlyOmBRCxcs&_CM#XGIB~=7bBr*$!VU&%nQvpvkwQrl_~8CX0j5bFuyH-noZK7{?N1 zMVbWIp-$|i7$|HG8YS7B#Br#t9|5PIaGP3QYfsO$6qkU_%E1j2IuvBnB0+8Prrn*3%Eo2sUire(rtr_fSL?^_P0U=be{9SParO|_Yn zcp|i%2j8-ty3~|NrmJ_4Hnymc$1zA!?O_RsYemHN61Me2^57UmD=8 zEbRQ7&T9XN^}=N~2W^Zk_PV-I^jBX|@&BJ0`2UY2&y0k3G)@|kBsq-)*pdtulJE&( z-=-K2X<%(3%v#`tapYo*T}(xF<&|xI{S{?&6tnBciY6VA_^*Sz_F69Z3YN{tA(p?0O$X* zg#hloow5cgl{|_bPmas{JfCtyNzR>>ZXWEwM=mCbEoOIlu5yr%VS>eAi1`}dRj z?T5rB1Id)q3RHE@0qfe>uCjaNk6t!!y4Tr`N7aH%>NjnPyJ8x+gZr6lMqS^|WE5rb zjmavxd^;1j&(^RJ9`#1E)$VkA{lRcD)eY0K9d|ZgEaeY!2j%%e7{!FLB+c@otm@5n z*X&!tB0$`vE&yN_e?Pf^AY&BBD+xLa0P;ET>05uchX??9?$!@c?pa%21K}Rn;R*0! zx%aQ4?1M3HOpq-gkrr8c^AEgQZ-~>U#Mv42TuwEaSKL=)9e zp#p*XL=A}g|BF!esU+w+n<}1d5B5_^cAGhnZI!C(9XHx0|NaF(hE^ zE5HMhcP4^c8z*15`D#>{qn$gLo1*%r(@Rvp{E3*P{CP>-pGzS`D zW}K!@3-%`O%;(!a&_}~1FW=O8U;t2*(D=G6yapv^CSSNH*N+SgAx7c|=pX0OIA3Z^ zv1oi>3?y1$gg1Ms*=L@w(*N3zz!-0~)0^Edvh%aD>0u{mz%SpgoxXu#5t+6O+=#|D zapWfR!J&zsZlxx;0H$$NEviz>y_FFklFLH*RnaBMT#yy*Wc5c9HKn7x6*K^6Yz_%3 zCM4F=o52)o4al;Wn3kvo9f?!|j!^{`zh?&Pz{3^C&uy-j^2;4}B?ojg!0!YMG;{%` z4Fk*81GbF=j*SPdO#m~S2zumzbf% z>AXk8+1r5w01{63I6WtYcTUFRA`K&&jANRrei9U%!~$ONzOOIbZKt2I-dwvY5;ol& zqX~%`gMxR{mIb35%`O62pwEF>j*TAcahgw9-Gi3+leBnrH3=@*Qh&sd`<95FF@|$2 z8c7!EG>+xsgV%aUngb$3+%P2oo}{e^mw?B}ffN6=ayoqIN7(QnaQ@~)lK6M+5>ye= z6uXEE5idwH8u8R?Fz-IZ8HAJ|ZaMU&+pC6`S5ivr6|@5Bn;y7=-AT33Qa2}MPgG;@ zDonk^o@}|3G~~V&UcVE#_HClAEM39W*|+>a$H5?)9_%>USSd0TNNI|}a^TogSl}V+ z5+#catF>uRZx3MIzaQ?JRMAH>{F_)=9wHsZ7J0Dnk*I5r&-Bqp1R?Tnd(`7C5qPL! zmwQYi98;O#gOAFYo?RYz{IBRIx(1;48JdUh$&U66o{9!?Vd}LUDGZV4vN0s38~n{)ui z1_#21pb8e1m(k&dvBeo-BM>lJUQWjv#>O+kmO$Dp&3=eUfj*}vaAlohbf1EC;i-2L z2$To{5x@w)Oo#Sit`cUq4EccZN1x{ovEOJ!MAT#I*ppC97W6E$5(c7|ke$*{0?h>F zP|Hk(sH!rR=}f_o=Tk%ZE{Ow$A_#KxcxZJ7+1Hs`VK1F2TiihqWtdrkrire2Yt4%F zE&e<_o5-oav-nMA!bV;Rr)bEwBuNSa0y|dj2{gJodKyv=AwxvyYt1H8i?^u_CzkaU zh>T{oBMp0b79%5{^`mKu@+_Q$OBudr%?AkIs-dWR&l<@ia+6tnWvRxsY%BCdQ z@I+9|~l#i?6=o{t7c^$Ok@u3nZB+&s=*{#Q++xDJKV2 z&8*!sw3+T)nF$NK@RtFJOyQ<;owB42wTP=azA!Sm>FLm1@% zb=$a60$7w-(J@;x>JXELo?DsR|DkI18bS)|!6og}9|_`fggpBynu=?x;eMB57OP^Q z93W;l180!Az7y@k5-WnHYv;&O8{VdpR?9l&&CR)WiX$_a=Bc{S3#a=ww4uiC0yk0*p6{Nn%7o{$bWg~gCP*AaD5-HSK z*OBdAm?a=b(u99hBL&jaubN6ZkC~8XPliiNS?wj=K=NLyvC1K&TG2jYq6(zY_dKBw z%SL{?3upn8-}g|CC}U-<1)-2K%);!G>LLRYEOA6Ldd>3o;@;z5G8Xt*s#qFrGR;1}@u z=Oo|LtSCuUi6fZ9s8#{|O(P!Ua)O_Ap$tzj6wLHPG&xKgkVaW0LjmKVg+rogbSXr)I_6^Z$iWMV zx(yw~3fZAD`>%<$=0x!vL9f+Vb7M|&B4WLffCQTGL0S+|;ly%}>s#g(H0E2qp#Nov zPxHfsA>liORHmX&fpk?m%jIhX8Zqo}JsBA%RKm9aJlkbch6#?24?2K#RKCT%+pA_4 zI4-p|(=j`Gkp;(pL{!mJr?)3mGgvariot0l>V<`qt>>Z%p(HASP_{u%g4tyXw?l< z4t>i-<{&paI8r`Gp6Ppkahw^UB49s9uyzTnX{yz{FXD9=%z)%OgkdM?kEpth&}w?s zh2Hs5zzO{z-2Vqr2tm^qOqi!e_23t^po)1avaX1kAJ2TI4X{Rz> zv{o(wdDu`ohEN8k@(&SgVwWMP zOQDzXOFLKcQwCFfcaX?oQb0n1f` ztlJc&lm!IPyt}!MUAT3FDE8H#J~YEuk;6nRO!@@Shubm|Mt?TS(BZ{mHd|~w)QXgF zOF<}K0a{3v<{{S559Ma`5vig{`>aJX=|M5`H|iwD$5~s>B8KdWS%o)+Eo*DhpsWrJ z#kT^8c%nk-E8@@lm_3>kQb0n+tpgl1&fqa8jpRs4PBy~_kn^P+s_UyDZrC#C$i^}=F5Y~(c1Hf0>@hgs0MfNik zS;#Eub<2*-09TUg*4#>wy8I}EMGe7=m9}pMI70}B<`R<3RLuTVmGF)S*OM307y8I<0+byP>_CV7=y!l2&%VQMa9~48&5XGX3DBO>sluEQu z6+mQuHu8;R2F#I0u(5EFsUWK@rYgv|H-d74nx}moP+w$+)`*nw)B#hpmQjsnmT7?R zeiK|Q%%H{M&*LsZ$h)gQgRxL3b$&*O*H`3hHHta*^D=vAAdL96s#casGohKB8B zE7ITovaQ6KSL!YT#NA--1(lAqzVk1!lU4T$o6~|!1N@|2hmShcs#Y7oq_EDeknX%W zSpxfql_A67LlZ=hgqXauYcbSRuEgdsV=9Q+p~Ws#s&y`ramRxlA!DI&84N7DKx~C- z>%pL!DYE(9GVK7PoGpnEMuUGVy*UnqA?KHov!HI2XSikD^y6Sgk>Sq}jvan!`K0B~ z6EKc$mwrfKkyi?VC_tSmS{ySX{hN!@w?cy|h&^5$FMNS7c(vYlhu#Z2EHE(=scm-a zK2AF){L(O~lc-ACjKDk>GhgvZdGl)RQ>nMr+sno7c@NaLx@_3&rUOYBd!6{L!b;#M znIclOHThxYoy!zl#Z>;G$T^9Apmk@;F-En0ti>ZrLpKKX5UIvmy$Ph;^(7LvUp6sF!-f@=_%Zj{?)+WDF>=f zaf0#9v}T$ojdIH27UDj~DYa;h+2z8&6pTxNFX|ReFED*h6jnp#{j0+CyLC~i@Pp*R zA!|1u#;PM_HhaCxi)dOHEPHGaDn6OokTw-KyJC0P2G_9-j@{kp_AK3Mjxj8`+AMMD z2}>MbFR)}HLwIU}Vus`2wN#NKWo1V58v?)ka?}XYs575L#K7nVZoFdmxwD2vheIZn zc7H~KZ^aX}!39JDW2Fvu==>K)~bK8~`@it2bu zVp^6~Ww-lAMW3*=vVrzKCQ#{Qm0It%N0tG%|V^sBHHBYf{%SH)I zhbEGCN$~VM69O4lT%6KRw_&XU$Vp?CEa^L~iRKUEn%tEHvNnw23`l+qOUDlkS(9hVs8(7;}` z+OUU5Yp~1+x4BJb=yY2J540POa6lXhbYUzsv>NV^c)ASNaW$-m5aPsSB3lfZxF+IE zC)o1+=SdJo=5+`ODa`R{donqlEfF?iE(|f9Jm(}VfS%UyqR8fEH9SG3WfxXheXFf% zgxf8cyR$Ouvw&L?i6}e}m*G4OaMU~_#o@~_V-jcEeYy!fRGFwTwK>Ys$EN7?&M6op z3`2}mEd;tbh3&ctwZL_RTUR#JGtn4`!00lwx!>lyr|Kbu0JSh{p44WERFnEmzj_Iw z8D^EN^SzO(hQ6>CE4AS#P5qAh3k$C@=2e#hK8FvI#TNT~9h;dxj}Me`@F>-`PzH2* z!q!?a=2i&aV7$&KZ(y(pOuLe-A8`LLev-u_Ps3#-iWLl@swCWYt#CvSGWjt zA5&T62&@9Qb#isv9YDJ&!D_^odm~J%W=n9=lDFBaONEBz!yRPRnfw@YiY#x(2MO3s zT0c$q(5jWxR4n{0sFfXwDRW!KAIsE+6S@Y@Ii#uTV?~gdgh~~jrR;6z7Hen_=5X2% zn>S)z6ri=VF9BX`Y*T*EM@n>`M>8?}39h}$oCsRfXz|aUE&ni@(z%)}%$}*dOLhGC zMuev>nY((r#Y4?xe5m>Rgid=LszC~?yzYH ze?m~1suo{GbE605I^E{h*ciROmw2=?WW@-;5yoME%2Jxkq3;_w&>ZZ$NflY-E%zyg zFl0bhjRmO3w>#ofG&9-3`NyOomV5L45~y%LVrB!5*xY!6pIk3rf`0Q&Te0eq7jx!B zX&mkOZcB~3VfO`81(044wBU9>2uJKA+$M4TIg1zWMN!La_qi&IpcbI|-9uQfKYYT*^|kP6d&%5?D%uaU+H9oVWlTsZsO5Po8L>c{4)Z@3d{+0p^Um)8&k6 z+r1c+(#uUG2vWLbBs7b8ZUh(|_XG3rw)dDY;XE&yK0ecJ2U3uij;(JTqnYh?Vf=p> zn|WA-)bo_FF<5tBmO>>9Cm#95V&n-eDZ^dWZ_?pUxHJ$}Q)0!TBEaFRLIb%{#7S+DL60& zf>z&8T9 zr5Fv=OT{AkMPP$bnJg`xJr`1Rk>~AQqhwQ0nOh(xBANA0m&aYeyd|iYW`>+VIP5)>G6<`xJ_` zf_hyChzn7CW&<5;XUo_imDf*!fPjJW2{Jm%63loy0ZWy{3BEjD&U86J-x6Xo@ijd_ zAGoaJP&w5r^q^3Kvon)Yndr2Beu^iFZA1{{nL_#=G213NtKQi(=gAW*IT+;nAwLWnwr0;TVhhD z85AQK-nOb;^i+P=eovh-UZ2%eIR5^&-3&o?do%CI)$8tuU?FPk#A9)6uoCEwRIkV1dHz(^FGt#5Ay8jIiIgL)OMZ||PUy*RqNnBrt={3LdX zMKd)a@`)oz=1J4NC!t`&rx6A)Y3k6`U|sVpvR)6;i{{Rr#b-N6IeY8<-A&|p^~yD9 zm7m+y3PfR8F)5$aUitkP;5}Gs@1~wmp~7lcJF#?9Cg}Ug=;pQoaBtq%NW83 z{{Q3=4w*9@VyoTfsoae=dmB$ss0PZisQ&iMp#!ZMk&F;B>>-njBOQt12fjRAQQ=&8 zcOUs_v9Sr90DBMZt_aGa@{t zRx10k5&nalY2NS!x$H9tEGvJLd6$QXOetHz_VU9I)c<)lRtv;2>zfoh1kj%ZlBbgo zB5TZS&ZN%;W#irs8deYL+U6ad9-qsZ7sm|IX~y)k9x^3N0VD4Ud%wao+q7GuZPKWM z-+m$@2S`tP>z(J^>X@{p*R(s<>Ah zs#EkJkNddND)8VQ6z-vLwc4w1+XHFZDU{KU=v0pT46O0IHMJc1FR$e+w%I(j0U^4; zsuYO5+!Av*4BpkGd5S>al!AqZd==zkIA~OwhfL&CK)a=vi-f?EiO!#{*3}GU{*?`? zOTf&>-3SnFy^R5ZS6M%c&ghb{WJJwC!l0rKIVf`z*vTHDOOm302<~&^nvedT1A{OGKfRBSehYZ< zRdmg4rN=^MA;GYPc;%tkG3!T08ahK))JV8i>hMI!J}T1n@8#d4&ccJ}H{ZHg z!;d2KE*L8RgVzt~GjxLZKale8ln?67+6u+0Mf^$&h}X{W;L7mP7j(pz30Wd?w7{}b$Hi7=+A}2G{d-|z!!0Q#CI;HC#Qs_X7~P=3nn~#cW+IRhO#MFkTf7N)M&-KW8iC zaUq+tBR~B1%t}iTiax4~f?y~-H8s}3 zM_Li#kwgrb*BnDmve`w6!!h-h>jJ7iT78^{$Dx3aw}A$ICnykMpw)Ktqn}7!1);89 z9D_cgGTP7Zgxs=yBpC(9@(({izlWi3dT|2(n9Yj#v|H;Qb00OEZR1R4X%_~h+HG|SgkkjVl`>S&A}aV3u=1AyGuP!J1U_E{ zwP3-|-S?W%H`#EUh2gVY90xUw+rZx5+ke^Sz4Q6E>(6fW)d206+QJ#S;j%rL0E|`v za(#g3JJeJfFwTI6K%61#tNWwq#RRjdUC{)W!Ud{M=F%JVL}xsr-h~7@hdrVXElx`w z8mkivUnH4|<=V}8RK6S|R_&rfo(Ysn;JsJl7VV&ibDFMoNPhcqs3%gwp&%n4)JT&Iou$qr9KxMIBH8=3zOoe7Rx;ID63? z@2C$6?MR!$6OWr3D&4uyJ=uOsJc!eAuOk~U|Fz>yyk-=lcTFT4YI3WRlLtA7Aw1#f zFIQOZ)rh_$Ge2Jn88Qt{O=%OqYe*VO&HVd)>=K9mRKQ;}vX2g;ZDG2<@Xr`1>=bp9 z@^Ngw8s^JUWXD~NqwKKjTfZLadYy=fe69j#?nQ&F5~UFNyxHNJ`hL+9bLI-7+9 zKl;Pv6$aR}>(&+V0i|`*O2SnR2x9|~`oi*DOfMT@L!Ua)o|Niw2h?3wCauW0zw|0V zI+o%(Lg7c*^6Kp41hOBMY^~_}@=(YPm@Zk%oA(>e&3f=YNh_G8q41XP}JZl z_MT?yKM30JPfPD8loW~!j^U{Y&U)~GU@sDt`_`kPxMSKm8Ud4|p@poeRM{41}yj_y4^?Kzs zjp!dzMtUK}pU3=$_L+W`n4@f2iRRqGfJZpVU@cE$6 z#lkjr(g~J;0k2VN?m5dj7*d_iah76hGqjeBt}q=IeJj#DPNhZFEa|JSl$Y9OfG}g7 z;NRwa4R;Mwj>60_6<$;6Z*3U!tUC4|8p0^7&CjKU=%)EX9*9TC}Lq$?(y) zblD#%p{1TjzD;O{IYG*X{d|^YmW)eCY5!$?ryb)lrGj^yOJ{F%lug!nmA%xuPK|x0 zZT)UmXv@mo+Vl)w`fG8>*2#l0m9y&guo#m~>iH0A=)V0#SyNoSj3Nl_^?A%g-#q@f z+^<-vSV4qB|JtR;8|xR<#~qbvYz`k`(%Pr$6N+g;Y<9c}rB1GmHVtNu46$pd2rhl+ ztCo`L`{%GQ;<7>)y!{~>*r=%FhdHd~>j%u`5L7&~2iw#E7xy$%ck{O&f{D&Vgj$q$-&lnB(JX%mFGT@o$;t)Iljqi z_q~*)yzwxXEZKBPw_Cpl8}{xmyra0_qf2q!W>8HV!i<-F_ zyIMPuDPJ#0g?3Ksa!zd|=mXX@ZSMNtxA(sO==W8|{5HEgPmg`BZJb+ZS~09BR8p{R zzkI#r)4u#y^xc}1Z|R19aw}q?LEGF(tzrmnf&tGDC&Y(!Lxt$Ew(;nKrM@ z$p6xMTL5A}t^&;$mFK{q0UX4;;9ml6dcL@^EAh*J3EkJX3pD4oqVI(APtHil$bz$q zzXEi+Ze9E540e&lI8zM0pRS8mMkhH8*DpJh)8TVVLAwo=B`I(uR`x5z-cxq>?GybL4t^#v^@NBuxxO|S zV}yRHsx0twX2FezM%-m^0ml-_yeTGH3TB0L{!?smCTO@;c33lc5oDaADJJbi^wJK9 zzUMArZ=&K#b!+q3@z*}*OP#M9*?M?xwSvJ)#_sy7U*ElKq5af(B4_@6OHa!ao}%WO z3E`mhn|MQO%yIwIPv&`4bBHHD*4z}0`*ZK{Oo}?O>SK39Iaf@T>o7!hk!^agSfoPX zGO(`~$o#c9&3Fv=jqy~MF(e3z-RCWr>+C)*R^tx4X4N8O!(oztaIX;ZjX_`l7dJJ7 zy3U}-YGsKKDCaP^P}-j9Ui}&ffUX^4=V1d<7VF215tu>M-24!@rV6&*4Q7Lda3_5MCqB}!9yl%T5X6m<1s;0n=pCpP~Mhp3Dak- zY8+E95mGbm#tTO8|J;fS{ROgZJP-nG-vBqqEc7F&E0nfk?R;6Ys0B}Gbz_Bv)}w4D zR?n+V+}b*UE>UdH0iUK9vch@rrYmK(-5NW3fySbmpSj_r8=jg7=A?HA?yzZDOuVB~p{phH7me*FG}|@n zL8!PQ91#m#`F-d78*HlS^z~g?LDg>6?E<&t^6CY_s+@NdCA+Moql;HUbk^ynKAc?JN<>6fb#GS}K@M-g+90l*|H>3(I`}Nq3 z_Xt8$tT_3O4-7m0EO(t1k|_MvnvzReoN<6I`$Sz@=G;&s?|(#Yb`4oBTc0CH49~<7 zqtmLzpqMx6(tMHIESD^oPk7|o+Q$%hH-oghbG*4Vfy_GyY;nWJwm>3`{py!aEoEt zzG%72R-Zrruq)WO&~) zE;3WurJ-Wi>gf~PM2y?Tr4L!t1zw7Lm?g#Ga9|ciW&;^=>ikW+wk7pRhsKfVpO1Hk zhrBBvASfGLbBFE0|5?)y$`Xaa2XIQ&8QPgTDbA7csL-;zO?deGH!~lLcBoTp61vJ8 zA7A+4tGi1YYidjT_CZvRea89`r zaf3Z9jzAqHDR(Uoi30sg9Kv!*c&OCl{@Nv}&T!JiA~fGwUReEvrt`wrZt^xG6uq-d zHLfS{LF&5|#`>L<{U-#Gfd^qNO$DJ39nqRww6{3)b}x-lVxDMm(W4^Nz z!i&@4yV5R<&U=_i-5%dvwr7D$@k{z{efD2(-XEyoZL&e=N%LaO&evvp8rx2GWTI1l z*`>yt5{$CS@hg5Ozo|K^zPRvHIsG&U?^8MVDku7gN-_keo`IB`!}r! zqY#Q@Q{hbAVeek-C4~Fbk3nVBpXhNlOm# zQLh_Py$9^0#wW`#YfFtXx-Dz;Wx=^_F^1FbuXN_BlEm^nIxBacUa;xpbDxBshEx`i zDiZ!0-AX6^CRl2uS1)DCaqm4DN_Cm7dF+XOc?ff%@8wG_=HF;6u?k-zsm0$GelzNglJH zzT}-!q!G(`%vV+P{yGa{0;a=0Ouev&VAzvUj_hP@fnY&K=1$ z@T=sac|jQU-I1YlN}pYnf-~=hu)IrU2(kyp*GGdhTdP{q4bz5-*RxoOgf zQV9rBP)w9UyC-HDh54?+()%Yo&>3S(4$1FMt5to#)Fy4zm_a{Lpzypda7^ZZh*&^y z_s>VZGI5AoH^^fa7j@N z1W-I7Y%VOZI392EjP|t=eXofpsgrp(N$Ezz9T4rtLQa*&Wy7MVSCb{q`wx$^Kd(K< zp+vPgK2t$u`n{kn#lS*uNDy8FpO#hO??B6j3dN&1HgiUzc`)g`-EOUk<>CLVOOwiP z6g%G#KKL;`*%z*ptrWIxnCWJK_)nR6;x*Gf{xxEXyjhVCa7u}V+8Eh4TrRRrOyRz?ama~yC*doETD+{V zM0^+DA1oNH&+e*x>_GlqPK%45s(nI4$_M1*i$Am=geZUDo&`xzzdFRda84H4 zkvu-eL2x(hNmg_E@yNoOPHa!R7zP+#b`T8C%Y{#nj7vuhRax_~YDayH z;r!+odW$be6zm&+|00BVk%e+Cp3u3kR9N;;F_&Z#<_rpYf=+th@3Mah<%A9g5bmKDebUE#V!;@uxE9h}&q z_dSJjqX|kS?re=q_IRn1?sO7+X~^BnAwPpJ^605|P67~fuCqp;Tg%n+o}$m_nz^Pe zbwXTPU+NHhiW_@Q`3;o}vPGBzJR(7R|5pG739SbY5QSHxj$C+vs z`a@aBI4Llt8YahO`h~rDgQL7g1~m&LAskf05QtuY03jX-ZG3AcsIc}wcB4QnrI0CM zJE$8_sA!K{CadRt2jP>gqBKn+(0=y=`XBB!gam$JGdOm{LmqApC{LYTTmFvF_d@@0 z?h`N#?z)gD%xxRaVpBHwwY%8R2j{9^c}PtNtZ7D0#Wzi|5oU_^qC2;qPhqviys5f< zbc(Pgd(IXsR(Yd;Nr^_Xfq9lEUndgr_-;}9iOE$|i+tRAvZ20)scCG7=+{FTt5);t zbHt_%H}=$lFtn>3&vco64W@md4>@~BH$l0UzUo%VDC&($jwaTixE9ptN)14C+rYGJ^Vi=UX>QPK5QO^I-b z9Qsz@8?~xy7^rdD%L>N>6Uk&ezPbrL8LiMR)s{pv40Gc&A0NTYsD$U6`{wT7+%W;q zL)28(68B?y+G9kky>*!vITE%Nc~Pq~ysR`p0Y~`urIWnEhM%+@bsVXGmIk(@5CbON z=Qs~-$OYO;o_?Z?_wBpRZZmTl)+OFCR0ug4cVHmFFVnSFBH3X7H`r;QQp&H~$N=3}1R*I~aI@4CboW>xUf{D3c zYZOC=5b(?+zo-0k*uxo|+G3PE7AR?HG#n|)6AJE=vX7efdp}hPX;`E}4=)W9S_@M# z9YX|l5Xc6g>NVVVs=K{jXU!~#*Oel1(TKIeDa)N!3^rCWY;>?LKFup>JQ7onRp8L} zdL|LaqW$?0RR=b}1jcE?R?HZHyeu{+@)Xvva@z8;N z_Hn8;9<{SL-W+24K`rf%PVH&qdzQ?AtOXq?ky@^%!jOb8PC0z3QOas_sdkk*^$FFk zsUmMR*SU}n-ffKLQyPWr)TVY+j!U*K(q>F%h=deqE25AYY><-GPBX4J{AxnZTFX1- zexzO2wpP9cHa2MJkRm*PS{-y&HrqT4JjWVNmcR$T>j>48jP_KQ4E*c+n2(ZsG#mpc zs-)GIFi`;2PKp#7Om>Q;lnNKH8T){lQX@31HCY6z?XUXt>^ z!)V&tofTgP-B%J+J8sY9J z*Edn9*cmAsZeEfWP?Y@A2WGMs4%^V;R4nX@8*% zFWN2ENsf)xYHCFd!kwNX_ff%Igxgn`fKG zR87m#nb#}t@#+xur<52miTCb{U<37VjTRMLD{l%#4x?s?NRcV6CWwrj?$E|nRp`J% zR76uV;ktZ_ZcyuWBnA91?(YG<;&UCZ33y#4hpHq|8)#`MI_n)opCWjb>GlzeS$_k` z18^%S5>!H4s8MZv$Eydht(q}K-YF$%7Aju@8zUS#2!v4`2^F_hxtuE*4ZmbQIl(5e zb5uCiubQU{McD?2(#J}QBvEH_w*X!>g=E;-)u>5x-Gy8v3ek-YA;R6;P--vSm3zb#PmnoQVi$AUqHvgWJyRGhgr)^l|= zW5iM0?K*X>DT3>x#$u<5VL!y7c4h?>F*avR{|V2|a#53y`A=99t*@?lO33QU>-@h%2PnJCLxhSOsH9Yx* zn3(d%c3CLHD zUc7eazKuA#q*bVt9^n9Amn?=$>9J!GwZZYK;<-(9G`q1r;m`ta;mxt;^RW5i(F`T+ zqu8-Gs3?6M^q>M!v_ZJQ$KXXB+@+PSQZIW@Ml~!n@tST?as)WSl}l9-1#?%)xX*iO zmQJut?KCJ`c38|p!?cCSdO}2Ps}m_w6(i5GsFv63C+eb zO-5?L8J<~v(1SUYOyxmlIt3=-C628mdSb9VV#giVWKYf-9%_-x7t1{KXVzc>TijX= z)g;J-eTbThwOB%07beLoDg=d~9UYdi!=2gb5H$1WH1-zyL{7NIYwMxAe3%8wJ{$_yM$t`QPk{0~ z8+Pv+$TQRv(1U4kk=X3U5TcxN$_R47T-<&@At3(%cXHS^*zrJv+iEL~kn^bq>`B%t zinQryzS$?wC1{^jzc<2j=?;9Oi8WG~&fAAWW3hR_s!pt{0yum4@bE7=uTSin>f_;F8uNtop1B5rrD zthDZhb0#BmAY466xn}y^#*NykR^2TO+{17gWs01F*vzu96@NK2aTX zRi2M!9$PnLIDkF>#bKe9hNY zkz$V2*oPTwp?IA|70|7YI99(Z8H-$8RlIFnu}xFu1&f{&p5jmkJ$ELd zp}(BzW3|FnUbS?=imJDn&4YgnEr_}{b7An`X~TK|H^T83?sZ{_YgWfN9m~+cyLtWC zvUs&Hbx%l((LKf?<+h2sSR)nv1Bt;Dt&^16XkXNz)fnQ&)qRtv)+E%vp}+$^NX)}C zWeIVoG5F5gxLfD2k2luwFb1_{vYs zjzr73KGrI{%T57&2x*} ze9lLW>M~GD>uuOjT8VV$2p9W%PhB5aNj?pae7_M8y%c4#yX{P>>|zs0BWcJ>FVLd) zOc)6RHjyHY5pNn1QELP1E<&Fnk3blrp`?1OMy^t_#~3MQkDWkdcZ}<)G9r%(bKYp| zerip`YO6CWMx%(D9>T9wI&=>h?{X-H7Z|X}gq+h403F6ng&8Yi1h==15h702^n5pK zo$H8{+w|u%7Jty^e}znE#I!5pi`6;ZZK6i+bDtx ztf^*Tpt#UmxQW|1GbPleGheMi#Ok0hx~^6`Oir4zQms9y@zP*}gFZRmzK+!S zeQu|{%2JH1xOz|Z4;-zT7MKlQ3>=;^i__q>3`smHF<3Tpg_UC6Yz-qh6=f9g?5aXE z*Xd`nE)7lWbN_a=6_4#G#lE;B0u?@RZVVBa3_w+ec0p(5E9n-{EjV;=fkh9Nuy~mA zu{4_2{cAYI#gEl!i-wfxrsh8&!93a5@KVc}lo&CuJ-Eu{c>E4?`SY%Ay2Q#VI>wEI z!7+ZXtMYPcw!xAdb5|?qvfGa2!PF~6SDFHk{boRQF5Px%94t$*m0C%ELJs%u7Vk^y zEq!)l*LF+Go8SfrvZn$iuAIPb&zbTcpP)|VP^TC7DBbc8Whbd5a8whlI-Tk}2!I3) z965RZ8dG96td5<|q1gNq;8g+ zTcIR)Pz%t^hKpQvHr0C*Rpx8Z=tT2kLJM9CduxR20TSxwn-?ufzqS^5umu4)- z-niS9f?zFmREkswdOt*_9(p-30d5qFn5l|fD_68>SF(8~tsnN``^jj~U$jeE=owQ_ zipA)jQS?Rq^dpO@^beunBQz~WxP``~o@J_A5@;@oxO1zxEiw`sx}0#1=NfTY?2Ry8 zQjD0>O?qDN$@@ZvTlNO3I01~*l+0UbKEbSMuuxEBv9wEk`p}%LtMR%E4=Y5^o$(Os zTx;EGPhIyZVa-0kc>01B((nB+L8M{kawI%qYS7m8vGv$~hc6-HOd=hNnfOG$d~u(O ztDzJ5dM#OpE|sZdA42&9RQ_?m1+yUR;(32PbAx!aTJn>eFqCbIC12*HxXsRjFx!-h ztW$W37KU6bHz@E_{BWK?X9rB?60d}`XD?aRagThU{!2>nH7tG+m*^?=Y0;UoDf@LlX zxK2TZPijZqB!ba|cn|Ei0tDW5t|z?cTd>zISoxS9%Le_hok+vXLG56g)pCo-p2M9K zfqSOr{ONbc$gOhgh~y=&f&CfR{IRNJ<@w`&zL(VjM=Z0?ZSAk;u3GS(@0U0rQI9YX zWWV>usqniSPApJzlbP(9;IIsGXB$vmNY36$dC4Oy6Q5W)Yz2S(ILVV-`@{oK!wH=t zp)QN4AVej!HH!3nb2tcoGX3O!?yxUREt_IP!N8{|0*zM8#$QYrA)XZ*-ziJLJuJM> z4{Uz`s#PV0vXenT3kYYy(}XnjR;=c>_G5?annrx=iSFl23k#PN`Hi_;q50owsX9;S zRrHY@o{-W7B}-|Lp_a9Qp;KAs3#u%=@^55-(=cGki?!rC>VLzRO-(Er8yy_z>8c8N zT*d9CA`y%^o{Z>AmENRve(@jI2pZZ@#-QQM`NTkLT))!P0tXN5(i{cACvB;VgzO&& z%`yX0u)p@03iW6pI?=)(=tPH$K}|oM^VOVklA-w{9^ent$3cgBsbzCp>T)BFq3QOW zaOwQ4qLO8NtE~ zfG&T@WoEzx=V#3-iY;=%zD!#DJalErc@hC5Y~)$2AH&Vnf9P_Qo$_osxBh|`ChnJo zze9wB$`M;%e9Q}X=w3*vD)2g1SL<<^2-$^Vbjy$Iv5BC>29?qWFa>P=%q7IAz=CN{ z7O@rO9MFR*wK$fTnOTXsX~qBGnRFqk-8{aP5kCkJfv#DNV*|^ zdZojxcbF2k1-b~~Dubi*^*;b`TsysTa2#>#SCaXkQmV!SS%6d${-91~WBLS3KgWXI zRV#X<7z@Mp+@b#YrckGzl>zS&h!gtSDn{q${!uO53VsXgBRZ9KZW{D!`#O`I**yyT zzQA$`koPj7@zK8kq$KZtId^;hP6H6tASeYjoRzgBvDU3;KU zD5Ns3D<*#>{^*}g_U{80GQA@M?Z~X7jNV7F!|+YhrLCvvuu#|@qFsY2J!S{V<2#V3 zz+~&v8>Hw|jD zkt@~*%pu^S+gA**N-szlLcjH-TET!E$yxtICYgJ%9kjB^RbYI^Ay z49A1W{Y#1s@iz_AmJ-bkVxmo+Wwey&BId`5Y}UEkV%$c;-A;rKQ8GYAf05~Rn!g9+ zx*&V^p^MVH0UfN$-biRHhy?Jgow_uTGE;8|vO$I;M-cnGVxD1^=dSV(|`UEs|J zyTo_)c17hS*mcBhxm{1uUfK=BSz>pQjpb;&D;cM=-5u|<8Rs$j+n4{@iJWKr`HthN{UbJHKS^nqQG? zBhb-ZST2gKrT5FWEZ~$9*B)Lplh?EeS6-{UWPx%OZVY-j(pZs`FR^Oq75Vh#4iZLI zy;u7Dx%QF$N*ajhW#zR!-u6>>9SjbkG>bx;slw{cSmZva?D!)fPPZ;yJGjdkJBU+j&DGB z9CxB3ixYhkGtuGsLI??ch#r07W9-Oq54n`LSW~%Tal3U-80#0ofEYm$%NO!i(1|CD ztU$~2WAV|z49x1qm0R$jaXK08ev9T7(|B}sSFDmy76&whn1%Z6IN@e6B-4*P1tGDW z+d~tLAU&lg+D=+SBvZsLdwcJ_-h*?uuOB@xj%Gn;cVx73DCP(LR8P$FwBLPE5#Z!I zF5!^J47iw&SPVQjQ}7*5&IFJT}fj07>0WlcUIj??;zB8XY! z(|RsW9urIP=ydw!u$48r~d#=Bqv^an4U7RA)u`-dcMQ71N|9`@9GKPS%Emf;`*svoqsVc4-qeeyr<|_A=Di*y7n`jE`KG=)Kd-EchN(PzkJfOv za-XAq>LBp3Dct7%_n~0($9b$0Uedky(bMXK)!+T~3gZ@DNEsY^4)Am9U##NA_EyOl zgTdC&i=?)uM~qZdLIE2DqcQTzzSAr9qK&IGF3PxQy$bK&_a~jN@0}zIjS?G$cVhb+ zFo^=_Bqf5W6K)gG+Ii{!=Cprlt9#z=+Hz|b&V-xHX^JVQ(?OE0M*zt-*<#B>N3xVO6Ht;A*#4;V^JjIgY$(zQG~RTbfSm6V?j1&H zm3mX3^qk1|oi?V6^MP5mT892f_dhF2@H8h}@VDvkU>p19?4p}*MNLtst7e1qRDa^T z+dmPGM73Ck3Rkt**=wn(D@~u*rn_P(=~r6+-K^1C>=^+8T)(dr(`>nZ01R8c2TxIl zM&AeFP<_(;5QA+40Fe`HFz-MDYx{dsM0}8}l;wc`^-b;1xzybw1Ivj*RgrAR5Fn5p z0%a7O1=P+if4=X>^X3_krouHV=tQ4DclTlHga7}(H`mj9by^Z1z=Wt(4p#j~&(`z; zH1k1HKz?a}x3aMFZ#t{}Bi0L-*&MVnw%F_HLeXD+MaBPrX5jxnk~}jK-qAQ|M3Uq* z5@1U*SV+PrgngT0IHZBKg)nP@6ULE?F?KN()sPly{gUn0@> zArC5)S7G%9&HJ7Ym4K};7y$6K(*RIXI^cmMW#9+i1Yj?h6cWDyK#$T{C5ahDG+W|8 zAYoKSk`?!o4wk399<*0cna%mX*nW^s@P)@Abu=DFuUaiQjd_ z?uaPhHs)vRZAM++&IGTN#WyA^l*_j>ar?p>(G4*jIfPm-FMQQUNda+I7@l)XJ8up$pH9Zv&8~^9f0J1YX zEy@yj2efvE08HM2U>09G#t%9d|3$Ir)4U<&_3o@Y_#8?ri|JYM=w2vkVj*_k?A?1* zUi-##HsV4=6Z4_M90dL&YCzPlqfqWbO3+z0RXp1UY^J2>HY-4n(SW;f5u<~HI>Fm` zE(GocTs@(_>Cq9!4j#rST<6(SuS~vXbc{yg?hM_RS*KG|&A%;so>$L!Sjx2@(q1th z#9%Q)YYxMd77Phk`*H|CP4N-3b)Q?Dd2{Rbudxr=S7^Cv+pM_Mw1~*eo zS5rG!o`hL!13Uk?6!h815WJ)y7zo_}VwTiRM-wGrDJig)wbzYqmPgfrgkFr@7POZice3GCnRHZDdlq$v0!`=m3l*G;WlI*P!~y^b7aEwIdx} zh@LnC`p1V1=Sz(lCQYx3j(T(Suz3`+j1)sx~* zbQs7me&R5Z@d7Lx0k(|;j*SPdO#q&)1%@^ejBFAZ+hmIrs=#kYmVm#q9Q@y}Cs?9! z`nV}~!p+ct_zH*wh=hnlh{T8_h)_frsx4SehM9rVoS2K%*fVQXVK8Rf);?=0P&(z_ zQ9~M}1;fS{7Q)icgl06;F;`74&ZzfU5VH#*2r<`fA(a$q{tM_St@mJwB{)=Y$4V__N~3h7czeASV6T0T0fTn#}|$@svEUqlg|fvmUngM(7 z|ASQ<6+(K65vrfh3+C0wjvas*yzOy%P70q~OvhEKCo~!RG*#6kD0uY+yy8_~U%1&1 zKjmz7S6q>3brHQcAyHFU@NQb4FuKv~B+vtW4#IS9a2(Ime8RDK&=h}?7LOiHf{(1% zA2H;<9av1S$v2y2q{6_a@b3^^@f*MQcCL;v;ygy?zn{A zNwv^aHz#FJRAcZmOqIl*tUm~8;dMeVsD0j6NBX;(ot-YYYQKVy7rWjK6+CS zBJZ|ap3)M5hZ=Ud+tSoAl^H(xs9dR7?HzaiioUzZAiOKAAHI7Fwr6mThFNE-)K3%$ zW99zB6lHdorU#1|LVM*N+5|kp@Pj-$Hw-+s1B8w|&L;GUHA0_+(5G-8Y)>Qf83=tA zLZ8Dmw&xN00))N@p)cWj+sg=j1wvni(ARL@Cfh}*gwO)gMEJ9MV%nQzHb+^>Z83FA zFmc;}U2B{46~_7lVH&ESDqp9jVa#TPISBY&zCnG%SjY&AkTwJSUzzuFdV<~NpJn6YmL&>Q9|0bqMe*$II9r_VzG^1jiCfKiWe$DU9zQqVKWN*IV< zLUu|+2{aQp2e-`R5LLNM&U7a7FjOHxCAsIKc~)U zFtqxc+j0Kleuq$RWV&p4kY3NK5pfWGi#cdsKx3aZTm`>O#Vx2S$CF*PeMl*nYu8lr zOGw)lGRaI*nh6_0F_+C!as2-r2bduc{$m1D*%&h?a?Zc`hWjhbtRWuy>`f44!W?tu zQ56Gdz>b_8R28#vqkkjSwlWhI;9FUK=`VCDW3*(1-{SO5;y2%XfpUOY*bbaRX1kBI4~wh_ny#H8M`d7(N*XPjlsC8N=4p=1V4A1wLNA;g z5RH*59{nnQ`bP=~ne}<}TE@Pfq(5-V9GR+w%HGY$E*TJfD}UJeG~* z(LzDVmi zPgBKevDEO~1#Ci;2_`!|<9{QEe9k|SsUvgKx@w8dXu-NUrQ&?zi^)l1-cJq!-DMqq zL&X9u{iGZ%EiCP4+u6mB*s2WSL5c-iyoOkib-+ag{PQCGu2rYST>4_G*W{5VpcVO> zQa-KANrk9}jD3)Na^b7c#2ENU(NyUdJS89?S?q)Oj_h$Q|K`Z4Os1BLFjq#Q;U8%A zr=_BFDHmtT^6PqV@#RV9vK4x?NK@HdTEkjV*t)`fCB!B9xPy&xLz-q+qRQHls~ z_orBe`iwLhY(Do6A#{~TX#Dc`TnKHaWPRG1WNaWB$KvELZ9o`Rne+#YhZdF}PM}R7 zy45ikqel*2NHk4oKU&HjmDzuTuQex(nr2H^Q_n=(vrbZpQH ztfTTR?%ggqxy-VOwV96Tu}dsCuH1tUFWU3{?qwOj!@L{`4n^0{Qc*T`W4NUfz`RN} zybRk>(?-Dzf`F@HC|z^nSRz$Jm3`D^?RBVZvpJGP^a{>3O@MNd zS+jg>c$-$;Htx{3Two3|vx6h$OXQh;@E6CK5h?=qGX!gwu$rby#rr&7hrtX;yiFK( zlKzOY+X{@PSMBJXp9GxH55j|g5QPvleNKgbYLpLu-UzA~Sz;W6i^bfE{4#j5HXDZn zp}#ZpB$skZ(?x6LGLVN2rDF)CXG(9_@&i_!@mMf}78$f!6;wKTlj<4_yky|Q9GO-? zP_u5WpdfY`f~pvL319AX!-u4e!`kKN{zeTJ!jFeNU|6{ZEo)B*I9xB1Nqq%N<^4wf zAg-1`IeYmX-WZmGH-0f2GCj;aoZEdmx~`+aylJLY3;WueBgchHgC<0D5WeQfacxJRqVp88$_|M`s9%*zKR^gBcW3#fo_~jOBnsxCy*z}G?N|_Gkdd2V041DfQZ8@l)fbXybs%>IRODAWZXJHLXNYI^s+#nY7=%lPFS43DUu#z z?pP3j1p36WOFEopUZWYa9GVYI{oS^1uUkB6|*`YNeB|LS& z6s=`cqnTwI;Je>==gV_wvG|La?IYyf)t|$dE0j7vBgE?~a=IGD9Qk>f-9Hdo{908j z%eWa*xkp38e8~#+x4apu*k^8j%-n7crwVy*AOEA&*=y~1=#_>%xXZc*W*4mGOP zdNCoav&*MCZ%&rL{$XW6ap93MB1l3^-r4miYARP^^O!LaMD5UMmMi5dm&my5!H$rz z(3lJcmMIWjrkXtzl#>NEzgMOmU{nhQ5yGhVZ>2ZKfH1_;Dsmdsjq(h1jGKNO%qTMW z8N#u{FAX2J{CNUK(C*R?2`q9-ArN_}lVzi0MxcI^f4 zg&h`{7_n3~yLBIDoD+U&7}p6@C9OwbUX1B)__(}zwf3ph+v&=3vHRWw^{uX1Xm-snew)52icV}nrf@#MNRNzd95JHs}(imr3)?nc_V zc&j-^vFK{E*rg{daeTYLl8FrAsR;^cj{mNu@+>JUGuqz~`0W?NTKKId^+`kwjBen@ zD|TKuYglp6uTxo`rwxK~%ZsO!S_=|6($WhO;NA3r&fS=x+iD`}5OVw{pXJ@QBt#~- zo?)4#TXcS3vtPJu?}De^ zAx`PzDA}y2j;AQ5Ww``d!sQ`^Ysp2D!ew_$Qb{vRd-edfhF3hr(~JV(DqSg1;1fDb zRXtMiBn!7{l)!XoJYkjuPtP+UkYUC7Y26*jN+mtM1hzB0g(pzw!#T@Wo>^>wMQwr= zpUl*C8)$Zz{aQ>o;Em!~3m;tI9Y*UcYRzMMS6wq7fT;XandZ}48mf$08$v}%O>wUR zW7O1fiBS#-?3T+ldw8@4YqYTIyJUt=w^i^!JK+!q#L++sW3HjqaLbP-N^l)l!+HoI zPE01U#gK_>BF?sfE#H5h1Yu-e%lAVHb9~AkPfTY^gzZ=eO-v`xISC7(r!~ANu(??e zj8SQs!V0bKG}pCoy9JB4*XP{^a4RAnh6myzT%-VwnrEaKd^sjf;%u{D*P(|h6E&vR zhdKK2IGx@(d1HuSh>@y=KsTqbMb)7exQ?)^s+wjl8Uqm+UST%(nqB)uJ%SLR7H0L6 z+ANW3Ouy;YuOKu-ZxB_!H&WHm7uF)BHvFWiKX89x;Z@4K;X=Td@IkWJa=))|~qnZolK%2vDr3Gbfh2Raw>x}XS28+O?E6Dl*_YdPISv>qSjII?j4^jDye2miO zj=5#}bqkoOG;h<%b1BV4P3Gq6HDRR0iA;k$W@gM5810SXq_J8i#DwZt@W@RdT52j! zG9L*Sas3R}i(Y1rGiA^1M&ohv#Je`F(%Z6`H4@$rgu%1k3q8s>xfOQF!G&{+b{RN) z-A0dks(k}b@glu4<>ac`jEzKGuW$5h6_)akSVOHC;NAj-V3Q5BH^nCiSCH(Dh^i4! zi4?Rlt)Kc7=YjMInL&oYDu7!jS2ynf+D!>oBevWdVM5hgf|HiK%~oB?H7pYhfkn=8pJE6@1Vq_bfO>SNH9ketlO3FWLKu9xH$NzVDegziY`_qk8&9!QTjfj8 zZ@vjDQa$ow!JH_Kqdnhksc|Q4KaZ*a(u;x?ocDvU#6H4p6E|M4c;Q|YwZ?XzD>Ddc z0UF=f<|(JS_x>UdiZJd1avYT&MgZYlk|jbF-3VrMVj7HTvETxfT3H~c&dq2}SrIe{ z8+9Gqv``bWj3(@;CarM*H;IgRU!b>QA3LtpM{>wmii*pK3(%1qG7tRZY3MUgBjo&6 z+vaUx(WpCF&Zy?@N1>EnZX!YWm0LwZvzX^bfZ+*0Fb`~bj|v?wa+2!fGu?3@1$pV% z`o=Mu*=`Es|HIhK!6Kxdr;PQ%y1VlfDp@%3$S)QnPiRRQZm<844u9Mxfv}nqEe|C@ zH-hv}(T1pTBkR^Q;7P zoYbY@Aj!C^i);#7eM6$e+Q3aVbZ+FnvwbP*zVfW-y$sevj+`JBDatJJo4W}3dapoS z`+*6|Z&qt7X@IlMBkVn;&QCQ7RD;o;(gpHfTL(e;?IzrW0)Xv(CCh`4IK zse-6qx?=1R{RI>O^{w2n)>3zmC#ekLLH;dxf*p{v!1}UroXTw6TUZ4W$)d{#2N|GV zDitamph-X*NM|m^XrNv!6wogM8;r_iY3S@Zm!gY2Z|^24n|jLP5-}0UtaqX`;sWL^ zLcKaS#3;fM|3LukN4AjLTJpnAXoLTa9n=g+9CP>~LqZD>zE!zT=xqY?o!Y|R&Ci-G zr!2H*FR~yOjfW}mW^52+0c^Tv^0V*gr zmLJG}hFoQxK(RJ3N81VF0u-NGM+G~WQYJ{|43Hooq$7Qf3{Nw7Q@$?1R4sOcZ;n>b zJ#Nsqgv3;GRWHyFF77;7LG}xLDAefg$|F^!y3Aj_1pGWRBbuYVS&&{LhliCAWf+b| z*pXI44y15T*Ef+TZ+v~YwBUN1>%J*I*$H&X#^vKsG65WHMl_8FtP=lW*IZzZa;ASZ z15kH2aH`x>y+=80!_E?HQWbz{r}(a69!^6!k>8K+ofPkD$?Oxm$&#TG3g$cbZfkcd zz2M+jbIaHD3k|9)jie`{Tb6eSpRsrE_0{W>4f)N^(NDMRr11(mS~!OL-c$FSBP zU7Z}DF7Ib`(3E@%_pVnz*dhG#`WfH~(f>8J-07?K`WQnAAnF$c1dy#a7N&Pek~yNz zE5~*;9&&^0Gyqg!R2^ZGmtpGB=(|iZ@u{|v5CrW!J-_%&Lq{9XRPqrQ%u!PMckim& zjiWnDNN&11NMJ89D28T4Hg*`vJ7Kv01Qc%kB1Qwo4V~Irtb3M0G~|HP;+ZpN@aaxc z&fffBcN4i@y)rdg9b|X60dW|XkITk27yft-37U5EQ1fak#YN&dh7m!~Su_WeI3Be` zAP=qY>Q%DKV&(}jbV_3}Yc#O+4bVrW+`rbGMBNsT zbJd0u-0q7s$p3tScnbO(u%mvX6ZudB5>!MT9aR|Y0->EdU((C>%P~i&O zncpW-A%OZckUo`u7+Gaxvc>}*r~vnOQm_V4+dk{+@&!C@TN2a7Cux%}`iP7m1B|>Y z?EMN;Z_#Xqwn*Y~Zj(J;6&&f9t(BY~nwGF}`7kIJrnL}iRTVYXQX4=w5)}_FT*E^~ z0z5LD`47XVmE5Zh*2{a4$9qg+=J{|R3inXBTJ4o9c0uY65^1-^~|ZOu^TU)HF637Gn<8v(*?D`*gSk@1W0v^Jec$5b>V3d-w|0|K|%y$r$)`oKM{ zSdhzLv3i|HWswchjgagA6}LzfAI9)s6M!iqo7aG>-?w@aC$rWk=2s-nWXH$0cjL|7 zGOr+DKQWt{<2n6LO*9cQW%BSd$`R#+yRNP=6!k;2e6+RP@kA$Np{#%bEj+(FQDd-ecUMpss$(MWb5-N=F2gpeG zf3N?Ma|WJ^e*Xj89DN*_^}tZYpS*rZzpe|!|AAE8P&}Mt)Ktos&*N5^pg=Xyp(7Kh z@A%&;|)0Koe%T5wgv7@%5B`rbg6idms~R3z&@``-~ZB~e|n@|FT$i| zLA!W?Y}jG)+bW$5cXvrt8@a{}k~sR;c0YMDz&%_e5QX>1MSWNR^85Pem|@n>$l8>k z%K{=)P~1lL5AYzJyDlU~@hM+C7z9>Lt2c1nKD20Z*XwsbC`21Y z5cB%Rw6T!lvXK6w+B{7MWg}8`bZ=kK;6rX`W`|cnYvMjt@Wq~@N>+mw^Kx)skUO@$ zqn(S=EpM7%5-=#{ZKPR{5MUBD3hM>O6^)YHvGTn0sN4J=7C^&j@S`;_1oGECfSDK7 z=?3nX)2hwLNPT;8dE@L*H*2zE{ewst6bCN2=5o_KYcWfJY*pWtRa@T|iq$rMtDd>mfC|RfOha z>T{Oo%qd`X7tV9XH6`cZ4Ocf@@u7=WA$;Xw3Zb*rAZc^V%D9hI4B3_ywSxko=~}Z~ zAqtU%7sQv~qMDMH{`*?mAgxyC%`-(ans&>m#3(Zlq6*&>U!qK3cF*z5*;yh+Nfi(n zuZ)Hz2Q&7smdH%;MCcgzCa&5UM#+bBu?_!NJAbL0wK4$P;3q z*>dFi&p_rP2zB@281y-r)^VC6P3Rr3A%iVW}}VFm0|qlJIIi43?=jN-m7twX0DHQimGvmfB$K) zH&)6bAw!?xHF%;NkQL?c?xDyRulR%-YfIJf(IWc?rWZ)y&^ZQc2t2J(-p_1t7Zidy zSRpK1B3}wlzhF#uHbewgq}}C9CJl{M-lA8Y?zkSu?kLP!h>Z{rBU@ODyU$p!Msa@IV&8r5 zaFrw&ItQ26TTCqY@gHBlM+X~r+&&iVSC}^}<9jLqP~Qk-zBav*$dL{)p)cHMZ$|l~ z1L`g>msVulUwV}w70a+)k?7-0S#<0ZrTR0K=m(*4T`x$EGThZm>gjMS0l*vMB3)Wd z5CZtiuR{}esvYS@B*QFf=ZeU6q>aafAUu^2hGB_32AuEHj3zmP+6HO zv3QFLXdbEBrbaN>@bCw}pbB|lJUp&UE z<|ACwi{@8&U(F487})wQDxbk)z-yFTbk=khhLooY-DTM7T#YHWJ4%IxKM2)Nk|}W& zL-O`p-ZIM+5T&i*{nuhwvsck&C`=zw;3vG$cS}s8*11 zFWS>f8-n;S5k2yOw&1z~TI74|hm>YMD@z9L$>Xcz z&2#gH2AQ>F1ebjDZHKt#!5J)yc+AjwZ-0nJCMqobaR#gX?jd6Z1QpNh#Wr=0hkc5! zz4iM~;Z#>D#;(8@H3sU-vn6GKb|)l}BIqJqq#6{9F22f>0WxC^gbXTM;x6TWi46aQ z*W&T^PpInfOM>?LJc-DNbO4nUjnCz0cWKGi>E~eHees_(q zqUfoD+{bmx@l95<=Z!S!y+_$Z>4ulIJ9Bnn^Zk3Bca}J=zhppP7QQ%?I0Wt|boo~b zf(!H=HO#z~sA7YR|0G}H8;4d$MRn|A27BKRLJ#x#cxmA$j^x&*O@|2WMXgF%jp7Ao zDW%osBCcw^dOcWJWZt3OWruYLgNDM*g@TU>IvS{)77D>uPj8J7v(?H|ZB(s+gj{Sn zC+=B{&6mWeknzLGzG~u`(S=hryU-vS;GU~vKZ}0{RX%Smq`Rtut~IA<=3tQldC$DOh3T_f4)jq1B0*%+&EcR==MJdj z=gVo7oJnxmycV|Fs?v<*$=32Rk?oV(!jtRy)H&u=ZSMN~hmXGgs1H;nf)=aSmVG#1TRHcG0sOi>)TQb zS8L4`Z2Yg%ny^0_&U##lTN8)M@`nCbEZwoGs6qt)ID^oRZ9eR60!nRTrAJuUZQ4RoUqR31tvvNP zjqrv*_W5Zs5!>gk<}L-@p4*rHeF1xcK|5UneVVP0SH;I!G|#Um)05G&i$JRd72CQi zuU6OGzOTTil8%N^6HR#NyUVYcI6}V`qC7Nu?Pj(vR_Pg|m1e-9MA@$pYj62IcZ>~~ zSorDG#8X1X_}aQ~f)@Izs=#DFo40+4p0*-}}c~eZd2+R-Z{HNIDPEl};^pJY| z1(0@sX9DC<0;2Tn)2ibgRW~H3QNGI<8dr|-WOo8>} zIey{nr>5T4r+mdNwPS+0lJAp^Z3)+d&pvJQDQ6I$J<-w}PX>$b^NkC;u$rUyK!q0! zRckOr`2y4MaEVZf!sTFpACUKJaf<#Z9vI;$U&fFyDDs{&U9PkDm`H`Ytm@_SkadR$ z?t$F`C@=znAza+l0&2U09;=lvM4-Y$;J&hsJnzbPKmhb?6FCnXkTID*qYc3{vijCF z;1cZEat~MlI^ixl6_rN8wukUQ%wlPA+d!%ZVCN15HP3t`RG`#6@W4TXIjhnoTJQuf zu1OjER>-zxTf)?7vkJ#l3kBrddvM3_gI}3ZLC_)H!T}+`@;z{C#6&%edLmgf*3OqT zgY0-pqaATN%}1DYtbtRPy1jV3B2eZs#DcUd$HI^J0& z*VYmCc_VxI>aFUvAXHKrj)(;={CRTrJto<3`ueV_Bx^QncYvFUI1RjTb>YXU(j8{P z)y*m8ch&FyxkA`Z2Wb}*w84^F?YyGFx`sz_lmtNtAnb;~(vq0L9De6Y)lmFt^R0-x zvWn}U0#Sd1#9!P)Vv4WS#8bs<85hpK079juj5^8n3*!aDAc3uF)u9~##2zcy|3%BZ zLOJKV_aG%${@c+T?;(UDUwY!B02p=s<@KBq5Gee?s?wJw`njsC+`X<;Ht?9t z=ovJ5Rzf-3lRWL?XJB_(V&JrI5K*;vLG6h^o;kL-Hk^~&MB zn@3qFQCWEJy0eO9h!^Z-uz0FCLArZML>L-a=n_!mhalfCI!X)x4(Rz$N3ZGeMmG4d|6JS z#r@87Z&Uk;&OCJDZ)#?=IYle48ody7bDLZ88%msC$f&14c#qP(S1w*%@S$36ttF%% z>wR8G`3bOxoE$I5%&oPG_?GNwau*zMeO!Jr6sEndn zs$;{6S3Z}Yf|MqZEEN0}-%REI!)K_FUcH1a!@c)pDAi@O=CLRCT*EP$^2bl}GlIqe2<+&jNEg`-P_4ltBU_=)C{|1_8_5-X zM=%<7d-eU-2oBxRQ2J3B(uid}5vVTybWVQfXqxE-kMYxe{f)K=iN6W<2bW>+7`?mp zl*g8RELZ%7Nb!?a_^f~iLeIC&K6#jBg`f`jC0ajwimt%9$4_HE@9Et~9bZR5>BTh; z6E#lKfUo)CNf^{01|kn+SbUi&U{!wwq800$lP!*m@G$romwx6q!O~6}qt$U#9VF4R zD!cXco@!^`4NZ67+xz9&mlr=^{3=usIt?O0e!8{PEPRV%oaWaN>HUYGA2cBpdn{L= zV5g@U4TzxmMI*TeZnaD}F9@T)JJPgn$&2$caNYyPCt$UfA514qR`n_n`T1NB=JL4Y z{6~zBe$}iE1)3X_Bc{1s2I3Qfo-gT5BzEokv%tj`W>@!zcJmPWjOq=a(63_F>s|cD zNae>90f*jcY#!I6WIhDRNd}VB>Pwi0VZN&{_5BGCbXwn9NN{_yDrG+~u|X5p=TeV5 zf^8amVXj@Kvf*@qn)Q8J6D;nanUa_k)JxM8jTw-P?<#1e4D!CO!oQM+2ZW{Tn_<}eM`1nEBXsehwoHhl4fP|)+W2!!Y$V+YD9nrktz&g8r_aC<*Gv5yBvifbPKa`4UtzV{W5MF6 zU!5!U~p7rKM7khG%WI-7~wQ>DfyMbPPBZ`DH_JHsncTh!)f;& zR&#B_hX1=JODMllY=2Mi@MqL?f3#k@Owhh=s)q*RKj+y*t0sH=Ys3(HztRrb^<-i! z5{bofWt#0~`^0T=ttA{w>LNR(^UN>=L#Rp#y zMaq~E2;NLwSvaKZ;moSOjV&DpoxHg}lQL?h>e1cZYs7y{Ar5Fo%qk@X); zh2`dfC$2a|5)zRSbbz`6g^KpLZ7}=ZcMvYoCd^XAJk5e}7Hp zOVSQNX#n&$H}ZPK#=jr0Y4>&p`NkV+74haVr$0tj%XXThm94tGyhk3Q>S zedgIVA+UhG-uGR=KL#7Qm_(;w5f`Jhq{15{gN$H~1|r)QU6n*_MS!?=n=we1KMHit zqj_^cRNBku<;U%6k<+Q?7=0=5kaw!a`)ia;a0f9VEQbmL$s&F6i;}Pg*|${0Olqab zAnZ(=0&^OJXbL9gf~`@ETmry@M?qi3VYh)Za4Jt3y&WoPWi%Wu$`K0glX3tx9rk{z z64IzhMGm|)OlU1k#dHD@)Ip#)gR0kX-%0j*z0R6f5U(pm;-V32g;SP0tpseWWYpwh zT)bPC@}wuG9;?8S?e$DTo<;i$A*v2+fCY@xgsqq{0C`zl)MXB9&_8WMF?H4GeObU$ zh+iVgXI9x7&shNuflCXq$KEF>DN>0RkyDCIU`WMMqXcl&hg>RiuHK`n2IXd1j&(aw z2`8FHYOcZ7h(|8$oi{UW$+$I5l8as9T+`A)HEK^A-?L-}WOa0)L~6O33PTdYIOXuA zMk#}0saBOb^$FFksUmL`>s-idFE_>QjKxuUYEwHZ$4RzMq|KO&5D6*JRzx8)*dQgV zon~Bd_<vAlA8D7ht(9+qjSU*PB#7rvYr^iT^|CBN-?h8bCGdgoIzsg%y$v%Y z1ONIy5g_Fr4MzuxDrxm4OccP{Ns&UG=}xhfay`YI2RR}BNFehYm1rt-z5`pUIC6;r z@IC(fbFjO!y|uYv!a{!zR(me&(nDCBRmf9XepDO5Y!GiJ30vi@IFUI>O>pv=Ao=FJ z!#@2Jm_!A%A0*C6Hl`bA3D@#gl5pHD zJHjP5zM$`gQrfSkpAU%Wn3M-sh+<&5WCBIBHmXX5oa43?>XJGN=^u_EPjw1anjCyR zCK;mn(vYgJ2~_RY%LPkZt2>he6aF;Cdmq%UPedP+@>ZlnL((!y%UqFo>Pkk$a0O~6 zS|{!n4M>4kFG9Ym)4HOOYj!%Trq3K#I?7Lg2*t2sjzet(N?2mT)+%e1HRt6LGP9ss zu!KvAF534jrXQpd5=4_UvBC@0S#$8=C%_<*SS}$GbMn9#;QFnq6I_AI->maAl(}s= z+TBYer+zEcdm}W6R~Fn`i?vQM-QzjBzhD zEwwGKibW0E%~P<1scBV>b-nT)UL8UGDJ8~C;=TJKSU^2oqeTVR%9}!w!>CyzQe;X4 zgUHC~4sBfX3LRL8ifC#kT$gXr4QjoPB!JH*1HHgke6EwVA-|_|H?L{D4YjnQ#(oLu zGX$?(X#sy6Lz)5donZT{eM3IhgdV~W)U9uQ1g=5DeYJ=ld#dDkJXm(?L!l4CT zz?)<1ccb-tw{n$qfMUnqKt<{6kOL|ZMH_?*d;(t7!ChMEfO^@(GOA&riPv!PqMdBMqB!-f*!LI|4qOP2U!V<0D7!)xoIo3fh) z${`#I*GADzUpGK`o(=Zy>gWUJx6p&Ba}lxmjUhxi<&+T=fw{Q-fI>k20q*3mZLs5k z2DjB#8YAaZIqXU1DvGq}b!0)CrdfWn)&?9kxj66M80gMPl60#pQW&E>SS68;KU;z1 za~ddsS1`d<1vcVkE5I;4?}ZyHr=s2?4hP2j2^{8a1vKKtO(0B^)K=_Lovs(3D3?a& zU>LiPT$PJDW1(*u-DzCGE336=20f$%l}AW=5_8wirRS&wxv2&x0$27KPPOW8Vc;Hy%Q#cy6vSrMg(cVi z>0dz{Fr4<(#b1>tk>}`r?auU_ejwwK8pfXDH0GZe={Qa>FK*@Zl6>}`Acbd6*eon# z$B7wrR+8S8T9dVgeZtlJ?%THJc&s+;+>|+uT~n*@Gk;#KEJMQ)6g#}(l%lJ}pZX-L(CJypkjT_)BI=?-AeKl$gh^M0FU&Kr`LaE4DZFQ*z+x;vG1fOx#? z_EVHat)6jHd%ouDsz^0LH4b6MS}0y;Q3Z6Xz_r^|$ymnaRmF??727OTUa;snqFe(^ zJXDHkX*2eVcbc6rloHW#Y*>L@1=5_v>zB3FrTf)Io(|2zH3pL70dI9yBVjUlhbc~g zw7wvwHq?-cFr5x5*=WY2UDm4M|hm<5PgoGdYKcQ zh#R@+>tB!6=DEdR-Elr@RF{HMT5rRK(n_Q|$GF(vJO9?Pl6)E-`Fv&UHk}ZF=_2y8KM{b&yQ!gpHQWu%7G%{jSROvdCr=bI_i`TfSXA zL8B-u+`v@fY@-+|u%?Y+#9-On6;_IM z^C?Dh%F8I=*;R#TuG7zCT^gF0=l)CIj>mSC;(-2kP~ijT#*o0^45~7+3py`fNwhhybt;ECy@aE5%RiKzq>{i< zO|j~9s_!5G3K}?a^87Vs#B5j{JDuq=_(OHq~IeY0SGPqw)UDttay)&7uLk@D&4X|_Ek-B?xAkv;f_qV9kX zVRH6`BrTD;S#ol+c8e_obbAXT zT4-_^w|*fFrz<6T^z4VwgH=rey>p9Z5p~!6(LIN%%(=5R?NUDL9?i?gTDh}l?&xSX zmsvH~ARQ6#(wnH_-7XZ%=sr1YGGXp4HKr@+u@f;T^;UkOhJgd%WsKiOLq2oO0@oBJ zcZlu*M9+*!;0sf9JzdQ+%216HjuWvJwbM3@kkWkCi+Uxf9VJMsOjoi&7xru&xj%m2 z-kgXRB;TFZeL42)pEolQtfh_$k?H{VLuBfqS4{};<5#%|qD{M!%`<8Ju-9Kr z$HT$mRh~w^srynat9c-Ai~8wX7E>7>!Qdk_Ek?M7#-yHQs#_9hE{V8vt7KahG%^i2 z;T)dJ4pPiE!;&xK zrMS&bN0@C&Mb;@iMGHeNmKzj!Dt0ed!UmROh<9(J5wF{q3U@4c%*Xk< z;z|(WB^cn-6VqXgm@2)?Eryy9oG|H^evccC!%~zk7a{?*iNKT=Ac$E z&1$(tWY6JFioiWnbN=+ZW9(MB4T$6=uYvs;*W$6NWaatee!iDAAy+K3&*dVRjXbsB zJ>M^JK%*W@5#+G<#;NeT8%``xa+5i8CO9mE*x3eDm(1H+DKB|sW#STj-wyuxaS~5* z?GtxE4JUMlgt{!Egb|R z;FGq@Lm`L9L9+~j6dbHQrowz0h)%Td2RhN=Vo=jh=X^CMImuA}5fAW(>64&Cz0|UK zEp@pO$H;X14sdC6JY@Ij*s*caz8azlhe}0|v3NuRCqry!ap+h*2}kfq8VAcY5!f9t zpo|^BI=aZd!%u1KCQC`g6X9)2=bRFM>QJaO0Wsd^75(FEJ!Ry(ebZb`hGzAsiKm56Aoj$mW+`!B_cr!CCi0Esy%w>3KoaeWgPT-1C99ip*`f{ zSSXUtY`MY041g|w$z^831Q%q@FN!U4!M;pd{5&*u$$1h1Gi>Bp&W_>c8b0*6$`55R z8QFiq3lsOt!rvjnLFI_8FFxjlJ9IBustUYL)Ythu21-|v7~S$CyFF+rv4Kh%0)zs# ze&%Y$sKAnGUlFHM#yOw|Rcdh}i9;j`le7@y??JJUscv&aMf1X&$^riznbV(Xtqzs# z7Zpo9N4)0!bEksDZyC0e0-$#msAYM=!Ms;>c^Xq^P3S_^*V~)dA}e(rUyS`J@g|3% z9HNLy(H0t_F##Hf9@S)vNRnSPx&eE?-B2v-ag}W0ES%YfNtUWYjpj3!ai5X8P_&x( z&82uqjTaO!l5T+f>6MN&y~C8S@hBg{)jDu=zP=v-9M?{-92`en?n8^H?@x-eommRVSD~2|M{j+r=ImEID{wkwN(tJzxCR=<-fXq3+PnZ zd1TOUzpH*;*fJQYFR)x70DY>b`HU3+Q}XVYbN9N{3;+P&4hTvi@ZmsyVr-ZEnmKzy z*BX#LCH5az-1nPvdm@#FzG3orqBE9F9^VK2>|U0E9`^Rj=*L`fIigBk+A){MucD7g zJdBkL+}OqP_;jEY1ejf=8yGC+S``3#D6@-`5BmGII?=5pLjxRN+ee4x+SI?c7EaJ; zG_EA~Fg-q~bt1P)AFxAi{lfXw+#=AO0ei-=S&r%yG_3M6M%6|9dykp7$G(o}0&V*b zA$J;KHL{FgI4EuYN8Cn2E%dol!VO}gnJ-f7rYmBc6FH%CcT?v+z7GkdN6EO1{(;@M zDg84bZwvD1KJ+SU-+>NRGhZm^3;;I(&~3K{px4?SuKS0WP{=p{SU=2}NrYp|>9zI; zb`XXC?GS2|c9=L5b`oY@ZzMCd*iON8(9VwWT(xuXmdB33Sfd0LRy%Rv&;bDU5+Gqm z48E}wtkCQn_ol$kljUx^z~x-Gx5#wa+cxhidxzCx*?aI-8`mHG3h$OZmNVh8k`h5p zs>A0@>A%_@$z>$$BLPOtn7h*$$rDSY1t*tHq(-gsuW&{|Gu)1bipeThCXyyM@m#71 zHCczxS@x^_e%a<3>{H;=-$nW$Y2$kLEH6-!zE=b9dzgf@zyG{S}yj1HHgZ(2Mt7)!j~0-+7K|RFZJZ)KCm^A zi+l}Y?BO6<#pV{@;lo^fsk2*xkG>aGYl2MZ>mxN?RLokxLSw>ySL|l}ahim}(Fb(L zaVIL$n&>0UM2Fi8Atdx6di05pu_MDJRHeMdnn)G9w_EpsvA$#VL?g&!`9j_bIx%FC z1sE{=n13`d1+%(y;v8IYPA8+?&(T~fjYn5^!72%5aX>?eX{bw&6K)1WGJVHQ5Qptwq#y$laIxr&^4?3_CIJP-@1CcQZ4WxtsFYJ^zwY@ic`R-P|;KO&B?;b z#?Ha1Scy_)%2n|B1Hn+Zx~8_SJ`#<^6UkJ%p|PpCrM2yATv!Uc@-O?SG~F;0(`?7} z^bP2Y543OeR`#$t+}y!4G%_|ZHRB6}BC!O;q_UZi28OfjL$+{)RfP-piXtwaW7REi z_L*m|dEt)B3YQ*SU~SFZwc^bYcmcIjINt@T3ni+uAnjhFGV=U1mCohRSeZ7@)^FKI z=WtP*&1D9&V_vcqOK&jfm0b)JYQAu4H5YNPG^merMDAfYa=}(qqP>&~Wiu&NHB%DI z+=e=9K-=v5_yYmo1piBz*61=?{(&keT%1iF{0RR91&?S+n diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.eot b/vendor/assets/fonts/KaTeX_Math-Italic.eot old mode 100644 new mode 100755 index 64c8992c477ed0007844d3cfd3f0f962eb91ac89..b6f8cbe8ce1d25f3d04c3cf5f9f0a035d6169528 GIT binary patch delta 72 zcmX?el V5M10|vlvEiW??$AfCVTr2LL9P9HRgL diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.ttf b/vendor/assets/fonts/KaTeX_Math-Italic.ttf old mode 100644 new mode 100755 index 06f39d3a29906ba9c26675cb57188dd25a57609d..a61089b2258863f77c308c1d1c1cdabe8d9d5cb3 GIT binary patch delta 77 zcmaEHnCZn~CJ_ck1_lOxh6V;^h5|RY5Z_Gcgu@d>a#;92MQKfJX^;`WekdcJ-{vcW aJo5{nN`|XXx>v&J%?gZ17O((CmH+^(cNKu#ubC(ja5-OlCqnzs*+$ adFB^Dl?)fR*DQw7n-v(3EMNhO%mDzTEE-S% diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.woff b/vendor/assets/fonts/KaTeX_Math-Italic.woff old mode 100644 new mode 100755 index cf3b4b79e5b940e9e7a48b79022e1ed82fcf2786..465a41f359f4ad9c239f5412f5f3682ead9a227b GIT binary patch delta 77 zcmV-T0J8s#x&e&30gyZdX&Yd}kwAz94)R(mk<67U@#}{&;`wd9GRQN(0E#eNebT)W jM*qM0UyVhY=_~^i0|yWT0RWIh4wbWu0exEp)#Qt$F$Ez> delta 77 zcmV-T0J8s#x&e&30gyZdWbRSBkwAz92ADh^k<67UgJ&`m;`wd9GRQN(0E#eN++MR7 jM*qM0UyVhY=_~^i0|yWT0RVIt4YRY00exEp(YJh@^Hd*! diff --git a/vendor/assets/fonts/KaTeX_Math-Italic.woff2 b/vendor/assets/fonts/KaTeX_Math-Italic.woff2 old mode 100644 new mode 100755 index 5f8c4bfa455259e3e0a1c53c8fa399fe2a4ead59..3f945bee40021473d533233ad07b0efd6d4490bb GIT binary patch delta 20367 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 delta 20397 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 diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.eot b/vendor/assets/fonts/KaTeX_Math-Regular.eot old mode 100644 new mode 100755 index 5521e6a564de3076d4b790a9db8eb302333a2916..3408ad26bad054af84659a8f10103ad8bcf2161f GIT binary patch delta 72 zcmX?bgz3N$rU^DIt*%|H6CHN2WJ)I-p7<(gF@JSDzs*+$dFB@k VKyYz;&0-k6nS;q>0Si!ME&w%*9EAV? diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.ttf b/vendor/assets/fonts/KaTeX_Math-Regular.ttf old mode 100644 new mode 100755 index 731270823704787f06e136c49e588614fa39ab68..5a5788a58dbcf5eb0001115f7987f87b8874e54e GIT binary patch delta 77 zcmca{i0Q^5CJ_ck1_lOxh6V;^h5|RY5Z_Gcgu@d>a#;92L}^WIX^>& delta 77 zcmca{i0Q^5CJ_ck1_lOxh6V;^h5|RY5Z{z{fqN#3^o diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.woff b/vendor/assets/fonts/KaTeX_Math-Regular.woff old mode 100644 new mode 100755 index 0e2ebdf18af76d3f8af92b55f7c76a60e30a9c08..34b0e3618b56ab834384355e0950f5298dd0fe37 GIT binary patch delta 82 zcmV-Y0ImO^xdEWL0gyZdX&Yd}kwAk9G5`PoHV*JwDv`{UD%LL7)_8uKuMG0cFMuKp oSD$pRgwg+R{#Rp>W;zSxaxgG~L;-Hl4b%X$ivbZ^1l8n=q=E$_DF6Tf delta 82 zcmV-Y0ImO^xdEWL0gyZdWbRSCkwAk9GXMYpHU^eF9+AwID!Cc+SI6_)d}WYlegPC= oxVXJ$F^v9y^S>I4G}BoimxF-`Bnkk2APw)civbZ^1ktyAosRh;nE(I) diff --git a/vendor/assets/fonts/KaTeX_Math-Regular.woff2 b/vendor/assets/fonts/KaTeX_Math-Regular.woff2 old mode 100644 new mode 100755 index ebe3d028a34a343fe4d31706cf3d2644d646cfad..2385fbeb8e6ee57c9ee1f0276c63e51eae5dd3d7 GIT binary patch delta 20130 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

60BwN5(l{2r8IAS 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 delta 20065 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 ITDu1T05+GDGXMYp diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.eot b/vendor/assets/fonts/KaTeX_SansSerif-Bold.eot old mode 100644 new mode 100755 index 1660e76a2b6ea179340472720b3cbd15acf1ce9f..2104d2aa29b82d4fdd8bc816b0a11b5d414630d7 GIT binary patch delta 73 zcmbQ!%`~T*X@U)lvh2Gz6CDn)WJ)I-naskN!@`>vr8~KVu|ej|J6Yv;ew(ih^2{$7 VfZ*zr?o}{)vj9^^GYe2;DFDzJ8-xG= delta 73 zcmbQ!%`~T*X@U)lZ}}hAi4F%?Qr-pboy@|R!@??JBR{!>u|bCQPq}YAzs*+$dFB@k VKyYz;&0-k6S%9gdnFS~^4*;`}8ZQ6< diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf old mode 100644 new mode 100755 index dbeb7b92ab57a2687b8bcd80350520205127b6bc..644e8aa3c4da12a82a7a10b3584f776956f8c6b9 GIT binary patch delta 77 zcmZ3}$+V`ENrZusfq{Xap@D&!p}@^8#5Yqq;mAah92VZZDBX!I4Ki=u$tuV5+k9n^ ZXMO=x$#C^a_bM2@S%I;mnFT1a6aY}Z8IAw| delta 77 zcmZ3}$+V`ENrZusfq{Xap@D&!p}@^8#5d(#;NFQMIV`LqHu4i&8e~}il>5f>+k9n^ ZXMO=x$#8Ld&0-k6S%I;mnFS~^4**6~7>)n{ diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff b/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff old mode 100644 new mode 100755 index 8f144a8bb312fa160afff853133665554eee9065..126fd8e4b42facf60b091e615c2b609c55fd859e GIT binary patch delta 78 zcmV-U0I~o4l>z*f0gyZdX&Yd~kwAz94Q^U3k<64U;y3SPmE-wszB0%&zW|CbTz%5L k3P%4^`_IPW&GZhaj)Q>-BnkkC%?=f_ivev(1l8n=rKQp&+yDRo delta 78 zcmV-U0I~o4l>z*f0gyZdWbRSDkwAz91r$6Vk<64UV%9(9zVZAvUm4_?UjRiIE^e<` k45R<4{bytGW_kxy$HBk^5(NNin+-Cvivev(1ktyAo@gB+U;qFB diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 old mode 100644 new mode 100755 index 329e85557fa22c84800d38d8e0d28e30bbd6543f..f042002876cd5c8cbdec96810253b5ae23afaf8f GIT binary patch literal 16000 zcmV-`K7YY?Pew8T0RR9106u^K4*&oF0EDan06ri90RR9100000000000000000000 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 ui{=)d$jvJ^I7XWeAoO2#KL2yQ-TNTP&jbg6 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 YXMVu|1XrJQuY}Q?C75g~Sb!o+0b(m0`Tzg` delta 73 zcmccdh4IE0#tAko_02ydCpw&9NqHBzcQOxS4h!o%8~MpKj14l9Kbq^~`E9;3$TPoS V0D_C#YZk-k%@RyD6)ZrJc>qWa9A*Fj diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf old mode 100644 new mode 100755 index b3a2f38f22466e837cc0a1e8bfe166ab86787496..9eb9d8f0ce65a5e3782ef23cd1a200cc422682ab GIT binary patch delta 77 zcmaFxiSfZFMiB-^1_lOxh6V;^h5|RY5Z_Gcgd-D0a#(nOL}^cKX^>%fr5PE|Z}XKw Zp7{k(CBxMx-78`AW(7u@3KpQqQUIpn8b<&C delta 77 zcmaFxiSfZFMiB-^1_lOxh6V;^h5|RY5Z{z{fqN&4Lvyq?J(jX)Gqq#nw-{vcW ZJo5{nN`{NuYZk-k%?gY*6)ZrJc>uy-8b<&C diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff b/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff old mode 100644 new mode 100755 index bddf7ea6579bc13bd4455a14c5f380e69cbd6b50..0fb184ce0abfd26bbe0b924ba8622f4c9eaf83d8 GIT binary patch delta 83 zcmV-Z0IdI@jRByI0gyZdX&Yd~kwAk9G5`PoHVyb%E0N5UE8$m~k@5UCUm4_?UjTUw pSD$pRgwg+w{byq_VS2~F#J~Z>KmY)8BMt8Wvx@-{MFiF4i=~#^Bai?9 delta 83 zcmV-Z0IdI@jRByI0gyZdWbRSDkwAk9GXMYpHU*wMACb(ID`LqX&Gqs8HeVU!nO^`! p7%pzFSq!899sAG5V#4%}fr)_wh=BkAfpZQDvx@-{MFi2ee4dn>BG3Q; diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 old mode 100644 new mode 100755 index 5fa767bddd69dde2a3a8a009667c5555161058ef..cf87ba5554166039b4ee8f48a898fcb846a30689 GIT binary patch literal 15144 zcmV+@JJ-Z_Pew8T0RR9106QoE4*&oF0C`{l06NA10RR9100000000000000000000 z0000#Mn+Uk90p(jgL()$36~cU2nvC?e1V-40X7081A}x6fqVc2AO(*|2ZK=zfeIUP zX*GD$St_@~)5qfXnj(OW1E4b4&;I}K2~@_gostbvK>q^}WLX-OY0xjF%7)P0Q=_Ub z(e)^OqFTNUhheD=j)+o3oSDbp);>?a^=f)|90%+E#CguJ-xZ9kV2fy0Gu{5gIPEPh zY>CqsadD(>&)PFs?e+MOBs7Qkx&7U}ZNOlWU_k{3=GqkJ6uMH9@kwH~W?(p$N%@tW{c-S@i&<%zgwz1?lT@TU}Og3_czIRH62t{}kszdwNgyq_+UekHi784cJQI|qgy zNZZmNt+FrCjGUeKw!g={_4OkC&fNXYj0|@0z5ok-OC!6Kq?6L+kvFye-t`9H2mc=c z@Ne1l)|_xfsOSuOP4_1~lGZSNQg`wH-==x*eeeC55&ap-ykH2CH{lA%AT6Mx9WRap z?sVijRh>31R&}aA2I;hB76fRNlPGM*mc3z6;=|Vw?GaTE*fh^o3Dn-zreSkNtxUZ_ zsqG;1mWj+q(V&0SmDGpG%~O7W{VBOj#8Xjzt&_!v6nXRo@kWT&R@N znOe^7I?aC=h5GN40pOWQY znv`1Wlwr%3^-p7#v9@8I0}uGy@@;yN!+T#s`+1xOC{|<Q7t`O?<{i2DaSzgeK7|9Zm(`fdXN&OHnOZk~QjN-++^!83sQPBC!41OUi! zC(}=tD_^ByCYWL{vStp41!G~@(yiQ@t=r%>ZR>WNOl~BX^B;v$UprqRziRsn23TT5 ztlw$Nwx0}c1UKftX0PejkACpI?|kdT$M|slZ~626^X{(Bj`p_J^{e_!c6URnZiO%* z5^BI9b@8|00P{#iS@rsZ;V9R2h_Gqdj_dhB7zw-BTOc&eSYDJ>y>37-p-hxyMb&h} zv~1zz)Dy}ejN&BC@}jKjrtSJ+qas~LPL@WU9|MReEB|T>vXHkM>froLDq<8<2xZdGBe2#1%Q@rIP4G&)t-v9R+ z`A)Q0*t~KMSTMG31VNjFhcKT<9)XtP(-x}zJQf9MCyU9>m*~t@!;=f{+(t+FR*8Lo z>Hb?%2@&m=6vzC5BG#uN)~%>dSOqZr_~L@#Hs%vDZzh4y>{7c+a#Ax^!AQx#ow!QL zBhf@C@0UVrE21snSSY$N!SpE1CB2qK&x4Fy#;`KNoGg$tXX=m!Px}X>toI9La@vl0 ztLk@Bv=pF}5AlvvCE{}(&!fTB-4UW*u(N+iNVmRA zemG%NnO=-7ke4gxfr_9sucR?t$Mn%v=F%PKi7BF^=Y8!w2{0uhy^YFlk`@y20ez2- z(>*DoRv!udQ_UjJR~w14hSwJ)7R*!Q-Cite*`;g5D?9eodAA+k?Vgb0 z!J7v552Il~#gP5N`!ApFxjibI#k%9!MvZ2oekFl%|H!jLeX;TEl0~5wq*eAPqPcKg zwPv6T>PNpBemt@$y`oRAGeHaEZh@?GcRc%m4CNmY-VtASSHr4F%|NH%02fw$ObTV8 zLPWfF^>xd;_)}bL=Brzy-E2)EnDC^bTk$Auno+W&rCBgMy@OC*8dCid7ZvKOUnGYg z%j(A7BvfnD{=-H+Iz{+b#9+HwJIMl_qLjZy(cXWuBw(q5GNN<9ev!5UoQX{=c@EWY zmb=hxmS)W(&rwkn&jPx63N!>gB_8VwxaV8bhzGG&W3IXpp4pmA`j#EPD0(yUa-C!g zUcOgY@wz-G%meBcl80tX`Gjsvo?@z7>}=DWs3z5AwUE1>v!Z#nhA1oAmp}7!*pC`D z7jO_mqhKhkpf;Nmpj5LOo-w$DmIcFF-PEYIM|Hh$U!r(DK`_JX#SD1BJA@XwG5=xi z>sFVxT= z6H~3}AOL>|-M|!Os$6rE5$LcDeTyM=TjUA81A@AHb6|q+!I0b!2FL>d@(}tJ^9Uf1 z0mu^oVxe2+DL|e9kmms81@x4836NI+5dVr0g9O9~K>g1>Bf5P~80h?b4YDEnk{QqZ1l&2VCF*GTZ z2H`hbfkF$mjKwh=dYqYC1i6sVyzV&a^{8CWXuAd4t!sL+o|z9lA#3vf3iYG!k3zX866A9n0?il-U@ICbL%=|R zR-%A1mqUN5NmM4;vUX6wUu*v{27(}_NrY@CundXmvKHsaOQ0y`l~a_;TqCM*&lzPY zJd&tE$VGDnDo!%yh8Df!MpFzi=0#cyeCOnPWegnb=Ta!cXE32sG{cLY5Me#L$KuIh zed|fIWNf;-{;boQ5hudEGLT`_pwR!$i#_TbwO(-#QnJ!l7E6T~mMfP#SY6InOz8@y z@Cp!2Gx6n~b$RPBu0-yd%~ydK!_WnDRA>-S{D+KK%9G&c;V+60dHR=g1? z`zgG4U9u*q`4D?TS(z}#Ljpb2QIWOCf}UgMO!&SYx<`_Rx!Ca1W0hvQH*2*7{| z6pW!-jyI90(4#(~kc&xk?CxSrOwv3_tNEKa{jROFYJaRmafhOu{3T2wzM$cA6!t~r?V6Q=qHpm~g)tu2wrDiDsBfC`VRyS{biRD? z9WjQV;!aps0z=fpa4>+mxNyztRoAgsESv$xFeA2n%%} z^lp7nBI|raat&ix8^$B_r_ZU|&XsUzmRR>`bYaMv!y9`yxKeNxkz2WEzE+a!Xs}j! zWiXS^6nMvU2=V!29qMsV0AKx_O@Rq)E~@##iUo<9&K@hOCH?kArEitwWn>ni>j^nC zLp6pRWtEk#Rh@TaUVhutBO5=Yu0I;yhsml2Ve7qVD}%})1G{VWCc>D$FmBHyla|w$ zfvAtlr-WyBSLn%b$l&sQ{7AjNWeY&9NeZXKv%_6Cm0${VWnJ8wjy_ulf>ibPO%|~L z-qZ~DalKG?$3Qr7@e&WQ@(Dr!xSfX35{pE^jm0@o2*ry__NpqWa}F%a((fK=hWb4maf zzw4fab(?Y#?#3TSWyRJR441}mx27^;(POg0R@G5W1$+ zCgkSMpdBzQY2DZ~kI3}SlgNSa@Nu;I9WiFa@X4+Ni(Z`}AhZSyl1Js6cP5$=K^N{( zJA9r}F>j(i5|1sl#7mZiJek@OXMcaZK`txUpqO+F|I$j;!Rgvq5Y1NaCgQ4w+EcGT zT1KUrHt4iY!z;do<9$2j(;%?lB--CByW?4Fy3jO;6ta0pbJ#VLIR$lZa_5T%G0}sD z%H|o#W>K+01PZ7=fF1LDxk`gXK)BNwGjOU+b$nXG(YqJBOe7@7hm%ZyKMuj8Tduk` zm8#rk{DB0CF6yr*(xbu&0}N0SV?3e1vPH3op!8Djer-U?Oc&Wr=KHpdTdt1Ew>5JT zx8BmfVTSNN-4(e@&$=xZ@;uEL;?-jKL5b74+H%UL_zv+Yi5R;*fW^7Tzkvg?Mjpd! z2*)WFvB4(>rf?E?$c^w#k~RY(2~PB2y()=D!$GnQV)Fq%KodLRGeA(8! z(U5w}tt~7x5Oph6@eK}?orMc;3{!d#Ftl`5}oGaNS#wKEBSvB4CDZxAza zRoa(spYr{IDoZG8FxG|i3kB-ONkEwx)>z2xQ(c-_OBgCj!*TfR4l7#)c9Phaqc<2^ zJSq3=V8OEbR0~CNL4Uqw|{K=S{p%Mkm zwri9mB!4<)zL`IDx1F$5sgw<;c>w zUupO2EJEICN2Cly!S&THKI>z#w4!5s#HMiZoELXkpH9c&u_nLK6(wkT57 zH*uCc2{kYVeOk)OtUJ0!^gF2rq{UY0~vxU zFiwh5E8;_m)mEhhlsc%Vei^;%7OsuLfXr$Xfql_Xlyhbm{c`@@`GLWr#{V zC(AZai-!s)iK=A~=)p)205juH8q7Tfq0uR^UqmJ=KosJeZ@%y(5c^(7PJ3)+rYEkL z0R`2OY`ti|n0P|8yG2GpP@k)1GB^~F3jkwPA|RxU!~lT$W^S;aqRJTQy&@V2u!y;6 zk?;Aja+0iQz8_++1r^Y9VGjI`5%J`0xWphv)ew##Afz>Zjt^jPxhh;$%sE4YB3rQ> ze9W8pfy~edl%u~1@bNUYvFmOOaZIAw*Spv(BjZjlMVejh@^&m}i2tg_V^)%)A%Ir6 zsa+LcI;m2qBXAu^i;p#pb7sK6W19NjFLaFiEE+iPGKRANz8($o2x?V7c0XQ-sj8xn zB2ayzead%r_sqWo^&%hMo{o#LQ<+SBRIbqD{JPaGfx=42rtGpDWK7J20 z9Vv}N*$KQH>uPTQW36u=PXECjbanR(5c%X`G6yds-=z1=IvR-nGj+^;CYmcelrWzL z*EbY{_&p#{!11AvqI6a1yXoKv>;R%{w&{q>6*(X4GV!;fGB88qnNQgvo{4IefNu$j zoA+Gu6a4_Ln#NM4^vG(nI*h?7YKU?}DR^MwgL8z?{L)KGn_TR4@O3u1BGM7$rkN=6&mv9g=HY0Ki@zk<-`;4#^v!wz6tvM z1#bwPVX1Mc*9)!^Nxz;=u(epsX4KNkJ46ay=IWXViq=>LXxKqqI)y!t4}{+b3`?Fa zcYqXfGB`=M$k^`zC9Y**Avy)s4FZV{fn()*D6p+AqW3z;1?IX-uI# zNAH_rirNtjAuc5T+mF)ZF zTwWi+SuM9J9cto!0`J&zD`#x@n7z3MUPM9EqjeFnH<;va$MbvxXEX#F9WS6&yrp?V zD0WDLK|?>;s^g?Rvo;eF(r&ECie1GhnZ=*jN)7+~U4mH};oqKD(_L-k5vZ@klkzfo zSm?t}Ze_vI>#7ir@Mf4BTRb(nw%Y2dRtyV?-|f>6k!({%$Cr9T~MZ z%x3@b#uj_-#pP7KgHVcs$tMMVmJ8`i8I9!yqH82@^#3Df=A^(4k)1}^B$)tM@- zHdi$->u)ZFN(qYV@Dzr~xI`*OVSK1Ja4-3?dKJ=ELd0*9>^NT$Ie2F^EjWxbD?qWzWrCD)Xc=GU(KgwQA8%183N=7P)Lz}&i%2Ri zwyxpHQLkA{#6tZ3bF^X?7IGpu{O5G@Gh$N~yp&*KLki}zL<_?@cvVRg9feOu+@ooC z{@akp9L8CcQ6kcuNpZ(&g!#P}(;MELle`^xa<)iQbO{H;^g`W=qO@sN2vGzCH zY^%LCI6y9#$GP2|go5;T>N4fGKjtmn?Wss7MX#{dOgfo6s?ga8qm7WSyiky9Q`(*D z@MOoG*6-60#f(?usoV61d7M4AKQr|YBQo?E8K`tELY0VOf|69Ko$9D+o7X?i2!~Td zP!jBI42JXChbho8gAQ(wM{w6p31#z%GR;n<)>&=VM2C*HtB8+j-p-vO z9Bll-yGRgMT+M8aDs=9yrz?LsN)2Ks^|4%Qp0n)cQI&z1>gdY0epAB4jOf}QL($l= zaMLhJ>T0bhW%y}KTl_;&F!n$3f4G!(pD2#Zpf+cyF1T_!`v(fEoHS{Oxz?W*TXg+% zdSR-zjcl9q_3pZ^yLX_tmt)-O-dXO!!YR=cByt%Hxu^bR$LV{dasPm=>rXAjvvlFl zSw;RzvpDhQZ=!sz8>lS;Q`(8tqSBaLL4mvQfP|9xAzoh=KOLfp`czwt_Jnj-VMoz14?Uq2ZU=~N{Cco^QrbJQhT)Al{{ z*2`p2Z~3x?eKeqlRe=<&!F}X{F}#9&*-*@oEWaR>CsMwT`h1c*{oGCBAIpy`6&9H! zPc-iz`FB+cMoS&l zQEG6~YpS?ajU7=%LK`pgyjfb8C9)a#TJ@Qjj4S0AOBxlWL`%%^5fxZ7jm=&j6j6{y z3_Ux^%1ZD1u(lP9WyJqudp7cFg)M_6+G}#Wj8uj6tOCp7z&ycTs@q&XXCXM)%#O3p z2v6*l=$c{^-UV#H!X9P3k(!D$?Q>Jmx?w;C&#TALo1QXkWyJciRjg@AJaO| zsK+5Lp~MjPFBb0yXh*CrTFF{mM_qD|JSv=0HEgUaVOv8)#Mm^F4(8-SLU;Rp46l3z zzVL>tsCl)$O)SrH2Mz*F9s)TdH}MB~8P@_5jQ;bQw@7dBvU@ot0~)q|Bt z^c!2vGk?w7AbI?@Y*H_7n(JiAqSTaX#B?Xm9#OQvM9D?haw>OskB zk}etDzTNBz6*&Q&TJr5}fYKy2o^loj!iqJ^k%bqi~#8N-G5F?5R9(x7}_GnK}r#SJxN#Z1KNmDP&8=p%4NEXTZ@l(nHd#&jQqz(tSy`qo?=h6y17Lc3Q#1VL zRFR)DEjr1eA9=#bU^;6_>%Lv+(2acOWU-yCe{%Kem^UBvXo!{Sp>QFAVlri(<^F=T zDYKMP^R0xse(oynYDFKue_g|@4fJzv;0|v$lGOPUR8&?|L*bjZjU9YgxpB#uN|SKe z>=j%HZ`OI#KD$gf@Wm&2?gX(#=A-dK^^I-D@JXU^OLqyFy7Y(8&inLfu}7n+(d2T$TUbfWg{FAdXgT56_4Yc~b+w zU17@pl>XwwhMn=VRQdOplJSllERg;s}oVnZ=ktgY`( zWl5R@`qs3ZzEz%)0h=ar_K6aXm~tQrdMO^g#g;X;8XpvPnD)LTC%yT=Ej!nnGp-cw zF5g{IkAsv4cw5lMIC)k$4l+mZi}GhqB`6xIF(ezHVD+2`XWp>UaIXfSy!>RBG;qyi zTDqyMmG$F`*)VW$gxr7l3hXj0HZI9g8=O-YkM-2=IBG4nEgwSpd84OsrW}49IX9gP z>z39tWBUKiL{%UVGbd(t)h&}I{U<4Ei3;+A5We!A4eRk1tpdnIrQ%+U5-&p&sqSViG5jr8p9n zbSa_LrU_x!dLb{cUi%8h~{Z^A{1#jI+x$dgS8B2IOAwfZ9Cn|kPHxhc5*dt*k3G(3%C z-ti~d$XQ^jlv%4M+_Y>Ovusyw7&U9HvE;?CkP0rSRs07m%KlulkEo3!o6QkSqTQ5u z2pNrP&1c-VM&zh+2ODuIpC)tWmj{a919Qo0+LMQQEL9PmULP0D#1oqeo!VlXYmSFN zewIc^qp7~kY+yIC8W7>%nF4GPI_z+f^c6kE8;e%NcgCi1q2yN9RJP3}!GRzh#M*cN zMrS#y>)e%jZcTX;OB&=JWS>roT=0wNtDH&4F|ry{C=n1Gn#~Lt45$K~4rXBX`_~*G zJ`c55^TCinFTq6ho~=$QM{$q_DHaS)y8+A_EGHkOr>~iO@+zCN_KQN@)HJ^K10O;_ zL+`b}#|PtZ3>x_J7ZEjZ7U&^^ON#FMI6W!A6f28qaF7w@H2@djkE2wk&#)CuPci6B<$p@aR6qkC>h+tv9!4GiZ$`7s2{U;^M#G-{j1Xp4vs=Pp`f>719gBUAdOg)e$CKK{5{cQFk`ea#9T$H4rtT zuQIb&X~lN{_r(!6>S6mvg%TPomnh%8ZW(J~1w_psn0E~NYfhG|zYB*LxCU=LbH}Jod`E{J4vcCH|M^qp>q5CFwrFFeW>yND>K&CPz(Bul9sSl$g~4S!VA zB;_xN_L^D;tBB>FKf5G^7EEdT#}p_Uy>pj?C(BBUnd6EJuU^bkRHO;bML7~xGVe6# z?L-xD9F%F?sgXqs-{q5KV&hjm(e zUi>b|u|cTO*!BFEG(J;&c-wK`7bz;ft}3O3)!N32F<~=T*$OQcNn2Q9 zDf@`I-f(MV+Rq3jCE7ui zq;QkT_-Mg__-#g52gS$9_l;K83I`-jpL&%R@iEp%# z;Yk~qdQkjv0o~vBd?QsF`*BFH8^bCQEt2wyn_Gy(As9JLG5TTQWV$Da^_Md)9s{hs zLjP97{E7^*7|Lr3#OJU#Ve>1Z)z!orCkPBY0blj?`Mx|wKX3@X=xLo-*CK5gi;obmydFq z;!P14rDUTkN1 zVYKSf@EG>b5pRR5XzKf6%R71-ggPP$Plr{ky7Z_YmqB2mU`zzz~99r1YHQyhwb(VB!aN zv%2~QyZpk+1pAckBCeKGC~(fA=Z^p2%zhmen7*z|WEU)$&J)FpRIHL+FD%X7SurK0 zS()h-)}+R@qsWrCUu;cyhzU4E)8H!dE|nFEl4 zI8W&b3q{l)LiZH`-4z(isFte~jRaNwrclMTFG5gS$QU61hWwQ)mx7;GF5e7JdggiN zLp)9y(IJ;XS$fC6gg=FmA)NEkQ57mq!t||*$AUw3&DdT`ExD9iy!mrl5bN^c3;qSZ z{u*`eq`kaAf{%2}n4D`eWU|DBebcFbF_BD$(8i58sP2&(NJ4d1afIiOiaHHi`-~Sn*g} zWihc1szYntDMw|BsOE@<9CA!KdWUFk=yCxJB0Ms4O2YN+U2#)x?wm$!VN^|bv32t~ z9$U+Kxmx`7EnE*J$QkBZZu;cCL(>zp4$|qSazYM0Rb#Ji`0Qy@Q5IHaSjD$NHoiP^ z-AY+;WFRT?d;f{=DXHs^!s7~HmCaca6*UX zt!L!@&$;ujx8F{*1dykYYyq>8&GKTZsbB|kk|vY1Wq6=@y4|HD#%dMGjM=c)PNn@U z?URyk!Q^$Z5V!ChyqUm$e<3obPQvMKv71~p>!|jDBIII^zC+gcdDv4c~K-1 zvr5aiFS{9_B*wcGB{>~k9TyR3T_s?>nvqm1DQ$>Z-Up(MeuhCr_q#KE1Vz@}_hFj=0f}J0`iR{N|({LRiRv<5i3nOiqu5LKj ztZUa0!J~uK*qjp}EOx2!agG;N~lIs#engd-zo~JSI=O zHJPDHM8vg3j{%BI0BRwPRJ6FJnqJ#elUpSee3CK$iX=G=cw3+dRH`hk)#suB-~!|b zUcL*eiQ89XFO%rg@X0X_E{J{)4VxVL@OCDoEC9nP%vvq9!44{lG4sp7x&T2br+9%4 zy}d>0Ao@s~zlMzcsXGjA)$E;5FfI1wyo~4|4X2uBzJUA4`O3l0H#d-eQL75MSzc(W z0n^e;&4rGB20HFB2DFgC({|!vRXhwS!iLApFLN2@o)gqpY=Zzl)a2Aa|EU*G$JJ&s z#T;L(jLfZW^bih%+me&88GKBZ7xW2^hJX{@VWAsjfhFRSu+(2rE}09~R?5@8)4IGO z)3jmwKx8Wc>(g5Rv2wKNlu<8V?F&KS4zA~(YU0NTwk@5fZNudTLvPcQ=w(r)@JKH8 zc?x_1A(EnlyR|UekZKK%jNabCvZ&B!=JQwCP0jP*a`T`r3hUwAxng=Cn&5Dk7!qG| zc&iGFYd8cpU>d$E3zxz1?2=*tH`OfoEp~@2h{{i1_Msr=u$iD-~|= zhMU$5#{fjAb653XISEC_QC4Z%_2mXY5*;2l%sbg_B(|@z87p$;-W_l>fNV1#F&dE-UkwORtc{nDUgZoD836L;B zzfAD4IU!zmBv*AsI9lEpViB%9+6Htuu}qAz;VivFO4if2UP&CUgWH~Ta1YEUx0h?; zqcxXfjKwQh!HcCNnlOl{R87{VT;!LydHTBWt$Hc)eMpARFN@oSs%mvVwp}c@sQ$sJ$*I z7Kj*y6~VkY@3L^CH}}{4mi4lST$8h%d0&`fAnWa%oKG=l8TU9vkFrg{&Ys?3a*=K? zMH}AM+1dad?5dbbSdNb{Xq^}36A!k&0W_Q|CT>1GTcaQwg-cs4YLO4`mXzkrX)n4! z*$pfp#N0feRzcYUg?w>_27%(UQwC=C(60+H@U3~wLVFBa*F`l!GEXG|ZoULSKh2P> znHj=(7LP;fEauO-Mp;Yyh{-)0ESS^wEI0u7QByt(_Ym8{QVcs3aW#|c|&(`J#J|`!w%Ym5TYmDEtY%WaELftO1LqCG3ATapfqPV z8D5BX@^ZIgl)RBR@%bH=RDe!La}f|jFCv_+BtxM!c5coKjY47;mv#yQ zx5*6oOQbs_UZ?Rj%FMf4Pg{@|XUuxKVqGk4cd!p(Gd(d#qk<+SnH)H_QK(GE5(@~K zktXn179iL-a23Eh#uvyxKJKRJlUYv}5OnRW?QA|`Rfq#jW1m@{E2|u$syV@g>tP zyWMTGr1ZWFqUm-7$aQWyakJYcI7>l6VqqqgG0PTxGca92Vvh9~>0%`*OJ1YLgqo$& z=DDumD3TZFh(JpMTa}Q~`WDv`qBTRcBk7k$(})o^+&C~;YKw*BRbie6`Hrb5oq|i!6wt=@5p4Y|U1nvJRiu-izR$|4in(s>%B$STrcz{=bw zH8O9F_bKW$3>9sqlCjZ2Lyh1G_6jL+IHCfZ0jpvWE{9y6 z@=NE_P@{l(VH8>2aE^lYP>)<3Xo85`7V>z;8;{-20Z8#Bl&AO7RQMGz+*K*yQNXA_H`4 zv8=GeK?j#zCWC`{$5h`)-snXeo*`(102qKCdwE?=q@vkU1(GyxzJi;e<%iw1_pn=7 zY&uK~awc#rE>F7OEO5YtCHu?l|pW$0nD7dw|HzoMaU}YTsVmo9Vsx3$$NW63jKqq{8HWQ#fUD<3} z#LR2obFnKKA+ouvCCM-6vzkb$b)>f8i2JGS7%&E0pE*EWmN%0M+yLGkWmMS5{^-Ip z31AA~Wh1NpD9zC5T;QxUL2fE$d*xP6y1iuPkT{@h%rPahoyBUo>OZLkx^q!J;8nAHNnD-4P$}^S-+11mUodL*tGeWJj=JeK*rbX# z)uJUWm!?OMcGd&k>zSpQ(xM@nf?yNF-c*YiS5A(X))d>C@b#=75ttjbg(+?;tdDBzP$)K=ZG43#}%E+r-W!SeD6zUG6%ql6pBOj-;1+;oyi_{J z*q5=$VQY`N6SPxo1S#}q@DU9_SY4-VU!BK2xP^guTWSaFob9ZpZBot+eiD+PR})By zJwxnR>B_Yq%fYivgnz@{)^&>@CxmB`Waf+**Y!b>u)z)em((@|^GaVl=)3l3)%!?1 z{6p>Sz?-%^C8MdSq`3=hO!u1$(5V>xX*eXgXS;Gw)^+Qg7e_EB4A0hYIS^POTC$wd zv(>r3MMBMbYmS@iZ1u2_^f@$jp6dlM?3V>HvztWIt)GXcH&mw%&GBrPITGy9yc~m< z_m>AyFG!Rsk(a)<2@xHAe{Vd!UJpk%c$+omFu$2rJ}6FNjRpbQT}TcW^!Q7XVRp-` zNb>qO0gi&s(3J7ms<^kfhI4{TO9i2YhNQv#$A~oj=M-UBEAHPA1eN2*ZL0;q?*|Uw zDS7|m_B(KO^T3=u=7;5ki?aVhg2$$Ff<XP_f?wD4q3{zQ>#F4Uhu>z;>)VN7xvh zXL_ers_87}Eq%clw$tg=xWLGi7#I;WpW?zeSfO!+zy#qhTM&6X7JtExuA=)y8(_=E zlSf4Rr9E9^yrg3)RkYir-d9!+Z?h-bH755WFSyiBk@T=x8>@6pe5OQMzt>^UX?kWt zETcQzRrZ-4FR@|!Y!H~dc<2?akr|$pwC@jl=CoVu{vf}2P?VFfk~XWx$Xz92hpzqu zmV|yBgnzK^;)`OoQJ&Fj%omC&-e7IF_>53}XspOB&E2J0ig0nfAu)O83U~uRS_S|< zJOLjy0$&&O1Nw5}XW*k1`ahb3e?a`Ds@ZD75kY5bnurLSg9T@v;ys$4MDHTv>csau zc~`+A@+`0`kI|C=tN>6uh|YPk@$diu0O6DC1VEENf$C<5JWRT*R`0wJC4#&NAp~Ab zVkUTT*tz4yi)*5nfZcX4Ddd;OUb3j8!b?TTWwmGsIRpdC5CFi+8~`sA>o+eF7U5ou zHDWK0I2*ip1^LxWAg;knDr!5=OQt*$yi~ErxS62|%Pl%75=2`Gs~7^VA43qSry4IG zGm#E4lI;>6@Ee7Zctnj%pg1^%QZ2`1s2G?I9Vn={z0}TDEqcdo;>rkIKSK~HHD1ea zT1FwJ%#{bOnY^Y66kaP7vI3K#GUy@DSdbItE9e9H@#{UaRQ8SvHch2k_4uHl-*@!+ zof4O|T0tO-X|>{mmM2-YRN#qDB^9cKh?_(-pYzUOh-rd7>D$ZVlawj~5mPWB`@l5A z4JY$TKzxVB`Bn_gtT4PtSg?8JOK3?123IZx*TdopNjKsBOqqiRhM5JMl(>{&*f;d= z!m*2`TLCv9_gKOy7pLkItyv6=lqs#K zfcO40gccpW>sM81zzpY$MjlF8V-j+##e}9A%ZswA*Ue`8G4O%ab|

Za}bVdT@C{70DMM=bCdEza-+FDUR|MrSawV9AO-_Br_J z?J#1-AF0{!U%Rgou5q0k+{Ewx^0)u|?;rnWi`(3BOI~{3p}~%xgeYm3D&dNBaP$76 zm*OMyB}i1f2;1VsFU#5LY;CqaJD43#Yt+urIc!gc1Uogld4Y{TZuH#dTsiE{F|!T6 z*&AMjGDqpVyt=v&voB9|Rl7gNQE=5=wjaWU<@?~(>0Mg(1A^v21O&p((xK2`7(BZn zi(m}W9LE5FAmo+`z7bFvFreF?0B5_#R9`Z??3t=%5?4AN+yfx)Sgt9#Re-KsRT?4% W!!Y4d_^}tJg9FM^gZcFCAsyt%P(xY%sAskro=|Jd^< zgu3wb&XC6=CF0sgbgBod*Yow>FT|o2)+SH3J|rocL;N=X?%o3xrNTe~#Q;RgXriSR zEKr!a={B8C=SmlDE>qX(B7ao-vscaY|9{Wg=iJs4Zh7DVB@mP*1(byl1vmn;*7yt! z|9L;1CH+cpRWll}vvv*)ePLTlgKZUFRx|Qu-b;Uvd-3%m{m$I|&5R88V%`Fww4}2M zWw*1X%a*gX{@(SU-2CFj(FD^E0}KNbBIKLQie}FwC#Fq%Rk;SK%k%$VXL;{^?|n%I zeaRkP7zmL!;flca0>x*dS=0ok^YPTF>a=OGs#EnT2=M;z58&Sb{NVrL|DUTh`hVHB z2?ZEnjX)wjeYbGgsR3&N=>$3f0RNUvZ_No;go@6f*K~i!B8osl3vzQ3IWQ6q#Gs6rG-kZb;_`1%bID-GS)V%bAH^q#|=jS00aPdr*!XYdXv{4sN5^~;l;T-0m_!FMF7yN z*8s3`a{BO_G6+2EatPo*8uLL&Bi4zPuhunl$x=I~w@@B~T!HM_ch{OAYY`_4D6Zt?WxCyxsi{AYdK zhrQo>z0=#hweyBS^W2@24s-s-_#JWjn6t2Vuk= zaz_bDvm6(stSEVw;{{QY6;;y>)3P0x@ce)Xqw|Z)tLvNFyZeX7r{|Z~xA%|FukWAV zKSu!obyR~MD(cUP-p8zgzJ5USgI6TvA!kV)2hcmO1J5*w4WO_8xnEhHJCt!2C1?md zhb~I*{vqUjhxPC|FgT|2mX0(&zao72Z#TysXtA()QI^1fLu)4xG|4*%nLKg`v=sk` zQSIlcQUpV{=ytw@(#m3db-~?jC~@BkG4bmrZ&5jfHY}+ey7m;&nfmBhq5nh$u>6W# z;JXd!h-S>x=W`=88j_+rtbh@tfxEDZ(IHVMln+axwH46jvCJ3U8euvV=8{>LJ~RHu>iGqskOw><{sBC0(Hal;#SW{Og!0l!cY? zPU#4eMaRU~+B!nOlnCf;RAC)99|`W^2ONxcgb|VY(DhF>i#)F~LP{DxUJx>GjtKAe zLRQN*UL&}&V@H&C+u_~r3Ard&70%{kWP}a-RpBZOt0x>093tH3z%vdy!95eww?eKt z9p!#(TgY;XS!u9tJw*_N_Y1!vu@YqFI++<#v{NRnw}=d!wH6AjCR*&KJAlJlhA`~~ z!sgZCH;>O?dL>wYM|Rh_6TtiN<9}>G`5DF4=-42`x$D>@Q==_Tplwc~9ZsQLPNO}} zLUGQ65}b{aoHs`mRq)GEo1x!|I{G_Tr&uEx?%^~};S31L0+1X4$perA04V~H5&$U! zkP1Lm16CKz3^h%ONUCX`HC+*8(tz4arUlKQIdim;X6l8Y4Uf!+WnL3UCQ*g3&Qkze*m4ZnG$>A35el8n$_KRSz@-J;fIK0`6U{X~k2h zR9jixxSxfZ67(%we$n8~$SZYHTJXAhMG$Y8W66Awx`n2pIi-B=ZVaz5RV}uxekZ7o zRc;mIu47%atF1=dis{QwdLJfHqu~IiF*XW@A_$shvk;UjTH!bZm%C-buqHRvs_ao+ z=k6o2-4lB={8r3>2fRaQk!$lGiG5vDM)ByeCfurXCpD$*T`CNe7oU1IEz>u_1uvGf z6@!`M3}rnhgRHX*e`yym{)#TG*y>D``cVMa!FPoz%3S7#YbKz@*7$}ax@9~fcZi_- z{y;|_;7A{X0r~_$pTV!V7XW<;Kwkk+18%t20DS{M-vZEg;GTOA&<_CgBLMvb_S|QH zegU9g0mgoVSsl~wJ2ET3qP{&2*kLFMf{!whBJAt~>;l}OYgd=v?nT&L0qg;Q zo?Siqx))(@1+Wjm6kpl=^!CsXrv>=C*em4q*75g=?jiw#f4E3qsK9S8`2QCE1SbCh z?EcI>Ol&xu?EmaAd5R&P8YlBggLuu>&Ab+zGL}Sh=t*YjWw7~4@zTzlhg>A(wUp+i zPUXsN!hKZjSf4640sq#_a;9Hz#Vp%>Ttx1 zL&I1ZRvDkC%Hi+wHrTa-S%zZm)FRPQ=7z4JD(`-7L(^Ger~D^xDce{YjIJiixAmA7 zsYrS0bWP0byzye;ideO=yekgsRvHc)b==sFbX_X9t+ZLH@~tx^v~8IWJ$=^T{TdBp z=s)=7o=A|-aR@YHD1dd|P#FRS3XBp3l$i|r$tF>eq>I`?0e>z2#~28Lm?jajoxr0Z zNw_S=Ir0)Hig{^;Qkfe>6)riWIE5<`)d{(%DuLoKV{T~CTVOQB5My4XwZM0_tyIRq zgZ*3$%J3OXs1!}{VkSgb&+fN)vf0>i8g&_)?yNqWv}VMKa90E}JXWC4f6t{Zb)H(U zxJM{i?J0_-Tnvw{TyA4^*CV-A>p1smTXx$&`lS7gT5^x#=fGk7lj$S!=Xv8D4_( zi}%En#0dWgC$~MiT2mJ7b^Lh z*W9tXn2vzBGsfSYmt{X%3lxWf=sG)Tu7zw7i*UoA9+94ntvI%-vfIw?Tk9Z*8s8j| za<#<@_pigFfyV{R91z)luD-7|iP$bT24WFKkaQ*Uwp~nTNfCJ-imz@>wU6-Ai7LL= zOa3oNL;VKYD{sZ5QW8ZXX(LqJP+9_w`mC%Sr;!7(Jz{VWl`=P>z=w?>okoE)$RI#& zK+*qy`baH_{xgMs3uIVr|5``0$ZL0;{0BB9s|3ya*b~Yc9_^e9U+cS`2CA^dq*T^u z28R?nVy79xA&A};I2rO(g$NyJkQW&`?Tc zxaq#yZMZ7P4P@OD*-3LVz0@(gr>%C9BcRjUL+TrCS9s+Jv}lLc^AZ$5wHUrKq!eWV6jW>?w(tDV z%uZz|_OEEeFJr3PHMty&h%i?LLhsW@B(ly%gx4{KwP7eiKYfnee!hT1vn0AtwS@s| z4sY$=A0Mkp&An%rQT}Cn$9{hPq_W*q0JvsH=hXa$7D@|u;#v6 zD}%})gRrad#>1F7H)hWxla@0VfvAqir-T=FYxHC|VDQoR@gvphwrv14CpFj{oE_}A zxd2n3wRLfGZRFW15TvYkZLx?2a8@zg$JJcb9R=aU!Am^EiW7tYaN7?oK-uR`Mw$p* z8$$QKlI@kd5-%tijBCY((TV*ka;xS;b|2sR?pG}|UF()cwrdA{1z8YBty9|PBM zw@zLV)j=bboMRx~B><@+eV3E~EP2;GDeE@n5*&>`w#tgFvluRo;dBRsdQ2g3iaPDJ z7Hc@icb<&gs)g?IyhPVH78smWLxnn<7>ryz>>_rrxxkFv^cq9uze5!fWbq_JJDL;k zZMcr!ZOCj1_u6)g=5Aq$UBP!d+st;hn{9Z0lClL_tG{*F;w5X1c zsylk$Vuy+NmR})cy!w}*QO$++l}9sAmO}uI$k>=oG`!uB^Ki;{S`0rc?6|b z^X@kWq{wuh-Ne3c+qmi4hg0RjmodazU#M7{1H z*#fcofTJC1lH#!NaP#&6-8i;v>wRcIz2(;C7aEABo+|kU2g;$ji*F25W`JO3i)_U) z_^C-sukAD(cL-`v68?e*lNY{$rQ)inmu{W%{edb@C~7d)#q>)I)W=Iekr-As?_e5j4j<*q})4=_cltT(7VDn9l7g$6UO!l!0TbM2K>9Y244Z?{yX-@3A9N1S049Y6l?pY2+Q3YR!r`O%5qr z+G9{BBuAd9;jfsya2MHg?h(snA`iqQtq=3kqFRByObye)0BcZ_s z27yKmq-8=8K~NoO834H~VF#foP}Vnd7CsHt*EhmGj`kUhn^{n^GJwNl+B?&2T=jtrK^Yh)VrZ2eOso!2NI+?Vdg_%^6Z%$~mN$eMq z$tn=J_?BBPJ_*F|>&Ue(Tbb#JBc@M5wIw?)*)JxZ5bf?Sr66d|R8lD%3djut#;Qa> zNEwI$0Chh%*oaVNjPzas4Fp(NCR%j$e71}vtC}Bz7;HlY^n92Dzhgx_c^h^yh*3p^ zBM1m-g`ekr7+ltey^=X^XiyX?=7NuT<3Ero8i8W;*9tyXtJ&CfHwQQ-(d_FTY?cvo zmsdlYUF-060%)lJs>Y*Ml42l$mbj^16<<23lCLdr9Y~AkH;r?q&%jl!=6gTiN$#^S zupgxiX92vP2(k!j)m(Kxo{OofVvZtEexh~Cca7+pe+TLfe0XY|FG7$lnhC)oD`0d|;4hOG7b#G?3rq_XRX1BORUPZ^u;ICj>2o`&eFnqaxKJQcb zhS4R<4B$03jCOdnSPHCiIYxZ^9%wjT7=yACcskk9*kc}Re*0MZ5AI;9x@UpNCJ${n zas~NjJv{4ZAbQVMG54EjZr-B_^Ahm!8;U{v9uO$t*wBY4E-O7Z9~psdK$K259G96q z=VMwX{+3q;W@s|=DL%w4Q7#kkEg?zcUP^wn4`8ohEL94RtTk)G7@VR8jT=hA0}~&T zA%y1ZeygCC-CJQAJ*HNCGd6)uDOptV((xDoQf6r3rI_1CPFT5t%9a)sgyHJiLlgAr z_)9#5$Ceg5f&|4gnp`M{B>57KfM{A8iC|vg_~u=Kodk8u@RbvjVR0@46DreKn>|Tk zZv_D;XD8Od*otvH2x(>!9Jaq?xam{0L=~ROk>`p6#QXk;09pN|tfk!D`^$0_G#&#G zHG)vlW=ASF6WORUJ&dKN*9xjg;6Fi2JC`FD89AJK(&f{PvvTeZLh;;BP3 zD;(!YR3`maxI~baY+rI8ZJKX&SYXij3BGm4W#Sn|#oo+rQmW3VqCdEl^H`~b@!f(I zg^x2bAiLWlVFm%3gjk_%Yh3(!{%lC4Ane5I3Qrvl!J4r16;(eyn)ESzL4hZvfFH^t6O-U9J|Ro zFb7nO+Q;bFIXsujSs?-_6a?n=Ppcg!$6SlfFs`+1@PjJvrnnfRn&t!Hbhp^Obr%#n z$1oHMQM$f@3w|;sCCuh@LV+Tw+*M=>&bKBUiG~o*O2`wZ!Gr`!0z7m0r$g|#^JCGR z{#Y%ylQXsFj~M^Y2NM&>6&AcpFKbQm@MlQWW{7+SiYn3nVQmV)GM%&MiLIo&kw zXOGit3SQ`NNz-7&A|%r8%jTBk3$fUVenEZNrMI*(e91d;K1^g?8k8aP)Niw0@64%j z?_P(B3L#;+c4nQwOFa9yNcG$dq%zGiQ#1}+enD6sY)`H6BqSPtpHMBn&QHkXBnHVY zU!U);W@)J`S}?qN@NfY$8jHaY9=B}Fe0%E4rS1f8_+{(888}_*2s3W3T!kOGZYJG{ zY;+F2@*g99<4>2xV)S=g?MQsW$vCI&ly^#+W3;yCOndT>`lFevf2T{|JLa4`;8?~O zV>mjF^rtOXo^KkO$E0}M=P-)btlsIU5QEx`a@t20F4wX`zRSPZS zHJ;{FzWw97RH|AB5DE20hKCVZE5MdCDKp^#n}yg&wBbd1r5B628qNJ#Zc$!x)~b7Q zOlHo)g7!p7T%WKZV~)H0=Hw6QhNJ(sm9QH5YxAn4`scHJ$$Ck?_mYOWokf|4fxqa0 zBFmU|F3uz|ZmGyw=ztLMh%&r~h}L2pwk!5zY#hSpSEABViuKr0ka$WuPjz$E%YUh> z6@v6Z!!y#JVuXXvDYLBA_81+`y(pRJ2I4VDt>B?Ba!?{|NngQzxwjzBwPGOysDaQ>NZn&9P`^72si z4ut9v)e7a=G#Aa?(6gd{oDq(zdDJvl50mM6^XYu(Ud#aQSqL6Gib08*+w^Qwm%Brn zpwu7L7(5Z1J~4KhOG~;z5A+|E;;{XPz*=!iWrWq8Q0_V2%Fz6Bi5A7lSi|;?-eJ3J zQ|rS?k;M9*4c4?dd5O(G#-bTB;J!wA_I86bYtnO=q4I}{XzYK||8OJyBa$pWkJg!| zec4;ozhSJr!9!QX*qTEH$rW#X#wgD=^iZ73zB=AA@WJ~~+|`)5eR!#FclrFp*>aT< z#(b#z<;Zg%l4t${4vwE%NMIYeci0u7dYdf$o!_LT0w2)X#nzmw*%j4E#o{tw`B^zN z{b{PHCUp@+b4=OJ5_9Vfon%XzE2z;GogpwX?n{d7j?(|Lo=UK_u+0)Q%ifimSKs`$ zZ$D-1H9f;G+S%S(8)$I-ODJx8tW34YLQ3CVSv6f)R;nCN8dsK< zg>pUX`-IQty3=QFuIO@UO0}fIDxV2WRVZe3!=?Ppp}CaFjgGusexum@S|}p}l0TyA zm(RU=D-L7#SHEY2*8irrO4Oc!JI7%_?qi$qkvaCp zjPU8KNi%mjxc)@pKdSE<)Xc6Hn!DQUVKg-e8ru63DkM%}{7W`POM%pB78!KUC*{3f z`$|>2x|(E9x-z*A>!foyo1=JTIi%PZ<~rE9Yo6}t1~Ztc|2S_?d85vm$CjS7y6?qn zV}`bY&2Vgm_$19|t6jDloa^MII2Lo$hvmkO0&>Gp zK@wEo0SeTDuKs`qTgcA%E9K7@UBKPnx~f*ySY=Q81*A66p+WUrAZ6IgUbLM#sUdAm zQ;r~~(9UVx1Q}x6ib4~uFzt*#ZmZKb5SE9O4Ib^q$ewyz?WRqjtAWmcMe+4Ct={X9ifdX>t>#g`S|Fo9PPrA$`p;fPVf7(RiR7#}Lw9X|3OuMFcudtYKBp_CqQ~t$LLjWB~HYRG=>sn~*&rzmwsSS-Y zylIEpc)S@oWFssphQz_%k1&GfKKLZS)zV6uhdbE*&2Ah5eF*|ZQ}&5=3-@R=t>5Z4 z43r3=1;dlqB(HA6;JV`owd;1*BgNl@YTZ_j-U^ws4i%D{F+#5pds6Gwl0Iacwz%+~ zo;U_f1Mr4^I;#ew+LBk={`wZkzN90Ss{X4>se-0lW_{lXqbAoJbajQ_IawGkqk;N& z>)#XShn*)}C&Bvp`RsBph(Hsl+DdIcXs6d`4&baBxU$mO=~-Z1?1+gbCvn^B@I5U>J{}&^JvSG zT7+x%aGdzUL2uicyF}67&R})r(<*=_Go@?xZcZ7 zWmE1(>-zZx1=fMUWmG%_U~XHMb3EOD za&=X#SP6#oqOQ=0y@@&67%%#OkK1b@ z>q_OQqNb^dDzY7#v3sI^@A~QWR>`K3EdmJNY4PiVE~RAb^HU|hG?`r)qzhwB?L8Lm zThCrTHh&9J=n)q;k0%XehktvWrTkOzOAu>(KE&3Rezd;Y)E1Z)COHr!aQU*T zuj`9y^YdV3he{e7iSsANV%}uun)mCga^x^L+V$MKwRw54V-EkcH0`3b2%@NavS|mL z1v4UqsJILCCsjr1&HcCL#o?lv)$n-j@w!$VQa>g*qxPn#3b;6AO%_#@E?GcSw?#0d z9HU~be4eMIaT+|S2dJbp)2j%-X|-7wOEN1?y(` zTaR3FR5~}0qtcRT3;FXeJcwVOD}XHhd- z%xZ169)cJrS<2g6?x<$I%LQSgP*+3TZ%3 zYY=_Rrk*Lb1xbb!ip|DjkzCgF^T=Y+=|2@bvLJVZFWQ151`3ph@%90yTGi1i--jlp(DT72~-K7DNmTM^~k&3P^(e$_A1FN@}0!6-UR ztwBJ1euNb^n^7IwwXE>S^Vb|8kr4GpL?DaEsKTVJ{(~MGUww`asdfx5d>h#I*spz? zn>#x1+8Z4Hj?c@D3vxt;ry>Xe9X&Dpo*IqgOgcF8iqb+xnaRrJoFcoM z+NDzp7e_5*M~mNd>`zkE2o4m)GOjY$@6r}|NbCN7@(zDx;({&$f4cs%Y{)3%dW-GT zB0MWzmWiVf8Z2blujwGO38HrNRb~wPrH# z8<6Bob90nA@{QDvUdh{<8h%uBV2s?K0S`{8b8Zh;7+wKsIc#T zz><#rl~i6Y93wf)BEe2Of>M_W7La5ifOrm>q5leRA(3RllSz3{?A*+hr-NR0@ zVoSC;%k6cP`0I<8R_jC=2iS30r%A;Dt|LC@XM{4+?VvzrS68HI==V z$eQ(W4n-xBy{p#apY$ck{zjlCbP?v2MU_aR0JJ7*71RBD z>Km$lxOKm@Np6KLQoGDfpJlT*jWFImtZt6L72l<*Y4SjJHH6gzW^Z-V#Ke=4ncdFL z%P1#jBJ?#U+()ct(}ks|s3X;y<@GIlt`2J8SzY^mMI4(!xasl07$;OH9|>ubH>zAw zoK8-M>}&JTmZtG>h)m}4^7&v8Q4Bb`dKJ~=bxis6(|*to1$9LaQ9>>FEeyaN&*6o~|d~RSlM3-vVU-1=%nV`21o<9ebn&EM9p10~z zncG`N5s(~sT;cxTIT@Cs#Tga&lUpW(a9p=%k6$tGS%=znG|Rll4(-?p(4?0z$f*7H z)j?2ZjUNL_`yz^XqcFL@wmeb$>ZByj&%8$&^}=j^El;Sx>1ej$uPK>!xg7RReVS|jV1>ZIFBf~3GKyzC^%Oox2rt@MBXx;a zEfPvorCN5?vAg!p!Gff!>Vo{-I!8wP4st6!e(k|;cAXoaOv0BNmXwq>?O0kHjyaAZ zn3s>~>6hsTqXts=sqsWu`gz&h{26OVyG|2dI0=)J5m-Ku%m;8e!A7rw*Wl-NFU%Lg^o1e#^oS5lA z^)>kwt5Sd!TQ~0q*ZeE|Dsp`!posm!3|Bi;<+b<;j|$6vL&KyEjGMegGW1}5KzkT`l=*G;cy)@RHU-+A?Xp$1W{khr&@^jqOt zhr?iQriST|)dJ8Y;+7kR2D_DgP8Zwk%etggCv@`KiYQ67=rN-Epw|m9hzQ8Wui~0| z2U6z0b95o8i`lTq%Q3Fx`<-1csdTch-o=NgQJy&Oa?=y{7%fUKILBaEYl%gSR86?* zdHYsni?>6?%Ft32={y)7S-1oSo}sGpLXw;S zOM-tK1Mre`(bdwh_`|0hp8WXqhp)fj9;YMUe(=^CPaZ!$8X7n|$qaRLjk0wdz#|YI zzkBzU#}8;>VzN0tm+=yWjOqboESED<2!OvSJ6d5NWwGAH~sv6lT^jTcoRfPj-&N)5rNL51Z;0dB-KeuJH2JR515TU z(IBFK-a|FsKcE}tVjo1|^ZEc6=1&Wl}Z*8Q|g znF0_SkQdc#Pa6qWJ=0D}s~CXaPFt}#G<*bZHpf28Mi7RLrpajo_ls)%vY;9WVi<;- zZ_uemO#|%VSJm(%dDN}lE&WU2{d)Iq9MOmU6cQKn5zZk15*Nyh4{D9IAQ z+X6+PQe|nYJ_iv1PeIo38hC-)ka>yLGBKaVKsj2#1u-0;g*Jyi9AH9<12A5|tkrxw z&_NAi%x-01J&z8hq~hJJ@&5i?2Qiwo)vM3gpQc^sR`uHX+@>YGtdtQwr13)2%unH7 zJ6}oI-OLqejHpe8YlmPT|I=u;I`%@&hGrJXE4Dz zql8$u$JQ0vM!^J!y)h(ObKu@KES9hc>~N-`RPka41szcU*HpnfwSGU;^|7TR5rHRX zg!j+ym`;4Q8g9}9%MdHvfE(kqMVSFWgnD<4oHmkB^cb-PrbAwC05nI3iDBN$E|FMV zq1l`-3s^--uCW~RW)fTq5G#V1z-@_N@a6v5R6+LtT-tX|J?JcuNkAjN5_@i8r^G1m4( zz%9s>h=)*J(1W>MJ{;1-da z#BdctFv!EXWj?sKVoiX;IQ%l^V^tx(z#g5`3UQRvR-g!1zS;tGII&KQD#KZNkCdz@ zd3(!qymst+Qs*AP?J-%*C!d zI;xUn1%aq@1C%>#uhYdTBI*zkxX+r)0^8x{BzD$EJi_g6~_0C z)Ix9GZ55m6(_Xy5Y^9~Ln49t`3d#Z$`r-;Q1d2~i6|gkBc23lRujIZM+I`Tvs>_08 zUPuC*zXU*^(dBb&hA_%v0;#i@Uv-UHP;-aLp{Bu^>+Qu_D%|U)6boNYbcMATG88&l zq5XX0T6g?hA2}e$giT=GhPGk@|Mm7f;Eb-UD`v6f9XKdwf8a*q4z<87DqEVh6hnI# z+3lOtyVZD9QD{Ke0U*YHy-+2Ad4&Bsmt5s;*^XO6&ai{_Fe9RwyTy7B95xYWS%e!S z7%ul-jcHCxay*N6{LipkbmzYEp?fx}aEcx!R(!rQOacd&wxOi#-3HIgPJ8XO4Q zcukp(&74ArM{?j179ecy!6X3N+~l_IA1Ch8HaqKyRs~(Vvz^UHM1?qDRZ>70?di#k z@nizAOVxJ_l1NUt-_d7m%oa&>*YC|wfjmi3R9DcG>IzO3nb2F!sqVXcpRtdtf=zCt zWD)|ZHo*eEHvSS`GIyO>+94vk+a7UYm&6w7SGy`1yB6cso_RR=Tw01Et9P4@)3+KN zOyyX7>DFc6&TrzR^f-fP+D?F^a|;tU^Lb=snVKN6Fq4_F+{*c8V46!}h4mQg!Aepk zp$#5W&@5GNe(V7pMe^bt5$H%@Z_A~$zC~KXV$D!xBq>t8h!|l*#sO!k`3TZf!Ci~K z<5R?Kf~&kl>LgvIZ4<(&oZU|puorYqN`%fMC~ZT4_`9HjxGFa4OHRTRIY)pB`r5863i@2)jjG5!M;WES37pJmbJ{joc!b0N5mT|p&A}z&%_RKJk{!E91`|OxdC{I$iXx2_Xk(t|~gk!%~ z=muDEaoqEk&SyD_0_KHL2$Fz_t^B~U^ZQhm^#WCuRO%+JidS^k#u;XRvhTln-fzEr z^~I+jzxNKVToI2*I^HjA18hQ${B|O+A}{z(WSIyBSz?#r<6YJZ2lTBcZ8&?2m6~(o zS^7*+deTsty+96ZhNLb%j<0b>n{1l?pc9({UxaGlH|4LnSC*J8lK|2v!+W0f*zR&5 z$??x3sdQ?wtYMFX4u0S?G&+eLQ+h>tC5twecZm=PfOgGe=QP`aR5aThL7Lk)rC=>O zI_#D{;tq+0hr@)EGl54jVFwJHm+75rF;?nzT}c7WcEtHo^B5i44p!YDLrV>6wj{*h z*bBxYq?mXHC4+4RVU*)~PS-Y&{9+G`la4BYt6Izv724au&(X|V7|J*X?>t`6bqLEb zZhKMa)Dl@DaTu=j?QEePK0zo!_#P+}+(O-(V!qR{H4YouHra$~0SN?&n~MNC;p;O` zfPcD@Y=U}AuYCw@N{q~cxkr{Hzr<%5$W&)ZZ383j*X<_&6ArHD2Z+mZU*H*R2E1A2 zDR;~rSErtdfyr(x8;Sa(d5p$$181cPa<16eE1R8cd2MWwI04z1!zHp&l~%dxe|4b> ziEjYXeB?tU`x%K~!djD5r!3SqUIA5R4wUU?qS+KgIlk}gS3 zsB^cDHdS1w)1a(ens&htSApX7ES9;nsENA3(Z;arbeh1#<>k^^xNQyiy3oC&j*XgE z$Tne<)j6J-_GEOB*5%Zt71&^}n} zV^ApAoN0vh2xGP>znwpeRf+^JB?V~p^__)I6T)rcz*VPZGT{&oN3D|i!b5y3y?@Ic z?#V6V{{V1dUc|s*aO-p@Xs7WkNa3HsUCsbubDe40>Ll*L4l~5t*3E#e+AemaNjVw( zthxkAnm|gte2kvCu3W{iX)5K<|H#N1&?gAU`e!c)tjrBhb2T1OXT{#eMHtU?Vb(j-|C+oKa z1R_LGmQya@vrn2NG|+TrMsrac1;a>^9hy4tz8A!JSQg04ZW4xicg|=Vk(`>*{b-dt zJZwf^NbvHca-b;%&HgG8FXHkhAg7>DIyYZ*!rscO^c7`I+e}Lfib$MKh5+qi$nk<6 zy)E8qhg#t588IQq=d%-oF(-~hRh!ze>&iu!SRsVAe8`j}3h|1A%+g^nI z|D~mCs=HS5kCgcxxVX7}pL*oe|B0^YzmVv$>Fxyq^m`)e=Jx=dQGB8Aht2a4r~m-q zX{@_@!lP-qZP;|GHIEDI59lsSIG*FM_9uc&`k0YG=P@adL)4no2_cHN=83A}33$u4 zxB;(WPQX@(Cl3kZ7fxu@EQOQu)pgL^ex#;;ffi1TqvrJ$0Z6r-BJTyWFu*E-AOY z4juxKmIZiv6Fk!kc}wue_%;1!;F$ybALf%EV82u~UPm${(BGyeqLStiAo<7SgvN96 zF)FK0Xnv>aDtHRqj@Fee=o$bI0B9Z(?FRGALI3~&h=@u*06P3R8Nmrbq{1w zw7C6-l|)D>ap7U6nY^YUR9-6-GLNJ}W6(pSF(W6r8|V}Hwf2!&B>6xED^sr0oImMz z{eeDxP~^N)sR(2-ty105vf?Vaz!M#b3RDTkHwm+EGtQuqQGz4$o0s(j#ezWQMX(|J zL8A=koXRKxwhT?uf`w*QB>qWv;N#`ap)C;@T)7C4KZ`X|C}MeuiGv4;mmK&=j#~+a zeM5g2ey6-b6>tvr!+ncgKpLw1_jGlIGNbVi9jKN(ZWmOKO_7K9Y|#+sNqG@=q3*FG zDoiUvh^co-27238p@-aT)U%?H$39!JVTzr5Cdi3B6jPA`r50h7hLj`u&RLck1E)ac znz{1`2Blq6stw!Nc$h(7Ysfp5BG2N0?I32M4LeV07KU?E&%A9TVuCtG5hXWX6i@u1$RhiE~4&baK!`Ot$?DNaEa{aFl5 zDN)=}2Jih7g&rNf>+36onBjERIt#h%F%ldYF09F?Xxsbxj3Ru@bhEoh7)tUXJ+0dR z5Zzj9R)gVaT<1pBbi=f4$MyUmjAE2#IW9<9(RsaCehl2d zn$6+S@yY4g`NiecHKU_vWMXDvWn)*t!O6wV!^@{q6~BOLHEPwV7Zegn{|humXE3o~ z$%+FGIr`~sQ#0d_G|iYUpI$tgBx^k3?OW=)zHD@4PU3(f{oZg}93?S;y z@*t3`>&9cFVf3sgn`n*FU%>!?AZCH0djYKl1I9CHaKt;N`jC;D3pI1;lU#`&0uX=8 eO;rm87;7K$jgzBcoa7RGHVnS%42lyVG#deE13!-d diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.eot b/vendor/assets/fonts/KaTeX_SansSerif-Regular.eot old mode 100644 new mode 100755 index 1b38b98a180c93c0dee50f491c520265029a98e9..190015bf812cce5107573431b36a51135f461ad9 GIT binary patch delta 73 zcmZp9!`SkMae@uYxt$9qPjooLk|~{Vbg}?r4hyeIl=kEX#s->0Sw=H_I?RDP{qRECT>E-5r(y delta 73 zcmZp9!`SkMae@uYH{lIyCOVv9NqHBzcd`Iu4hzdI8~Mo%j14ktHVA)<=ePOFAkX}Q W0SGQ`uUQPEH_I?RDP{qR%mV;M0v$jA diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf b/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf old mode 100644 new mode 100755 index e4712f847754250be2596ca801da591b0f558416..4d27eba24b70f5b47041d6c39fb49ada80f6cb7a GIT binary patch delta 77 zcmeBp#n|zRQG|h!fq{Xap@D&!p}@^8#5Yqq;pjw>92Q=aDD88n*xd delta 77 zcmeBp#n|zRQG|h!fq{Xap@D&!p}@^8#5d(#;NFQMIV>!9K delta 77 zcmV-T0J8t+f&u7)0gyZdWbRSDkwAz91ll|wk<67UH5-J##q-;IWsqln0Tf}lxV>gE jjQ$t+pN;uB(>oxSgMkSo3ILHL4wtiw0ogwU(YJh_R>vZ} diff --git a/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 b/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 old mode 100644 new mode 100755 index 4fcb2e29a05c2a1c1894982b7d63d916a755faac..aa1eefc09305afff212f8f022ee8fb463524bbf3 GIT binary patch delta 13896 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 WQyqpK23u$R{~>;V7EVx?BLD!t?zb}l delta 13902 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 diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.eot b/vendor/assets/fonts/KaTeX_Script-Regular.eot old mode 100644 new mode 100755 index 7870d7f319b6efba6bba9502db33fb4b73129403..c41bad3038c748b5faaa06590c516441d0f13df0 GIT binary patch delta 73 zcmbPmgmD58*|2v3GXMYp delta 73 zcmbPmgmD58*|3OjPvw~CaDXM{UEsdSEQ~oU?3LCRCYLZa$Z(`?7mw$+`N|;A{DJ`p UE^e<`45K#-F#U;V0gB8A0Li5q+yDRo diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.ttf b/vendor/assets/fonts/KaTeX_Script-Regular.ttf old mode 100644 new mode 100755 index da4d11308aeecb950b6a4f669ef1d4b05746f887..11700094b79f0bcb2f1c8bb49690bdcb6cec749b GIT binary patch delta 77 zcmZ2*h;hLoMiB-^1_lOxh6V;^h5|RY5Z_GcgrgHha#;8;N8Xv((jfCbJmzCOzs*+$ adFB^Dl?+#(bgzWbn-v)U#IpcJmH_~(sT;%q delta 77 zcmZ2*h;hLoMiB-^1_lOxh6V;^h5|RY5Z{z{f%_(k%S0~1IT0K6^`qO*$uku(I= delta 76 zcmV-S0JHy~Y@lqAJOpI!QNEEthy(|DJJ6BLlq+J6)a~N&{5D@1Efe9oE0CK7hzO#z~ku(I+w|t*~86)HX diff --git a/vendor/assets/fonts/KaTeX_Script-Regular.woff2 b/vendor/assets/fonts/KaTeX_Script-Regular.woff2 old mode 100644 new mode 100755 index 1b43deb45a854d69d134865608f7ddf128e654c3..a6fc2a96b7df873be5beb17213a946df67931616 GIT binary patch delta 12104 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

QHYwL{GX-p(TOV`AlnpnGkoF-?l(0^I`l$F_g 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 delta 12075 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 VW7XsS-vSp_P}*>-FvQ@S<^Z3$iH-mO diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.eot b/vendor/assets/fonts/KaTeX_Size1-Regular.eot old mode 100644 new mode 100755 index 29950f95ff6a625cfe0435b01d5fbe6b6270c938..ebe463e4a3f76aafd904567ba5225dd4ffbf5675 GIT binary patch delta 70 zcmaEm@gQS@4NFhjLg|SPdss516OK+|%wgeu5T!f0fU!YFdSO~mJipCX26^Te3_x)8 SN%txky_tt8z=#DXvJ3#Z&lFz>rEy)>|sfH7r1W{V-5>zn~nVB0>%azll2F-#q-;IWsqln!2kpo Sx7RF&(VKag0*qLIBJ%(6I&W&Ox7RR7SC_xl`83lX+81$HeVU!nO^`!7_L6)UInB7 hp8283fhji>B<~AzA83fU{e4i0*Avpj5 diff --git a/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 b/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 old mode 100644 new mode 100755 index 39b6f8f746c39c8c2faa9188de664475443d6b91..450cd7b3866efb9c8096785bdba5fb708ece7f6e GIT binary patch delta 5748 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 delta 5734 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 diff --git a/vendor/assets/fonts/KaTeX_Size2-Regular.eot b/vendor/assets/fonts/KaTeX_Size2-Regular.eot old mode 100644 new mode 100755 index b8b0536f96767e3e4235d7795f5bb5bb6b7d03f6..c0fdba72c8955d19697a10b5e7db3a48ca45ed7a GIT binary patch delta 70 zcmaEn^df134a=NQejF1W_ON71Cmfx`n8U(%I!beL0b_#XYu3FnY5BV}w2nP-GbZWd#{{ delta 75 zcmey9@FzipfsuiMfuEs)ftjJe%`LA78ANT+O delta 75 zcmV-R0JQ&{G@LY$JOpI!QNEEthy(_4JROnDl`6$ppF{EdHeVU!nO^`!7%pzFSq!89 h2>)5czK1mc$mL*Q0*L|uX1EPivx@vC5kA%*AmTDX04)I!wTI(p~bzp z6;VA=9xqX^0W{|5sNow;NzLPxFH_M@|)XNJBx8 zg7PdCZHn4mb>(n>M_rQ;MJLYQf8HR1kpdNhfpEfAYON+;&<@LmLhEo>g|NGt+G|^+ zuD^OdusPX0QZ+%U`uG|2^*Ys;?Eulu$#7fLp*QJ~gwrQ=m;Ub;&>w)?)ci6nTGMKo z^3j8Arma}{q2NPgDb{>0*mYY3~ z2EVMF_TLcT?%%FAp0IZK+h1n4Of>p!etw?&qz|rt7&8OoDviuq6m$%tpfo=~F|k6S zy$D`{{M*tL`Vxz7IZf!Q0XBslhSItkabY5AQ{gH-|?=SD8yg=MhkU zusnjYYT^+BDkb>3cjmm1g@hnR-BW_}9uY#^A3^;fvPR`whEQ2u(FsBe<`HxMMJz-+ zNhc9>_Q^wY|7pDcJVUMAGb3$RLV@M5my*a%45|X6NPxgR6#f?_hzHs-f%}tKdM*gz zp&MHyGt0yos0x*eh01#|f5WL0cy2m>p66JMQ#7MjM1f3d6Oe%O9#MXpJ_1sf3gi(l zA|eZ#!m|L^fHEk9s;}aeWmtmi&=vhlrtE2tYLGlK3apPjatd;Rg2sRmjRRwv046jE zOlb<3(JY{(*}$CUy)72asl-0Y_s-Txx7lG9HTnDsfn9UmGWI3>+sOXQa6%Azh8`b)EeOBx#g1?^+UcB3YC17X_!fCpKZXQhfx{KdK5WAE z8JIh~g0*JdDYnyTgtDtcdV94j!3jg1A+7;uD^GT~`P2lG$FKX6=qShn>8!cz@z2s> zTgaDYK$6fzk%0a}+KYo}hR0Z|F;}JB&s;fy$FL zE^_|XY}r2dIEI2S)dO~az1g#wtUjK^&~rv+?>hv1qCrC__(mrc%@oei z2&51Q)i{MGY;m~<7R{{8rbe}0ZtCO?r?C6hVIG!>`NBiGqrF9KZ2Ophs)xE{o*dB= z?yl33L!I4=T^QV6DoWX0nVueQ!Siyk#$)1%&NIhQAjuBm8S1fr;O&4oGi*&wwPu|G z;)5rixu{|$?#+U%>+@asEkFAKj`h)zVGQq7{N)HnKs($)&T7!+& z`k-~-W7VGlHhgY>wDAnu1hAUVKwCaH+Ij|U1Ndrp7~&Av4^DqV?fco~{kSH%>-)*a z5fGqXmF~&oMQd-z@WT&KmjO8WfR7Rz!;$3ImsrS(kaD3026(?v4ID^`LV{Gqz9(E%;*L*Gv+BF)efT@FwuVj}lxOm-2B* zG>;QxjBlU_9tSu9oa|_>hAZGb^pa3y7;Eim;68AXOku|CC<}%E$luj89kU6FuPnnG z0slneF(C$Mg26nFq?3NR6r16QCZEILMF`?>9?3Epf7vSEcb0itnu>;s3$kh~5YVy= z+Ti#wSrWy6jmG3aW91T;14Uw>+$)4o?eUZAsshgsZS9aGz^q~-dbNx8mI6-ow{Gsl2`que8dV|`OaMxEJpTQ7Ue*4u8!yD`b?wxS6JXXs-XJzj*NSc~rH;%SeePhp2TuLTr?i*$L-n54OHo&zW3);5xgR(|^!*!oq z*sw>rsQQD%e8OIPxZGNXWalHQ_7YyuUW15#Ew__|zrtOj6v0s=YlCbN--2W@UHpkG zY1oNnU)gdT6_U?%kC3t)B$i*Fi3N`KNHF`68#1CZ27P+mMmi*B%21!?~ z)07e!#>dPCHq4qCv9*xAr=eQoD3BYsk%VB5}%4Invr8<%HXI`;?W}~)mEiR zc81{(NE~i9li%x*l<)!B(Y)FhIiv7|K_vBMdq7v@jlF_Q`$e!&Jo3$SaUUPN3+^C! zs+cx&%VSET1MSrVcM0J6S(}hkD*q>cglP&l;W!IR=l%d7Nr0}JZh^?Z?}Ux?pl}_L**NAlePxk zZP@Jg;3rKf?EzpIxv|If`#8fTgaBW%0A^SQA(9s^1v#6b*v>MHp^y+RRjP7->7T`p zC;(0?YA&hs#UBG?8ZD~rqr&3q90XMeGBs@b|ZdmrW zZi)NhmoMCprn%i7R%YPDwVQwJ_{6lZ;@dk=u=SpIf83-nj}~^TK)_k~)$<|*!csOI zd-q3!J*@bScHB7AvisAY&yP`m3DZ*)Jl*{VmbP??f~&j#(0gd=#dKh?KDZA9wPDzu z`sp?{65Cqo?ms5D-+BCOOOlO3M4bBvjt8SGr)CHQLxVvUtu7q64nLVjHK^08+!lHn zdoOf85bE@XXjAx6;|nVTF(ix6_1V6qnJ3H;3N$SR?;~A>ktXn?T`mr+5tbHxs#13yTp+FO#| z$MyQri#x$2PIut9Jjh90r*zkxnFZcluQ^`aZh2bS7;_lRk9$IYZr*PPQ~yICg`XK# z=j8bIU021u(&*}=HR6uOuq%Ab2{fC?sqCd7lJMols5%EuKizg!=ukqJrkj!aRQb(WW~NEoV)V&ec1+5`6pVi>$pxkPCyCNiZi`V&_lUxyf4-nsXnE z`<*M=WEx%+q#CDlM;~r*-{2q`*flt$;N0Yi>tO%E;bGzMi1W@t9c6o_|E`n&`l*6y z*C!Q!b&p~eZE3S^3_i4I?CPl(Ogx%2gGP$$aZ9q^>&0W&_8218yE~`#D|(y9)%a~P z&n;S)I6G?GFB{hiXmbm?o>Syd?zCo$ZMA(v>$c6}32_~f#<99kovT`_yBuWo`|)O6 zb$^*3>a^HU)`0dOmc{V|K9bJ2qKRa!REjWv#KQUG$2}~Gom@aKUXi?VX>3pFF7X@< zl1jD7HJm(qoesfVUSxu(!wIDPrmg&*!dZkNv!>=0E$%ciYf7#~B*LdmrpEme`Z43$ z#MuiMwGeTW>*)!zP-bRzDT|^%`ZK9J>WuRjFI#tmb$73@`Qcy89_w~7*vsi7@V;t8g@m0HnBz{I%F6kA*<++pbDO{5hHDBE~m(MU}&LF z;q5h6ml&cgyhAdPg1w3eln5pW$`=SL$|;$jG9HKsc2dzuKzuzvKE~hA$x&rNBl4rC zg7m16KsP&8mXQQ^4TcFFGD3FS?Fxd$KiiZ9?8MoYg`$ApVAehY9QY^iIOqF+uk_!I ztfOQy0I>h~GZ_Jp$vI;ohw@>R|9`yop?FJse}m9b0zeofSOyGV%~s7GeDV-px|DZF zT&tiHh&>+vIQoxj^4+$jHXhZjGhQ$eoo*)QC}6mMnE?c5`6I56 zIY|#%B=KQ+pspGt(z8M4f%Wz+>I>C4<%hQ%6hl=mVEg_LSes~tU11VAcM8UB1_Wb~ zD;Q_cQsP|TYM8{(Jgmhm_DdGS6>J>}R0b{8c)4-VJMyjP4VxmXNZj#G-@P}U(kdaT zNN%8d!7*CWnGY(AtyUy|PpIpHKS$aV>o`!m^`L7Ak{48-nnnzBnzY;2}Ij4H2+1B&@K->QIP<*ocF;h==${ zfP_ed#E3=`Bt1xDOkF3KZwstZ)iMLiS-~pWZ*p;YdCp!qUbgPOa4|JD2+jRZ4B@zc z_PYUUYXIy>pX@#U0D$A08iao|nf`J#ojN@$2Fhrg8UERmTc{`1()33S!guQ20DnE0 N(O&wTrfT@evU60teRu!> delta 5519 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 RK)hVc>?nOr(`xwWx^uvioS*;z diff --git a/vendor/assets/fonts/KaTeX_Size3-Regular.eot b/vendor/assets/fonts/KaTeX_Size3-Regular.eot old mode 100644 new mode 100755 index 576b864fae6e163967a7fbe5f6da41c8076d6210..a28ebc892c343ae171b1bab5cb8f1903a35d7ca8 GIT binary patch delta 70 zcmbQ@JjHo}4GSN$`{{`edss516OK({%wggB9i=_FfU!a5v^z6jJipCX26^Te3_x)8 SN%u+^y_tupMVLk{Ay)tZ delta 75 zcmV-R0JQ(8C8#BkJOpI!QNNKuhy((mJRgzFl`1Epu_p2SHeVU!nO^`!7%pzFSq!6p hMf~w%UCz1+$mL*Q0*L|ub!H90vx@;45d_hi; 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 diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.eot b/vendor/assets/fonts/KaTeX_Size4-Regular.eot old mode 100644 new mode 100755 index c2b045fc3dbebff9ecede9a4a1fcf9080633fb15..a67532526756d27e7810fd66e7923ab16473a180 GIT binary patch delta 70 zcmZpOYKWR(!_u|7|LR1CJuI2h2|Fe+=CE-6j?$i7z}O&jwSRS2JipCX26^Te3_x)8 SN%u+^y_tvUgBA-=WF`RJ>l{!3 delta 70 zcmZpOYKWR(!?J~S-n)qodstH51+JgOn8U)f&_;f80b_&AyLqfz;`wd9GRQN(U;u)P S+iMoX=*>J#AGBD2A`<|?Z5sUm diff --git a/vendor/assets/fonts/KaTeX_Size4-Regular.ttf b/vendor/assets/fonts/KaTeX_Size4-Regular.ttf old mode 100644 new mode 100755 index ce660aa7ff91c74b859c521bded76a3fe2150b5b..979a449915d5ecc06b3497f2ba770d5f2dd4e4a8 GIT binary patch delta 75 zcmbOdF(pETfsuiMfuEs)ftjJe%`LXYu3FnY5B;|DDkpvX)BNh%ri delta 75 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%0A1Vm=a2QmV^Fr;zoAV6uHMrxUuexb2v8i@{n zr{lpJx>#&ZNUPr|s2c*4q#e~V$kx-~& z(-@H*AJKZrgjS6G4d;;{u&JrCO+NAtM3d(M{tTP{ns=Y~w>^py&A~wcV7@0ULjX8< z=z~U4$In_r=j;D@v|T35$Iwl7 z0R+JPZSpx9%jOcRk(8r>4lhSmYG%v`LA5wD_6xh**wYy10WeV?`Hwm1(EecD!62jz z0$=Fon&mLPEj==>Gotf=$LBM>C)2Y54ueFO4fPjtL2dt-mV_)B{anVuu}j)M>PKH z1X-L;s?4ZU;@hIrM)#YJ#g7zSI+|Zh)n#&Tw{_n2s(4U^t2JF~2!xIzR`K}MAC^hx z7O^5)EISfi&;8fjXkfS^Kyk_V+nq6*Bf8}e;`8|T$mc?gw1 zG4c>>VnQCo=Hg-|gHPjf6)O}OMhgN9d5Q{v3T9uTc9ejRx1|DZ>~jPOw?&`g9!VYu zu!vOvrIvK30-pZ-sh7taaIz-FC)0BC_io zt#mR@l+>rCr8p4;{h+jeO|*yHNyede3&yBz6WR@kvjELDYn7!2I|56}LF?TJQcD|L zM<~SAy1;_ppKmrt&k&dhAI5QQ9hRng6OPqNNYxP;0csEAP9YaBa5+XFNQISZ zW`~NBcV>}52_cQ3Br!|La8i5$niyM}WhWbIeS^SCqF%D?%UYB_qK>5c{KY`?N QHMACL(@B&CDAL_c07Vb9uK)l5 delta 5054 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 delta 575 zcmXv~T}V@57=FHQXJ>1+TsctNWXF)S2-6uSN`s2F3$g#3f@U4I<2KmY4!Mm*fy=9y z64^n_u7Z9jh+Lg0ks!JoyNF3$jOs!PVs;T-6m(%fuQD&*?|Gl+{r_&v^3n_!OA|n; zFeS=DrWP+x9juH+zMp&z6dnWc9zVU?9~e5D0$7gtg|MdRty#wqV5yS!A)HN1{J^FV zu$egakLXdY>i+lxus#PGW}?cdPP&Ww-6OO|6PHH%_szZmnpyyDKBg)W;ZOex#a2y@ z#ndsyqO)mgzK4X4n3m3cyYF~PoCa_tQemaDx8WJE#Z4O5l$_44vqkdHP`;E@G&Q^2 zMhoXFfNfb%jixU*_T2`qy`r42`bAa0Ik{4%h3N)Khv9)}Iyvhx9(s;8(Xb*@*)V^Ewsn2!*eN4$HDZLuyUft|2|LRhPYORb zvS!x8TG>|SVP2y+G2Ls+B;!4M1O7VpiCR3FNvo?g5DXrvW1x;fIzBNe3G_F2{sW~Y BpF#it diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf b/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf old mode 100644 new mode 100755 index b0427ad0a56ca0eb58c035ebadbc7bc3ebe7fae0..78640734c504382266b98c64dbb3e32277794a62 GIT binary patch delta 679 zcmXw$Ur1AN6vxl`-QVu+ZO-YOZvMk-4Ye|rIqx9Mit;{4Qjkyzl~bn^SzI(xp_*LbG24*-YAw|7Q^=44gVUjS)^*w@a%xW0k4_4y}&Wf8zO-4pCLiD%Ki2&vK&xzXLwzdZ+#;{}M_>J0@)x@@g&3O#O8 z>AgfG6CcoWKY4F&G(PnG`MxjYmjM`$^mPWyf1ILaPK_9k28T?%hwrJsNb_1O7!3_> z6w|@U835~s+1DShn_GGbFgigqY4cjhyg#w|mJZ&T9|No*p#+SXC$FwJ>VHFt^ov+)XW+x{M)af5ziUKu(hLk6#JR)YBZ;Pu1!$L}Qj388Q4`3Spz!8vBPKGsyEwZ(=tQza;Sp)iY zzaG$QeeOJ8o~sy32@>%iN1c#6FBj8_ee1eIMnoo|YPYEzB|L!=W2#3bJebX`nU60x z^K&z77LE*6mFH;Q^>wGmWm7CRq(N0y9R`3HPaI0!O`KCODOT_N%7g`Yfo}9*J{Dl1 nSRI`zm!sj>Ks;m}h=qNAU+s=I8pi28ZQN5sJRH+F{le@&z0Ig< delta 573 zcmXv~OK1~O6g}@{@-a0gnnFKGNh-xwk(#D5qOA+XWKkOYE)-04NTx|3lMFTq5rs~7 z8b!oMsJasTpddCnqNNDpPP&j5T?BPe6r^<_E)-nU&yA#u%em*=%l(|I)BJUnPl5q( z!+-^PGa8EX1J&8AglGAaEYTBTwm??YHqHxYVcoVqrf_lE_XH@;#<<)sQn4UldEJQ#K%x9L1r`*FodBCzv3KpNAzrBWk zhX49_H-ARl0f>IK)o%QE%`nH9%Gb?s7itu5#eyZ!_Ku8fSn7v_S;B1yQsxvkX|rVi z91M$osZX+hqU5Bs#qsO<(ujwqiG9}XVos`y5o@<;T9Yo diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff b/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff old mode 100644 new mode 100755 index 78e990488a9b61630e28263b73157205c0aeda96..c572bf5073f806c9f48db6914ac36ff89fa43c21 GIT binary patch delta 16828 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¥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 WeccB$ds83)005K3P#^@=003ki z#}iiG%+sA10Dx8hXJq~dUQhu<150Ns2LJ$^9sqzS2LRwQ*3dU@tW4aT|2Z1@$ASJo zAY0k{SpKs|0sz820DwaWA5YexwS|fKKi}H_I4u9b3I56VVf|0}PZ#^IP5ck!V9r30 zG;0TUZvX)FKgH`m3HVzE+i34(_Kye~`i~6yAE;R1njB2L{|yXM^N;r*mlz}-WWmwI z!2$q~7Y6{qr~m+{GtV;uCub)&cK|@i{vY?>;2_6-NNm~8t``6L!Yuvk7x)j+$*~{5 zyw}Z)%^8i20sCrMOtJ^B4t=bXZ2f>}X8ldWW^Bpt=2xbf(uo#?i6dhG7$7zoVHf~N zi2=cb2LNJ;ARz%D{~Y~DX##Nt%GnMnV~6hs8<&aTd^IF`ItJ>66NRQ8jx3FJE73wra5YhT_T&|;j=tmnW` zvWsS8_}DeH;{E+P{x}mTbQ6UF=`D(6Mt@uNR`jGl)OsA{Zs_RL-m&P@{TV>@_rqze z`;SnlIy=t4>HoKc#>P07Ka6o8B_WYJKo41hU+LlbezahQfF_QPrtpE00+T-*gBRYv zzrVpAsfCwW2bL8jRl8GtAl}Ie*ZYM>6TXSQoIaGUoz{1j`e}eE-;|%7_b0~%=fJwJ z&byPvf*2s22|K`F%k}NsUpJS)E~JX{~X!dA%VeDa|p}Io%QE z8SM%61wdhAWoKz?ZEtaNb$5AteSc9?R4|G{)T|Wwo<4MNG=K)AeD%LcH#37PK>tT+-U{<+7 z#Fz*}NDf$h;ROM=UM~Czvx6YKfwx0@ag~ycVCj1t%I1*0K-{&k3@O31ZgF~XV0tuL zg<5rRaByD3U{G~npm%M1wDJ6@aocVueX$T&L5rNdIzQKqo=CTD$?%`^VkRrqz%g`F zH}Fa;yg)BkqWTF#MbT`u>sr)N&(Bh6Z5R7wdA&^5N0D3v|TVP=o@KHKsr9?Gr)VJ^;6j8Dw; zb2fGr-Q+%B&)BhFl32$;Aw!^I(74@k$m7GhxkUy}fD)okdDNJQHB1bOis2;DKTg>$byY~!+lZG`Yh&33FEwa+ zbmn~0;6SaDZ3c}t9tQAUwLKWP*FMz@UzKa8r*P^G2~!?o^?>uo8nGBjU%7caRm2yo zh%@+_z}LbrSe*OY{Zv`tv0>L~7U{z&*9f-&vXL&uY{HBK?L@VsBGF2t-d4?qO<7&( zZ`cam<2SGQg5WC$SF6tI&CahaJ!l!PpUjfa_-*jW^UE;GvlQfa`;^OS^f#;AGSU3p zFOF4Z6Whg>6!~P*=m9S8gHVe3+Il*fPBRKhK+UOFdliu7GR0n;L*)1zLJ!W(>NteR$XaNVI2Mw+XfiZQ7=yLdVGZm1r;o$EPcUE1tkM?FZR5 zK`ICyLkZ)tCY~LNc(G)f?yU4fSC!vWbrhZs*Cb+g46Er1%WA)H1Yah}#mi!YJS=o2 zft9wXP(4XQy0yW5&NsQXj+}gMW@Xy1k=uMEN64h6^mTGQ>`b?D?bBz!yvJtwt{Pi5 zS6XK;%t`q4++=Y+=c6RR6lf~X+F124J&m+8J*Ng(j+pcv<9`~O_CxFF5o1QO;{MO0rN;FPTR*-yV3~ld^F@Vnzz@$kr-JA8jmw8 zYB?3_ECV1c*vA`I@hDAq-tk|mum&w*_3H}a#nel8;JB`$huHVyPhhd9McgYnBLd0q zKKJnEg%~}^Pe-dLuqS^%=hn{tDDzr1maD7dIDg1-v(@&Rm9Oi{cMN*V1k`VyeWijCu4Fzh>2QTz2WX>MFt@H%+6 z|25!!U32+tEI_o6Yh`3A_fm zqJLAMcT;kK`WgL|yH<_)#|qAhk&{YAWQiQ=vGH$o3g8s*S=%IfAPXPn$9{V(F3NB_uZdc~)7 zmG<7?^)gdvp$e1+q|=4tCC>`ZT}?L#h7#LuwaHlXom30iGWk+J%vO%Xbi|hR*VOp#DLrl zM=ZHZ)u2T65>!e4stou-cVOoEV|X2S93RV^FqL8=F)@`Q@o)@}bF%cn`d_TZ&C(ZW7oy%TS@$SEzKng?Py8N;z-S!MIDE$TIBtLzX@)3GP)D373;K6{ zGt}zHQe#A_Xl*i{lao7ou?}y7f;qbWLJj&|Ygy%&P6U?%$4^ofIbfvDTQA&%sF8>j zKm*DB8$N9Yarv{vCE{=2?<DwF0PD?04CWMj8>dKvsSxF4&F|2G0&G1wg5q= zjF^Xo?OhHLprD#Ug2K|BSz4TaFK>Fi=GuJ>G9Qg)l-jr14Yw=!sSIoak!bEuXBYI7 zqSZl%p>2o_2)MOWb>Pke^ZI9LP2Q8d2te)sxvIIz-N!-s1o)Xk z!H&0_6VS(01qJJ=wpAXiV4B$Bc&I;cX54-Rk+D~9VcUKG7cfap`a3JHrxq!w74#Fcy%|l2~&B#xiE$j=`C@N674qA!Wl!IggB3T%|5cP>&Eux zxDgpaI!sy$XWh5j4D~lh*m6}34o&L@Nqql%caRvb!3f;JDOi<>FQ@S9L3+CXnUgn7 z$|8CsbHOY7F|heUVB?0-DCAjxKi|7Ch8sn~y-0pH6pJTvad+?qid)58)#46g_FqH{ zaigEMU`dKZh564liT!eWX{7`ZsWh4q9?<$YpX z3C%(jep4j=WL&L(&|Yx2)U=Tgy!=GsZjKIRVe#6r1yXCjvIf_3~?v55HZMu|H)#r7m72K-!1GeuG{3pSX{W4!q?H1s+9 zA#7Pr)TkKm#&~eUwN#Xfnh})KZt6&WfHUY2@xBFs6O06KS2Vpe&O8S7%*51sf_rd8 z3Li3(2Nb4Cm4=;8lEPNG3khN;ZD1ANMSl&G{WUPFO#J{Vwq4}e&p2_HV)pxh`?gBw zc?mr0Hwver+xS+!vh&LGSn6F?v&GRsEVm)*L9{g{@0BTi^ZL}{Zb&HqTWh0wW!ZRA z2M4F8Ck@HUNmNQAQtpOOeF~tk{ck$bC>q<;08pT`rW$#`)fO?-z_}vl1VZQ8by~8S zIJh6+P;lV8Ir!yE2RAq$jOqOwMAQ{rG6riv~17Mf+!vw6}*VPNLw zM!!gPon}enW~mp%9za0Df_CLWa4eh-fEf!X+`!B1Qjb}ff3Ye=5hq!G!`rcr!Is%U z2Er4(+ioROQc-8-WY%cy310U%-;50fMACo@AKph|o3fS_$rXo_+dW(Pbkg0Q_@J;; zm3(0QZR?wtEb46^Bnm)qUgczVcEcrMf&3W=jUIaEgaL1hI+Os83br)mg1Uw#6@tnP z9kjDY-I#9kJm(hr0uFCyTgsE%G2Z9(4$KSu(ee4NnXc=m7S}kigaH#g&8bmu=vK&9 zNLn^=9R#fx)6pF%8m$21)yx$dqJB$^j`-08m;5pNk>`f7wOuFIbr6XQkJl(Z_{7@j zdSL~E7maP&^Zm9;(%Ps^=gFD)CU&yJUUK5k#AK#Nf4R}m+^n>BqK?AddUG#C1HE_Z8~4?CAIW9k;jE$Z`px-U{%Ji z@zN-5w(=j#P-U6d8aHM!TjG#78VjVLD6M8&P1F+y+O_Q~1VCR7Aq!OV zzHcd}5ATx3_tvnpsI$7Dyu!uFRsRGD>l-y-+!q@l7BY?l@svO=9)@q;4;a#A67DVf zen;~pU7j3dLCv}<_aQ6z6>?>jLg(jic6-;SLpJx0L zKQ{2bVRrkBOkO!NS*g@tPGc8OYNmokRSrJ4Vj?Nz&Y3RUv6yjf7x!8fv-rRVzU!Yh|>z#)qs@z z`-M5PKk@d$&fDO!vv=9uZq)0nzQk#X8Bas;@cKnjnrD!`>7+sx32bbxSIiX_bbh)3 z!P&nZ@y#{J*tZLF?bfN~%IUr~C|EH|`vdkn-!Jm))xGp2Ws~>W+9>S@nkLD-@|W>K zBD^Tbc|WX5_yG)YY_GB$8nQ`hP@;T}iwV2$>%UXdqerz;ULKu1*|9JYD*~PO7oRj( zZ$Ay_ECqS3|!w);PgXsz;`(&mwxHkb+A zGoroO>#C_;=Veq+daOgd`zOg~$AL6F?a2Z?-WMtP-*1;RcrQ+56UY9`i>!I$$h4Wu z2R?HI8ELw+5AZ(arlGCrVA%v@ThJsC74){oEh2Ee4g_ZxXix3rX{3O+R{{%X$qd^r{(_7I6o> zn}zQuhwHyF99WF>@_AOOvovMXOd(PdOlLq>#f%2k25vW)C~=mzeFvc+79hO|))a8( z-xWUmPS8@|zkyn!30ju+<^1M}+Nc2!7(0pNP46ZmU_?OOREyuMw`|ws)}lgoo&4V# zB2zXWT0VoV@&r2p^*46BpP*D=q&sWAMd0;lC(Hw`(>r2DCRC}axZ+Su zV9qb7P@Lg&^F`|>Gx1js9ug}0qnBfO%zi|7skX=z@xU`X&E`{u&ZR50N_$Qc|0khR z*V9KDW2Wf4`ZRS_k@OsOr$iN4^HgDWIiW-qc5{~zb9XgQW8#weycf`6G|^1r)7pK* zvMyvUi>N}j;5xW&BFbcQKokVbVAVlJ%&Y@o*h9(}(L!&w?diz^GeqL$!nP1MEr9-JED_eg~ReK0WgS)Iv#bHHr-$Tn>l`QfP(Pa^5~#;jBp+L+06 zV8R#NglYc9;oD~#_%2kWc5x_ql83x0!2$UIYzCB1@(<6%+>nZV@{LK~M#R4x$ui+( zS`h;Hme0GQp*}s-nh9MTnA1}zw8ikqy22ro?flZQ1Ah0e0d=i5RikGiIOD0wS%FSw zX22c_zpd!}r?8F%K~spIFS~4~jjFop3Os2{WnrO-A~UOfg+X+^UsXqMjfzEqEuEEJ z#lLwzUd$rSX&I}uT@iX~@1@^Q&-l31>9L{4@NSq^G7(geo-$rs93hm=>vyi|O?7DJ zdqycUG3F*e0)**_QDHO7Vdd_{2d0snmVmU&1GQ}q5F;uuy$WDqBu)s-Q}DDw*wWR1 zqDA-T%fYUl*UaHDk`AC4cj_>*A~!9eN<##5VtIyc%>*fRH`m>%Y(kY%Yt?LZP^?aVx?oZK1hYXS!jwQjhi|mrVZ8JETeUE&GY%;kv_z?Y zj6Uk=xLUG>y~^qM^*lanM_@c(L!VRYR&GvEdHFG%2Sn~K=#WT+M8ymR^J&S*AZ=>V zLCpQ?R5|zIL*d-wh?`u)%COuaI3Q>Ophg4!VLIVl)nz-HgQ{f(WqDnwjG_$eyt-P| zrKu~_3T{6sBqH8cdpbQF9xNapOJmTJ8vnSFHH{8^oC{y2w>d+BBORT$?A0YSO_PMH z_kH`VI8rbHJak#-_~7pktS{&r(FDFtq0>Qx22$a{AC>hk==2LMx$UEtKY+zzD)4(O zAwj8h>au@Y;KZ?eER-OrsWG340on?wem4=N#=@M#r7~QwPL!gPQh^s9Ck{TX54OGb)3=Fb( zAH1&ku!jGJUrY}HAae!}T^FjFDbCUgntlOk`PORA1zOAaEnw^G4qzjGl`;zqg zQ+wP<AfdRh z^NtpePAd5;Z3Rz|N_Q!Uqj}I`A=&6!Om7*fjOwgwv?=Yz8MEee0zcy~VU%x_x$@oD zup1xY$nR4m?4GyUInZNpS}H@r*VqLrFHg_6+1rwh9H^&v7A}owpUHxGnRLik5VS{~ zhPa-4Smi~{%v8coLtq>uQXb|MGD4HIeeQuEiQ!M(0)#*)X&A^lSX$~mr=CR_?oib9 zo9Me=*8?at&2l4~0{duj;8Ehjrrs1(Bx0yW2!{~-4M|LaLx}i`g{g$9PVLnnV!wWrE+q0~G>>Rm{hkZsea!YYGYA!-8#_m@L z%a$%fZAbfC?uhxfJjxhn7e=Zys)P2Wqu=~K`g+rsLrq@7Y)>b)grYcpsB&*v zuhR`;6Kd0g8d)%_#p-JStAgWO+U9hS7F75C{OsUk5>Bkc@q}L)>%%5M6*DE3ajf5; zbl0q7e0v<>&sQh+6AL?QUG2FA6HC{sj;4cD`)Q#07cg0Ef`RyQd=4Kdrs|*oR)HK> z#fT%bIyRTngn0-1*Qy`R*Ds%MaVHai1a&J87$dXJAXoO(WD2g>Sk}Nnj%+f+&BWp2 z56I^Oj#s8o#S;m57c%ElkBotQYqtOne|qEjnpf$m|FLGjya?M{*?wFzZ0cjrezZ@2wf9>9&b`K4w4T|*(c7PT~j)yX1PEGcNR^sY{ zGx~oV+|&q{TSR1d@;OIo7nX&T3x2;2Vo(kb6AuHCSZmx4K527^H%yXb0byufr#)>n zsy@q|z9z+L6|&?!i3@S4sAAYyc<3Pd?CKFUz?#}xj)BDa#)vVir#m4>PIZtbr+*us2&t@fpfl z0w%dgWVw*jH$I{Z?B6kLXd{Z2%|WKw2fr@dj0#g6$tl5R^72zM$a#TYqw*2<_{F`D z0(>1R+1$q?qnY1i;ie-ob?z9b4*N2oUsjei808c|U1_oA~03GpD6 zTrA?`@;d<5?$@VU*3N*{VQ+h~HLP-I5_{yjrCD5KCUEK?$gKCaNs)Wl+G#KIA?)LZ zRsMND!KRkB#6~{%4`L8*y7`F*8qHnhlf3Eo&C(*(7#^CZZpz{x@!~CY zc9oG02y!4rdEetsIlsa4&#(7(R~G_0&#w$qC8Z-)@rkAK{J<*aNp6%Q>~EYg=Xkv` z9iU=yTFVDT(|FuaBpDLv?BbArgu>6-k10`&B9#+J^VOm+0*{=+=NW54)~d-U%ip`8 zWb&=5(vjoOfM%wtvql%H?rq_XTHKZLO=1HQs8t|Z5c<8)Ivy3>)D)e0PsCHA0jeo_ z^2)|%W~bnuZF=PPjM{g2po^&vL|a5+*Yq0?@KeK{Kf2Hl>A7}BhW_qc8hIQU^<`ol zgF6We{Fe3+M#)8mfq5#j=zcG<>|J6#91BFE-@YWTuPJd>K^-6WTHN_nLl<8L7`&R0 zEDNmJPKu_yd8H-h#V;GoK+e&N)ICB53(8brD4fF$kQvIdcQZ2m!v@b!P#J8s;@YWY zX^4_ZXwQ~tL%uLf9Nx8UxHfJUcylHxj& zpavfI;_`TVcnY;tMwX(k=;cB29ev`7}X!As7{+6TZHYu5~*l9)SIEgWNM*j0IR@ zUly@f(BMk@pt10<178(BnO7thjie!vd(^!kB=GTfX*!(d70{I!iAo!z(k4w8r*53a znP0ty7Sdrm8>xl{R`DmD3NKEEhpke&R?nooZ{3;gcbUF^v0BNbzQ2Wv%y_bJC9!nZ z@AtZ2dHMQU3*}H(u;VOm=>8^y&HKQkV`IWMzMA|4N5^X58u-{ittYYfA`XWjd_)ba znYXl+j0AMd7bca=LQzA2`}zD}TG^96M+L^wV5#Kpi3&R87WI1A88Pcb6XZgTp8BpK z!3tY#p-FoBLIGz^c*)D|;7s%;qis0JBnU$s=F!g@>8ShG{AdRXM*<=8)eInfoKQdG zC?gXr=8M>_7{5v~jP>&YTGVZq1GEz|X4`_*>a|oAQyhvQqaYQkhzj{~WI@HT1;buW z_TLe2x5n&B{I0@6+Du(oI+t7ZURV;5q&%qoPC6ci0Uq;h7+3iqrI!L@I=Icx00(&R znGHY+B)K5dyeMI4z3LkN%s3EDe2{9q(5g!avvs$wS3V`L4-+5&)S|#Fx4B>pfhkLZ zZJ3=P|NQsN%V~b%q#PTPU_z4}C($GmSx_54N72VBJ5L1n`oa~<-5~hTX-YVvFu3;1 zR=y)C?b?$RlaV!`>kIV-9`DdO((cj90KCwTZCdD_@20awE#yq%rVw~DLUN@XP`pyP zWDA?8wRr%$P!&Nt#keUBeioqFBib5)3auH5+ZIgr@C+{p1tX5=ac?G-pNb5}ce**d z8~)?)j2?&VkByG-#lH}(ItKY6q99}C%I$GnQEm>%9V@U9hoy?91WHXitK!eD)dF|z z4|0V^iK0Vz{kBuo9|G*FSL8R2ZhCDb^zd$jgaxd^!g}ruG7VJ z_smD~S~=*m_N%OAy&X6RxuBmG796n6dr-Aao!Gwe!eJfF_JJF-E5X(ffIx7O1q`|Q zvaR!OCJ=JK5wip|s`Mg6jI4MA_RqdAFLqB zWeBs+GdF~W^uOJtU)5|iTX^R;ddy{)I0<}ILqR0!04eu>@@vX5(g#ScR z_7zs}>d5mfQ=Rmx(ts?3vX1rivs@CbXhS#n>$j?GqkS+dZb8D80Ob$wSX*Sn9%7w8 zi9~f*N-1Fz*szu)92rC6+N-4clE&Mdy8h>>8}bo8ziCC677U?)KLSgTF-0-JE zKM<9(l_veB! zMf9zCd z{|)hwcE0mr=yCm};BoC0ZgCyy2eOsGxQpbfQ@2DU*AR@0Ry54DI%lrRth=z-x%ZZ~ z(%|~XZm|^QZw6|5Iw4=83`~o#lwANPem=q)xYZsbCW!Wu7Dc!Inc_o{##&W zp&qc!KN8UHqy)C8+rm8Gr$AtMDlOe+3%f5&yQ!ggC=69L1=zuPlC_^?pYl?Kwi5kq zg5V`!%V_xiby;2*aR1&`&Y^LUID6GvY+j-+ z4H3_P=Ijgiw~*RjdaG%I2xv}5EexteRBHgjKU%droQ0taN8~OW8yU)zvHH%#1hf<} z?2?l_Ag7{Q0x->mj=_Z9-(9$yjuvzsF!pug+i%1;&>+e_k&Xgb2vH z#%%hv8B+hy-U1);$Bhy#kBh1ReI*^Td|R0U44&d^23fF^PF^aEP*Q7wty6*|D7sF^ z?bIQNTCOEFos#F(-wkm4y0L}zoMd*9yQWyP=AP9f=yMa%A-uB6IX{GB0H$pfmP*PR zNg^Q6ihq4^&h>OK0*n0xq38diKCa4Ercbn4`uBz{`5!-w4TkL()2y+fT^^V(LY*Ld z<*t{cPW_7XJ&(bPLIQAO>hWZtyrH$8eS4kN$?E!EnxC+@c6cNnWh~UYvTdRb=X%DD z@=Sy27UEJt?}LR*>j#^@x<%cA;@CIci);ClUZ`R84q6H@J@LKhORhYF6`HvA1l9U+yeR@P|8$EqB?bD z#rlJ9mb=LXEQi3@=vBtHCW<~_pGBuSMWK76DB$)OiIw-Dw2VlTM zi`bi0qtMjRBd*9Sq=6eF+1q6IQh)&8$oTN}LQn>OnN02awYCHf%zcOm#)m`qDnG)d z-O5tb&4WTlZ{uiNBg8e1;Rj;IO-oC#v4`PNs^dws5R$EgEz=04KjzYF@=>n$C(O$H zd+2MCwo>vEvYodx4PEurXptipIKx{&KXJAFm=nZ)Gbe>+F@ z#_F5Ktp9Y4S4%y_gvu77BUB5uke4FDJ2g3+cl@4L-0Ae5%k#qD5_D(gKH~ayR4iG3 zBg%GxFqJBT1S8GLpCv*c>KOu*!1NItQioq9s|&+%XZwhEj_!o{#kYG{`X8rNyqG-1U*2?EUWtZ}PGIO4mMJ681M@fp;j2?Dn7G2=4`Q^(eiK~#Wsi$}x{XN( z;&#JVgC9GKfON4`-vVpcNsZ7#%PKE8Z6R50Gt58=nXdC$YdXZngb`xCCxvm4^%&5X zz-SPA>ur(sXU|PAAI8;ZZtlb@D+MmGWg0djKY+7^-)6U&?Q}VXkxLB(E+v?Y0_aP5 z{d-G@f3C5s|HX&gYFM>W=#}nTxia#z#e#CYA|H3Y1PBo54dGi5^2MM0Re3gpm0NDqN2B(z2VR7_Q1X_Hq8UHf zS*oPNnc2}Fgxb6U=z<%?LonN{hv1m#nZo%yAw*x5i2Fgc&NC3Yg2pK&fWaoqQw^Hq z|MC<&3E!d8$y_TlVKQEtj?yJ48aFH3YrI2BG^n>;z-cUsM=FywozWcAYtwAxU(~MY zltBZ$I=y3$|9-opY*2MHZ(P zLU+w>=!MrIcV)XumB9}l0wGHsgB42=^jvoCqXOeN5pVYh{kj$8BIlMo@{eZoc>-SM z-}=H&GJd56UuP{nHx{Zyr{j#tlFV4eC(uqf+vH*WJP@T?i>}beUNE{EOMqy5ej=vi zZOkMa3%=!L8PPNmlo`{a4FrIYKq7o~7MYVfCp3yGbUY4mat2iK0fP{mLWygkY~rXI zKU%o+;j@SEfSFrRS~~j$UBJx-%)f{Ec^d`?Po_|@W(9sgZhBe(4lzn*8Wo}@i7Go=YiwzXv^CbP5sq~)6@#g_{Sde2?NpAfyS5KZod)UCJLBH|%)v#}(%hP;6g1XziyF7_!q%z->kr9~wmD|yRZtO?{CRtS56dD@Wswq5M$~;z*NUDhHF2;Mp%<^@@!QrM* z^Gw-O6!sXeuF&Q={&wb^=M25?O!lg8+9kcBQS^c7J4m-Z&}paN`EUI8uP{;M6$9v1 zxzo9Ym`(JNyaJdA^_1PPZh{)=8d42VxP;kamV#Yx2)Y3ZYe7GAbDS#arnESEexAK) z?O zM^k6H(7C4OK=JP*=w_>7x=vD>4ghN|0Eh9( zj}zIbE(SWUlyHKoQHp#x4s~`olkdZ`SGO`%F6|SgpcIczMRs!N$@%lynJB@NCEGO? zU{~KglM9BRGtO!ypIMu#$RTO#UOS?MOn(LJm zIS_ZlU-mtl@@qWahgkG}$jsFhh>J_p=FIFRCnyOd0U>)+Y7Rcyj>?88Zj8AV!~J5*OrcwtxrfdfARy+!gor?X_Hxcd5puR+5Medsrzi~9 zvWu?hm&A8^<_g*E>*Nt`ngeUZ^dY4g;hAUlU^*H1QHdeSCwF;{EPU99{Z7HUby zy!dV(_)>B$f2UGqqy`3cXqdyB-w}PHQ2S(v6hSGA(PamcxTj>DCG0D%sXpV}R=|P>D4fyNJCdnT{96V%9#=T5A*9NLz z>~Uxt*WNHmoIV0l`)$(XAj4+7jp($^s$6bV{@3%`HfM}AOX}SZb402yoU{a0t5`hv zHsVN5u5*tCzLck<&zLk+5jQquJM;t8Wc$^h{HI}ij$mFpaiyaa2sC$82u?eSWi7J# z-k}-I!oZyz2C*V=Yez@-lpx?!MaOjq*(ANA(Kl4&#+;kLRfOnpQ#Q`29wCgj>7(-5 z9tKSps*hXO2_b-ND3rJn9`aEeUI;_-8ey|-GI~0^c=5xvY^6?JTd@X}vftLPjKD89 z3G}Sj_b*AfDc+Sy*3SWWl`K6VIr42H6{vN(7O*{e598*5xPhZT8>9^zO)aAK@30VR zqZnXJ=>2LlH+{c#y#Ku@;PLPV*9STOu`$~r##AHZCVw`QRhA_agG<-O`&mZf} zHHvS3$Lr0z_ir>RonQGGy0SG0-HFO0>c92LH)4i1b#yid)K zpr+!bwf;x((zrb7+onmluEQ-A$bPYxNu=f11_TDGc#?+;DDb!&?P!W?IcZcTb0873 zJPyrz7GHtH0oJ6wug3*~(sTNx?DaL&!xsdR^ALNex5xm8~RZpP9+E35x(o)1Hrcbm9~i|;*qL=wX9e0YogOgtBl&O6A2neUn15N zcVRvdnUn@$G2s15AYUG+605c>**HG@lS|^wui&dui;eGr{2o*q@;-!BB(TSvnK#2( zkZF?E6j9V7uHJd*t?7n++`(O_zx_1P>km?Pk?C($CB;KeS9$xNGMyR-O*RP;D5x1{ zO{60jB6EF+cRDBA?OH^Q_{&n-OnO8nJNiU>ef|NVpR!;pQfpkRQp&q6v$ae=w)(4c zlO>~-MGB;zRdH$)kp))G$%tDeQ$m~tm8Lktb}7DNeo6BbU@Kw#O4wzb`>@iu3d?9pw684hxWw_P1d^9U#C2XnBkS!P%*|YHzRfb@U3Mi ziqX*B`MF=$U~xMUz?I@EDncvuFA*~);t9L8ql5wxe+eFN?}_Tz@rRt?2wNfsDBg~U zo+?AoPnG6dnX)As15G7d`b)j{lyj?uWGxRK zyuSPUtH82BK7HzRV^t{X86<7$@i!TVxqMBF?d;(+qLK#)x)YMyW&VoBVf36pHS(m? z4(5zD2y;5n+Agc%$;pf0^YYOM@{jo+!v=RfPj?i!Oa!!jP@)m(4*Flwg>e4AOR~}- z3F)gXLP^=fuIQ>KWFA)K-5eOsMz+}Z5Kgw@L1wddr$&jdDyy)RcqyG=w10ei51kS z3je|mNu{`tra@9PAKP-Rx%zf-6gmwW4kCPj{4=1)6{amntR9QbFyVxlMeFgH=hjaK;lX8$Kz3yeaX!x*IEN^z0rpvnyWD)hyrWM?qch5~SKyPTp z7gkDb^vIu;Ka?$W8ZG`H(x{lkX7aCpYU`(X-1byV>FT3PDQ!o{E17kJhU6_61bL{^ z!-e}FY-79E9N5?N&y8WW?+lP?M)zJoV(z?r0v8=I+8q^w1lzshF0mj2UdY;3e)#t= zu=GDR(M{_^;%bw8GxrOu*+)1;$Z^E|T?>g!qgnp>ITz2{-2cZ4g8+b3{|z_rDwf{$ z9-45g^bJ2|XY)EnVf8X-&J=_2X*Zfn!xH|+9%*!Ijsny|{|XoP>n3}kO3{#^1TjeQ zm%#=pPDzs?0roq&yM71E!PP^GoVxYdytv`9wle54zD5w=A8bNgp)}OeJ?9JY$PKjR zS`R)p91humTsa_kF{DL{7oV#{P++?kfJF1lE{K|);*3~#XjehxB}rrg(ujZfUaW%6 z=9|n=gop% zf37_i?$G7gG$DXDSPIkrntwPP)a6;-P`z2NL77UkgDS^`f@N9%v6fbKn$D5v=lB?f zaW=MNAu8yojPr5*kw(E)^ByVq4SZij9QkDA4aWqKd821^orW9fhqtMfoCAlhO?M-+ zU#=}bdl=>;2O0A--qEy7K>&U{J#L#04V=SrufM;GyGzfIpWN-z#<78k}R>z3ahNK&IX&L*kYR< zcG+W}0}eUjm=jJprAUgUgg;U$VJVYxsgO#kl4^cS zjnqn=)JuajhF&t-wqwqhaoaNzjaj!(>h)OXx> z!Z+@_U?!F8Ds%VlCaZ#L%DqY}<4_wZZSLq>SB3T-pY{DiCXl+*fz-41)?$f>Z#3xY dOzsc=+JxgQ`X+pxPljDo6q6`XAOz93e4tHi6r%tD diff --git a/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 b/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 old mode 100644 new mode 100755 index 618de99d480f9a5dfeabce556f3a94bd31de1a2c..eddad58f06020cbe76477faf4c39ac063e5882bc GIT binary patch literal 17360 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 HXmJAoo}Whh literal 17344 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]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 rg(syp6t8!|axc Array#indexOf +// true -> Array#includes +var toIObject = require('./_to-iobject'); +var toLength = require('./_to-length'); +var toAbsoluteIndex = require('./_to-absolute-index'); +module.exports = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +},{"./_to-absolute-index":62,"./_to-iobject":64,"./_to-length":65}],22:[function(require,module,exports){ +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = require('./_cof'); +var TAG = require('./_wks')('toStringTag'); +// ES3 wrong here +var ARG = cof(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } +}; + +module.exports = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + +},{"./_cof":23,"./_wks":69}],23:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + +},{}],24:[function(require,module,exports){ +var core = module.exports = { version: '2.5.1' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + +},{}],25:[function(require,module,exports){ +'use strict'; +var $defineProperty = require('./_object-dp'); +var createDesc = require('./_property-desc'); + +module.exports = function (object, index, value) { + if (index in object) $defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; +}; + +},{"./_object-dp":50,"./_property-desc":56}],26:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +},{"./_a-function":18}],27:[function(require,module,exports){ +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + +},{}],28:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"./_fails":32}],29:[function(require,module,exports){ +var isObject = require('./_is-object'); +var document = require('./_global').document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + +},{"./_global":33,"./_is-object":40}],30:[function(require,module,exports){ +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + +},{}],31:[function(require,module,exports){ +var global = require('./_global'); +var core = require('./_core'); +var ctx = require('./_ctx'); +var hide = require('./_hide'); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && key in exports) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + +},{"./_core":24,"./_ctx":26,"./_global":33,"./_hide":35}],32:[function(require,module,exports){ +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + +},{}],33:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + +},{}],34:[function(require,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + +},{}],35:[function(require,module,exports){ +var dP = require('./_object-dp'); +var createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +},{"./_descriptors":28,"./_object-dp":50,"./_property-desc":56}],36:[function(require,module,exports){ +var document = require('./_global').document; +module.exports = document && document.documentElement; + +},{"./_global":33}],37:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function () { + return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"./_descriptors":28,"./_dom-create":29,"./_fails":32}],38:[function(require,module,exports){ +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = require('./_cof'); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + +},{"./_cof":23}],39:[function(require,module,exports){ +// check on default Array iterator +var Iterators = require('./_iterators'); +var ITERATOR = require('./_wks')('iterator'); +var ArrayProto = Array.prototype; + +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); +}; + +},{"./_iterators":46,"./_wks":69}],40:[function(require,module,exports){ +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +},{}],41:[function(require,module,exports){ +// call something on iterator step with safe closing on error +var anObject = require('./_an-object'); +module.exports = function (iterator, fn, value, entries) { + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (e) { + var ret = iterator['return']; + if (ret !== undefined) anObject(ret.call(iterator)); + throw e; + } +}; + +},{"./_an-object":20}],42:[function(require,module,exports){ +'use strict'; +var create = require('./_object-create'); +var descriptor = require('./_property-desc'); +var setToStringTag = require('./_set-to-string-tag'); +var IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; }); + +module.exports = function (Constructor, NAME, next) { + Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + +},{"./_hide":35,"./_object-create":49,"./_property-desc":56,"./_set-to-string-tag":58,"./_wks":69}],43:[function(require,module,exports){ +'use strict'; +var LIBRARY = require('./_library'); +var $export = require('./_export'); +var redefine = require('./_redefine'); +var hide = require('./_hide'); +var has = require('./_has'); +var Iterators = require('./_iterators'); +var $iterCreate = require('./_iter-create'); +var setToStringTag = require('./_set-to-string-tag'); +var getPrototypeOf = require('./_object-gpo'); +var ITERATOR = require('./_wks')('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + +},{"./_export":31,"./_has":34,"./_hide":35,"./_iter-create":42,"./_iterators":46,"./_library":47,"./_object-gpo":52,"./_redefine":57,"./_set-to-string-tag":58,"./_wks":69}],44:[function(require,module,exports){ +var ITERATOR = require('./_wks')('iterator'); +var SAFE_CLOSING = false; + +try { + var riter = [7][ITERATOR](); + riter['return'] = function () { SAFE_CLOSING = true; }; + // eslint-disable-next-line no-throw-literal + Array.from(riter, function () { throw 2; }); +} catch (e) { /* empty */ } + +module.exports = function (exec, skipClosing) { + if (!skipClosing && !SAFE_CLOSING) return false; + var safe = false; + try { + var arr = [7]; + var iter = arr[ITERATOR](); + iter.next = function () { return { done: safe = true }; }; + arr[ITERATOR] = function () { return iter; }; + exec(arr); + } catch (e) { /* empty */ } + return safe; +}; + +},{"./_wks":69}],45:[function(require,module,exports){ +module.exports = function (done, value) { + return { value: value, done: !!done }; +}; + +},{}],46:[function(require,module,exports){ +module.exports = {}; + +},{}],47:[function(require,module,exports){ +module.exports = true; + +},{}],48:[function(require,module,exports){ +var META = require('./_uid')('meta'); +var isObject = require('./_is-object'); +var has = require('./_has'); +var setDesc = require('./_object-dp').f; +var id = 0; +var isExtensible = Object.isExtensible || function () { + return true; +}; +var FREEZE = !require('./_fails')(function () { + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function (it) { + setDesc(it, META, { value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + } }); +}; +var fastKey = function (it, create) { + // return primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function (it, create) { + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; + +},{"./_fails":32,"./_has":34,"./_is-object":40,"./_object-dp":50,"./_uid":68}],49:[function(require,module,exports){ +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = require('./_an-object'); +var dPs = require('./_object-dps'); +var enumBugKeys = require('./_enum-bug-keys'); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = require('./_dom-create')('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + require('./_html').appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + +},{"./_an-object":20,"./_dom-create":29,"./_enum-bug-keys":30,"./_html":36,"./_object-dps":51,"./_shared-key":59}],50:[function(require,module,exports){ +var anObject = require('./_an-object'); +var IE8_DOM_DEFINE = require('./_ie8-dom-define'); +var toPrimitive = require('./_to-primitive'); +var dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +},{"./_an-object":20,"./_descriptors":28,"./_ie8-dom-define":37,"./_to-primitive":67}],51:[function(require,module,exports){ +var dP = require('./_object-dp'); +var anObject = require('./_an-object'); +var getKeys = require('./_object-keys'); + +module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = getKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + +},{"./_an-object":20,"./_descriptors":28,"./_object-dp":50,"./_object-keys":54}],52:[function(require,module,exports){ +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = require('./_has'); +var toObject = require('./_to-object'); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); +var ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + +},{"./_has":34,"./_shared-key":59,"./_to-object":66}],53:[function(require,module,exports){ +var has = require('./_has'); +var toIObject = require('./_to-iobject'); +var arrayIndexOf = require('./_array-includes')(false); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + +},{"./_array-includes":21,"./_has":34,"./_shared-key":59,"./_to-iobject":64}],54:[function(require,module,exports){ +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = require('./_object-keys-internal'); +var enumBugKeys = require('./_enum-bug-keys'); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + +},{"./_enum-bug-keys":30,"./_object-keys-internal":53}],55:[function(require,module,exports){ +// most Object methods by ES6 should accept primitives +var $export = require('./_export'); +var core = require('./_core'); +var fails = require('./_fails'); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + +},{"./_core":24,"./_export":31,"./_fails":32}],56:[function(require,module,exports){ +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +},{}],57:[function(require,module,exports){ +module.exports = require('./_hide'); + +},{"./_hide":35}],58:[function(require,module,exports){ +var def = require('./_object-dp').f; +var has = require('./_has'); +var TAG = require('./_wks')('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + +},{"./_has":34,"./_object-dp":50,"./_wks":69}],59:[function(require,module,exports){ +var shared = require('./_shared')('keys'); +var uid = require('./_uid'); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + +},{"./_shared":60,"./_uid":68}],60:[function(require,module,exports){ +var global = require('./_global'); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); +module.exports = function (key) { + return store[key] || (store[key] = {}); +}; + +},{"./_global":33}],61:[function(require,module,exports){ +var toInteger = require('./_to-integer'); +var defined = require('./_defined'); +// true -> String#at +// false -> String#codePointAt +module.exports = function (TO_STRING) { + return function (that, pos) { + var s = String(defined(that)); + var i = toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + +},{"./_defined":27,"./_to-integer":63}],62:[function(require,module,exports){ +var toInteger = require('./_to-integer'); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + +},{"./_to-integer":63}],63:[function(require,module,exports){ +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + +},{}],64:[function(require,module,exports){ +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = require('./_iobject'); +var defined = require('./_defined'); +module.exports = function (it) { + return IObject(defined(it)); +}; + +},{"./_defined":27,"./_iobject":38}],65:[function(require,module,exports){ +// 7.1.15 ToLength +var toInteger = require('./_to-integer'); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + +},{"./_to-integer":63}],66:[function(require,module,exports){ +// 7.1.13 ToObject(argument) +var defined = require('./_defined'); +module.exports = function (it) { + return Object(defined(it)); +}; + +},{"./_defined":27}],67:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + +},{"./_is-object":40}],68:[function(require,module,exports){ +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + +},{}],69:[function(require,module,exports){ +var store = require('./_shared')('wks'); +var uid = require('./_uid'); +var Symbol = require('./_global').Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + +},{"./_global":33,"./_shared":60,"./_uid":68}],70:[function(require,module,exports){ +var classof = require('./_classof'); +var ITERATOR = require('./_wks')('iterator'); +var Iterators = require('./_iterators'); +module.exports = require('./_core').getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + +},{"./_classof":22,"./_core":24,"./_iterators":46,"./_wks":69}],71:[function(require,module,exports){ +var anObject = require('./_an-object'); +var get = require('./core.get-iterator-method'); +module.exports = require('./_core').getIterator = function (it) { + var iterFn = get(it); + if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!'); + return anObject(iterFn.call(it)); +}; + +},{"./_an-object":20,"./_core":24,"./core.get-iterator-method":70}],72:[function(require,module,exports){ +var classof = require('./_classof'); +var ITERATOR = require('./_wks')('iterator'); +var Iterators = require('./_iterators'); +module.exports = require('./_core').isIterable = function (it) { + var O = Object(it); + return O[ITERATOR] !== undefined + || '@@iterator' in O + // eslint-disable-next-line no-prototype-builtins + || Iterators.hasOwnProperty(classof(O)); +}; + +},{"./_classof":22,"./_core":24,"./_iterators":46,"./_wks":69}],73:[function(require,module,exports){ +'use strict'; +var ctx = require('./_ctx'); +var $export = require('./_export'); +var toObject = require('./_to-object'); +var call = require('./_iter-call'); +var isArrayIter = require('./_is-array-iter'); +var toLength = require('./_to-length'); +var createProperty = require('./_create-property'); +var getIterFn = require('./core.get-iterator-method'); + +$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var index = 0; + var iterFn = getIterFn(O); + var length, result, step, iterator; + if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { + for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { + createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = toLength(O.length); + for (result = new C(length); length > index; index++) { + createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } +}); + +},{"./_create-property":25,"./_ctx":26,"./_export":31,"./_is-array-iter":39,"./_iter-call":41,"./_iter-detect":44,"./_to-length":65,"./_to-object":66,"./core.get-iterator-method":70}],74:[function(require,module,exports){ +'use strict'; +var addToUnscopables = require('./_add-to-unscopables'); +var step = require('./_iter-step'); +var Iterators = require('./_iterators'); +var toIObject = require('./_to-iobject'); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) { + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return step(1); + } + if (kind == 'keys') return step(0, index); + if (kind == 'values') return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +},{"./_add-to-unscopables":19,"./_iter-define":43,"./_iter-step":45,"./_iterators":46,"./_to-iobject":64}],75:[function(require,module,exports){ +var $export = require('./_export'); +// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) +$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f }); + +},{"./_descriptors":28,"./_export":31,"./_object-dp":50}],76:[function(require,module,exports){ +// 19.1.2.5 Object.freeze(O) +var isObject = require('./_is-object'); +var meta = require('./_meta').onFreeze; + +require('./_object-sap')('freeze', function ($freeze) { + return function freeze(it) { + return $freeze && isObject(it) ? $freeze(meta(it)) : it; + }; +}); + +},{"./_is-object":40,"./_meta":48,"./_object-sap":55}],77:[function(require,module,exports){ +'use strict'; +var $at = require('./_string-at')(true); + +// 21.1.3.27 String.prototype[@@iterator]() +require('./_iter-define')(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index +// 21.1.5.2.1 %StringIteratorPrototype%.next() +}, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; +}); + +},{"./_iter-define":43,"./_string-at":61}],78:[function(require,module,exports){ +require('./es6.array.iterator'); +var global = require('./_global'); +var hide = require('./_hide'); +var Iterators = require('./_iterators'); +var TO_STRING_TAG = require('./_wks')('toStringTag'); + +var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' + + 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' + + 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' + + 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' + + 'TextTrackList,TouchList').split(','); + +for (var i = 0; i < DOMIterables.length; i++) { + var NAME = DOMIterables[i]; + var Collection = global[NAME]; + var proto = Collection && Collection.prototype; + if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = Iterators.Array; +} + +},{"./_global":33,"./_hide":35,"./_iterators":46,"./_wks":69,"./es6.array.iterator":74}],79:[function(require,module,exports){ function getRelocatable(re) { // In the future, this could use a WeakMap instead of an expando. if (!re.__matchAtRelocatable) { // Disjunctions are the lowest-precedence operator, so we can make any // pattern match the empty string by appending `|()` to it: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns - var source = re.source + "|()"; + var source = re.source + '|()'; // We always make the new regex global. - var flags = "g" + (re.ignoreCase ? "i" : "") + (re.multiline ? "m" : "") + (re.unicode ? "u" : "") + var flags = 'g' + (re.ignoreCase ? 'i' : '') + (re.multiline ? 'm' : '') + (re.unicode ? 'u' : '') // sticky (/.../y) doesn't make sense in conjunction with our relocation // logic, so we ignore it here. ; @@ -143,7 +1191,7 @@ function getRelocatable(re) { function matchAt(re, str, pos) { if (re.global || re.sticky) { - throw new Error("matchAt(...): Only non-global regexes are supported"); + throw new Error('matchAt(...): Only non-global regexes are supported'); } var reloc = getRelocatable(re); reloc.lastIndex = pos; @@ -160,72 +1208,133 @@ function matchAt(re, str, pos) { } module.exports = matchAt; -},{}],3:[function(require,module,exports){ -/** - * The Lexer class handles tokenizing the input in various ways. Since our - * parser expects us to be able to backtrack, the lexer allows lexing from any - * given starting point. - * - * Its main exposed function is the `lex` function, which takes a position to - * lex from and a type of token to lex. It defers to the appropriate `_innerLex` - * function. - * - * The various `_innerLex` functions perform the actual lexing of different - * kinds. - */ +},{}],80:[function(require,module,exports){ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ -var matchAt = require("match-at"); +'use strict'; +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; -var ParseError = require("./ParseError"); +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } -// The main lexer class -function Lexer(input) { - this.input = input; - this.pos = 0; + return Object(val); } -/** - * The resulting token returned from `lex`. - * - * It consists of the token text plus some position information. - * The position information is essentially a range in an input string, - * but instead of referencing the bare input string, we refer to the lexer. - * That way it is possible to attach extra metadata to the input string, - * like for example a file name or similar. - * - * The position information (all three parameters) is optional, - * so it is OK to construct synthetic tokens if appropriate. - * Not providing available position information may lead to - * degraded error reporting, though. - * - * @param {string} text the text of this token - * @param {number=} start the start offset, zero-based inclusive - * @param {number=} end the end offset, zero-based exclusive - * @param {Lexer=} lexer the lexer which in turn holds the input string - */ -function Token(text, start, end, lexer) { - this.text = text; - this.start = start; - this.end = end; - this.lexer = lexer; +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } } -/** - * Given a pair of tokens (this and endToken), compute a “Token” encompassing - * the whole input range enclosed by these two. - * - * @param {Token} endToken last token of the range, inclusive - * @param {string} text the text of the newly constructed token - */ -Token.prototype.range = function(endToken, text) { - if (endToken.lexer !== this.lexer) { - return new Token(text); // sorry, no position information available - } - return new Token(text, this.start, endToken.end, this.lexer); +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; }; +},{}],81:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.controlWordRegex = undefined; + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _matchAt = require("match-at"); + +var _matchAt2 = _interopRequireDefault(_matchAt); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _SourceLocation = require("./SourceLocation"); + +var _SourceLocation2 = _interopRequireDefault(_SourceLocation); + +var _Token = require("./Token"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /* The following tokenRegex * - matches typical whitespace (but not NBSP etc.) using its first group + * - matches comments (must have trailing newlines) * - does not match any control character \x00-\x1f except whitespace * - does not match a bare backslash * - matches any ASCII character except those just mentioned @@ -239,111 +1348,431 @@ Token.prototype.range = function(endToken, text) { * If there is no matching function or symbol definition, the Parser will * still reject the input. */ -var tokenRegex = new RegExp( - "([ \r\n\t]+)|" + // whitespace - "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint - "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair - "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name - ")" -); /** - * This function lexes a single token. + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. */ -Lexer.prototype.lex = function() { - var input = this.input; - var pos = this.pos; - if (pos === input.length) { - return new Token("EOF", pos, pos, this); - } - var match = matchAt(tokenRegex, input, pos); - if (match === null) { - throw new ParseError( - "Unexpected character: '" + input[pos] + "'", - new Token(input[pos], pos, pos + 1, this)); - } - var text = match[2] || " "; - var start = this.pos; - this.pos += match[0].length; - var end = this.pos; - return new Token(text, start, end, this); -}; -module.exports = Lexer; +var commentRegexString = "%[^\n]*[\n]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var tokenRegex = new RegExp("([ \r\n\t]+)|" + ( // whitespace +"(" + commentRegexString + "|") + // comments +"[!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair +"|\\\\verb\\*([^]).*?\\3" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\4" + ( // \verb unstarred +"|" + controlWordRegexString) + ( // \macroName +"|" + controlSymbolRegexString) + // \\, \', etc. +")"); -},{"./ParseError":6,"match-at":2}],4:[function(require,module,exports){ +// tokenRegex has no ^ marker, as required by matchAt. +// These regexs are for matching results from tokenRegex, +// so they do have ^ markers. +var controlWordRegex = exports.controlWordRegex = new RegExp("^" + controlWordRegexString); +var commentRegex = new RegExp("^" + commentRegexString); + +/** Main Lexer class */ + +var Lexer = function () { + function Lexer(input) { + (0, _classCallCheck3.default)(this, Lexer); + + this.input = input; + this.pos = 0; + } + + /** + * This function lexes a single token. + */ + + + (0, _createClass3.default)(Lexer, [{ + key: "lex", + value: function lex() { + var input = this.input; + var pos = this.pos; + if (pos === input.length) { + return new _Token.Token("EOF", new _SourceLocation2.default(this, pos, pos)); + } + var match = (0, _matchAt2.default)(tokenRegex, input, pos); + if (match === null) { + throw new _ParseError2.default("Unexpected character: '" + input[pos] + "'", new _Token.Token(input[pos], new _SourceLocation2.default(this, pos, pos + 1))); + } + var text = match[2] || " "; + var start = this.pos; + this.pos += match[0].length; + var end = this.pos; + + if (commentRegex.test(text)) { + return this.lex(); + } else { + return new _Token.Token(text, new _SourceLocation2.default(this, start, end)); + } + } + }]); + return Lexer; +}(); + +exports.default = Lexer; + +},{"./ParseError":84,"./SourceLocation":88,"./Token":90,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9,"match-at":79}],82:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); + +var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _Lexer = require("./Lexer"); + +var _Lexer2 = _interopRequireDefault(_Lexer); + +var _Token = require("./Token"); + +var _macros = require("./macros"); + +var _macros2 = _interopRequireDefault(_macros); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _objectAssign = require("object-assign"); + +var _objectAssign2 = _interopRequireDefault(_objectAssign); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var MacroExpander = function () { + function MacroExpander(input, macros) { + (0, _classCallCheck3.default)(this, MacroExpander); + + this.lexer = new _Lexer2.default(input); + this.macros = (0, _objectAssign2.default)({}, _macros2.default, macros); + this.stack = []; // contains tokens in REVERSE order + } + + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + + + (0, _createClass3.default)(MacroExpander, [{ + key: "future", + value: function future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + return this.stack[this.stack.length - 1]; + } + + /** + * Remove and return the next unexpanded token. + */ + + }, { + key: "popToken", + value: function popToken() { + this.future(); // ensure non-empty stack + return this.stack.pop(); + } + + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + + }, { + key: "pushToken", + value: function pushToken(token) { + this.stack.push(token); + } + + /** + * Append an array of tokens to the token stack. + */ + + }, { + key: "pushTokens", + value: function pushTokens(tokens) { + var _stack; + + (_stack = this.stack).push.apply(_stack, (0, _toConsumableArray3.default)(tokens)); + } + + /** + * Consume all following space tokens, without expansion. + */ + + }, { + key: "consumeSpaces", + value: function consumeSpaces() { + for (;;) { + var token = this.future(); + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + + /** + * Consume the specified number of arguments from the token stream, + * and return the resulting array of arguments. + */ + + }, { + key: "consumeArgs", + value: function consumeArgs(numArgs) { + var args = []; + // obtain arguments, either single token or balanced {…} group + for (var i = 0; i < numArgs; ++i) { + this.consumeSpaces(); // ignore spaces before each argument + var startOfArg = this.popToken(); + if (startOfArg.text === "{") { + var arg = []; + var depth = 1; + while (depth !== 0) { + var tok = this.popToken(); + arg.push(tok); + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + } else if (tok.text === "EOF") { + throw new _ParseError2.default("End of input in macro argument", startOfArg); + } + } + arg.pop(); // remove last } + arg.reverse(); // like above, to fit in with stack order + args[i] = arg; + } else if (startOfArg.text === "EOF") { + throw new _ParseError2.default("End of input expecting macro argument"); + } else { + args[i] = [startOfArg]; + } + } + return args; + } + + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order and will be returned as an array, + * also in reverse order. + * + * If not, the next token will be returned without removing it + * from the stack. This case can be detected by a `Token` return value + * instead of an `Array` return value. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty. + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * At the moment, macro expansion doesn't handle delimited macros, + * i.e. things like those defined by \def\foo#1\end{…}. + * See the TeX book page 202ff. for details on how those should behave. + */ + + }, { + key: "expandOnce", + value: function expandOnce() { + var topToken = this.popToken(); + var name = topToken.text; + var isMacro = name.charAt(0) === "\\"; + if (isMacro && _Lexer.controlWordRegex.test(name)) { + // Consume all spaces after \macro (but not \\, \', etc.) + this.consumeSpaces(); + } + if (!this.macros.hasOwnProperty(name)) { + // Fully expanded + this.pushToken(topToken); + return topToken; + } + + var _getExpansion2 = this._getExpansion(name), + tokens = _getExpansion2.tokens, + numArgs = _getExpansion2.numArgs; + + var expansion = tokens; + if (numArgs) { + var args = this.consumeArgs(numArgs); + // paste arguments in place of the placeholders + expansion = expansion.slice(); // make a shallow copy + for (var i = expansion.length - 1; i >= 0; --i) { + var tok = expansion[i]; + if (tok.text === "#") { + if (i === 0) { + throw new _ParseError2.default("Incomplete placeholder at end of macro body", tok); + } + tok = expansion[--i]; // next token on stack + if (tok.text === "#") { + // ## → # + expansion.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + var _expansion; + + // replace the placeholder with the indicated argument + (_expansion = expansion).splice.apply(_expansion, [i, 2].concat((0, _toConsumableArray3.default)(args[+tok.text - 1]))); + } else { + throw new _ParseError2.default("Not a valid argument number", tok); + } + } + } + } + // Concatenate expansion onto top of stack. + this.pushTokens(expansion); + return expansion; + } + + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + + }, { + key: "expandAfterFuture", + value: function expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + + /** + * Recursively expand first token, then return first non-expandable token. + */ + + }, { + key: "expandNextToken", + value: function expandNextToken() { + for (;;) { + var expanded = this.expandOnce(); + // expandOnce returns Token if and only if it's fully expanded. + if (expanded instanceof _Token.Token) { + // \relax stops the expansion, but shouldn't get returned (a + // null return value couldn't get implemented as a function). + if (expanded.text === "\\relax") { + this.stack.pop(); + } else { + return this.stack.pop(); // === expanded + } + } + } + + // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + throw new Error(); // eslint-disable-line no-unreachable + } + + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. + * Caches macro expansions for those that were defined simple TeX strings. + */ + + }, { + key: "_getExpansion", + value: function _getExpansion(name) { + var definition = this.macros[name]; + var expansion = typeof definition === "function" ? definition(this) : definition; + if (typeof expansion === "string") { + var numArgs = 0; + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + var bodyLexer = new _Lexer2.default(expansion); + var tokens = []; + var tok = bodyLexer.lex(); + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + tokens.reverse(); // to fit in with stack using push and pop + var expanded = { tokens: tokens, numArgs: numArgs }; + // Cannot cache a macro defined using a function since it relies on + // parser context. + if (typeof definition !== "function") { + this.macros[name] = expanded; + } + return expanded; + } + + return expansion; + } + }]); + return MacroExpander; +}(); /** * This file contains the “gullet” where macros are expanded * until only non-macro tokens remain. */ -var Lexer = require("./Lexer"); +exports.default = MacroExpander; -function MacroExpander(input, macros) { - this.lexer = new Lexer(input); - this.macros = macros; - this.stack = []; // contains tokens in REVERSE order - this.discardedWhiteSpace = []; -} +},{"./Lexer":81,"./ParseError":84,"./Token":90,"./macros":120,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9,"babel-runtime/helpers/toConsumableArray":11,"object-assign":80}],83:[function(require,module,exports){ +"use strict"; -/** - * Recursively expand first token, then return first non-expandable token. - */ -MacroExpander.prototype.nextToken = function() { - for (;;) { - if (this.stack.length === 0) { - this.stack.push(this.lexer.lex()); - } - var topToken = this.stack.pop(); - var name = topToken.text; - if (!(name.charAt(0) === "\\" && this.macros.hasOwnProperty(name))) { - return topToken; - } - var expansion = this.macros[name]; - if (typeof expansion === "string") { - var bodyLexer = new Lexer(expansion); - expansion = []; - var tok = bodyLexer.lex(); - while (tok.text !== "EOF") { - expansion.push(tok); - tok = bodyLexer.lex(); - } - expansion.reverse(); // to fit in with stack using push and pop - this.macros[name] = expansion; - } - this.stack = this.stack.concat(expansion); - } -}; +Object.defineProperty(exports, "__esModule", { + value: true +}); -MacroExpander.prototype.get = function(ignoreSpace) { - this.discardedWhiteSpace = []; - var token = this.nextToken(); - if (ignoreSpace) { - while (token.text === " ") { - this.discardedWhiteSpace.push(token); - token = this.nextToken(); - } - } - return token; -}; +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); -/** - * Undo the effect of the preceding call to the get method. - * A call to this method MUST be immediately preceded and immediately followed - * by a call to get. Only used during mode switching, i.e. after one token - * was got in the old mode but should get got again in a new mode - * with possibly different whitespace handling. - */ -MacroExpander.prototype.unget = function(token) { - this.stack.push(token); - while (this.discardedWhiteSpace.length !== 0) { - this.stack.push(this.discardedWhiteSpace.pop()); - } -}; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -module.exports = MacroExpander; +var _createClass2 = require("babel-runtime/helpers/createClass"); -},{"./Lexer":3}],5:[function(require,module,exports){ +var _createClass3 = _interopRequireDefault(_createClass2); + +var _fontMetrics2 = require("./fontMetrics"); + +var _fontMetrics3 = _interopRequireDefault(_fontMetrics2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var sizeStyleMap = [ +// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9]]; /** * This file contains information about the options that the Parser carries * around with it while parsing. Data is held in an `Options` object, and when @@ -351,117 +1780,245 @@ module.exports = MacroExpander; * `.reset` functions. */ +var sizeMultipliers = [ +// fontMetrics.js:getFontMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; + /** - * This is the main options class. It contains the style, size, color, and font - * of the current parse level. It also contains the style and size of the parent - * parse level, so size changes can be handled efficiently. + * This is the main options class. It contains the current style, size, color, + * and font. * - * Each of the `.with*` and `.reset` functions passes its current style and size - * as the parentStyle and parentSize of the new options class, so parent - * handling is taken care of automatically. + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. */ -function Options(data) { - this.style = data.style; - this.color = data.color; - this.size = data.size; - this.phantom = data.phantom; - this.font = data.font; +var Options = function () { + function Options(data) { + (0, _classCallCheck3.default)(this, Options); - if (data.parentStyle === undefined) { - this.parentStyle = data.style; - } else { - this.parentStyle = data.parentStyle; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this._fontMetrics = undefined; } - if (data.parentSize === undefined) { - this.parentSize = data.size; - } else { - this.parentSize = data.parentSize; - } -} + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ -/** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ -Options.prototype.extend = function(extension) { - var data = { - style: this.style, - size: this.size, - color: this.color, - parentStyle: this.style, - parentSize: this.size, - phantom: this.phantom, - font: this.font, - }; - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; + /** + * The base size index. + */ + + + (0, _createClass3.default)(Options, [{ + key: "extend", + value: function extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + maxSize: this.maxSize + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); } - } - return new Options(data); -}; + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ -/** - * Create a new options object with the given style. - */ -Options.prototype.withStyle = function(style) { - return this.extend({ - style: style, - }); -}; + }, { + key: "havingStyle", + value: function havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } -/** - * Create a new options object with the given size. - */ -Options.prototype.withSize = function(size) { - return this.extend({ - size: size, - }); -}; + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ -/** - * Create a new options object with the given color. - */ -Options.prototype.withColor = function(color) { - return this.extend({ - color: color, - }); -}; + }, { + key: "havingCrampedStyle", + value: function havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } -/** - * Create a new options object with "phantom" set to true. - */ -Options.prototype.withPhantom = function() { - return this.extend({ - phantom: true, - }); -}; + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ -/** - * Create a new options objects with the give font. - */ -Options.prototype.withFont = function(font) { - return this.extend({ - font: font, - }); -}; + }, { + key: "havingSize", + value: function havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size + }); + } + } -/** - * Create a new options object with the same style, size, and color. This is - * used so that parent style and size changes are handled correctly. - */ -Options.prototype.reset = function() { - return this.extend({}); -}; + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ -/** - * A map of color names to CSS colors. - * TODO(emily): Remove this when we have real macros - */ -var colorMap = { + }, { + key: "havingBaseStyle", + value: function havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + + /** + * Create a new options object with the given color. + */ + + }, { + key: "withColor", + value: function withColor(color) { + return this.extend({ + color: color + }); + } + + /** + * Create a new options object with "phantom" set to true. + */ + + }, { + key: "withPhantom", + value: function withPhantom() { + return this.extend({ + phantom: true + }); + } + + /** + * Create a new options objects with the give font. + */ + + }, { + key: "withFont", + value: function withFont(font) { + return this.extend({ + font: font || this.font + }); + } + + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + + }, { + key: "sizingClasses", + value: function sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + + }, { + key: "baseSizingClasses", + value: function baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + + /** + * Return the font metrics for this size. + */ + + }, { + key: "fontMetrics", + value: function fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = _fontMetrics3.default.getFontMetrics(this.size); + } + return this._fontMetrics; + } + + /** + * A map of color names to CSS colors. + * TODO(emily): Remove this when we have real macros + */ + + }, { + key: "getColor", + + + /** + * Gets the CSS color of the current options object, accounting for the + * `colorMap`. + */ + value: function getColor() { + if (this.phantom) { + return "transparent"; + } else if (this.color != null && Options.colorMap.hasOwnProperty(this.color)) { + return Options.colorMap[this.color]; + } else { + return this.color; + } + } + }]); + return Options; +}(); + +Options.BASESIZE = 6; +Options.colorMap = { "katex-blue": "#6495ed", "katex-orange": "#ffa500", "katex-pink": "#ff00af", @@ -517,24 +2074,29 @@ var colorMap = { "katex-grayH": "#3b3e40", "katex-grayI": "#21242c", "katex-kaBlue": "#314453", - "katex-kaGreen": "#71B307", + "katex-kaGreen": "#71B307" }; +exports.default = Options; -/** - * Gets the CSS color of the current options object, accounting for the - * `colorMap`. - */ -Options.prototype.getColor = function() { - if (this.phantom) { - return "transparent"; - } else { - return colorMap[this.color] || this.color; - } -}; +},{"./fontMetrics":101,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],84:[function(require,module,exports){ +"use strict"; -module.exports = Options; +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _ParseNode = require("./ParseNode"); + +var _ParseNode2 = _interopRequireDefault(_ParseNode); + +var _Token = require("./Token"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -},{}],6:[function(require,module,exports){ /** * This is the ParseError class, which is the main error thrown by KaTeX * functions when something has gone wrong. This is used to distinguish internal @@ -542,24 +2104,28 @@ module.exports = Options; * * If possible, a caller should provide a Token or ParseNode with information * about where in the source string the problem occurred. - * - * @param {string} message The error message - * @param {(Token|ParseNode)=} token An object providing position information */ -function ParseError(message, token) { - var error = "KaTeX parse error: " + message; - var start; - var end; +var ParseError = +// Error position based on passed-in Token or ParseNode. - if (token && token.lexer && token.start <= token.end) { +function ParseError(message, // The error message +token) // An object providing position information +{ + (0, _classCallCheck3.default)(this, ParseError); + + var error = "KaTeX parse error: " + message; + var start = void 0; + + var loc = token && token.loc; + if (loc && loc.start <= loc.end) { // If we have the input and a position, make the error a bit fancier // Get the input - var input = token.lexer.input; + var input = loc.lexer.input; // Prepend some information - start = token.start; - end = token.end; + start = loc.start; + var end = loc.end; if (start === input.length) { error += " at end of input: "; } else { @@ -570,13 +2136,13 @@ function ParseError(message, token) { var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error - var left; + var left = void 0; if (start > 15) { left = "…" + input.slice(start - 15, start); } else { left = input.slice(0, start); } - var right; + var right = void 0; if (end + 15 < input.length) { right = input.slice(end, end + 15) + "…"; } else { @@ -589,28 +2155,112 @@ function ParseError(message, token) { // See http://stackoverflow.com/a/8460753 var self = new Error(error); self.name = "ParseError"; + // $FlowFixMe self.__proto__ = ParseError.prototype; - + // $FlowFixMe self.position = start; return self; -} +}; + +// $FlowFixMe More hackery + -// More hackery ParseError.prototype.__proto__ = Error.prototype; -module.exports = ParseError; +exports.default = ParseError; -},{}],7:[function(require,module,exports){ -/* eslint no-constant-condition:0 */ -var functions = require("./functions"); -var environments = require("./environments"); -var MacroExpander = require("./MacroExpander"); -var symbols = require("./symbols"); -var utils = require("./utils"); -var cjkRegex = require("./unicodeRegexes").cjkRegex; +},{"./ParseNode":85,"./Token":90,"babel-runtime/helpers/classCallCheck":8}],85:[function(require,module,exports){ +"use strict"; -var parseData = require("./parseData"); -var ParseError = require("./ParseError"); +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _Token = require("./Token"); + +var _SourceLocation = require("./SourceLocation"); + +var _SourceLocation2 = _interopRequireDefault(_SourceLocation); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The resulting parse tree nodes of the parse tree. + * + * It is possible to provide position information, so that a `ParseNode` can + * fulfill a role similar to a `Token` in error reporting. + * For details on the corresponding properties see `Token` constructor. + * Providing such information can lead to better error reporting. + */ +var ParseNode = function ParseNode(type, // type of node, like e.g. "ordgroup" +value, // type-specific representation of the node +mode, // parse mode in action for this node, "math" or "text" +firstToken, // first token of the input for this node, +lastToken) // last token of the input for this node, +// will default to firstToken if unset +{ + (0, _classCallCheck3.default)(this, ParseNode); + + this.type = type; + this.value = value; + this.mode = mode; + this.loc = _SourceLocation2.default.range(firstToken, lastToken); +}; + +exports.default = ParseNode; + +},{"./SourceLocation":88,"./Token":90,"babel-runtime/helpers/classCallCheck":8}],86:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _functions = require("./functions"); + +var _functions2 = _interopRequireDefault(_functions); + +var _environments = require("./environments"); + +var _environments2 = _interopRequireDefault(_environments); + +var _MacroExpander = require("./MacroExpander"); + +var _MacroExpander2 = _interopRequireDefault(_MacroExpander); + +var _symbols = require("./symbols"); + +var _symbols2 = _interopRequireDefault(_symbols); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _units = require("./units"); + +var _unicodeRegexes = require("./unicodeRegexes"); + +var _ParseNode = require("./ParseNode"); + +var _ParseNode2 = _interopRequireDefault(_ParseNode); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * This file contains the parser used to parse out a TeX expression from the @@ -641,809 +2291,1196 @@ var ParseError = require("./ParseError"); * * The earlier functions return ParseNodes. * The later functions (which are called deeper in the parse) sometimes return - * ParseFuncOrArgument, which contain a ParseNode as well as some data about + * ParsedFuncOrArgOrDollar, which contain a ParseNode as well as some data about * whether the parsed object is a function which is missing some arguments, or a * standalone object which can be used as an argument to another function. */ -/** - * Main Parser class - */ -function Parser(input, settings) { - // Create a new macro expander (gullet) and (indirectly via that) also a - // new lexer (mouth) for this parser (stomach, in the language of TeX) - this.gullet = new MacroExpander(input, settings.macros); - // Store the settings for use in parsing - this.settings = settings; -} - -var ParseNode = parseData.ParseNode; +/* TODO: Uncomment when porting to flow. +type ParsedType = "fn" | "arg" | "$" +type ParsedFunc = {| + type: "fn", + result: string, // Function name defined via defineFunction (e.g. "\\frac"). + token: Token, +|}; +type ParsedArg = {| + type: "arg", + result: ParseNode, + token: Token, +|}; +type ParsedDollar = {| + // Math mode switch + type: "$", + result: "$", + token: Token, +|}; +type ParsedFuncOrArgOrDollar = ParsedFunc | ParsedArg | ParsedDollar; +*/ /** - * An initial function (without its arguments), or an argument to a function. - * The `result` argument should be a ParseNode. + * @param {ParseNode} result + * @param {Token} token + * @return {ParsedArg} */ -function ParseFuncOrArgument(result, isFunction, token) { - this.result = result; - // Is this a function (i.e. is it something defined in functions.js)? - this.isFunction = isFunction; - this.token = token; +function newArgument(result, token) { + return { type: "arg", result: result, token: token }; } /** - * Checks a result to make sure it has the right type, and throws an - * appropriate error otherwise. - * - * @param {boolean=} consume whether to consume the expected token, - * defaults to true + * @param {Token} token + * @return {ParsedFunc} */ -Parser.prototype.expect = function(text, consume) { - if (this.nextToken.text !== text) { - throw new ParseError( - "Expected '" + text + "', got '" + this.nextToken.text + "'", - this.nextToken - ); +/* eslint no-constant-condition:0 */ +function newFunction(token) { + return { type: "fn", result: token.text, token: token }; +} + +/** + * @param {Token} token + * @return {ParsedDollar} + */ +function newDollar(token) { + return { type: "$", result: "$", token: token }; +} + +/** + * @param {ParsedFuncOrArgOrDollar} parsed + * @return {ParsedFuncOrArg} + */ +function assertFuncOrArg(parsed) { + if (parsed.type === "$") { + throw new _ParseError2.default("Unexpected $", parsed.token); } - if (consume !== false) { - this.consume(); + return parsed; +} + +var Parser = function () { + function Parser(input, settings) { + (0, _classCallCheck3.default)(this, Parser); + + // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + this.gullet = new _MacroExpander2.default(input, settings.macros); + // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this after the macros object has been copied by MacroExpander. + if (settings.colorIsTextColor) { + this.gullet.macros["\\color"] = "\\textcolor"; + } + // Store the settings for use in parsing + this.settings = settings; + // Count leftright depth (for \middle errors) + this.leftrightDepth = 0; } -}; -/** - * Considers the current look ahead token as consumed, - * and fetches the one after that as the new look ahead. - */ -Parser.prototype.consume = function() { - this.nextToken = this.gullet.get(this.mode === "math"); -}; + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + * + * @param {boolean=} consume whether to consume the expected token, + * defaults to true + */ -Parser.prototype.switchMode = function(newMode) { - this.gullet.unget(this.nextToken); - this.mode = newMode; - this.consume(); -}; -/** - * Main parsing function, which parses an entire input. - * - * @return {?Array.} - */ -Parser.prototype.parse = function() { - // Try to parse the input - this.mode = "math"; - this.consume(); - var parse = this.parseInput(); - return parse; -}; - -/** - * Parses an entire input tree. - */ -Parser.prototype.parseInput = function() { - // Parse an expression - var expression = this.parseExpression(false); - // If we succeeded, make sure there's an EOF at the end - this.expect("EOF", false); - return expression; -}; - -var endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; - -/** - * Parses an "expression", which is a list of atoms. - * - * @param {boolean} breakOnInfix Should the parsing stop when we hit infix - * nodes? This happens when functions have higher precendence - * than infix nodes in implicit parses. - * - * @param {?string} breakOnTokenText The text of the token that the expression - * should end with, or `null` if something else should end the - * expression. - * - * @return {ParseNode} - */ -Parser.prototype.parseExpression = function(breakOnInfix, breakOnTokenText) { - var body = []; - // Keep adding atoms to the body until we can't parse any more atoms (either - // we reached the end, a }, or a \right) - while (true) { - var lex = this.nextToken; - if (endOfExpression.indexOf(lex.text) !== -1) { - break; - } - if (breakOnTokenText && lex.text === breakOnTokenText) { - break; - } - if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { - break; - } - var atom = this.parseAtom(); - if (!atom) { - if (!this.settings.throwOnError && lex.text[0] === "\\") { - var errorNode = this.handleUnsupportedCmd(); - body.push(errorNode); - continue; + (0, _createClass3.default)(Parser, [{ + key: "expect", + value: function expect(text, consume) { + if (this.nextToken.text !== text) { + throw new _ParseError2.default("Expected '" + text + "', got '" + this.nextToken.text + "'", this.nextToken); } - - break; - } - body.push(atom); - } - return this.handleInfixNodes(body); -}; - -/** - * Rewrites infix operators such as \over with corresponding commands such - * as \frac. - * - * There can only be one infix operator per group. If there's more than one - * then the expression is ambiguous. This can be resolved by adding {}. - * - * @returns {Array} - */ -Parser.prototype.handleInfixNodes = function(body) { - var overIndex = -1; - var funcName; - - for (var i = 0; i < body.length; i++) { - var node = body[i]; - if (node.type === "infix") { - if (overIndex !== -1) { - throw new ParseError( - "only one infix operator per group", - node.value.token); - } - overIndex = i; - funcName = node.value.replaceWith; - } - } - - if (overIndex !== -1) { - var numerNode; - var denomNode; - - var numerBody = body.slice(0, overIndex); - var denomBody = body.slice(overIndex + 1); - - if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { - numerNode = numerBody[0]; - } else { - numerNode = new ParseNode("ordgroup", numerBody, this.mode); - } - - if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { - denomNode = denomBody[0]; - } else { - denomNode = new ParseNode("ordgroup", denomBody, this.mode); - } - - var value = this.callFunction( - funcName, [numerNode, denomNode], null); - return [new ParseNode(value.type, value, this.mode)]; - } else { - return body; - } -}; - -// The greediness of a superscript or subscript -var SUPSUB_GREEDINESS = 1; - -/** - * Handle a subscript or superscript with nice errors. - */ -Parser.prototype.handleSupSubscript = function(name) { - var symbolToken = this.nextToken; - var symbol = symbolToken.text; - this.consume(); - var group = this.parseGroup(); - - if (!group) { - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - return this.handleUnsupportedCmd(); - } else { - throw new ParseError( - "Expected group after '" + symbol + "'", - symbolToken - ); - } - } else if (group.isFunction) { - // ^ and _ have a greediness, so handle interactions with functions' - // greediness - var funcGreediness = functions[group.result].greediness; - if (funcGreediness > SUPSUB_GREEDINESS) { - return this.parseFunction(group); - } else { - throw new ParseError( - "Got function '" + group.result + "' with no arguments " + - "as " + name, symbolToken); - } - } else { - return group.result; - } -}; - -/** - * Converts the textual input of an unsupported command into a text node - * contained within a color node whose color is determined by errorColor - */ -Parser.prototype.handleUnsupportedCmd = function() { - var text = this.nextToken.text; - var textordArray = []; - - for (var i = 0; i < text.length; i++) { - textordArray.push(new ParseNode("textord", text[i], "text")); - } - - var textNode = new ParseNode( - "text", - { - body: textordArray, - type: "text", - }, - this.mode); - - var colorNode = new ParseNode( - "color", - { - color: this.settings.errorColor, - value: [textNode], - type: "color", - }, - this.mode); - - this.consume(); - return colorNode; -}; - -/** - * Parses a group with optional super/subscripts. - * - * @return {?ParseNode} - */ -Parser.prototype.parseAtom = function() { - // The body of an atom is an implicit group, so that things like - // \left(x\right)^2 work correctly. - var base = this.parseImplicitGroup(); - - // In text mode, we don't have superscripts or subscripts - if (this.mode === "text") { - return base; - } - - // Note that base may be empty (i.e. null) at this point. - - var superscript; - var subscript; - while (true) { - // Lex the first token - var lex = this.nextToken; - - if (lex.text === "\\limits" || lex.text === "\\nolimits") { - // We got a limit control - if (!base || base.type !== "op") { - throw new ParseError( - "Limit controls must follow a math operator", - lex); - } else { - var limits = lex.text === "\\limits"; - base.value.limits = limits; - base.value.alwaysHandleSupSub = true; - } - this.consume(); - } else if (lex.text === "^") { - // We got a superscript start - if (superscript) { - throw new ParseError("Double superscript", lex); - } - superscript = this.handleSupSubscript("superscript"); - } else if (lex.text === "_") { - // We got a subscript start - if (subscript) { - throw new ParseError("Double subscript", lex); - } - subscript = this.handleSupSubscript("subscript"); - } else if (lex.text === "'") { - // We got a prime - var prime = new ParseNode("textord", "\\prime", this.mode); - - // Many primes can be grouped together, so we handle this here - var primes = [prime]; - this.consume(); - // Keep lexing tokens until we get something that's not a prime - while (this.nextToken.text === "'") { - // For each one, add another prime to the list - primes.push(prime); + if (consume !== false) { this.consume(); } - // Put them into an ordgroup as the superscript - superscript = new ParseNode("ordgroup", primes, this.mode); - } else { - // If it wasn't ^, _, or ', stop parsing super/subscripts - break; } - } - if (superscript || subscript) { - // If we got either a superscript or subscript, create a supsub - return new ParseNode("supsub", { - base: base, - sup: superscript, - sub: subscript, - }, this.mode); - } else { - // Otherwise return the original body - return base; - } -}; + /** + * Considers the current look ahead token as consumed, + * and fetches the one after that as the new look ahead. + */ -// A list of the size-changing functions, for use in parseImplicitGroup -var sizeFuncs = [ - "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", - "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge", -]; - -// A list of the style-changing functions, for use in parseImplicitGroup -var styleFuncs = [ - "\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle", -]; - -/** - * Parses an implicit group, which is a group that starts at the end of a - * specified, and ends right before a higher explicit group ends, or at EOL. It - * is used for functions that appear to affect the current style, like \Large or - * \textrm, where instead of keeping a style we just pretend that there is an - * implicit grouping after it until the end of the group. E.g. - * small text {\Large large text} small text again - * It is also used for \left and \right to get the correct grouping. - * - * @return {?ParseNode} - */ -Parser.prototype.parseImplicitGroup = function() { - var start = this.parseSymbol(); - - if (start == null) { - // If we didn't get anything we handle, fall back to parseFunction - return this.parseFunction(); - } - - var func = start.result; - var body; - - if (func === "\\left") { - // If we see a left: - // Parse the entire left function (including the delimiter) - var left = this.parseFunction(start); - // Parse out the implicit body - body = this.parseExpression(false); - // Check the next token - this.expect("\\right", false); - var right = this.parseFunction(); - return new ParseNode("leftright", { - body: body, - left: left.value.value, - right: right.value.value, - }, this.mode); - } else if (func === "\\begin") { - // begin...end is similar to left...right - var begin = this.parseFunction(start); - var envName = begin.value.name; - if (!environments.hasOwnProperty(envName)) { - throw new ParseError( - "No such environment: " + envName, begin.value.nameGroup); + }, { + key: "consume", + value: function consume() { + this.nextToken = this.gullet.expandNextToken(); } - // Build the environment object. Arguments and other information will - // be made available to the begin and end methods using properties. - var env = environments[envName]; - var args = this.parseArguments("\\begin{" + envName + "}", env); - var context = { - mode: this.mode, - envName: envName, - parser: this, - positions: args.pop(), - }; - var result = env.handler(context, args); - this.expect("\\end", false); - var endNameToken = this.nextToken; - var end = this.parseFunction(); - if (end.value.name !== envName) { - throw new ParseError( - "Mismatch: \\begin{" + envName + "} matched " + - "by \\end{" + end.value.name + "}", - endNameToken); + + /** + * Switches between "text" and "math" modes. + */ + + }, { + key: "switchMode", + value: function switchMode(newMode) { + this.mode = newMode; } - result.position = end.position; - return result; - } else if (utils.contains(sizeFuncs, func)) { - // If we see a sizing function, parse out the implict body - body = this.parseExpression(false); - return new ParseNode("sizing", { - // Figure out what size to use based on the list of functions above - size: "size" + (utils.indexOf(sizeFuncs, func) + 1), - value: body, - }, this.mode); - } else if (utils.contains(styleFuncs, func)) { - // If we see a styling function, parse out the implict body - body = this.parseExpression(true); - return new ParseNode("styling", { - // Figure out what style to use by pulling out the style from - // the function name - style: func.slice(1, func.length - 5), - value: body, - }, this.mode); - } else { - // Defer to parseFunction if it's not a function we handle - return this.parseFunction(start); - } -}; -/** - * Parses an entire function, including its base and all of its arguments. - * The base might either have been parsed already, in which case - * it is provided as an argument, or it's the next group in the input. - * - * @param {ParseFuncOrArgument=} baseGroup optional as described above - * @return {?ParseNode} - */ -Parser.prototype.parseFunction = function(baseGroup) { - if (!baseGroup) { - baseGroup = this.parseGroup(); - } + /** + * Main parsing function, which parses an entire input. + * + * @return {Array.} + */ - if (baseGroup) { - if (baseGroup.isFunction) { - var func = baseGroup.result; - var funcData = functions[func]; - if (this.mode === "text" && !funcData.allowedInText) { - throw new ParseError( - "Can't use function '" + func + "' in text mode", - baseGroup.token); + }, { + key: "parse", + value: function parse() { + // Try to parse the input + this.mode = "math"; + this.consume(); + var parse = this.parseInput(); + return parse; + } + + /** + * Parses an entire input tree. + */ + + }, { + key: "parseInput", + value: function parseInput() { + // Parse an expression + var expression = this.parseExpression(false); + // If we succeeded, make sure there's an EOF at the end + this.expect("EOF", false); + return expression; + } + }, { + key: "parseExpression", + + + /** + * Parses an "expression", which is a list of atoms. + * + * @param {boolean} breakOnInfix Should the parsing stop when we hit infix + * nodes? This happens when functions have higher precendence + * than infix nodes in implicit parses. + * + * @param {?string} breakOnTokenText The text of the token that the expression + * should end with, or `null` if something else should end the + * expression. + * + * @return {Array} + */ + value: function parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; + // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + var lex = this.nextToken; + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + if (breakOnInfix && _functions2.default[lex.text] && _functions2.default[lex.text].infix) { + break; + } + var atom = this.parseAtom(breakOnTokenText); + if (!atom) { + if (!this.settings.throwOnError && lex.text[0] === "\\") { + var errorNode = this.handleUnsupportedCmd(); + body.push(errorNode); + continue; + } + + break; + } + body.push(atom); + } + return this.handleInfixNodes(body); + } + + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + * + * @param {Array} body + * @return {Array} + */ + + }, { + key: "handleInfixNodes", + value: function handleInfixNodes(body) { + var overIndex = -1; + var funcName = void 0; + + for (var i = 0; i < body.length; i++) { + var node = body[i]; + if (node.type === "infix") { + if (overIndex !== -1) { + throw new _ParseError2.default("only one infix operator per group", node.value.token); + } + overIndex = i; + funcName = node.value.replaceWith; + } } - var args = this.parseArguments(func, funcData); - var token = baseGroup.token; - var result = this.callFunction(func, args, args.pop(), token); - return new ParseNode(result.type, result, this.mode); - } else { - return baseGroup.result; - } - } else { - return null; - } -}; + if (overIndex !== -1) { + var numerNode = void 0; + var denomNode = void 0; -/** - * Call a function handler with a suitable context and arguments. - */ -Parser.prototype.callFunction = function(name, args, positions, token) { - var context = { - funcName: name, - parser: this, - positions: positions, - token: token, - }; - return functions[name].handler(context, args); -}; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); -/** - * Parses the arguments of a function or environment - * - * @param {string} func "\name" or "\begin{name}" - * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData - * @return the array of arguments, with the list of positions as last element - */ -Parser.prototype.parseArguments = function(func, funcData) { - var totalArgs = funcData.numArgs + funcData.numOptionalArgs; - if (totalArgs === 0) { - return [[this.pos]]; - } - - var baseGreediness = funcData.greediness; - var positions = [this.pos]; - var args = []; - - for (var i = 0; i < totalArgs; i++) { - var nextToken = this.nextToken; - var argType = funcData.argTypes && funcData.argTypes[i]; - var arg; - if (i < funcData.numOptionalArgs) { - if (argType) { - arg = this.parseGroupOfType(argType, true); - } else { - arg = this.parseGroup(true); - } - if (!arg) { - args.push(null); - positions.push(this.pos); - continue; - } - } else { - if (argType) { - arg = this.parseGroupOfType(argType); - } else { - arg = this.parseGroup(); - } - if (!arg) { - if (!this.settings.throwOnError && - this.nextToken.text[0] === "\\") { - arg = new ParseFuncOrArgument( - this.handleUnsupportedCmd(this.nextToken.text), - false); + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; } else { - throw new ParseError( - "Expected group after '" + func + "'", nextToken); + numerNode = new _ParseNode2.default("ordgroup", numerBody, this.mode); + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = new _ParseNode2.default("ordgroup", denomBody, this.mode); + } + + var value = this.callFunction(funcName, [numerNode, denomNode], []); + return [new _ParseNode2.default(value.type, value, this.mode)]; + } else { + return body; + } + } + + // The greediness of a superscript or subscript + + }, { + key: "handleSupSubscript", + + + /** + * Handle a subscript or superscript with nice errors. + * @param {string} name For error reporting. + * @return {ParsedNode} + */ + value: function handleSupSubscript(name) { + var symbolToken = this.nextToken; + var symbol = symbolToken.text; + this.consume(); + this.consumeSpaces(); // ignore spaces before sup/subscript argument + var group = this.parseGroup(); + + if (!group) { + if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { + return this.handleUnsupportedCmd(); + } else { + throw new _ParseError2.default("Expected group after '" + symbol + "'", symbolToken); + } + } + + var arg = assertFuncOrArg(group); + if (arg.type === "fn") { + // ^ and _ have a greediness, so handle interactions with functions' + // greediness + var funcGreediness = _functions2.default[group.result].greediness; + if (funcGreediness > Parser.SUPSUB_GREEDINESS) { + return this.parseGivenFunction(group); + } else { + throw new _ParseError2.default("Got function '" + group.result + "' with no arguments " + "as " + name, symbolToken); + } + } else { + return group.result; + } + } + + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + + }, { + key: "handleUnsupportedCmd", + value: function handleUnsupportedCmd() { + var text = this.nextToken.text; + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push(new _ParseNode2.default("textord", text[i], "text")); + } + + var textNode = new _ParseNode2.default("text", { + body: textordArray, + type: "text" + }, this.mode); + + var colorNode = new _ParseNode2.default("color", { + color: this.settings.errorColor, + value: [textNode], + type: "color" + }, this.mode); + + this.consume(); + return colorNode; + } + + /** + * Parses a group with optional super/subscripts. + * + * @param {"]" | "}"} breakOnTokenText - character to stop parsing the group on. + * @return {?ParseNode} + */ + + }, { + key: "parseAtom", + value: function parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseImplicitGroup(breakOnTokenText); + + // In text mode, we don't have superscripts or subscripts + if (this.mode === "text") { + return base; + } + + // Note that base may be empty (i.e. null) at this point. + + var superscript = void 0; + var subscript = void 0; + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); + + // Lex the first token + var lex = this.nextToken; + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (!base || base.type !== "op") { + throw new _ParseError2.default("Limit controls must follow a math operator", lex); + } else { + var limits = lex.text === "\\limits"; + base.value.limits = limits; + base.value.alwaysHandleSupSub = true; + } + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new _ParseError2.default("Double superscript", lex); + } + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new _ParseError2.default("Double subscript", lex); + } + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new _ParseError2.default("Double superscript", lex); + } + var prime = new _ParseNode2.default("textord", "\\prime", this.mode); + + // Many primes can be grouped together, so we handle this here + var primes = [prime]; + this.consume(); + // Keep lexing tokens until we get something that's not a prime + while (this.nextToken.text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } + // If there's a superscript following the primes, combine that + // superscript in with the primes. + if (this.nextToken.text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } + // Put everything into an ordgroup as the superscript + superscript = new _ParseNode2.default("ordgroup", primes, this.mode); + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return new _ParseNode2.default("supsub", { + base: base, + sup: superscript, + sub: subscript + }, this.mode); + } else { + // Otherwise return the original body + return base; + } + } + + // A list of the size-changing functions, for use in parseImplicitGroup + + + // A list of the style-changing functions, for use in parseImplicitGroup + + + // Old font functions + + }, { + key: "parseImplicitGroup", + + + /** + * Parses an implicit group, which is a group that starts at the end of a + * specified, and ends right before a higher explicit group ends, or at EOL. It + * is used for functions that appear to affect the current style, like \Large or + * \textrm, where instead of keeping a style we just pretend that there is an + * implicit grouping after it until the end of the group. E.g. + * small text {\Large large text} small text again + * It is also used for \left and \right to get the correct grouping. + * + * @param {"]" | "}"} breakOnTokenText - character to stop parsing the group on. + * @return {?ParseNode} + */ + value: function parseImplicitGroup(breakOnTokenText) { + var start = this.parseSymbol(); + + if (start == null) { + // If we didn't get anything we handle, fall back to parseFunction + return this.parseFunction(); + } + + var func = start.result; + + if (func === "\\left") { + // If we see a left: + // Parse the entire left function (including the delimiter) + var left = this.parseGivenFunction(start); + // Parse out the implicit body + ++this.leftrightDepth; + var body = this.parseExpression(false); + --this.leftrightDepth; + // Check the next token + this.expect("\\right", false); + var right = this.parseFunction(); + return new _ParseNode2.default("leftright", { + body: body, + left: left.value.value, + right: right.value.value + }, this.mode); + } else if (func === "\\begin") { + // begin...end is similar to left...right + var begin = this.parseGivenFunction(start); + var envName = begin.value.name; + if (!_environments2.default.has(envName)) { + throw new _ParseError2.default("No such environment: " + envName, begin.value.nameGroup); + } + // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + var env = _environments2.default.get(envName); + + var _parseArguments = this.parseArguments("\\begin{" + envName + "}", env), + args = _parseArguments.args, + optArgs = _parseArguments.optArgs; + + var context = { + mode: this.mode, + envName: envName, + parser: this + }; + var result = env.handler(context, args, optArgs); + this.expect("\\end", false); + var endNameToken = this.nextToken; + var end = this.parseFunction(); + if (end.value.name !== envName) { + throw new _ParseError2.default("Mismatch: \\begin{" + envName + "} matched " + "by \\end{" + end.value.name + "}", endNameToken); + } + result.position = end.position; + return result; + } else if (_utils2.default.contains(Parser.sizeFuncs, func)) { + // If we see a sizing function, parse out the implicit body + this.consumeSpaces(); + var _body = this.parseExpression(false, breakOnTokenText); + return new _ParseNode2.default("sizing", { + // Figure out what size to use based on the list of functions above + size: _utils2.default.indexOf(Parser.sizeFuncs, func) + 1, + value: _body + }, this.mode); + } else if (_utils2.default.contains(Parser.styleFuncs, func)) { + // If we see a styling function, parse out the implicit body + this.consumeSpaces(); + var _body2 = this.parseExpression(true, breakOnTokenText); + return new _ParseNode2.default("styling", { + // Figure out what style to use by pulling out the style from + // the function name + style: func.slice(1, func.length - 5), + value: _body2 + }, this.mode); + } else if (func in Parser.oldFontFuncs) { + var style = Parser.oldFontFuncs[func]; + // If we see an old font function, parse out the implicit body + this.consumeSpaces(); + var _body3 = this.parseExpression(true, breakOnTokenText); + if (style.slice(0, 4) === 'text') { + return new _ParseNode2.default("text", { + style: style, + body: new _ParseNode2.default("ordgroup", _body3, this.mode) + }, this.mode); + } else { + return new _ParseNode2.default("font", { + font: style, + body: new _ParseNode2.default("ordgroup", _body3, this.mode) + }, this.mode); + } + } else if (func === "\\color") { + // If we see a styling function, parse out the implicit body + var color = this.parseColorGroup(false); + if (!color) { + throw new _ParseError2.default("\\color not followed by color"); + } + var _body4 = this.parseExpression(true, breakOnTokenText); + return new _ParseNode2.default("color", { + type: "color", + color: color.result.value, + value: _body4 + }, this.mode); + } else if (func === "$") { + if (this.mode === "math") { + throw new _ParseError2.default("$ within math mode"); + } + this.consume(); + var outerMode = this.mode; + this.switchMode("math"); + var _body5 = this.parseExpression(false, "$"); + this.expect("$", true); + this.switchMode(outerMode); + return new _ParseNode2.default("styling", { + style: "text", + value: _body5 + }, "math"); + } else { + // Defer to parseGivenFunction if it's not a function we handle + return this.parseGivenFunction(start); + } + } + + /** + * Parses an entire function, including its base and all of its arguments. + * It also handles the case where the parsed node is not a function. + * + * @return {?ParseNode} + */ + + }, { + key: "parseFunction", + value: function parseFunction() { + var baseGroup = this.parseGroup(); + return baseGroup ? this.parseGivenFunction(baseGroup) : null; + } + + /** + * Same as parseFunction(), except that the base is provided, guaranteeing a + * non-nullable result. + * + * @param {ParsedFuncOrArgOrDollar} baseGroup + * @return {ParseNode} + */ + + }, { + key: "parseGivenFunction", + value: function parseGivenFunction(baseGroup) { + baseGroup = assertFuncOrArg(baseGroup); + if (baseGroup.type === "fn") { + var func = baseGroup.result; + var funcData = _functions2.default[func]; + if (this.mode === "text" && !funcData.allowedInText) { + throw new _ParseError2.default("Can't use function '" + func + "' in text mode", baseGroup.token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new _ParseError2.default("Can't use function '" + func + "' in math mode", baseGroup.token); + } + + var _parseArguments2 = this.parseArguments(func, funcData), + args = _parseArguments2.args, + optArgs = _parseArguments2.optArgs; + + var token = baseGroup.token; + var result = this.callFunction(func, args, optArgs, token); + return new _ParseNode2.default(result.type, result, this.mode); + } else { + return baseGroup.result; + } + } + + /** + * Call a function handler with a suitable context and arguments. + * @param {string} name + * @param {Array} args + * @param {Array} optArgs + * @param {Token=} token + */ + + }, { + key: "callFunction", + value: function callFunction(name, args, optArgs, token) { + var context = { + funcName: name, + parser: this, + token: token + }; + return _functions2.default[name].handler(context, args, optArgs); + } + + /** + * Parses the arguments of a function or environment + * + * @param {string} func "\name" or "\begin{name}" + * @param {{ + * numArgs: number, + * numOptionalArgs: (number|undefined), + * }} funcData + * @return {{ + * args: Array, + * optArgs: Array, + * }} + */ + + }, { + key: "parseArguments", + value: function parseArguments(func, funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + if (totalArgs === 0) { + return { args: [], optArgs: [] }; + } + + var baseGreediness = funcData.greediness; + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; + // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + if (i > 0 && !isOptional) { + this.consumeSpaces(); + } + // Also consume leading spaces in math mode, as parseSymbol + // won't know what to do with them. This can only happen with + // macros, e.g. \frac\foo\foo where \foo expands to a space symbol. + // In LaTeX, the \foo's get treated as (blank) arguments). + // In KaTeX, for now, both spaces will get consumed. + // TODO(edemaine) + if (i === 0 && !isOptional && this.mode === "math") { + this.consumeSpaces(); + } + var nextToken = this.nextToken; + var arg = argType ? this.parseGroupOfType(argType, isOptional) : this.parseGroup(isOptional); + if (!arg) { + if (isOptional) { + optArgs.push(null); + continue; + } + if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { + arg = newArgument(this.handleUnsupportedCmd(), nextToken); + } else { + throw new _ParseError2.default("Expected group after '" + func + "'", nextToken); + } + } + var argNode = void 0; + arg = assertFuncOrArg(arg); + if (arg.type === "fn") { + var argGreediness = _functions2.default[arg.result].greediness; + if (argGreediness > baseGreediness) { + argNode = this.parseGivenFunction(arg); + } else { + throw new _ParseError2.default("Got function '" + arg.result + "' as " + "argument to '" + func + "'", nextToken); + } + } else { + argNode = arg.result; + } + (isOptional ? optArgs : args).push(argNode); + } + + return { args: args, optArgs: optArgs }; + } + + /** + * Parses a group when the mode is changing. + * + * @return {?ParsedFuncOrArgOrDollar} + */ + + }, { + key: "parseGroupOfType", + value: function parseGroupOfType(innerMode, optional) { + var outerMode = this.mode; + // Handle `original` argTypes + if (innerMode === "original") { + innerMode = outerMode; + } + + if (innerMode === "color") { + return this.parseColorGroup(optional); + } + if (innerMode === "size") { + return this.parseSizeGroup(optional); + } + if (innerMode === "url") { + return this.parseUrlGroup(optional); + } + + // By the time we get here, innerMode is one of "text" or "math". + // We switch the mode of the parser, recurse, then restore the old mode. + this.switchMode(innerMode); + var res = this.parseGroup(optional); + this.switchMode(outerMode); + return res; + } + }, { + key: "consumeSpaces", + value: function consumeSpaces() { + while (this.nextToken.text === " ") { + this.consume(); + } + } + + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + * + * @param {string} modeName Used to describe the mode in error messages + * @param {boolean=} optional Whether the group is optional or required + * @return {?Token} + */ + + }, { + key: "parseStringGroup", + value: function parseStringGroup(modeName, optional) { + if (optional && this.nextToken.text !== "[") { + return null; + } + var outerMode = this.mode; + this.mode = "text"; + this.expect(optional ? "[" : "{"); + var str = ""; + var firstToken = this.nextToken; + var lastToken = firstToken; + while (this.nextToken.text !== (optional ? "]" : "}")) { + if (this.nextToken.text === "EOF") { + throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str)); + } + lastToken = this.nextToken; + str += lastToken.text; + this.consume(); + } + this.mode = outerMode; + this.expect(optional ? "]" : "}"); + return firstToken.range(lastToken, str); + } + + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information, possibly + * with nested braces. + * + * @param {string} modeName Used to describe the mode in error messages + * @param {boolean=} optional Whether the group is optional or required + * @return {?Token} + */ + + }, { + key: "parseStringGroupWithBalancedBraces", + value: function parseStringGroupWithBalancedBraces(modeName, optional) { + if (optional && this.nextToken.text !== "[") { + return null; + } + var outerMode = this.mode; + this.mode = "text"; + this.expect(optional ? "[" : "{"); + var str = ""; + var nest = 0; + var firstToken = this.nextToken; + var lastToken = firstToken; + while (nest > 0 || this.nextToken.text !== (optional ? "]" : "}")) { + if (this.nextToken.text === "EOF") { + throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str)); + } + lastToken = this.nextToken; + str += lastToken.text; + if (lastToken.text === "{") { + nest += 1; + } else if (lastToken.text === "}") { + if (nest <= 0) { + throw new _ParseError2.default("Unbalanced brace of input in " + modeName, firstToken.range(this.nextToken, str)); + } else { + nest -= 1; + } + } + this.consume(); + } + this.mode = outerMode; + this.expect(optional ? "]" : "}"); + return firstToken.range(lastToken, str); + } + + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + * + * @param {RegExp} regex + * @param {string} modeName Used to describe the mode in error messages + * @return {Token} + */ + + }, { + key: "parseRegexGroup", + value: function parseRegexGroup(regex, modeName) { + var outerMode = this.mode; + this.mode = "text"; + var firstToken = this.nextToken; + var lastToken = firstToken; + var str = ""; + while (this.nextToken.text !== "EOF" && regex.test(str + this.nextToken.text)) { + lastToken = this.nextToken; + str += lastToken.text; + this.consume(); + } + if (str === "") { + throw new _ParseError2.default("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + this.mode = outerMode; + return firstToken.range(lastToken, str); + } + + /** + * Parses a color description. + */ + + }, { + key: "parseColorGroup", + value: function parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + if (!res) { + return null; + } + var match = /^(#[a-f0-9]{3}|#[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + if (!match) { + throw new _ParseError2.default("Invalid color: '" + res.text + "'", res); + } + return newArgument(new _ParseNode2.default("color", match[0], this.mode), res); + } + + /** + * Parses a url string. + */ + + }, { + key: "parseUrlGroup", + value: function parseUrlGroup(optional) { + var res = this.parseStringGroupWithBalancedBraces("url", optional); + if (!res) { + return null; + } + var raw = res.text; + // hyperref package allows backslashes alone in href, but doesn't generate + // valid links in such cases; we interpret this as "undefiend" behaviour, + // and keep them as-is. Some browser will replace backslashes with + // forward slashes. + var url = raw.replace(/\\([#$%&~_^{}])/g, '$1'); + return newArgument(new _ParseNode2.default("url", url, this.mode), res); + } + + /** + * Parses a size specification, consisting of magnitude and unit. + */ + + }, { + key: "parseSizeGroup", + value: function parseSizeGroup(optional) { + var res = void 0; + if (!optional && this.nextToken.text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + if (!res) { + return null; + } + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + if (!match) { + throw new _ParseError2.default("Invalid size: '" + res.text + "'", res); + } + var data = { + number: +(match[1] + match[2]), // sign + magnitude, cast to number + unit: match[3] + }; + if (!(0, _units.validUnit)(data)) { + throw new _ParseError2.default("Invalid unit: '" + data.unit + "'", res); + } + return newArgument(new _ParseNode2.default("size", data, this.mode), res); + } + + /** + * If the argument is false or absent, this parses an ordinary group, + * which is either a single nucleus (like "x") or an expression + * in braces (like "{x+y}"). + * If the argument is true, it parses either a bracket-delimited expression + * (like "[x+y]") or returns null to indicate the absence of a + * bracket-enclosed group. + * + * @param {boolean=} optional Whether the group is optional or required + * @return {?ParsedFuncOrArgOrDollar} + */ + + }, { + key: "parseGroup", + value: function parseGroup(optional) { + var firstToken = this.nextToken; + // Try to parse an open brace + if (this.nextToken.text === (optional ? "[" : "{")) { + // If we get a brace, parse an expression + this.consume(); + var expression = this.parseExpression(false, optional ? "]" : "}"); + var lastToken = this.nextToken; + // Make sure we get a close brace + this.expect(optional ? "]" : "}"); + if (this.mode === "text") { + this.formLigatures(expression); + } + return newArgument(new _ParseNode2.default("ordgroup", expression, this.mode, firstToken, lastToken), firstToken.range(lastToken, firstToken.text)); + } else { + // Otherwise, just return a nucleus, or nothing for an optional group + return optional ? null : this.parseSymbol(); + } + } + + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * + * @param {Array.} group the nodes of this group, + * list will be moified in place + */ + + }, { + key: "formLigatures", + value: function formLigatures(group) { + var n = group.length - 1; + for (var i = 0; i < n; ++i) { + var a = group[i]; + var v = a.value; + if (v === "-" && group[i + 1].value === "-") { + if (i + 1 < n && group[i + 2].value === "-") { + group.splice(i, 3, new _ParseNode2.default("textord", "---", "text", a, group[i + 2])); + n -= 2; + } else { + group.splice(i, 2, new _ParseNode2.default("textord", "--", "text", a, group[i + 1])); + n -= 1; + } + } + if ((v === "'" || v === "`") && group[i + 1].value === v) { + group.splice(i, 2, new _ParseNode2.default("textord", v + v, "text", a, group[i + 1])); + n -= 1; } } } - var argNode; - if (arg.isFunction) { - var argGreediness = - functions[arg.result].greediness; - if (argGreediness > baseGreediness) { - argNode = this.parseFunction(arg); + + /** + * Parse a single symbol out of the string. Here, we handle both the functions + * we have defined, as well as the single character symbols + * + * @return {?ParsedFuncOrArgOrDollar} + */ + + }, { + key: "parseSymbol", + value: function parseSymbol() { + var nucleus = this.nextToken; + + if (_functions2.default[nucleus.text]) { + this.consume(); + // If there exists a function with this name, we return the function and + // say that it is a function. + return newFunction(nucleus); + } else if (_symbols2.default[this.mode][nucleus.text]) { + this.consume(); + // Otherwise if this is a no-argument function, find the type it + // corresponds to in the symbols map + return newArgument(new _ParseNode2.default(_symbols2.default[this.mode][nucleus.text].group, nucleus.text, this.mode, nucleus), nucleus); + } else if (this.mode === "text" && _unicodeRegexes.cjkRegex.test(nucleus.text)) { + this.consume(); + return newArgument(new _ParseNode2.default("textord", nucleus.text, this.mode, nucleus), nucleus); + } else if (nucleus.text === "$") { + return newDollar(nucleus); + } else if (/^\\verb[^a-zA-Z]/.test(nucleus.text)) { + this.consume(); + var arg = nucleus.text.slice(5); + var star = arg.charAt(0) === "*"; + if (star) { + arg = arg.slice(1); + } + // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new _ParseError2.default("\\verb assertion failed --\n please report what input caused this bug"); + } + arg = arg.slice(1, -1); // remove first and last char + return newArgument(new _ParseNode2.default("verb", { + body: arg, + star: star + }, "text"), nucleus); } else { - throw new ParseError( - "Got function '" + arg.result + "' as " + - "argument to '" + func + "'", nextToken); - } - } else { - argNode = arg.result; - } - args.push(argNode); - positions.push(this.pos); - } - - args.push(positions); - - return args; -}; - - -/** - * Parses a group when the mode is changing. - * - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseGroupOfType = function(innerMode, optional) { - var outerMode = this.mode; - // Handle `original` argTypes - if (innerMode === "original") { - innerMode = outerMode; - } - - if (innerMode === "color") { - return this.parseColorGroup(optional); - } - if (innerMode === "size") { - return this.parseSizeGroup(optional); - } - - this.switchMode(innerMode); - if (innerMode === "text") { - // text mode is special because it should ignore the whitespace before - // it - while (this.nextToken.text === " ") { - this.consume(); - } - } - // By the time we get here, innerMode is one of "text" or "math". - // We switch the mode of the parser, recurse, then restore the old mode. - var res = this.parseGroup(optional); - this.switchMode(outerMode); - return res; -}; - -/** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information. - * - * @param {string} modeName Used to describe the mode in error messages - * @param {boolean=} optional Whether the group is optional or required - */ -Parser.prototype.parseStringGroup = function(modeName, optional) { - if (optional && this.nextToken.text !== "[") { - return null; - } - var outerMode = this.mode; - this.mode = "text"; - this.expect(optional ? "[" : "{"); - var str = ""; - var firstToken = this.nextToken; - var lastToken = firstToken; - while (this.nextToken.text !== (optional ? "]" : "}")) { - if (this.nextToken.text === "EOF") { - throw new ParseError( - "Unexpected end of input in " + modeName, - firstToken.range(this.nextToken, str)); - } - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - this.mode = outerMode; - this.expect(optional ? "]" : "}"); - return firstToken.range(lastToken, str); -}; - -/** - * Parses a color description. - */ -Parser.prototype.parseColorGroup = function(optional) { - var res = this.parseStringGroup("color", optional); - if (!res) { - return null; - } - var match = (/^(#[a-z0-9]+|[a-z]+)$/i).exec(res.text); - if (!match) { - throw new ParseError("Invalid color: '" + res.text + "'", res); - } - return new ParseFuncOrArgument( - new ParseNode("color", match[0], this.mode), - false); -}; - -/** - * Parses a size specification, consisting of magnitude and unit. - */ -Parser.prototype.parseSizeGroup = function(optional) { - var res = this.parseStringGroup("size", optional); - if (!res) { - return null; - } - var match = (/(-?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/).exec(res.text); - if (!match) { - throw new ParseError("Invalid size: '" + res.text + "'", res); - } - var data = { - number: +(match[1] + match[2]), // sign + magnitude, cast to number - unit: match[3], - }; - if (data.unit !== "em" && data.unit !== "ex") { - throw new ParseError("Invalid unit: '" + data.unit + "'", res); - } - return new ParseFuncOrArgument( - new ParseNode("color", data, this.mode), - false); -}; - -/** - * If the argument is false or absent, this parses an ordinary group, - * which is either a single nucleus (like "x") or an expression - * in braces (like "{x+y}"). - * If the argument is true, it parses either a bracket-delimited expression - * (like "[x+y]") or returns null to indicate the absence of a - * bracket-enclosed group. - * - * @param {boolean=} optional Whether the group is optional or required - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseGroup = function(optional) { - var firstToken = this.nextToken; - // Try to parse an open brace - if (this.nextToken.text === (optional ? "[" : "{")) { - // If we get a brace, parse an expression - this.consume(); - var expression = this.parseExpression(false, optional ? "]" : null); - var lastToken = this.nextToken; - // Make sure we get a close brace - this.expect(optional ? "]" : "}"); - if (this.mode === "text") { - this.formLigatures(expression); - } - return new ParseFuncOrArgument( - new ParseNode("ordgroup", expression, this.mode, - firstToken, lastToken), - false); - } else { - // Otherwise, just return a nucleus, or nothing for an optional group - return optional ? null : this.parseSymbol(); - } -}; - -/** - * Form ligature-like combinations of characters for text mode. - * This includes inputs like "--", "---", "``" and "''". - * The result will simply replace multiple textord nodes with a single - * character in each value by a single textord node having multiple - * characters in its value. The representation is still ASCII source. - * - * @param {Array.} group the nodes of this group, - * list will be moified in place - */ -Parser.prototype.formLigatures = function(group) { - var i; - var n = group.length - 1; - for (i = 0; i < n; ++i) { - var a = group[i]; - var v = a.value; - if (v === "-" && group[i + 1].value === "-") { - if (i + 1 < n && group[i + 2].value === "-") { - group.splice(i, 3, new ParseNode( - "textord", "---", "text", a, group[i + 2])); - n -= 2; - } else { - group.splice(i, 2, new ParseNode( - "textord", "--", "text", a, group[i + 1])); - n -= 1; + return null; } } - if ((v === "'" || v === "`") && group[i + 1].value === v) { - group.splice(i, 2, new ParseNode( - "textord", v + v, "text", a, group[i + 1])); - n -= 1; - } - } + }]); + return Parser; +}(); + +Parser.endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; +Parser.SUPSUB_GREEDINESS = 1; +Parser.sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +Parser.styleFuncs = ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"]; +Parser.oldFontFuncs = { + "\\rm": "mathrm", + "\\sf": "mathsf", + "\\tt": "mathtt", + "\\bf": "mathbf", + "\\it": "mathit" + //"\\sl": "textsl", + //"\\sc": "textsc", }; +exports.default = Parser; -/** - * Parse a single symbol out of the string. Here, we handle both the functions - * we have defined, as well as the single character symbols - * - * @return {?ParseFuncOrArgument} - */ -Parser.prototype.parseSymbol = function() { - var nucleus = this.nextToken; +},{"./MacroExpander":82,"./ParseError":84,"./ParseNode":85,"./environments":99,"./functions":103,"./symbols":125,"./unicodeRegexes":126,"./units":127,"./utils":128,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],87:[function(require,module,exports){ +"use strict"; - if (functions[nucleus.text]) { - this.consume(); - // If there exists a function with this name, we return the function and - // say that it is a function. - return new ParseFuncOrArgument( - nucleus.text, - true, nucleus); - } else if (symbols[this.mode][nucleus.text]) { - this.consume(); - // Otherwise if this is a no-argument function, find the type it - // corresponds to in the symbols map - return new ParseFuncOrArgument( - new ParseNode(symbols[this.mode][nucleus.text].group, - nucleus.text, this.mode, nucleus), - false, nucleus); - } else if (this.mode === "text" && cjkRegex.test(nucleus.text)) { - this.consume(); - return new ParseFuncOrArgument( - new ParseNode("textord", nucleus.text, this.mode, nucleus), - false, nucleus); - } else { - return null; - } -}; +Object.defineProperty(exports, "__esModule", { + value: true +}); -Parser.prototype.ParseNode = ParseNode; +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); -module.exports = Parser; +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); -},{"./MacroExpander":4,"./ParseError":6,"./environments":16,"./functions":19,"./parseData":21,"./symbols":23,"./unicodeRegexes":24,"./utils":25}],8:[function(require,module,exports){ -/** - * This is a module for storing settings passed into KaTeX. It correctly handles - * default settings. - */ +var _utils = require("./utils"); -/** - * Helper function for getting a default value if the value is undefined - */ -function get(option, defaultValue) { - return option === undefined ? defaultValue : option; -} +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * The main Settings object * * The current options stored are: - * - displayMode: Whether the expression should be typeset by default in - * textstyle or displaystyle (default false) + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. */ -function Settings(options) { +var Settings = function Settings(options) { + (0, _classCallCheck3.default)(this, Settings); + // allow null options options = options || {}; - this.displayMode = get(options.displayMode, false); - this.throwOnError = get(options.throwOnError, true); - this.errorColor = get(options.errorColor, "#cc0000"); + this.displayMode = _utils2.default.deflt(options.displayMode, false); + this.throwOnError = _utils2.default.deflt(options.throwOnError, true); + this.errorColor = _utils2.default.deflt(options.errorColor, "#cc0000"); this.macros = options.macros || {}; -} + this.colorIsTextColor = _utils2.default.deflt(options.colorIsTextColor, false); + this.maxSize = Math.max(0, _utils2.default.deflt(options.maxSize, Infinity)); +}; +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ -module.exports = Settings; +exports.default = Settings; + +},{"./utils":128,"babel-runtime/helpers/classCallCheck":8}],88:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _freeze = require("babel-runtime/core-js/object/freeze"); + +var _freeze2 = _interopRequireDefault(_freeze); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +var SourceLocation = function () { + // End offset, zero-based exclusive. + + // Lexer holding the input string. + function SourceLocation(lexer, start, end) { + (0, _classCallCheck3.default)(this, SourceLocation); + + this.lexer = lexer; + this.start = start; + this.end = end; + (0, _freeze2.default)(this); // Immutable to allow sharing in range(). + } + + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + // Start offset, zero-based inclusive. + + + (0, _createClass3.default)(SourceLocation, null, [{ + key: "range", + value: function range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + } + }]); + return SourceLocation; +}(); + +exports.default = SourceLocation; + +},{"babel-runtime/core-js/object/freeze":7,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],89:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -},{}],9:[function(require,module,exports){ /** * This file contains information and classes for the various kinds of styles * used in TeX. It provides a generic `Style` class, which holds information @@ -1454,68 +3491,97 @@ module.exports = Settings; /** * The main style class. Contains a unique id for the style, a size (which is - * the same for cramped and uncramped version of a style), a cramped flag, and a - * size multiplier, which gives the size difference between a style and - * textstyle. + * the same for cramped and uncramped version of a style), and a cramped flag. */ -function Style(id, size, multiplier, cramped) { - this.id = id; - this.size = size; - this.cramped = cramped; - this.sizeMultiplier = multiplier; -} +var Style = function () { + function Style(id, size, cramped) { + (0, _classCallCheck3.default)(this, Style); -/** - * Get the style of a superscript given a base in the current style. - */ -Style.prototype.sup = function() { - return styles[sup[this.id]]; -}; + this.id = id; + this.size = size; + this.cramped = cramped; + } -/** - * Get the style of a subscript given a base in the current style. - */ -Style.prototype.sub = function() { - return styles[sub[this.id]]; -}; + /** + * Get the style of a superscript given a base in the current style. + */ -/** - * Get the style of a fraction numerator given the fraction in the current - * style. - */ -Style.prototype.fracNum = function() { - return styles[fracNum[this.id]]; -}; -/** - * Get the style of a fraction denominator given the fraction in the current - * style. - */ -Style.prototype.fracDen = function() { - return styles[fracDen[this.id]]; -}; + (0, _createClass3.default)(Style, [{ + key: "sup", + value: function sup() { + return styles[_sup[this.id]]; + } -/** - * Get the cramped version of a style (in particular, cramping a cramped style - * doesn't change the style). - */ -Style.prototype.cramp = function() { - return styles[cramp[this.id]]; -}; + /** + * Get the style of a subscript given a base in the current style. + */ -/** - * HTML class name, like "displaystyle cramped" - */ -Style.prototype.cls = function() { - return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped"); -}; + }, { + key: "sub", + value: function sub() { + return styles[_sub[this.id]]; + } + + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + + }, { + key: "fracNum", + value: function fracNum() { + return styles[_fracNum[this.id]]; + } + + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + + }, { + key: "fracDen", + value: function fracDen() { + return styles[_fracDen[this.id]]; + } + + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + + }, { + key: "cramp", + value: function cramp() { + return styles[_cramp[this.id]]; + } + + /** + * Get a text or display version of this style. + */ + + }, { + key: "text", + value: function text() { + return styles[_text[this.id]]; + } + + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + + }, { + key: "isTight", + value: function isTight() { + return this.size >= 2; + } + }]); + return Style; +}(); + +// Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. -/** - * HTML Reset class name, like "reset-textstyle" - */ -Style.prototype.reset = function() { - return resetNames[this.size]; -}; // IDs of the different styles var D = 0; @@ -1527,111 +3593,191 @@ var Sc = 5; var SS = 6; var SSc = 7; -// String names for the different sizes -var sizeNames = [ - "displaystyle textstyle", - "textstyle", - "scriptstyle", - "scriptscriptstyle", -]; - -// Reset names for the different sizes -var resetNames = [ - "reset-textstyle", - "reset-textstyle", - "reset-scriptstyle", - "reset-scriptscriptstyle", -]; - // Instances of the different styles -var styles = [ - new Style(D, 0, 1.0, false), - new Style(Dc, 0, 1.0, true), - new Style(T, 1, 1.0, false), - new Style(Tc, 1, 1.0, true), - new Style(S, 2, 0.7, false), - new Style(Sc, 2, 0.7, true), - new Style(SS, 3, 0.5, false), - new Style(SSc, 3, 0.5, true), -]; +var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another -var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; -var sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; -var fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; -var fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; -var cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; -// We only export some of the styles. Also, we don't export the `Style` class so -// no more styles can be generated. -module.exports = { +// We only export some of the styles. +exports.default = { DISPLAY: styles[D], TEXT: styles[T], SCRIPT: styles[S], - SCRIPTSCRIPT: styles[SS], + SCRIPTSCRIPT: styles[SS] }; -},{}],10:[function(require,module,exports){ +},{"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],90:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Token = undefined; + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _SourceLocation = require("./SourceLocation"); + +var _SourceLocation2 = _interopRequireDefault(_SourceLocation); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ + + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ +var Token = exports.Token = function () { + function Token(text, // the text of this token + loc) { + (0, _classCallCheck3.default)(this, Token); + + this.text = text; + this.loc = loc; + } + + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + (0, _createClass3.default)(Token, [{ + key: "range", + value: function range(endToken, // last token of the range, inclusive + text) // the text of the newly constructed token + { + return new Token(text, _SourceLocation2.default.range(this, endToken)); + } + }]); + return Token; +}(); + +},{"./SourceLocation":88,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],91:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getIterator2 = require("babel-runtime/core-js/get-iterator"); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _domTree = require("./domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _fontMetrics = require("./fontMetrics"); + +var _fontMetrics2 = _interopRequireDefault(_fontMetrics); + +var _symbols = require("./symbols"); + +var _symbols2 = _interopRequireDefault(_symbols); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _stretchy = require("./stretchy"); + +var _stretchy2 = _interopRequireDefault(_stretchy); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// The following have to be loaded from Main-Italic font, using class mainit +var mainitLetters = ["\\imath", // dotless i +"\\jmath", // dotless j +"\\pounds"]; + +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ + /* eslint no-console:0 */ /** * This module contains general functions that can be used for building * different kinds of domTree nodes in a consistent manner. */ -var domTree = require("./domTree"); -var fontMetrics = require("./fontMetrics"); -var symbols = require("./symbols"); -var utils = require("./utils"); - -var greekCapitals = [ - "\\Gamma", - "\\Delta", - "\\Theta", - "\\Lambda", - "\\Xi", - "\\Pi", - "\\Sigma", - "\\Upsilon", - "\\Phi", - "\\Psi", - "\\Omega", -]; - -// The following have to be loaded from Main-Italic font, using class mainit -var mainitLetters = [ - "\u0131", // dotless i, \imath - "\u0237", // dotless j, \jmath - "\u00a3", // \pounds -]; +var lookupSymbol = function lookupSymbol(value, +// TODO(#963): Use a union type for this. +fontFamily, mode) { + // Replace the value with its replaced value from symbol.js + if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { + value = _symbols2.default[mode][value].replace; + } + return { + value: value, + metrics: _fontMetrics2.default.getCharacterMetrics(value, fontFamily) + }; +}; /** * Makes a symbolNode after translation via the list of symbols in symbols.js. * Correctly pulls out metrics for the character, and optionally takes a list of * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. */ -var makeSymbol = function(value, style, mode, color, classes) { - // Replace the value with its replaced value from symbol.js - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } +var makeSymbol = function makeSymbol(value, fontFamily, mode, options, classes) { + var lookup = lookupSymbol(value, fontFamily, mode); + var metrics = lookup.metrics; + value = lookup.value; - var metrics = fontMetrics.getCharacterMetrics(value, style); - - var symbolNode; + var symbolNode = void 0; if (metrics) { - symbolNode = new domTree.symbolNode( - value, metrics.height, metrics.depth, metrics.italic, metrics.skew, - classes); + var italic = metrics.italic; + if (mode === "text") { + italic = 0; + } + symbolNode = new _domTree2.default.symbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, classes); } else { // TODO(emily): Figure out a good way to only print this in development - typeof console !== "undefined" && console.warn( - "No character metrics for '" + value + "' in style '" + - style + "'"); - symbolNode = new domTree.symbolNode(value, 0, 0, 0, 0, classes); + typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontFamily + "'"); + symbolNode = new _domTree2.default.symbolNode(value, 0, 0, 0, 0, classes); } - if (color) { - symbolNode.style.color = color; + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + var color = options.getColor(); + if (color) { + symbolNode.style.color = color; + } } return symbolNode; @@ -1640,103 +3786,147 @@ var makeSymbol = function(value, style, mode, color, classes) { /** * Makes a symbol in Main-Regular or AMS-Regular. * Used for rel, bin, open, close, inner, and punct. + * + * TODO(#953): Make `options` mandatory and always pass it in. */ -var mathsym = function(value, mode, color, classes) { +var mathsym = function mathsym(value, mode, options) { + var classes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + // Decide what font to render the symbol in by its entry in the symbols // table. // Have a special case for when the value = \ because the \ is used as a // textord in unsupported command errors but cannot be parsed as a regular // text ordinal and is therefore not present as a symbol in the symbols // table for text - if (value === "\\" || symbols[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, color, classes); + if (value === "\\" || _symbols2.default[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); } else { - return makeSymbol( - value, "AMS-Regular", mode, color, classes.concat(["amsrm"])); + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); } }; /** * Makes a symbol in the default font for mathords and textords. */ -var mathDefault = function(value, mode, color, classes, type) { +var mathDefault = function mathDefault(value, mode, options, classes, type) { if (type === "mathord") { - return mathit(value, mode, color, classes); + var fontLookup = mathit(value, mode, options, classes); + return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass])); } else if (type === "textord") { - return makeSymbol( - value, "Main-Regular", mode, color, classes.concat(["mathrm"])); + var font = _symbols2.default[mode][value] && _symbols2.default[mode][value].font; + if (font === "ams") { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } else { + // if (font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes.concat(["mathrm"])); + } } else { throw new Error("unexpected type: " + type + " in mathDefault"); } }; /** - * Makes a symbol in the italic math font. + * Determines which of the two font names (Main-Italic and Math-Italic) and + * corresponding style tags (mainit or mathit) to use for font "mathit", + * depending on the symbol. Use this function instead of fontMap for font + * "mathit". */ -var mathit = function(value, mode, color, classes) { +var mathit = function mathit(value, mode, options, classes) { if (/[0-9]/.test(value.charAt(0)) || - // glyphs for \imath and \jmath do not exist in Math-Italic so we - // need to use Main-Italic instead - utils.contains(mainitLetters, value) || - utils.contains(greekCapitals, value)) { - return makeSymbol( - value, "Main-Italic", mode, color, classes.concat(["mainit"])); + // glyphs for \imath and \jmath do not exist in Math-Italic so we + // need to use Main-Italic instead + _utils2.default.contains(mainitLetters, value)) { + return { + fontName: "Main-Italic", + fontClass: "mainit" + }; } else { - return makeSymbol( - value, "Math-Italic", mode, color, classes.concat(["mathit"])); + return { + fontName: "Math-Italic", + fontClass: "mathit" + }; } }; /** * Makes either a mathord or textord in the correct font and color. */ -var makeOrd = function(group, options, type) { +var makeOrd = function makeOrd(group, options, type) { var mode = group.mode; var value = group.value; - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; - } var classes = ["mord"]; - var color = options.getColor(); var font = options.font; if (font) { - if (font === "mathit" || utils.contains(mainitLetters, value)) { - return mathit(value, mode, color, classes); + var fontLookup = void 0; + if (font === "mathit" || _utils2.default.contains(mainitLetters, value)) { + fontLookup = mathit(value, mode, options, classes); } else { - var fontName = fontMap[font].fontName; - if (fontMetrics.getCharacterMetrics(value, fontName)) { - return makeSymbol( - value, fontName, mode, color, classes.concat([font])); - } else { - return mathDefault(value, mode, color, classes, type); - } + fontLookup = fontMap[font]; + } + if (lookupSymbol(value, fontLookup.fontName, mode).metrics) { + return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass || font])); + } else { + return mathDefault(value, mode, options, classes, type); } } else { - return mathDefault(value, mode, color, classes, type); + return mathDefault(value, mode, options, classes, type); } }; +/** + * Combine as many characters as possible in the given array of characters + * via their tryCombine method. + */ +var tryCombineChars = function tryCombineChars(chars) { + for (var i = 0; i < chars.length - 1; i++) { + if (chars[i].tryCombine(chars[i + 1])) { + chars.splice(i + 1, 1); + i--; + } + } + return chars; +}; + /** * Calculate the height, depth, and maxFontSize of an element based on its * children. */ -var sizeElementFromChildren = function(elem) { +var sizeElementFromChildren = function sizeElementFromChildren(elem) { var height = 0; var depth = 0; var maxFontSize = 0; - if (elem.children) { - for (var i = 0; i < elem.children.length; i++) { - if (elem.children[i].height > height) { - height = elem.children[i].height; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(elem.children), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var child = _step.value; + + if (child.height > height) { + height = child.height; } - if (elem.children[i].depth > depth) { - depth = elem.children[i].depth; + if (child.depth > depth) { + depth = child.depth; } - if (elem.children[i].maxFontSize > maxFontSize) { - maxFontSize = elem.children[i].maxFontSize; + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; } } } @@ -1747,189 +3937,290 @@ var sizeElementFromChildren = function(elem) { }; /** - * Makes a span with the given list of classes, list of children, and color. + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. */ -var makeSpan = function(classes, children, color) { - var span = new domTree.span(classes, children); +var makeSpan = function makeSpan(classes, children, options) { + var span = new _domTree2.default.span(classes, children, options); sizeElementFromChildren(span); - if (color) { - span.style.color = color; - } - return span; }; +var makeLineSpan = function makeLineSpan(className, options) { + // Fill the entire span instead of just a border. That way, the min-height + // value in katex.less will ensure that at least one screen pixel displays. + var line = _stretchy2.default.ruleSpan(className, options); + line.height = options.fontMetrics().defaultRuleThickness; + line.style.height = line.height + "em"; + line.maxFontSize = 1.0; + return line; +}; + +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ +var makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new _domTree2.default.anchor(href, classes, children, options); + + sizeElementFromChildren(anchor); + + return anchor; +}; + +/** + * Prepends the given children to the given span, updating height, depth, and + * maxFontSize. + */ +var prependChildren = function prependChildren(span, children) { + span.children = children.concat(span.children); + + sizeElementFromChildren(span); +}; + /** * Makes a document fragment with the given list of children. */ -var makeFragment = function(children) { - var fragment = new domTree.documentFragment(children); +var makeFragment = function makeFragment(children) { + var fragment = new _domTree2.default.documentFragment(children); sizeElementFromChildren(fragment); return fragment; }; -/** - * Makes an element placed in each of the vlist elements to ensure that each - * element has the same max font size. To do this, we create a zero-width space - * with the correct font size. - */ -var makeFontSizer = function(options, fontSize) { - var fontSizeInner = makeSpan([], [new domTree.symbolNode("\u200b")]); - fontSizeInner.style.fontSize = - (fontSize / options.style.sizeMultiplier) + "em"; +// These are exact object types to catch typos in the names of the optional fields. - var fontSizer = makeSpan( - ["fontsize-ensurer", "reset-" + options.size, "size5"], - [fontSizeInner]); - return fontSizer; +// A list of child or kern nodes to be stacked on top of each other (i.e. the +// first element will be at the bottom, and the last at the top). + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var _children = [oldChildren[0]]; + + // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + var currPos = _depth; + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var _size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + + currPos = currPos + diff; + + _children.push({ type: "kern", size: _size }); + _children.push(oldChildren[i]); + } + + return { children: _children, depth: _depth }; + } + + var depth = void 0; + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = (0, _getIterator3.default)(params.children), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var child = _step2.value; + + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + return { children: params.children, depth: depth }; }; /** * Makes a vertical list by stacking elements and kerns on top of each other. * Allows for many different ways of specifying the positioning method. * - * Arguments: - * - children: A list of child or kern nodes to be stacked on top of each other - * (i.e. the first element will be at the bottom, and the last at - * the top). Element nodes are specified as - * {type: "elem", elem: node} - * while kern nodes are specified as - * {type: "kern", size: size} - * - positionType: The method by which the vlist should be positioned. Valid - * values are: - * - "individualShift": The children list only contains elem - * nodes, and each node contains an extra - * "shift" value of how much it should be - * shifted (note that shifting is always - * moving downwards). positionData is - * ignored. - * - "top": The positionData specifies the topmost point of - * the vlist (note this is expected to be a height, - * so positive values move up) - * - "bottom": The positionData specifies the bottommost point - * of the vlist (note this is expected to be a - * depth, so positive values move down - * - "shift": The vlist will be positioned such that its - * baseline is positionData away from the baseline - * of the first child. Positive values move - * downwards. - * - "firstBaseline": The vlist will be positioned such that - * its baseline is aligned with the - * baseline of the first child. - * positionData is ignored. (this is - * equivalent to "shift" with - * positionData=0) - * - positionData: Data used in different ways depending on positionType - * - options: An Options object - * + * See VListParam documentation above. */ -var makeVList = function(children, positionType, positionData, options) { - var depth; - var currPos; - var i; - if (positionType === "individualShift") { - var oldChildren = children; - children = [oldChildren[0]]; +var makeVList = function makeVList(params, options) { + var _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; - // Add in kerns to the list of children to get each element to be - // shifted to the correct specified shift - depth = -oldChildren[0].shift - oldChildren[0].elem.depth; - currPos = depth; - for (i = 1; i < oldChildren.length; i++) { - var diff = -oldChildren[i].shift - currPos - - oldChildren[i].elem.depth; - var size = diff - - (oldChildren[i - 1].elem.height + - oldChildren[i - 1].elem.depth); + // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. - currPos = currPos + diff; - children.push({type: "kern", size: size}); - children.push(oldChildren[i]); - } - } else if (positionType === "top") { - // We always start at the bottom, so calculate the bottom by adding up - // all the sizes - var bottom = positionData; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - bottom -= children[i].size; - } else { - bottom -= children[i].elem.height + children[i].elem.depth; + var pstrutSize = 0; + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = (0, _getIterator3.default)(children), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var child = _step3.value; + + if (child.type === "elem") { + var _elem = child.elem; + pstrutSize = Math.max(pstrutSize, _elem.maxFontSize, _elem.height); } } - depth = bottom; - } else if (positionType === "bottom") { - depth = -positionData; - } else if (positionType === "shift") { - depth = -children[0].elem.depth - positionData; - } else if (positionType === "firstBaseline") { - depth = -children[0].elem.depth; - } else { - depth = 0; - } - - // Make the fontSizer - var maxFontSize = 0; - for (i = 0; i < children.length; i++) { - if (children[i].type === "elem") { - maxFontSize = Math.max(maxFontSize, children[i].elem.maxFontSize); + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } } } - var fontSizer = makeFontSizer(options, maxFontSize); + + pstrutSize += 2; + var pstrut = makeSpan(["pstrut"], []); + pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets var realChildren = []; - currPos = depth; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - currPos += children[i].size; - } else { - var child = children[i].elem; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; - var shift = -child.depth - currPos; - currPos += child.height + child.depth; + try { + for (var _iterator4 = (0, _getIterator3.default)(children), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var _child = _step4.value; - var childWrap = makeSpan([], [fontSizer, child]); - childWrap.height -= shift; - childWrap.depth += shift; - childWrap.style.top = shift + "em"; + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem2 = _child.elem; - realChildren.push(childWrap); + var childWrap = makeSpan([], [pstrut, _elem2]); + childWrap.style.top = -pstrutSize - currPos - _elem2.depth + "em"; + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem2.height + _elem2.depth; + } + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } + + // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } } } - // Add in an element at the end with no offset to fix the calculation of - // baselines in some browsers (namely IE, sometimes safari) - var baselineFix = makeSpan( - ["baseline-fix"], [fontSizer, new domTree.symbolNode("\u200b")]); - realChildren.push(baselineFix); - var vlist = makeSpan(["vlist"], realChildren); - // Fix the final height and depth, in case there were kerns at the ends - // since the makeSpan calculation won't take that in to account. - vlist.height = Math.max(currPos, vlist.height); - vlist.depth = Math.max(-depth, vlist.depth); - return vlist; + vlist.style.height = maxPos + "em"; + + // A second row is used if necessary to represent the vlist's depth. + var rows = void 0; + if (minPos < 0) { + var depthStrut = makeSpan(["vlist"], []); + depthStrut.style.height = -minPos + "em"; + + // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + var topStrut = makeSpan(["vlist-s"], [new _domTree2.default.symbolNode("\u200B")]); + + rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan(["vlist-r"], [vlist])]; + } + + var vtable = makeSpan(["vlist-t"], rows); + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; }; -// A table of size -> font size for the different sizing functions -var sizingMultiplier = { - size1: 0.5, - size2: 0.7, - size3: 0.8, - size4: 0.9, - size5: 1.0, - size6: 1.2, - size7: 1.44, - size8: 1.73, - size9: 2.07, - size10: 2.49, +// Converts verb group into body string, dealing with \verb* form +var makeVerb = function makeVerb(group, options) { + // TODO(#892): Make ParseNode type-safe and confirm `group.type` to guarantee + // that `group.value.body` is of type string. + var text = group.value.body; + if (group.value.star) { + text = text.replace(/ /g, "\u2423"); // Open Box + } else { + text = text.replace(/ /g, '\xA0'); // No-Break Space + // (so that, in particular, spaces don't coalesce) + } + return text; }; // A map of spacing functions to their attributes, like size and corresponding @@ -1937,32 +4228,32 @@ var sizingMultiplier = { var spacingFunctions = { "\\qquad": { size: "2em", - className: "qquad", + className: "qquad" }, "\\quad": { size: "1em", - className: "quad", + className: "quad" }, "\\enspace": { size: "0.5em", - className: "enspace", + className: "enspace" }, "\\;": { size: "0.277778em", - className: "thickspace", + className: "thickspace" }, "\\:": { size: "0.22222em", - className: "mediumspace", + className: "mediumspace" }, "\\,": { size: "0.16667em", - className: "thinspace", + className: "thinspace" }, "\\!": { size: "-0.16667em", - className: "negativethinspace", - }, + className: "negativethinspace" + } }; /** @@ -1975,11 +4266,15 @@ var fontMap = { // styles "mathbf": { variant: "bold", - fontName: "Main-Bold", + fontName: "Main-Bold" }, "mathrm": { variant: "normal", - fontName: "Main-Regular", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" }, // "mathit" is missing because it requires the use of two fonts: Main-Italic @@ -1989,136 +4284,249 @@ var fontMap = { // families "mathbb": { variant: "double-struck", - fontName: "AMS-Regular", + fontName: "AMS-Regular" }, "mathcal": { variant: "script", - fontName: "Caligraphic-Regular", + fontName: "Caligraphic-Regular" }, "mathfrak": { variant: "fraktur", - fontName: "Fraktur-Regular", + fontName: "Fraktur-Regular" }, "mathscr": { variant: "script", - fontName: "Script-Regular", + fontName: "Script-Regular" }, "mathsf": { variant: "sans-serif", - fontName: "SansSerif-Regular", + fontName: "SansSerif-Regular" }, "mathtt": { variant: "monospace", - fontName: "Typewriter-Regular", - }, + fontName: "Typewriter-Regular" + } }; -module.exports = { +exports.default = { fontMap: fontMap, makeSymbol: makeSymbol, mathsym: mathsym, makeSpan: makeSpan, + makeLineSpan: makeLineSpan, + makeAnchor: makeAnchor, makeFragment: makeFragment, makeVList: makeVList, makeOrd: makeOrd, - sizingMultiplier: sizingMultiplier, - spacingFunctions: spacingFunctions, + makeVerb: makeVerb, + tryCombineChars: tryCombineChars, + prependChildren: prependChildren, + spacingFunctions: spacingFunctions }; -},{"./domTree":15,"./fontMetrics":17,"./symbols":23,"./utils":25}],11:[function(require,module,exports){ -/* eslint no-console:0 */ +},{"./domTree":98,"./fontMetrics":101,"./stretchy":123,"./symbols":125,"./utils":128,"babel-runtime/core-js/get-iterator":3}],92:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.buildGroup = exports.groupTypes = exports.makeNullDelimiter = exports.getTypeOfDomTree = exports.buildExpression = exports.spliceSpaces = undefined; + +var _stringify = require("babel-runtime/core-js/json/stringify"); + +var _stringify2 = _interopRequireDefault(_stringify); + +exports.default = buildHTML; + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _Style = require("./Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _buildCommon = require("./buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _delimiter = require("./delimiter"); + +var _delimiter2 = _interopRequireDefault(_delimiter); + +var _domTree = require("./domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _units = require("./units"); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _stretchy = require("./stretchy"); + +var _stretchy2 = _interopRequireDefault(_stretchy); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /** + * WARNING: New methods on groupTypes should be added to src/functions. + * * This file does the main work of building a domTree structure from a parse * tree. The entry point is the `buildHTML` function, which takes a parse tree. * Then, the buildExpression, buildGroup, and various groupTypes functions are * called, to produce a final HTML tree. */ -var ParseError = require("./ParseError"); -var Style = require("./Style"); +var makeSpan = _buildCommon2.default.makeSpan; -var buildCommon = require("./buildCommon"); -var delimiter = require("./delimiter"); -var domTree = require("./domTree"); -var fontMetrics = require("./fontMetrics"); -var utils = require("./utils"); +var isSpace = function isSpace(node) { + return node instanceof _domTree2.default.span && node.classes[0] === "mspace"; +}; -var makeSpan = buildCommon.makeSpan; +// Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. +var isBin = function isBin(node) { + return node && node.classes[0] === "mbin"; +}; + +var isBinLeftCanceller = function isBinLeftCanceller(node, isRealGroup) { + // TODO: This code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + if (node) { + return _utils2.default.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], node.classes[0]); + } else { + return isRealGroup; + } +}; + +var isBinRightCanceller = function isBinRightCanceller(node, isRealGroup) { + if (node) { + return _utils2.default.contains(["mrel", "mclose", "mpunct"], node.classes[0]); + } else { + return isRealGroup; + } +}; + +/** + * Splice out any spaces from `children` starting at position `i`, and return + * the spliced-out array. Returns null if `children[i]` does not exist or is not + * a space. + */ +var spliceSpaces = exports.spliceSpaces = function spliceSpaces(children, i) { + var j = i; + while (j < children.length && isSpace(children[j])) { + j++; + } + if (j === i) { + return null; + } else { + return children.splice(i, j - i); + } +}; /** * Take a list of nodes, build them in order, and return a list of the built - * nodes. This function handles the `prev` node correctly, and passes the - * previous element from the list as the prev of the next element. + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). */ -var buildExpression = function(expression, options, prev) { +var buildExpression = exports.buildExpression = function buildExpression(expression, options, isRealGroup) { + // Parse expressions into `groups`. var groups = []; for (var i = 0; i < expression.length; i++) { var group = expression[i]; - groups.push(buildGroup(group, options, prev)); - prev = group; + var output = buildGroup(group, options); + if (output instanceof _domTree2.default.documentFragment) { + Array.prototype.push.apply(groups, output.children); + } else { + groups.push(output); + } } + // At this point `groups` consists entirely of `symbolNode`s and `span`s. + + // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom + // spacing (e.g., "add thick space between mord and mrel"). Since CSS + // adjacency rules implement atom spacing, spaces should be invisible to + // CSS. So we splice them out of `groups` and into the atoms themselves. + for (var _i = 0; _i < groups.length; _i++) { + var spaces = spliceSpaces(groups, _i); + if (spaces) { + // Splicing of spaces may have removed all remaining groups. + if (_i < groups.length) { + // If there is a following group, move space within it. + if (groups[_i] instanceof _domTree2.default.symbolNode) { + groups[_i] = makeSpan([].concat(groups[_i].classes), [groups[_i]]); + } + _buildCommon2.default.prependChildren(groups[_i], spaces); + } else { + // Otherwise, put any spaces back at the end of the groups. + Array.prototype.push.apply(groups, spaces); + break; + } + } + } + + // Binary operators change to ordinary symbols in some contexts. + for (var _i2 = 0; _i2 < groups.length; _i2++) { + if (isBin(groups[_i2]) && (isBinLeftCanceller(groups[_i2 - 1], isRealGroup) || isBinRightCanceller(groups[_i2 + 1], isRealGroup))) { + groups[_i2].classes[0] = "mord"; + } + } + + // Process \\not commands within the group. + // TODO(kevinb): Handle multiple \\not commands in a row. + // TODO(kevinb): Handle \\not{abc} correctly. The \\not should appear over + // the 'a' instead of the 'c'. + for (var _i3 = 0; _i3 < groups.length; _i3++) { + if (groups[_i3].value === "\u0338" && _i3 + 1 < groups.length) { + var children = groups.slice(_i3, _i3 + 2); + + children[0].classes = ["mainrm"]; + // \u0338 is a combining glyph so we could reorder the children so + // that it comes after the other glyph. This works correctly on + // most browsers except for Safari. Instead we absolutely position + // the glyph and set its right side to match that of the other + // glyph which is visually equivalent. + children[0].style.position = "absolute"; + children[0].style.right = "0"; + + // Copy the classes from the second glyph to the new container. + // This is so it behaves the same as though there was no \\not. + var classes = groups[_i3 + 1].classes; + var container = makeSpan(classes, children); + + // LaTeX adds a space between ords separated by a \\not. + if (classes.indexOf("mord") !== -1) { + // \glue(\thickmuskip) 2.77771 plus 2.77771 + container.style.paddingLeft = "0.277771em"; + } + + // Ensure that the \u0338 is positioned relative to the container. + container.style.position = "relative"; + groups.splice(_i3, 2, container); + } + } + return groups; }; -// List of types used by getTypeOfGroup, -// see https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types -var groupToType = { - mathord: "mord", - textord: "mord", - bin: "mbin", - rel: "mrel", - text: "mord", - open: "mopen", - close: "mclose", - inner: "minner", - genfrac: "mord", - array: "mord", - spacing: "mord", - punct: "mpunct", - ordgroup: "mord", - op: "mop", - katex: "mord", - overline: "mord", - underline: "mord", - rule: "mord", - leftright: "minner", - sqrt: "mord", - accent: "mord", -}; - -/** - * Gets the final math type of an expression, given its group type. This type is - * used to determine spacing between elements, and affects bin elements by - * causing them to change depending on what types are around them. This type - * must be attached to the outermost node of an element as a CSS class so that - * spacing with its surrounding elements works correctly. - * - * Some elements can be mapped one-to-one from group type to math type, and - * those are listed in the `groupToType` table. - * - * Others (usually elements that wrap around other elements) often have - * recursive definitions, and thus call `getTypeOfGroup` on their inner - * elements. - */ -var getTypeOfGroup = function(group) { - if (group == null) { - // Like when typesetting $^3$ - return groupToType.mathord; - } else if (group.type === "supsub") { - return getTypeOfGroup(group.value.base); - } else if (group.type === "llap" || group.type === "rlap") { - return getTypeOfGroup(group.value); - } else if (group.type === "color") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "sizing") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "styling") { - return getTypeOfGroup(group.value.value); - } else if (group.type === "delimsizing") { - return groupToType[group.value.delimType]; +// Return math atom class (mclass) of a domTree. +var getTypeOfDomTree = exports.getTypeOfDomTree = function getTypeOfDomTree(node) { + if (node instanceof _domTree2.default.documentFragment) { + if (node.children.length) { + return getTypeOfDomTree(node.children[node.children.length - 1]); + } } else { - return groupToType[group.type]; + if (_utils2.default.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", "mpunct", "minner"], node.classes[0])) { + return node.classes[0]; + } } + return null; }; /** @@ -2127,19 +4535,23 @@ var getTypeOfGroup = function(group) { * its inner element should handle the superscripts and subscripts instead of * handling them itself. */ -var shouldHandleSupSub = function(group, options) { - if (!group) { +var shouldHandleSupSub = function shouldHandleSupSub(group, options) { + if (!group.value.base) { return false; - } else if (group.type === "op") { - // Operators handle supsubs differently when they have limits - // (e.g. `\displaystyle\sum_2^3`) - return group.value.limits && - (options.style.size === Style.DISPLAY.size || - group.value.alwaysHandleSupSub); - } else if (group.type === "accent") { - return isCharacterBox(group.value.base); } else { - return null; + var base = group.value.base; + if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + return base.value.limits && (options.style.size === _Style2.default.DISPLAY.size || base.value.alwaysHandleSupSub); + } else if (base.type === "accent") { + return isCharacterBox(base.value.base); + } else if (base.type === "horizBrace") { + var isSup = group.value.sub ? false : true; + return isSup === base.value.isOver; + } else { + return null; + } } }; @@ -2148,7 +4560,7 @@ var shouldHandleSupSub = function(group, options) { * cases, this will just be the group itself, but when ordgroups and colors have * a single element, we want to pull that out. */ -var getBaseElem = function(group) { +var getBaseElem = function getBaseElem(group) { if (!group) { return false; } else if (group.type === "ordgroup") { @@ -2175,1091 +4587,353 @@ var getBaseElem = function(group) { * with a single character in them. To decide if something is a character box, * we find its innermost group, and see if it is a single character. */ -var isCharacterBox = function(group) { +var isCharacterBox = function isCharacterBox(group) { var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters - return baseElem.type === "mathord" || - baseElem.type === "textord" || - baseElem.type === "bin" || - baseElem.type === "rel" || - baseElem.type === "inner" || - baseElem.type === "open" || - baseElem.type === "close" || - baseElem.type === "punct"; + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "bin" || baseElem.type === "rel" || baseElem.type === "inner" || baseElem.type === "open" || baseElem.type === "close" || baseElem.type === "punct"; }; -var makeNullDelimiter = function(options) { - return makeSpan([ - "sizing", "reset-" + options.size, "size5", - options.style.reset(), Style.TEXT.cls(), - "nulldelimiter", - ]); +var makeNullDelimiter = exports.makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan(classes.concat(moreClasses)); }; /** * This is a map of group types to the function used to handle that type. * Simpler types come at the beginning, while complicated types come afterwards. */ -var groupTypes = {}; +var groupTypes = exports.groupTypes = {}; -groupTypes.mathord = function(group, options, prev) { - return buildCommon.makeOrd(group, options, "mathord"); +groupTypes.mathord = function (group, options) { + return _buildCommon2.default.makeOrd(group, options, "mathord"); }; -groupTypes.textord = function(group, options, prev) { - return buildCommon.makeOrd(group, options, "textord"); +groupTypes.textord = function (group, options) { + return _buildCommon2.default.makeOrd(group, options, "textord"); }; -groupTypes.bin = function(group, options, prev) { - var className = "mbin"; - // Pull out the most recent element. Do some special handling to find - // things at the end of a \color group. Note that we don't use the same - // logic for ordgroups (which count as ords). - var prevAtom = prev; - while (prevAtom && prevAtom.type === "color") { - var atoms = prevAtom.value.value; - prevAtom = atoms[atoms.length - 1]; - } - // See TeXbook pg. 442-446, Rules 5 and 6, and the text before Rule 19. - // Here, we determine whether the bin should turn into an ord. We - // currently only apply Rule 5. - if (!prev || utils.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], - getTypeOfGroup(prevAtom))) { - group.type = "textord"; - className = "mord"; - } - - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), [className]); +groupTypes.bin = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mbin"]); }; -groupTypes.rel = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mrel"]); +groupTypes.rel = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mrel"]); }; -groupTypes.open = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mopen"]); +groupTypes.open = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mopen"]); }; -groupTypes.close = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mclose"]); +groupTypes.close = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mclose"]); }; -groupTypes.inner = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["minner"]); +groupTypes.inner = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["minner"]); }; -groupTypes.punct = function(group, options, prev) { - return buildCommon.mathsym( - group.value, group.mode, options.getColor(), ["mpunct"]); +groupTypes.punct = function (group, options) { + return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mpunct"]); }; -groupTypes.ordgroup = function(group, options, prev) { - return makeSpan( - ["mord", options.style.cls()], - buildExpression(group.value, options.reset()) - ); +groupTypes.ordgroup = function (group, options) { + return makeSpan(["mord"], buildExpression(group.value, options, true), options); }; -groupTypes.text = function(group, options, prev) { - return makeSpan(["text", "mord", options.style.cls()], - buildExpression(group.value.body, options.reset())); -}; - -groupTypes.color = function(group, options, prev) { - var elements = buildExpression( - group.value.value, - options.withColor(group.value.color), - prev - ); - - // \color isn't supposed to affect the type of the elements it contains. - // To accomplish this, we wrap the results in a fragment, so the inner - // elements will be able to directly interact with their neighbors. For - // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` - return new buildCommon.makeFragment(elements); -}; - -groupTypes.supsub = function(group, options, prev) { +groupTypes.supsub = function (group, options) { // Superscript and subscripts are handled in the TeXbook on page // 445-446, rules 18(a-f). // Here is where we defer to the inner group if it should handle // superscripts and subscripts itself. - if (shouldHandleSupSub(group.value.base, options)) { - return groupTypes[group.value.base.type](group, options, prev); + if (shouldHandleSupSub(group, options)) { + return groupTypes[group.value.base.type](group, options); } - var base = buildGroup(group.value.base, options.reset()); - var supmid; - var submid; - var sup; - var sub; + var base = buildGroup(group.value.base, options); + var supm = void 0; + var subm = void 0; + + var metrics = options.fontMetrics(); + var newOptions = void 0; + + // Rule 18a + var supShift = 0; + var subShift = 0; if (group.value.sup) { - sup = buildGroup(group.value.sup, - options.withStyle(options.style.sup())); - supmid = makeSpan( - [options.style.reset(), options.style.sup().cls()], [sup]); + newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup(group.value.sup, newOptions, options); + if (!isCharacterBox(group.value.base)) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } } if (group.value.sub) { - sub = buildGroup(group.value.sub, - options.withStyle(options.style.sub())); - submid = makeSpan( - [options.style.reset(), options.style.sub().cls()], [sub]); - } - - // Rule 18a - var supShift; - var subShift; - if (isCharacterBox(group.value.base)) { - supShift = 0; - subShift = 0; - } else { - supShift = base.height - fontMetrics.metrics.supDrop; - subShift = base.depth + fontMetrics.metrics.subDrop; + newOptions = options.havingStyle(options.style.sub()); + subm = buildGroup(group.value.sub, newOptions, options); + if (!isCharacterBox(group.value.base)) { + subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } } // Rule 18c - var minSupShift; - if (options.style === Style.DISPLAY) { - minSupShift = fontMetrics.metrics.sup1; + var minSupShift = void 0; + if (options.style === _Style2.default.DISPLAY) { + minSupShift = metrics.sup1; } else if (options.style.cramped) { - minSupShift = fontMetrics.metrics.sup3; + minSupShift = metrics.sup3; } else { - minSupShift = fontMetrics.metrics.sup2; + minSupShift = metrics.sup2; } // scriptspace is a font-size-independent size, so scale it // appropriately - var multiplier = Style.TEXT.sizeMultiplier * - options.style.sizeMultiplier; - var scriptspace = - (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + "em"; + var multiplier = options.sizeMultiplier; + var scriptspace = 0.5 / metrics.ptPerEm / multiplier + "em"; - var supsub; + var supsub = void 0; if (!group.value.sup) { // Rule 18b - subShift = Math.max( - subShift, fontMetrics.metrics.sub1, - sub.height - 0.8 * fontMetrics.metrics.xHeight); - - supsub = buildCommon.makeVList([ - {type: "elem", elem: submid}, - ], "shift", subShift, options); - - supsub.children[0].style.marginRight = scriptspace; + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var vlistElem = [{ type: "elem", elem: subm, marginRight: scriptspace }]; // Subscripts shouldn't be shifted by the base's italic correction. // Account for that by shifting the subscript back the appropriate // amount. Note we only do this when the base is a single symbol. - if (base instanceof domTree.symbolNode) { - supsub.children[0].style.marginLeft = -base.italic + "em"; + if (base instanceof _domTree2.default.symbolNode) { + vlistElem[0].marginLeft = -base.italic + "em"; } + + supsub = _buildCommon2.default.makeVList({ + positionType: "shift", + positionData: subShift, + children: vlistElem + }, options); } else if (!group.value.sub) { // Rule 18c, d - supShift = Math.max(supShift, minSupShift, - sup.depth + 0.25 * fontMetrics.metrics.xHeight); + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - supsub = buildCommon.makeVList([ - {type: "elem", elem: supmid}, - ], "shift", -supShift, options); - - supsub.children[0].style.marginRight = scriptspace; + supsub = _buildCommon2.default.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ type: "elem", elem: supm, marginRight: scriptspace }] + }, options); } else { - supShift = Math.max( - supShift, minSupShift, - sup.depth + 0.25 * fontMetrics.metrics.xHeight); - subShift = Math.max(subShift, fontMetrics.metrics.sub2); + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); - var ruleWidth = fontMetrics.metrics.defaultRuleThickness; + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e - if ((supShift - sup.depth) - (sub.height - subShift) < - 4 * ruleWidth) { - subShift = 4 * ruleWidth - (supShift - sup.depth) + sub.height; - var psi = 0.8 * fontMetrics.metrics.xHeight - - (supShift - sup.depth); + if (supShift - supm.depth - (subm.height - subShift) < 4 * ruleWidth) { + subShift = 4 * ruleWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); if (psi > 0) { supShift += psi; subShift -= psi; } } - supsub = buildCommon.makeVList([ - {type: "elem", elem: submid, shift: subShift}, - {type: "elem", elem: supmid, shift: -supShift}, - ], "individualShift", null, options); - + var _vlistElem = [{ type: "elem", elem: subm, shift: subShift, marginRight: scriptspace }, { type: "elem", elem: supm, shift: -supShift, marginRight: scriptspace }]; // See comment above about subscripts not being shifted - if (base instanceof domTree.symbolNode) { - supsub.children[0].style.marginLeft = -base.italic + "em"; + if (base instanceof _domTree2.default.symbolNode) { + _vlistElem[0].marginLeft = -base.italic + "em"; } - supsub.children[0].style.marginRight = scriptspace; - supsub.children[1].style.marginRight = scriptspace; + supsub = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: _vlistElem + }, options); } // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align - return makeSpan([getTypeOfGroup(group.value.base)], - [base, makeSpan(["msupsub"], [supsub])]); + var mclass = getTypeOfDomTree(base) || "mord"; + return makeSpan([mclass], [base, makeSpan(["msupsub"], [supsub])], options); }; -groupTypes.genfrac = function(group, options, prev) { - // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). - // Figure out what style this fraction should be in based on the - // function used - var fstyle = options.style; - if (group.value.size === "display") { - fstyle = Style.DISPLAY; - } else if (group.value.size === "text") { - fstyle = Style.TEXT; - } - - var nstyle = fstyle.fracNum(); - var dstyle = fstyle.fracDen(); - - var numer = buildGroup(group.value.numer, options.withStyle(nstyle)); - var numerreset = makeSpan([fstyle.reset(), nstyle.cls()], [numer]); - - var denom = buildGroup(group.value.denom, options.withStyle(dstyle)); - var denomreset = makeSpan([fstyle.reset(), dstyle.cls()], [denom]); - - var ruleWidth; - if (group.value.hasBarLine) { - ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - } else { - ruleWidth = 0; - } - - // Rule 15b - var numShift; - var clearance; - var denomShift; - if (fstyle.size === Style.DISPLAY.size) { - numShift = fontMetrics.metrics.num1; - if (ruleWidth > 0) { - clearance = 3 * ruleWidth; - } else { - clearance = 7 * fontMetrics.metrics.defaultRuleThickness; - } - denomShift = fontMetrics.metrics.denom1; - } else { - if (ruleWidth > 0) { - numShift = fontMetrics.metrics.num2; - clearance = ruleWidth; - } else { - numShift = fontMetrics.metrics.num3; - clearance = 3 * fontMetrics.metrics.defaultRuleThickness; - } - denomShift = fontMetrics.metrics.denom2; - } - - var frac; - if (ruleWidth === 0) { - // Rule 15c - var candiateClearance = - (numShift - numer.depth) - (denom.height - denomShift); - if (candiateClearance < clearance) { - numShift += 0.5 * (clearance - candiateClearance); - denomShift += 0.5 * (clearance - candiateClearance); - } - - frac = buildCommon.makeVList([ - {type: "elem", elem: denomreset, shift: denomShift}, - {type: "elem", elem: numerreset, shift: -numShift}, - ], "individualShift", null, options); - } else { - // Rule 15d - var axisHeight = fontMetrics.metrics.axisHeight; - - if ((numShift - numer.depth) - (axisHeight + 0.5 * ruleWidth) < - clearance) { - numShift += - clearance - ((numShift - numer.depth) - - (axisHeight + 0.5 * ruleWidth)); - } - - if ((axisHeight - 0.5 * ruleWidth) - (denom.height - denomShift) < - clearance) { - denomShift += - clearance - ((axisHeight - 0.5 * ruleWidth) - - (denom.height - denomShift)); - } - - var mid = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "frac-line"]); - // Manually set the height of the line because its height is - // created in CSS - mid.height = ruleWidth; - - var midShift = -(axisHeight - 0.5 * ruleWidth); - - frac = buildCommon.makeVList([ - {type: "elem", elem: denomreset, shift: denomShift}, - {type: "elem", elem: mid, shift: midShift}, - {type: "elem", elem: numerreset, shift: -numShift}, - ], "individualShift", null, options); - } - - // Since we manually change the style sometimes (with \dfrac or \tfrac), - // account for the possible size change here. - frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier; - frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier; - - // Rule 15e - var delimSize; - if (fstyle.size === Style.DISPLAY.size) { - delimSize = fontMetrics.metrics.delim1; - } else { - delimSize = fontMetrics.metrics.getDelim2(fstyle); - } - - var leftDelim; - var rightDelim; - if (group.value.leftDelim == null) { - leftDelim = makeNullDelimiter(options); - } else { - leftDelim = delimiter.customSizedDelim( - group.value.leftDelim, delimSize, true, - options.withStyle(fstyle), group.mode); - } - if (group.value.rightDelim == null) { - rightDelim = makeNullDelimiter(options); - } else { - rightDelim = delimiter.customSizedDelim( - group.value.rightDelim, delimSize, true, - options.withStyle(fstyle), group.mode); - } - - return makeSpan( - ["mord", options.style.reset(), fstyle.cls()], - [leftDelim, makeSpan(["mfrac"], [frac]), rightDelim], - options.getColor()); -}; - -groupTypes.array = function(group, options, prev) { - var r; - var c; - var nr = group.value.body.length; - var nc = 0; - var body = new Array(nr); - - // Horizontal spacing - var pt = 1 / fontMetrics.metrics.ptPerEm; - var arraycolsep = 5 * pt; // \arraycolsep in article.cls - - // Vertical spacing - var baselineskip = 12 * pt; // see size10.clo - // Default \arraystretch from lttab.dtx - // TODO(gagern): may get redefined once we have user-defined macros - var arraystretch = utils.deflt(group.value.arraystretch, 1); - var arrayskip = arraystretch * baselineskip; - var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and - var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx - - var totalHeight = 0; - for (r = 0; r < group.value.body.length; ++r) { - var inrow = group.value.body[r]; - var height = arstrutHeight; // \@array adds an \@arstrut - var depth = arstrutDepth; // to each tow (via the template) - - if (nc < inrow.length) { - nc = inrow.length; - } - - var outrow = new Array(inrow.length); - for (c = 0; c < inrow.length; ++c) { - var elt = buildGroup(inrow[c], options); - if (depth < elt.depth) { - depth = elt.depth; - } - if (height < elt.height) { - height = elt.height; - } - outrow[c] = elt; - } - - var gap = 0; - if (group.value.rowGaps[r]) { - gap = group.value.rowGaps[r].value; - switch (gap.unit) { - case "em": - gap = gap.number; - break; - case "ex": - gap = gap.number * fontMetrics.metrics.emPerEx; - break; - default: - console.error("Can't handle unit " + gap.unit); - gap = 0; - } - if (gap > 0) { // \@argarraycr - gap += arstrutDepth; - if (depth < gap) { - depth = gap; // \@xargarraycr - } - gap = 0; - } - } - - outrow.height = height; - outrow.depth = depth; - totalHeight += height; - outrow.pos = totalHeight; - totalHeight += depth + gap; // \@yargarraycr - body[r] = outrow; - } - - var offset = totalHeight / 2 + fontMetrics.metrics.axisHeight; - var colDescriptions = group.value.cols || []; - var cols = []; - var colSep; - var colDescrNum; - for (c = 0, colDescrNum = 0; - // Continue while either there are more columns or more column - // descriptions, so trailing separators don't get lost. - c < nc || colDescrNum < colDescriptions.length; - ++c, ++colDescrNum) { - - var colDescr = colDescriptions[colDescrNum] || {}; - - var firstSeparator = true; - while (colDescr.type === "separator") { - // If there is more than one separator in a row, add a space - // between them. - if (!firstSeparator) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = - fontMetrics.metrics.doubleRuleSep + "em"; - cols.push(colSep); - } - - if (colDescr.separator === "|") { - var separator = makeSpan( - ["vertical-separator"], - []); - separator.style.height = totalHeight + "em"; - separator.style.verticalAlign = - -(totalHeight - offset) + "em"; - - cols.push(separator); - } else { - throw new ParseError( - "Invalid separator type: " + colDescr.separator); - } - - colDescrNum++; - colDescr = colDescriptions[colDescrNum] || {}; - firstSeparator = false; - } - - if (c >= nc) { - continue; - } - - var sepwidth; - if (c > 0 || group.value.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.pregap, arraycolsep); - if (sepwidth !== 0) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - - var col = []; - for (r = 0; r < nr; ++r) { - var row = body[r]; - var elem = row[c]; - if (!elem) { - continue; - } - var shift = row.pos - offset; - elem.depth = row.depth; - elem.height = row.height; - col.push({type: "elem", elem: elem, shift: shift}); - } - - col = buildCommon.makeVList(col, "individualShift", null, options); - col = makeSpan( - ["col-align-" + (colDescr.align || "c")], - [col]); - cols.push(col); - - if (c < nc - 1 || group.value.hskipBeforeAndAfter) { - sepwidth = utils.deflt(colDescr.postgap, arraycolsep); - if (sepwidth !== 0) { - colSep = makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - } - body = makeSpan(["mtable"], cols); - return makeSpan(["mord"], [body], options.getColor()); -}; - -groupTypes.spacing = function(group, options, prev) { - if (group.value === "\\ " || group.value === "\\space" || - group.value === " " || group.value === "~") { +groupTypes.spacing = function (group, options) { + if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { // Spaces are generated by adding an actual space. Each of these // things has an entry in the symbols table, so these will be turned // into appropriate outputs. - return makeSpan( - ["mord", "mspace"], - [buildCommon.mathsym(group.value, group.mode)] - ); + if (group.mode === "text") { + return _buildCommon2.default.makeOrd(group, options, "textord"); + } else { + return makeSpan(["mspace"], [_buildCommon2.default.mathsym(group.value, group.mode, options)], options); + } } else { // Other kinds of spaces are of arbitrary width. We use CSS to // generate these. - return makeSpan( - ["mord", "mspace", - buildCommon.spacingFunctions[group.value].className]); + return makeSpan(["mspace", _buildCommon2.default.spacingFunctions[group.value].className], [], options); } }; -groupTypes.llap = function(group, options, prev) { - var inner = makeSpan( - ["inner"], [buildGroup(group.value.body, options.reset())]); - var fix = makeSpan(["fix"], []); - return makeSpan( - ["llap", options.style.cls()], [inner, fix]); -}; - -groupTypes.rlap = function(group, options, prev) { - var inner = makeSpan( - ["inner"], [buildGroup(group.value.body, options.reset())]); - var fix = makeSpan(["fix"], []); - return makeSpan( - ["rlap", options.style.cls()], [inner, fix]); -}; - -groupTypes.op = function(group, options, prev) { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup; - var subGroup; - var hasLimits = false; - if (group.type === "supsub" ) { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = group.value.sup; - subGroup = group.value.sub; - group = group.value.base; - hasLimits = true; - } - - // Most operators have a large successor symbol, but these don't. - var noSuccessor = [ - "\\smallint", - ]; - - var large = false; - if (options.style.size === Style.DISPLAY.size && - group.value.symbol && - !utils.contains(noSuccessor, group.value.body)) { - - // Most symbol operators get larger in displaystyle (rule 13) - large = true; - } - - var base; - var baseShift = 0; - var slant = 0; - if (group.value.symbol) { - // If this is a symbol, create the symbol. - var style = large ? "Size2-Regular" : "Size1-Regular"; - base = buildCommon.makeSymbol( - group.value.body, style, "math", options.getColor(), - ["op-symbol", large ? "large-op" : "small-op", "mop"]); - - // Shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - - fontMetrics.metrics.axisHeight * - options.style.sizeMultiplier; - - // The slant of the symbol is just its italic correction. - slant = base.italic; - } else { - // Otherwise, this is a text operator. Build the text from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup - var output = []; - for (var i = 1; i < group.value.body.length; i++) { - output.push(buildCommon.mathsym(group.value.body[i], group.mode)); - } - base = makeSpan(["mop"], output, options.getColor()); - } - - if (hasLimits) { - // IE 8 clips \int if it is in a display: inline-block. We wrap it - // in a new span so it is an inline, and works. - base = makeSpan([], [base]); - - var supmid; - var supKern; - var submid; - var subKern; - // We manually have to handle the superscripts and subscripts. This, - // aside from the kern calculations, is copied from supsub. - if (supGroup) { - var sup = buildGroup( - supGroup, options.withStyle(options.style.sup())); - supmid = makeSpan( - [options.style.reset(), options.style.sup().cls()], [sup]); - - supKern = Math.max( - fontMetrics.metrics.bigOpSpacing1, - fontMetrics.metrics.bigOpSpacing3 - sup.depth); - } - - if (subGroup) { - var sub = buildGroup( - subGroup, options.withStyle(options.style.sub())); - submid = makeSpan( - [options.style.reset(), options.style.sub().cls()], - [sub]); - - subKern = Math.max( - fontMetrics.metrics.bigOpSpacing2, - fontMetrics.metrics.bigOpSpacing4 - sub.height); - } - - // Build the final group as a vlist of the possible subscript, base, - // and possible superscript. - var finalGroup; - var top; - var bottom; - if (!supGroup) { - top = base.height - baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - {type: "elem", elem: submid}, - {type: "kern", size: subKern}, - {type: "elem", elem: base}, - ], "top", top, options); - - // Here, we shift the limits by the slant of the symbol. Note - // that we are supposed to shift the limits by 1/2 of the slant, - // but since we are centering the limits adding a full slant of - // margin will shift by 1/2 that. - finalGroup.children[0].style.marginLeft = -slant + "em"; - } else if (!subGroup) { - bottom = base.depth + baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "elem", elem: base}, - {type: "kern", size: supKern}, - {type: "elem", elem: supmid}, - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - ], "bottom", bottom, options); - - // See comment above about slants - finalGroup.children[1].style.marginLeft = slant + "em"; - } else if (!supGroup && !subGroup) { - // This case probably shouldn't occur (this would mean the - // supsub was sending us a group with no superscript or - // subscript) but be safe. - return base; - } else { - bottom = fontMetrics.metrics.bigOpSpacing5 + - submid.height + submid.depth + - subKern + - base.depth + baseShift; - - finalGroup = buildCommon.makeVList([ - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - {type: "elem", elem: submid}, - {type: "kern", size: subKern}, - {type: "elem", elem: base}, - {type: "kern", size: supKern}, - {type: "elem", elem: supmid}, - {type: "kern", size: fontMetrics.metrics.bigOpSpacing5}, - ], "bottom", bottom, options); - - // See comment above about slants - finalGroup.children[0].style.marginLeft = -slant + "em"; - finalGroup.children[2].style.marginLeft = slant + "em"; - } - - return makeSpan(["mop", "op-limits"], [finalGroup]); - } else { - if (group.value.symbol) { - base.style.top = baseShift + "em"; - } - - return base; - } -}; - -groupTypes.katex = function(group, options, prev) { - // The KaTeX logo. The offsets for the K and a were chosen to look - // good, but the offsets for the T, E, and X were taken from the - // definition of \TeX in TeX (see TeXbook pg. 356) - var k = makeSpan( - ["k"], [buildCommon.mathsym("K", group.mode)]); - var a = makeSpan( - ["a"], [buildCommon.mathsym("A", group.mode)]); - - a.height = (a.height + 0.2) * 0.75; - a.depth = (a.height - 0.2) * 0.75; - - var t = makeSpan( - ["t"], [buildCommon.mathsym("T", group.mode)]); - var e = makeSpan( - ["e"], [buildCommon.mathsym("E", group.mode)]); - - e.height = (e.height - 0.2155); - e.depth = (e.depth + 0.2155); - - var x = makeSpan( - ["x"], [buildCommon.mathsym("X", group.mode)]); - - return makeSpan( - ["katex-logo", "mord"], [k, a, t, e, x], options.getColor()); -}; - -groupTypes.overline = function(group, options, prev) { - // Overlines are handled in the TeXbook pg 443, Rule 9. - - // Build the inner group in the cramped style. - var innerGroup = buildGroup(group.value.body, - options.withStyle(options.style.cramp())); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - - // Create the line above the body - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "overline-line"]); - line.height = ruleWidth; - line.maxFontSize = 1.0; - - // Generate the vlist, with the appropriate kerns - var vlist = buildCommon.makeVList([ - {type: "elem", elem: innerGroup}, - {type: "kern", size: 3 * ruleWidth}, - {type: "elem", elem: line}, - {type: "kern", size: ruleWidth}, - ], "firstBaseline", null, options); - - return makeSpan(["overline", "mord"], [vlist], options.getColor()); -}; - -groupTypes.underline = function(group, options, prev) { - // Underlines are handled in the TeXbook pg 443, Rule 10. - - // Build the inner group. - var innerGroup = buildGroup(group.value.body, options); - - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; - - // Create the line above the body - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "underline-line"]); - line.height = ruleWidth; - line.maxFontSize = 1.0; - - // Generate the vlist, with the appropriate kerns - var vlist = buildCommon.makeVList([ - {type: "kern", size: ruleWidth}, - {type: "elem", elem: line}, - {type: "kern", size: 3 * ruleWidth}, - {type: "elem", elem: innerGroup}, - ], "top", innerGroup.height, options); - - return makeSpan(["underline", "mord"], [vlist], options.getColor()); -}; - -groupTypes.sqrt = function(group, options, prev) { +groupTypes.sqrt = function (group, options) { // Square roots are handled in the TeXbook pg. 443, Rule 11. // First, we do the same steps as in overline to build the inner group // and line - var inner = buildGroup(group.value.body, - options.withStyle(options.style.cramp())); + var inner = buildGroup(group.value.body, options.havingCrampedStyle()); + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } - var ruleWidth = fontMetrics.metrics.defaultRuleThickness / - options.style.sizeMultiplier; + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + if (inner instanceof _domTree2.default.documentFragment) { + inner = makeSpan([], [inner], options); + } - var line = makeSpan( - [options.style.reset(), Style.TEXT.cls(), "sqrt-line"], [], - options.getColor()); - line.height = ruleWidth; - line.maxFontSize = 1.0; + // Calculate the minimum size for the \surd delimiter + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; - var phi = ruleWidth; - if (options.style.id < Style.TEXT.id) { - phi = fontMetrics.metrics.xHeight; + var phi = theta; + if (options.style.id < _Style2.default.TEXT.id) { + phi = options.fontMetrics().xHeight; } // Calculate the clearance between the body and line - var lineClearance = ruleWidth + phi / 4; + var lineClearance = theta + phi / 4; - var innerHeight = - (inner.height + inner.depth) * options.style.sizeMultiplier; - var minDelimiterHeight = innerHeight + lineClearance + ruleWidth; + var minDelimiterHeight = (inner.height + inner.depth + lineClearance + theta) * options.sizeMultiplier; - // Create a \surd delimiter of the required minimum size - var delim = makeSpan(["sqrt-sign"], [ - delimiter.customSizedDelim("\\surd", minDelimiterHeight, - false, options, group.mode)], - options.getColor()); + // Create a sqrt SVG of the required minimum size - var delimDepth = (delim.height + delim.depth) - ruleWidth; + var _delimiter$sqrtImage = _delimiter2.default.sqrtImage(minDelimiterHeight, options), + img = _delimiter$sqrtImage.span, + ruleWidth = _delimiter$sqrtImage.ruleWidth; + + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size if (delimDepth > inner.height + inner.depth + lineClearance) { - lineClearance = - (lineClearance + delimDepth - inner.height - inner.depth) / 2; + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; } - // Shift the delimiter so that its top lines up with the top of the line - var delimShift = -(inner.height + lineClearance + ruleWidth) + delim.height; - delim.style.top = delimShift + "em"; - delim.height -= delimShift; - delim.depth += delimShift; + // Shift the sqrt image + var imgShift = img.height - inner.height - lineClearance - ruleWidth; - // We add a special case here, because even when `inner` is empty, we - // still get a line. So, we use a simple heuristic to decide if we - // should omit the body entirely. (note this doesn't work for something - // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for - // it not to work. - var body; - if (inner.height === 0 && inner.depth === 0) { - body = makeSpan(); - } else { - body = buildCommon.makeVList([ - {type: "elem", elem: inner}, - {type: "kern", size: lineClearance}, - {type: "elem", elem: line}, - {type: "kern", size: ruleWidth}, - ], "firstBaseline", null, options); - } + inner.style.paddingLeft = img.advanceWidth + "em"; + + // Overlay the image and the argument. + var body = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: inner }, { type: "kern", size: -(inner.height + imgShift) }, { type: "elem", elem: img }, { type: "kern", size: ruleWidth }] + }, options); + body.children[0].children[0].classes.push("svg-align"); if (!group.value.index) { - return makeSpan(["sqrt", "mord"], [delim, body]); + return makeSpan(["mord", "sqrt"], [body], options); } else { // Handle the optional root index // The index is always in scriptscript style - var root = buildGroup( - group.value.index, - options.withStyle(Style.SCRIPTSCRIPT)); - var rootWrap = makeSpan( - [options.style.reset(), Style.SCRIPTSCRIPT.cls()], - [root]); - - // Figure out the height and depth of the inner part - var innerRootHeight = Math.max(delim.height, body.height); - var innerRootDepth = Math.max(delim.depth, body.depth); + var newOptions = options.havingStyle(_Style2.default.SCRIPTSCRIPT); + var rootm = buildGroup(group.value.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX // source, in the definition of `\r@@t`. - var toShift = 0.6 * (innerRootHeight - innerRootDepth); + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly - var rootVList = buildCommon.makeVList( - [{type: "elem", elem: rootWrap}], - "shift", -toShift, options); + var rootVList = _buildCommon2.default.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ type: "elem", elem: rootm }] + }, options); // Add a class surrounding it so we can add on the appropriate // kerning var rootVListWrap = makeSpan(["root"], [rootVList]); - return makeSpan(["sqrt", "mord"], [rootVListWrap, delim, body]); + return makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); } }; -groupTypes.sizing = function(group, options, prev) { +function sizingGroup(value, options, baseOptions) { + var inner = buildExpression(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + + // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + for (var i = 0; i < inner.length; i++) { + var pos = _utils2.default.indexOf(inner[i].classes, "sizing"); + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return _buildCommon2.default.makeFragment(inner); +} + +groupTypes.sizing = function (group, options) { // Handle sizing operators like \Huge. Real TeX doesn't actually allow // these functions inside of math expressions, so we do some special // handling. - var inner = buildExpression(group.value.value, - options.withSize(group.value.size), prev); - - var span = makeSpan(["mord"], - [makeSpan(["sizing", "reset-" + options.size, group.value.size, - options.style.cls()], - inner)]); - - // Calculate the correct maxFontSize manually - var fontSize = buildCommon.sizingMultiplier[group.value.size]; - span.maxFontSize = fontSize * options.style.sizeMultiplier; - - return span; + var newOptions = options.havingSize(group.value.size); + return sizingGroup(group.value.value, newOptions, options); }; -groupTypes.styling = function(group, options, prev) { +groupTypes.styling = function (group, options) { // Style changes are handled in the TeXbook on pg. 442, Rule 3. // Figure out what style we're changing to. - var style = { - "display": Style.DISPLAY, - "text": Style.TEXT, - "script": Style.SCRIPT, - "scriptscript": Style.SCRIPTSCRIPT, + var styleMap = { + "display": _Style2.default.DISPLAY, + "text": _Style2.default.TEXT, + "script": _Style2.default.SCRIPT, + "scriptscript": _Style2.default.SCRIPTSCRIPT }; - var newStyle = style[group.value.style]; - - // Build the inner expression in the new style. - var inner = buildExpression( - group.value.value, options.withStyle(newStyle), prev); - - return makeSpan([options.style.reset(), newStyle.cls()], inner); + var newStyle = styleMap[group.value.style]; + var newOptions = options.havingStyle(newStyle); + return sizingGroup(group.value.value, newOptions, options); }; -groupTypes.font = function(group, options, prev) { +groupTypes.font = function (group, options) { var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font), prev); + return buildGroup(group.value.body, options.withFont(font)); }; -groupTypes.delimsizing = function(group, options, prev) { - var delim = group.value.value; - - if (delim === ".") { - // Empty delimiters still count as elements, even though they don't - // show anything. - return makeSpan([groupToType[group.value.delimType]]); - } - - // Use delimiter.sizedDelim to generate the delimiter. - return makeSpan( - [groupToType[group.value.delimType]], - [delimiter.sizedDelim( - delim, group.value.size, options, group.mode)]); -}; - -groupTypes.leftright = function(group, options, prev) { - // Build the inner expression - var inner = buildExpression(group.value.body, options.reset()); - - var innerHeight = 0; - var innerDepth = 0; - - // Calculate its height and depth - for (var i = 0; i < inner.length; i++) { - innerHeight = Math.max(inner[i].height, innerHeight); - innerDepth = Math.max(inner[i].depth, innerDepth); - } - - // The size of delimiters is the same, regardless of what style we are - // in. Thus, to correctly calculate the size of delimiter we need around - // a group, we scale down the inner size based on the size. - innerHeight *= options.style.sizeMultiplier; - innerDepth *= options.style.sizeMultiplier; - - var leftDelim; - if (group.value.left === ".") { - // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = makeNullDelimiter(options); - } else { - // Otherwise, use leftRightDelim to generate the correct sized - // delimiter. - leftDelim = delimiter.leftRightDelim( - group.value.left, innerHeight, innerDepth, options, - group.mode); - } - // Add it to the beginning of the expression - inner.unshift(leftDelim); - - var rightDelim; - // Same for the right delimiter - if (group.value.right === ".") { - rightDelim = makeNullDelimiter(options); - } else { - rightDelim = delimiter.leftRightDelim( - group.value.right, innerHeight, innerDepth, options, - group.mode); - } - // Add it to the end of the expression. - inner.push(rightDelim); - - return makeSpan( - ["minner", options.style.cls()], inner, options.getColor()); -}; - -groupTypes.rule = function(group, options, prev) { - // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); - - // Calculate the shift, width, and height of the rule, and account for units - var shift = 0; - if (group.value.shift) { - shift = group.value.shift.number; - if (group.value.shift.unit === "ex") { - shift *= fontMetrics.metrics.xHeight; +groupTypes.verb = function (group, options) { + var text = _buildCommon2.default.makeVerb(group, options); + var body = []; + // \verb enters text mode and therefore is sized like \textstyle + var newOptions = options.havingStyle(options.style.text()); + for (var i = 0; i < text.length; i++) { + if (text[i] === '\xA0') { + // spaces appear as nonbreaking space + // The space character isn't in the Typewriter-Regular font, + // so we implement it as a kern of the same size as a character. + // 0.525 is the width of a texttt character in LaTeX. + // It automatically gets scaled by the font size. + var rule = makeSpan(["mord", "rule"], [], newOptions); + rule.style.marginLeft = "0.525em"; + body.push(rule); + } else { + body.push(_buildCommon2.default.makeSymbol(text[i], "Typewriter-Regular", group.mode, newOptions, ["mathtt"])); } } - - var width = group.value.width.number; - if (group.value.width.unit === "ex") { - width *= fontMetrics.metrics.xHeight; - } - - var height = group.value.height.number; - if (group.value.height.unit === "ex") { - height *= fontMetrics.metrics.xHeight; - } - - // The sizes of rules are absolute, so make it larger if we are in a - // smaller style. - shift /= options.style.sizeMultiplier; - width /= options.style.sizeMultiplier; - height /= options.style.sizeMultiplier; - - // Style the rule to the right size - rule.style.borderRightWidth = width + "em"; - rule.style.borderTopWidth = height + "em"; - rule.style.bottom = shift + "em"; - - // Record the height and width - rule.width = width; - rule.height = height + shift; - rule.depth = -shift; - - return rule; + _buildCommon2.default.tryCombineChars(body); + return makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), body, newOptions); }; -groupTypes.kern = function(group, options, prev) { - // Make an empty span for the rule - var rule = makeSpan(["mord", "rule"], [], options.getColor()); - - var dimension = 0; - if (group.value.dimension) { - dimension = group.value.dimension.number; - if (group.value.dimension.unit === "ex") { - dimension *= fontMetrics.metrics.xHeight; - } - } - - dimension /= options.style.sizeMultiplier; - - rule.style.marginLeft = dimension + "em"; - - return rule; -}; - -groupTypes.accent = function(group, options, prev) { +groupTypes.accent = function (group, options) { // Accents are handled in the TeXbook pg. 443, rule 12. var base = group.value.base; - var supsubGroup; + var supsubGroup = void 0; if (group.type === "supsub") { // If our base is a character box, and we have superscripts and // subscripts, the supsub will defer to us. In particular, we want @@ -3280,68 +4954,89 @@ groupTypes.accent = function(group, options, prev) { // Rerender the supsub group with its new base, and store that // result. - supsubGroup = buildGroup( - supsub, options.reset(), prev); + supsubGroup = buildGroup(supsub, options); } // Build the base group - var body = buildGroup( - base, options.withStyle(options.style.cramp())); + var body = buildGroup(base, options.havingCrampedStyle()); + + // Does the accent need to shift for the skew of a character? + var mustShift = group.value.isShifty && isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the // nucleus is not a single character, let s = 0; otherwise set s to the // kern amount for the nucleus followed by the \skewchar of its font." // Note that our skew metrics are just the kern between each character // and the skewchar. - var skew; - if (isCharacterBox(base)) { + var skew = 0; + if (mustShift) { // If the base is a character box, then we want the skew of the // innermost character. To do that, we find the innermost character: var baseChar = getBaseElem(base); // Then, we render its group to get the symbol inside it - var baseGroup = buildGroup( - baseChar, options.withStyle(options.style.cramp())); + var baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. skew = baseGroup.skew; // Note that we now throw away baseGroup, because the layers we // removed with getBaseElem might contain things like \color which // we can't get rid of. // TODO(emily): Find a better way to get the skew - } else { - skew = 0; } // calculate the amount of space between the body and the accent - var clearance = Math.min(body.height, fontMetrics.metrics.xHeight); + var clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent - var accent = buildCommon.makeSymbol( - group.value.accent, "Main-Regular", "math", options.getColor()); - // Remove the italic correction of the accent, because it only serves to - // shift the accent over to a place we don't want. - accent.italic = 0; + var accentBody = void 0; + if (!group.value.isStretchy) { + var accent = _buildCommon2.default.makeSymbol(group.value.label, "Main-Regular", group.mode, options); + // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + accent.italic = 0; - // The \vec character that the fonts use is a combining character, and - // thus shows up much too far to the left. To account for this, we add a - // specific class which shifts the accent over to where we want it. - // TODO(emily): Fix this in a better way, like by changing the font - var vecClass = group.value.accent === "\\vec" ? "accent-vec" : null; + // The \vec character that the fonts use is a combining character, and + // thus shows up much too far to the left. To account for this, we add a + // specific class which shifts the accent over to where we want it. + // TODO(emily): Fix this in a better way, like by changing the font + // Similarly, text accent \H is a combining character and + // requires a different adjustment. + var accentClass = null; + if (group.value.label === "\\vec") { + accentClass = "accent-vec"; + } else if (group.value.label === '\\H') { + accentClass = "accent-hungarian"; + } - var accentBody = makeSpan(["accent-body", vecClass], [ - makeSpan([], [accent])]); + accentBody = makeSpan([], [accent]); + accentBody = makeSpan(["accent-body", accentClass], [accentBody]); - accentBody = buildCommon.makeVList([ - {type: "elem", elem: body}, - {type: "kern", size: -clearance}, - {type: "elem", elem: accentBody}, - ], "firstBaseline", null, options); + // Shift the accent over by the skew. Note we shift by twice the skew + // because we are centering the accent, so by adding 2*skew to the left, + // we shift it to the right by 1*skew. + accentBody.style.marginLeft = 2 * skew + "em"; - // Shift the accent over by the skew. Note we shift by twice the skew - // because we are centering the accent, so by adding 2*skew to the left, - // we shift it to the right by 1*skew. - accentBody.children[1].style.marginLeft = 2 * skew + "em"; + accentBody = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: body }, { type: "kern", size: -clearance }, { type: "elem", elem: accentBody }] + }, options); + } else { + accentBody = _stretchy2.default.svgSpan(group, options); - var accentWrap = makeSpan(["mord", "accent"], [accentBody]); + accentBody = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: body }, { type: "elem", elem: accentBody }] + }, options); + + var styleSpan = accentBody.children[0].children[0].children[1]; + styleSpan.classes.push("svg-align"); // text-align: left; + if (skew > 0) { + // Shorten the accent and nudge it to the right. + styleSpan.style.width = "calc(100% - " + 2 * skew + "em)"; + styleSpan.style.marginLeft = 2 * skew + "em"; + } + } + + var accentWrap = makeSpan(["mord", "accent"], [accentBody], options); if (supsubGroup) { // Here, we replace the "base" child of the supsub with our newly @@ -3361,16 +5056,233 @@ groupTypes.accent = function(group, options, prev) { } }; -groupTypes.phantom = function(group, options, prev) { - var elements = buildExpression( - group.value.value, - options.withPhantom(), - prev - ); +groupTypes.horizBrace = function (group, options) { + var style = options.style; - // \phantom isn't supposed to affect the elements it contains. - // See "color" for more details. - return new buildCommon.makeFragment(elements); + var hasSupSub = group.type === "supsub"; + var supSubGroup = void 0; + var newOptions = void 0; + if (hasSupSub) { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + if (group.value.sup) { + newOptions = options.havingStyle(style.sup()); + supSubGroup = buildGroup(group.value.sup, newOptions, options); + } else { + newOptions = options.havingStyle(style.sub()); + supSubGroup = buildGroup(group.value.sub, newOptions, options); + } + group = group.value.base; + } + + // Build the base group + var body = buildGroup(group.value.base, options.havingBaseStyle(_Style2.default.DISPLAY)); + + // Create the stretchy element + var braceBody = _stretchy2.default.svgSpan(group, options); + + // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the subject matter and the brace: equation + var vlist = void 0; + if (group.value.isOver) { + vlist = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: body }, { type: "kern", size: 0.1 }, { type: "elem", elem: braceBody }] + }, options); + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ type: "elem", elem: braceBody }, { type: "kern", size: 0.1 }, { type: "elem", elem: body }] + }, options); + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (hasSupSub) { + // In order to write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be wider + // than the equation. We want the equation to control the brace width. + + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + + var vSpan = makeSpan(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); + + if (group.value.isOver) { + vlist = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: vSpan }, { type: "kern", size: 0.2 }, { type: "elem", elem: supSubGroup }] + }, options); + } else { + vlist = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height, + children: [{ type: "elem", elem: supSubGroup }, { type: "kern", size: 0.2 }, { type: "elem", elem: vSpan }] + }, options); + } + } + + return makeSpan(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); +}; + +groupTypes.accentUnder = function (group, options) { + // Treat under accents much like underlines. + var innerGroup = buildGroup(group.value.base, options); + + var accentBody = _stretchy2.default.svgSpan(group, options); + var kern = /tilde/.test(group.value.label) ? 0.12 : 0; + + // Generate the vlist, with the appropriate kerns + var vlist = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: accentBody.height + kern, + children: [{ type: "elem", elem: accentBody }, { type: "kern", size: kern }, { type: "elem", elem: innerGroup }] + }, options); + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + + return makeSpan(["mord", "accentunder"], [vlist], options); +}; + +groupTypes.enclose = function (group, options) { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox + var inner = buildGroup(group.value.body, options); + + var label = group.value.label.substr(1); + var scale = options.sizeMultiplier; + var img = void 0; + var imgShift = 0; + var isColorbox = /color/.test(label); + + if (label === "sout") { + img = makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else { + // Add horizontal padding + inner.classes.push(/cancel/.test(label) ? "cancel-pad" : "boxpad"); + + // Add vertical padding + var vertPad = 0; + // ref: LaTeX source2e: \fboxsep = 3pt; \fboxrule = .4pt + // ref: cancel package: \advance\totalheight2\p@ % "+2" + if (/box/.test(label)) { + vertPad = label === "colorbox" ? 0.3 : 0.34; + } else { + vertPad = isCharacterBox(group.value.body) ? 0.2 : 0; + } + + img = _stretchy2.default.encloseSpan(inner, label, vertPad, options); + imgShift = inner.depth + vertPad; + + if (isColorbox) { + img.style.backgroundColor = group.value.backgroundColor.value; + if (label === "fcolorbox") { + img.style.borderColor = group.value.borderColor.value; + } + } + } + + var vlist = void 0; + if (isColorbox) { + vlist = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [ + // Put the color background behind inner; + { type: "elem", elem: img, shift: imgShift }, { type: "elem", elem: inner, shift: 0 }] + }, options); + } else { + vlist = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [ + // Write the \cancel stroke on top of inner. + { type: "elem", elem: inner, shift: 0 }, { type: "elem", elem: img, shift: imgShift }] + }, options); + } + + if (/cancel/.test(label)) { + vlist.children[0].children[0].children[1].classes.push("svg-align"); + + // cancel does not create horiz space for its line extension. + // That is, not when adjacent to a mord. + return makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return makeSpan(["mord"], [vlist], options); + } +}; + +groupTypes.xArrow = function (group, options) { + var style = options.style; + + // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildGroup(group.value.body, newOptions, options); + upperGroup.classes.push("x-arrow-pad"); + + var lowerGroup = void 0; + if (group.value.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildGroup(group.value.below, newOptions, options); + lowerGroup.classes.push("x-arrow-pad"); + } + + var arrowBody = _stretchy2.default.svgSpan(group, options); + + // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; + // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; + + // Generate the vlist + var vlist = void 0; + if (group.value.below) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }, { type: "elem", elem: lowerGroup, shift: lowerShift }] + }, options); + } else { + vlist = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }] + }, options); + } + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + + return makeSpan(["mrel", "x-arrow"], [vlist], options); +}; + +groupTypes.mclass = function (group, options) { + var elements = buildExpression(group.value.value, options, true); + + return makeSpan([group.value.mclass], elements, options); +}; + +groupTypes.raisebox = function (group, options) { + var body = groupTypes.sizing({ value: { + value: [{ + type: "text", + value: { + body: group.value.value, + font: "mathrm" // simulate \textrm + } + }], + size: 6 // simulate \normalsize + } }, options); + var dy = (0, _units.calculateSize)(group.value.dy.value, options); + return _buildCommon2.default.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ type: "elem", elem: body }] + }, options); }; /** @@ -3378,31 +5290,21 @@ groupTypes.phantom = function(group, options, prev) { * function for it. It also handles the interaction of size and style changes * between parents and children. */ -var buildGroup = function(group, options, prev) { +var buildGroup = exports.buildGroup = function buildGroup(group, options, baseOptions) { if (!group) { return makeSpan(); } if (groupTypes[group.type]) { // Call the groupTypes function - var groupNode = groupTypes[group.type](group, options, prev); - var multiplier; - - // If the style changed between the parent and the current group, - // account for the size difference - if (options.style !== options.parentStyle) { - multiplier = options.style.sizeMultiplier / - options.parentStyle.sizeMultiplier; - - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } + var groupNode = groupTypes[group.type](group, options); // If the size changed between the parent and the current group, account // for that size difference. - if (options.size !== options.parentSize) { - multiplier = buildCommon.sizingMultiplier[options.size] / - buildCommon.sizingMultiplier[options.parentSize]; + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan(options.sizingClasses(baseOptions), [groupNode], options); + + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; groupNode.height *= multiplier; groupNode.depth *= multiplier; @@ -3410,8 +5312,7 @@ var buildGroup = function(group, options, prev) { return groupNode; } else { - throw new ParseError( - "Got group of unknown type: '" + group.type + "'"); + throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); } }; @@ -3419,14 +5320,14 @@ var buildGroup = function(group, options, prev) { * Take an entire parse tree, and build it into an appropriate set of HTML * nodes. */ -var buildHTML = function(tree, options) { +function buildHTML(tree, options) { // buildExpression is destructive, so we need to make a clone // of the incoming tree so that it isn't accidentally changed - tree = JSON.parse(JSON.stringify(tree)); + tree = JSON.parse((0, _stringify2.default)(tree)); // Build the expression contained in the tree - var expression = buildExpression(tree, options); - var body = makeSpan(["base", options.style.cls()], expression); + var expression = buildExpression(tree, options, true); + var body = makeSpan(["base"], expression, options); // Add struts, which ensure that the top of the HTML element falls at the // height of the expression, and the bottom of the HTML element falls at the @@ -3435,7 +5336,7 @@ var buildHTML = function(tree, options) { var bottomStrut = makeSpan(["strut", "bottom"]); topStrut.style.height = body.height + "em"; - bottomStrut.style.height = (body.height + body.depth) + "em"; + bottomStrut.style.height = body.height + body.depth + "em"; // We'd like to use `vertical-align: top` but in IE 9 this lowers the // baseline of the box to the bottom of this strut (instead staying in the // normal place) so we use an absolute value for vertical-align instead @@ -3447,43 +5348,75 @@ var buildHTML = function(tree, options) { htmlNode.setAttribute("aria-hidden", "true"); return htmlNode; -}; +} -module.exports = buildHTML; +},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./delimiter":97,"./domTree":98,"./stretchy":123,"./units":127,"./utils":128,"babel-runtime/core-js/json/stringify":5}],93:[function(require,module,exports){ +"use strict"; -},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./delimiter":14,"./domTree":15,"./fontMetrics":17,"./utils":25}],12:[function(require,module,exports){ -/** - * This file converts a parse tree into a cooresponding MathML tree. The main - * entry point is the `buildMathML` function, which takes a parse tree from the - * parser. - */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.buildGroup = exports.buildExpression = exports.groupTypes = exports.makeText = undefined; +exports.default = buildMathML; -var buildCommon = require("./buildCommon"); -var fontMetrics = require("./fontMetrics"); -var mathMLTree = require("./mathMLTree"); -var ParseError = require("./ParseError"); -var symbols = require("./symbols"); -var utils = require("./utils"); +var _buildCommon = require("./buildCommon"); -var makeSpan = buildCommon.makeSpan; -var fontMap = buildCommon.fontMap; +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _fontMetrics = require("./fontMetrics"); + +var _fontMetrics2 = _interopRequireDefault(_fontMetrics); + +var _mathMLTree = require("./mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _Style = require("./Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _symbols = require("./symbols"); + +var _symbols2 = _interopRequireDefault(_symbols); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _stretchy = require("./stretchy"); + +var _stretchy2 = _interopRequireDefault(_stretchy); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Takes a symbol and converts it into a MathML text node after performing * optional replacement from symbols.js. */ -var makeText = function(text, mode) { - if (symbols[mode][text] && symbols[mode][text].replace) { - text = symbols[mode][text].replace; +/** + * WARNING: New methods on groupTypes should be added to src/functions. + * + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +var makeText = exports.makeText = function makeText(text, mode) { + if (_symbols2.default[mode][text] && _symbols2.default[mode][text].replace) { + text = _symbols2.default[mode][text].replace; } - return new mathMLTree.TextNode(text); + return new _mathMLTree2.default.TextNode(text); }; /** * Returns the math variant as a string or null if none is required. */ -var getVariant = function(group, options) { +var getVariant = function getVariant(group, options) { var font = options.font; if (!font) { return null; @@ -3495,17 +5428,17 @@ var getVariant = function(group, options) { } var value = group.value; - if (utils.contains(["\\imath", "\\jmath"], value)) { + if (_utils2.default.contains(["\\imath", "\\jmath"], value)) { return null; } - if (symbols[mode][value] && symbols[mode][value].replace) { - value = symbols[mode][value].replace; + if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { + value = _symbols2.default[mode][value].replace; } - var fontName = fontMap[font].fontName; - if (fontMetrics.getCharacterMetrics(value, fontName)) { - return fontMap[options.font].variant; + var fontName = _buildCommon2.default.fontMap[font].fontName; + if (_fontMetrics2.default.getCharacterMetrics(value, fontName)) { + return _buildCommon2.default.fontMap[options.font].variant; } return null; @@ -3515,327 +5448,209 @@ var getVariant = function(group, options) { * Functions for handling the different types of groups found in the parse * tree. Each function should take a parse group and return a MathML node. */ -var groupTypes = {}; +var groupTypes = exports.groupTypes = {}; -groupTypes.mathord = function(group, options) { - var node = new mathMLTree.MathNode( - "mi", - [makeText(group.value, group.mode)]); +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; - var variant = getVariant(group, options); - if (variant) { +groupTypes.mathord = function (group, options) { + var node = new _mathMLTree2.default.MathNode("mi", [makeText(group.value, group.mode)]); + + var variant = getVariant(group, options) || "italic"; + if (variant !== defaultVariant[node.type]) { node.setAttribute("mathvariant", variant); } return node; }; -groupTypes.textord = function(group, options) { +groupTypes.textord = function (group, options) { var text = makeText(group.value, group.mode); var variant = getVariant(group, options) || "normal"; - var node; - if (/[0-9]/.test(group.value)) { + var node = void 0; + if (group.mode === 'text') { + node = new _mathMLTree2.default.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.value)) { // TODO(kevinb) merge adjacent nodes // do it as a post processing step - node = new mathMLTree.MathNode("mn", [text]); - if (options.font) { - node.setAttribute("mathvariant", variant); - } + node = new _mathMLTree2.default.MathNode("mn", [text]); + } else if (group.value === "\\prime") { + node = new _mathMLTree2.default.MathNode("mo", [text]); } else { - node = new mathMLTree.MathNode("mi", [text]); + node = new _mathMLTree2.default.MathNode("mi", [text]); + } + if (variant !== defaultVariant[node.type]) { node.setAttribute("mathvariant", variant); } return node; }; -groupTypes.bin = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.bin = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); return node; }; -groupTypes.rel = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.rel = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); return node; }; -groupTypes.open = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.open = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); return node; }; -groupTypes.close = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.close = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); return node; }; -groupTypes.inner = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.inner = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); return node; }; -groupTypes.punct = function(group) { - var node = new mathMLTree.MathNode( - "mo", [makeText(group.value, group.mode)]); +groupTypes.punct = function (group) { + var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); node.setAttribute("separator", "true"); return node; }; -groupTypes.ordgroup = function(group, options) { +groupTypes.ordgroup = function (group, options) { var inner = buildExpression(group.value, options); - var node = new mathMLTree.MathNode("mrow", inner); + var node = new _mathMLTree2.default.MathNode("mrow", inner); return node; }; -groupTypes.text = function(group, options) { - var inner = buildExpression(group.value.body, options); +groupTypes.supsub = function (group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver = void 0; + var isSup = void 0; + if (group.value.base) { + if (group.value.base.value.type === "horizBrace") { + isSup = group.value.sup ? true : false; + if (isSup === group.value.base.value.isOver) { + isBrace = true; + isOver = group.value.base.value.isOver; + } + } + } - var node = new mathMLTree.MathNode("mtext", inner); - - return node; -}; - -groupTypes.color = function(group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new mathMLTree.MathNode("mstyle", inner); - - node.setAttribute("mathcolor", group.value.color); - - return node; -}; - -groupTypes.supsub = function(group, options) { - var children = [buildGroup(group.value.base, options)]; + var removeUnnecessaryRow = true; + var children = [buildGroup(group.value.base, options, removeUnnecessaryRow)]; if (group.value.sub) { - children.push(buildGroup(group.value.sub, options)); + children.push(buildGroup(group.value.sub, options, removeUnnecessaryRow)); } if (group.value.sup) { - children.push(buildGroup(group.value.sup, options)); + children.push(buildGroup(group.value.sup, options, removeUnnecessaryRow)); } - var nodeType; - if (!group.value.sub) { + var nodeType = void 0; + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.value.sub) { nodeType = "msup"; } else if (!group.value.sup) { nodeType = "msub"; } else { - nodeType = "msubsup"; + var base = group.value.base; + if (base && base.value.limits && options.style === _Style2.default.DISPLAY) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } } - var node = new mathMLTree.MathNode(nodeType, children); + var node = new _mathMLTree2.default.MathNode(nodeType, children); return node; }; -groupTypes.genfrac = function(group, options) { - var node = new mathMLTree.MathNode( - "mfrac", - [buildGroup(group.value.numer, options), - buildGroup(group.value.denom, options)]); - - if (!group.value.hasBarLine) { - node.setAttribute("linethickness", "0px"); - } - - if (group.value.leftDelim != null || group.value.rightDelim != null) { - var withDelims = []; - - if (group.value.leftDelim != null) { - var leftOp = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode(group.value.leftDelim)]); - - leftOp.setAttribute("fence", "true"); - - withDelims.push(leftOp); - } - - withDelims.push(node); - - if (group.value.rightDelim != null) { - var rightOp = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode(group.value.rightDelim)]); - - rightOp.setAttribute("fence", "true"); - - withDelims.push(rightOp); - } - - var outerNode = new mathMLTree.MathNode("mrow", withDelims); - - return outerNode; - } - - return node; -}; - -groupTypes.array = function(group, options) { - return new mathMLTree.MathNode( - "mtable", group.value.body.map(function(row) { - return new mathMLTree.MathNode( - "mtr", row.map(function(cell) { - return new mathMLTree.MathNode( - "mtd", [buildGroup(cell, options)]); - })); - })); -}; - -groupTypes.sqrt = function(group, options) { - var node; +groupTypes.sqrt = function (group, options) { + var node = void 0; if (group.value.index) { - node = new mathMLTree.MathNode( - "mroot", [ - buildGroup(group.value.body, options), - buildGroup(group.value.index, options), - ]); + node = new _mathMLTree2.default.MathNode("mroot", [buildGroup(group.value.body, options), buildGroup(group.value.index, options)]); } else { - node = new mathMLTree.MathNode( - "msqrt", [buildGroup(group.value.body, options)]); + node = new _mathMLTree2.default.MathNode("msqrt", [buildGroup(group.value.body, options)]); } return node; }; -groupTypes.leftright = function(group, options) { - var inner = buildExpression(group.value.body, options); - - if (group.value.left !== ".") { - var leftNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.left, group.mode)]); - - leftNode.setAttribute("fence", "true"); - - inner.unshift(leftNode); +groupTypes.accent = function (group, options) { + var accentNode = void 0; + if (group.value.isStretchy) { + accentNode = _stretchy2.default.mathMLnode(group.value.label); + } else { + accentNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.label, group.mode)]); } - if (group.value.right !== ".") { - var rightNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.right, group.mode)]); - - rightNode.setAttribute("fence", "true"); - - inner.push(rightNode); - } - - var outerNode = new mathMLTree.MathNode("mrow", inner); - - return outerNode; -}; - -groupTypes.accent = function(group, options) { - var accentNode = new mathMLTree.MathNode( - "mo", [makeText(group.value.accent, group.mode)]); - - var node = new mathMLTree.MathNode( - "mover", - [buildGroup(group.value.base, options), - accentNode]); + var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.base, options), accentNode]); node.setAttribute("accent", "true"); return node; }; -groupTypes.spacing = function(group) { - var node; +groupTypes.spacing = function (group) { + var node = void 0; - if (group.value === "\\ " || group.value === "\\space" || - group.value === " " || group.value === "~") { - node = new mathMLTree.MathNode( - "mtext", [new mathMLTree.TextNode("\u00a0")]); + if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { + node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("\xA0")]); } else { - node = new mathMLTree.MathNode("mspace"); + node = new _mathMLTree2.default.MathNode("mspace"); - node.setAttribute( - "width", buildCommon.spacingFunctions[group.value].size); + node.setAttribute("width", _buildCommon2.default.spacingFunctions[group.value].size); } return node; }; -groupTypes.op = function(group) { - var node; - - // TODO(emily): handle big operators using the `largeop` attribute - - if (group.value.symbol) { - // This is a symbol. Just add the symbol. - node = new mathMLTree.MathNode( - "mo", [makeText(group.value.body, group.mode)]); - } else { - // This is a text operator. Add all of the characters from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup. - node = new mathMLTree.MathNode( - "mi", [new mathMLTree.TextNode(group.value.body.slice(1))]); - } - - return node; -}; - -groupTypes.katex = function(group) { - var node = new mathMLTree.MathNode( - "mtext", [new mathMLTree.TextNode("KaTeX")]); - - return node; -}; - -groupTypes.font = function(group, options) { +groupTypes.font = function (group, options) { var font = group.value.font; return buildGroup(group.value.body, options.withFont(font)); }; -groupTypes.delimsizing = function(group) { - var children = []; +groupTypes.styling = function (group, options) { + // Figure out what style we're changing to. + // TODO(kevinb): dedupe this with buildHTML.js + // This will be easier of handling of styling nodes is in the same file. + var styleMap = { + "display": _Style2.default.DISPLAY, + "text": _Style2.default.TEXT, + "script": _Style2.default.SCRIPT, + "scriptscript": _Style2.default.SCRIPTSCRIPT + }; - if (group.value.value !== ".") { - children.push(makeText(group.value.value, group.mode)); - } + var newStyle = styleMap[group.value.style]; + var newOptions = options.havingStyle(newStyle); - var node = new mathMLTree.MathNode("mo", children); + var inner = buildExpression(group.value.value, newOptions); - if (group.value.delimType === "open" || - group.value.delimType === "close") { - // Only some of the delimsizing functions act as fences, and they - // return "open" or "close" delimTypes. - node.setAttribute("fence", "true"); - } else { - // Explicitly disable fencing if it's not a fence, to override the - // defaults. - node.setAttribute("fence", "false"); - } - - return node; -}; - -groupTypes.styling = function(group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new mathMLTree.MathNode("mstyle", inner); + var node = new _mathMLTree2.default.MathNode("mstyle", inner); var styleAttributes = { "display": ["0", "true"], "text": ["0", "false"], "script": ["1", "false"], - "scriptscript": ["2", "false"], + "scriptscript": ["2", "false"] }; var attr = styleAttributes[group.value.style]; @@ -3846,87 +5661,103 @@ groupTypes.styling = function(group, options) { return node; }; -groupTypes.sizing = function(group, options) { - var inner = buildExpression(group.value.value, options); +groupTypes.sizing = function (group, options) { + var newOptions = options.havingSize(group.value.size); + var inner = buildExpression(group.value.value, newOptions); - var node = new mathMLTree.MathNode("mstyle", inner); + var node = new _mathMLTree2.default.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size // changes, because we don't keep state of what style we're currently // in, so we can't reset the size to normal before changing it. Now // that we're passing an options parameter we should be able to fix // this. - node.setAttribute( - "mathsize", buildCommon.sizingMultiplier[group.value.size] + "em"); + node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); return node; }; -groupTypes.overline = function(group, options) { - var operator = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - - var node = new mathMLTree.MathNode( - "mover", - [buildGroup(group.value.body, options), - operator]); - node.setAttribute("accent", "true"); - +groupTypes.verb = function (group, options) { + var text = new _mathMLTree2.default.TextNode(_buildCommon2.default.makeVerb(group, options)); + var node = new _mathMLTree2.default.MathNode("mtext", [text]); + node.setAttribute("mathvariant", _buildCommon2.default.fontMap["mathtt"].variant); return node; }; -groupTypes.underline = function(group, options) { - var operator = new mathMLTree.MathNode( - "mo", [new mathMLTree.TextNode("\u203e")]); - operator.setAttribute("stretchy", "true"); - - var node = new mathMLTree.MathNode( - "munder", - [buildGroup(group.value.body, options), - operator]); +groupTypes.accentUnder = function (group, options) { + var accentNode = _stretchy2.default.mathMLnode(group.value.label); + var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), accentNode]); node.setAttribute("accentunder", "true"); - return node; }; -groupTypes.rule = function(group) { - // TODO(emily): Figure out if there's an actual way to draw black boxes - // in MathML. - var node = new mathMLTree.MathNode("mrow"); - +groupTypes.enclose = function (group, options) { + var node = new _mathMLTree2.default.MathNode("menclose", [buildGroup(group.value.body, options)]); + switch (group.value.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + case "\\fbox": + node.setAttribute("notation", "box"); + break; + case "\\colorbox": + node.setAttribute("mathbackground", group.value.backgroundColor.value); + break; + case "\\fcolorbox": + node.setAttribute("mathbackground", group.value.backgroundColor.value); + // TODO(ron): I don't know any way to set the border color. + node.setAttribute("notation", "box"); + break; + default: + // xcancel + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + } return node; }; -groupTypes.kern = function(group) { - // TODO(kevin): Figure out if there's a way to add space in MathML - var node = new mathMLTree.MathNode("mrow"); +groupTypes.horizBrace = function (group, options) { + var accentNode = _stretchy2.default.mathMLnode(group.value.label); + return new _mathMLTree2.default.MathNode(group.value.isOver ? "mover" : "munder", [buildGroup(group.value.base, options), accentNode]); +}; +groupTypes.xArrow = function (group, options) { + var arrowNode = _stretchy2.default.mathMLnode(group.value.label); + var node = void 0; + var lowerNode = void 0; + + if (group.value.body) { + var upperNode = buildGroup(group.value.body, options); + if (group.value.below) { + lowerNode = buildGroup(group.value.below, options); + node = new _mathMLTree2.default.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new _mathMLTree2.default.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.value.below) { + lowerNode = buildGroup(group.value.below, options); + node = new _mathMLTree2.default.MathNode("munder", [arrowNode, lowerNode]); + } else { + node = new _mathMLTree2.default.MathNode("mover", [arrowNode]); + } return node; }; -groupTypes.llap = function(group, options) { - var node = new mathMLTree.MathNode( - "mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("lspace", "-1width"); - node.setAttribute("width", "0px"); - - return node; -}; - -groupTypes.rlap = function(group, options) { - var node = new mathMLTree.MathNode( - "mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("width", "0px"); - - return node; -}; - -groupTypes.phantom = function(group, options, prev) { +groupTypes.mclass = function (group, options) { var inner = buildExpression(group.value.value, options); - return new mathMLTree.MathNode("mphantom", inner); + return new _mathMLTree2.default.MathNode("mstyle", inner); +}; + +groupTypes.raisebox = function (group, options) { + var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]); + var dy = group.value.dy.value.number + group.value.dy.value.unit; + node.setAttribute("voffset", dy); + return node; }; /** @@ -3934,12 +5765,15 @@ groupTypes.phantom = function(group, options, prev) { * MathML nodes. A little simpler than the HTML version because we don't do any * previous-node handling. */ -var buildExpression = function(expression, options) { +var buildExpression = exports.buildExpression = function buildExpression(expression, options) { var groups = []; for (var i = 0; i < expression.length; i++) { var group = expression[i]; groups.push(buildGroup(group, options)); } + + // TODO(kevinb): combine \\not with mrels and mords + return groups; }; @@ -3947,17 +5781,24 @@ var buildExpression = function(expression, options) { * Takes a group from the parser and calls the appropriate groupTypes function * on it to produce a MathML node. */ -var buildGroup = function(group, options) { +var buildGroup = exports.buildGroup = function buildGroup(group, options) { + var removeUnnecessaryRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (!group) { - return new mathMLTree.MathNode("mrow"); + return new _mathMLTree2.default.MathNode("mrow"); } if (groupTypes[group.type]) { // Call the groupTypes function - return groupTypes[group.type](group, options); + var result = groupTypes[group.type](group, options); + if (removeUnnecessaryRow) { + if (result.type === "mrow" && result.children.length === 1) { + return result.children[0]; + } + } + return result; } else { - throw new ParseError( - "Got group of unknown type: '" + group.type + "'"); + throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); } }; @@ -3969,73 +5810,309 @@ var buildGroup = function(group, options) { * Note that we actually return a domTree element with a `` inside it so * we can do appropriate styling. */ -var buildMathML = function(tree, texExpression, options) { +function buildMathML(tree, texExpression, options) { var expression = buildExpression(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics // tag correctly. - var wrapper = new mathMLTree.MathNode("mrow", expression); + var wrapper = new _mathMLTree2.default.MathNode("mrow", expression); // Build a TeX annotation of the source - var annotation = new mathMLTree.MathNode( - "annotation", [new mathMLTree.TextNode(texExpression)]); + var annotation = new _mathMLTree2.default.MathNode("annotation", [new _mathMLTree2.default.TextNode(texExpression)]); annotation.setAttribute("encoding", "application/x-tex"); - var semantics = new mathMLTree.MathNode( - "semantics", [wrapper, annotation]); + var semantics = new _mathMLTree2.default.MathNode("semantics", [wrapper, annotation]); - var math = new mathMLTree.MathNode("math", [semantics]); + var math = new _mathMLTree2.default.MathNode("math", [semantics]); // You can't style nodes, so we wrap the node in a span. - return makeSpan(["katex-mathml"], [math]); -}; + return _buildCommon2.default.makeSpan(["katex-mathml"], [math]); +} -module.exports = buildMathML; +},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./fontMetrics":101,"./mathMLTree":121,"./stretchy":123,"./symbols":125,"./utils":128}],94:[function(require,module,exports){ +"use strict"; -},{"./ParseError":6,"./buildCommon":10,"./fontMetrics":17,"./mathMLTree":20,"./symbols":23,"./utils":25}],13:[function(require,module,exports){ -var buildHTML = require("./buildHTML"); -var buildMathML = require("./buildMathML"); -var buildCommon = require("./buildCommon"); -var Options = require("./Options"); -var Settings = require("./Settings"); -var Style = require("./Style"); +Object.defineProperty(exports, "__esModule", { + value: true +}); -var makeSpan = buildCommon.makeSpan; +var _buildHTML = require("./buildHTML"); -var buildTree = function(tree, expression, settings) { - settings = settings || new Settings({}); +var _buildHTML2 = _interopRequireDefault(_buildHTML); - var startStyle = Style.TEXT; +var _buildMathML = require("./buildMathML"); + +var _buildMathML2 = _interopRequireDefault(_buildMathML); + +var _buildCommon = require("./buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _Options = require("./Options"); + +var _Options2 = _interopRequireDefault(_Options); + +var _Settings = require("./Settings"); + +var _Settings2 = _interopRequireDefault(_Settings); + +var _Style = require("./Style"); + +var _Style2 = _interopRequireDefault(_Style); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var buildTree = function buildTree(tree, expression, settings) { + settings = settings || new _Settings2.default({}); + + var startStyle = _Style2.default.TEXT; if (settings.displayMode) { - startStyle = Style.DISPLAY; + startStyle = _Style2.default.DISPLAY; } // Setup the default options - var options = new Options({ + var options = new _Options2.default({ style: startStyle, - size: "size5", + maxSize: settings.maxSize }); // `buildHTML` sometimes messes with the parse tree (like turning bins -> // ords), so we build the MathML version first. - var mathMLNode = buildMathML(tree, expression, options); - var htmlNode = buildHTML(tree, options); + var mathMLNode = (0, _buildMathML2.default)(tree, expression, options); + var htmlNode = (0, _buildHTML2.default)(tree, options); - var katexNode = makeSpan(["katex"], [ - mathMLNode, htmlNode, - ]); + var katexNode = _buildCommon2.default.makeSpan(["katex"], [mathMLNode, htmlNode]); if (settings.displayMode) { - return makeSpan(["katex-display"], [katexNode]); + return _buildCommon2.default.makeSpan(["katex-display"], [katexNode]); } else { return katexNode; } }; -module.exports = buildTree; +exports.default = buildTree; -},{"./Options":5,"./Settings":8,"./Style":9,"./buildCommon":10,"./buildHTML":11,"./buildMathML":12}],14:[function(require,module,exports){ +},{"./Options":83,"./Settings":87,"./Style":89,"./buildCommon":91,"./buildHTML":92,"./buildMathML":93}],95:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports._environments = undefined; +exports.default = defineEnvironment; + +var _buildHTML = require("./buildHTML"); + +var _buildMathML = require("./buildMathML"); + +var _Options = require("./Options"); + +var _Options2 = _interopRequireDefault(_Options); + +var _ParseNode = require("./ParseNode"); + +var _ParseNode2 = _interopRequireDefault(_ParseNode); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ + + +/** + * The context contains the following properties: + * - mode: current parsing mode. + * - envName: the name of the environment, one of the listed names. + * - parser: the parser object. + */ + + +/** + * - context: information and references provided by the parser + * - args: an array of arguments passed to \begin{name} + * - optArgs: an array of optional arguments passed to \begin{name} + */ + + +/** + * - numArgs: (default 0) The number of arguments after the \begin{name} function. + * - argTypes: (optional) Just like for a function + * - allowedInText: (default false) Whether or not the environment is allowed + * inside text mode (not enforced yet). + * - numOptionalArgs: (default 0) Just like for a function + */ + + +/** + * Final enviornment spec for use at parse time. + * This is almost identical to `EnvDefSpec`, except it + * 1. includes the function handler + * 2. requires all arguments except argType + * It is generated by `defineEnvironment()` below. + */ +var _environments = exports._environments = {}; + +function defineEnvironment(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + + // Set default values of environments + var data = { + numArgs: props.numArgs || 0, + greediness: 1, + allowedInText: false, + numOptionalArgs: 0, + handler: handler + }; + for (var i = 0; i < names.length; ++i) { + _environments[names[i]] = data; + } + if (htmlBuilder) { + _buildHTML.groupTypes[type] = htmlBuilder; + } + if (mathmlBuilder) { + _buildMathML.groupTypes[type] = mathmlBuilder; + } +} + +},{"./Options":83,"./ParseNode":85,"./buildHTML":92,"./buildMathML":93}],96:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ordargument = exports._functions = undefined; +exports.default = defineFunction; + +var _buildHTML = require("./buildHTML"); + +var _buildMathML = require("./buildMathML"); + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ + + +/** Context provided to function handlers for error messages. */ + + +// TODO: Enumerate all allowed output types. + + +/** + * Final function spec for use at parse time. + * This is almost identical to `FunctionPropSpec`, except it + * 1. includes the function handler, and + * 2. requires all arguments except argTypes. + * It is generated by `defineFunction()` below. + */ +var _functions = exports._functions = {}; + +function defineFunction(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + + // Set default values of functions + var data = { + numArgs: props.numArgs, + argTypes: props.argTypes, + greediness: props.greediness === undefined ? 1 : props.greediness, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + handler: handler + }; + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + if (type) { + if (htmlBuilder) { + _buildHTML.groupTypes[type] = htmlBuilder; + } + if (mathmlBuilder) { + _buildMathML.groupTypes[type] = mathmlBuilder; + } + } +} + +// Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments +var ordargument = exports.ordargument = function ordargument(arg) { + if (arg.type === "ordgroup") { + return arg.value; + } else { + return [arg]; + } +}; + +},{"./buildHTML":92,"./buildMathML":93}],97:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _Style = require("./Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _domTree = require("./domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _buildCommon = require("./buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _fontMetrics = require("./fontMetrics"); + +var _fontMetrics2 = _interopRequireDefault(_fontMetrics); + +var _symbols = require("./symbols"); + +var _symbols2 = _interopRequireDefault(_symbols); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var getMetrics = function getMetrics(symbol, font) { + if (_symbols2.default.math[symbol] && _symbols2.default.math[symbol].replace) { + return _fontMetrics2.default.getCharacterMetrics(_symbols2.default.math[symbol].replace, font); + } else { + return _fontMetrics2.default.getCharacterMetrics(symbol, font); + } +}; + +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ /** * This file deals with creating delimiters of various sizes. The TeXbook * discusses these routines on page 441-442, in the "Another subroutine sets box @@ -4058,98 +6135,60 @@ module.exports = buildTree; * used in `\left` and `\right`. */ -var ParseError = require("./ParseError"); -var Style = require("./Style"); +var styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); -var buildCommon = require("./buildCommon"); -var fontMetrics = require("./fontMetrics"); -var symbols = require("./symbols"); -var utils = require("./utils"); + var span = _buildCommon2.default.makeSpan((classes || []).concat(newOptions.sizingClasses(options)), [delim], options); -var makeSpan = buildCommon.makeSpan; - -/** - * Get the metrics for a given symbol and font, after transformation (i.e. - * after following replacement from symbols.js) - */ -var getMetrics = function(symbol, font) { - if (symbols.math[symbol] && symbols.math[symbol].replace) { - return fontMetrics.getCharacterMetrics( - symbols.math[symbol].replace, font); - } else { - return fontMetrics.getCharacterMetrics( - symbol, font); - } -}; - -/** - * Builds a symbol in the given font size (note size is an integer) - */ -var mathrmSize = function(value, size, mode) { - return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode); -}; - -/** - * Puts a delimiter span in a given style, and adds appropriate height, depth, - * and maxFontSizes. - */ -var styleWrap = function(delim, toStyle, options) { - var span = makeSpan( - ["style-wrap", options.style.reset(), toStyle.cls()], [delim]); - - var multiplier = toStyle.sizeMultiplier / options.style.sizeMultiplier; - - span.height *= multiplier; - span.depth *= multiplier; - span.maxFontSize = toStyle.sizeMultiplier; + span.delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= span.delimSizeMultiplier; + span.depth *= span.delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; return span; }; +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + + span.classes.push("delimcenter"); + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; +}; + /** * Makes a small delimiter. This is a delimiter that comes in the Main-Regular * font, but is restyled to either be in textstyle, scriptstyle, or * scriptscriptstyle. */ -var makeSmallDelim = function(delim, style, center, options, mode) { - var text = buildCommon.makeSymbol(delim, "Main-Regular", mode); - - var span = styleWrap(text, style, options); - +var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = _buildCommon2.default.makeSymbol(delim, "Main-Regular", mode, options); + var span = styleWrap(text, style, options, classes); if (center) { - var shift = - (1 - options.style.sizeMultiplier / style.sizeMultiplier) * - fontMetrics.metrics.axisHeight; - - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; + centerSpan(span, options, style); } - return span; }; +/** + * Builds a symbol in the given font size (note size is an integer) + */ +var mathrmSize = function mathrmSize(value, size, mode, options) { + return _buildCommon2.default.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; + /** * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, * Size3, or Size4 fonts. It is always rendered in textstyle. */ -var makeLargeDelim = function(delim, size, center, options, mode) { - var inner = mathrmSize(delim, size, mode); - - var span = styleWrap( - makeSpan(["delimsizing", "size" + size], - [inner], options.getColor()), - Style.TEXT, options); - +var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = mathrmSize(delim, size, mode, options); + var span = styleWrap(_buildCommon2.default.makeSpan(["delimsizing", "size" + size], [inner], options), _Style2.default.TEXT, options, classes); if (center) { - var shift = (1 - options.style.sizeMultiplier) * - fontMetrics.metrics.axisHeight; - - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; + centerSpan(span, options, _Style2.default.TEXT); } - return span; }; @@ -4157,8 +6196,8 @@ var makeLargeDelim = function(delim, size, center, options, mode) { * Make an inner span with the given offset and in the given font. This is used * in `makeStackedDelim` to make the stacking pieces for the delimiter. */ -var makeInner = function(symbol, font, mode) { - var sizeClass; +var makeInner = function makeInner(symbol, font, mode) { + var sizeClass = void 0; // Apply the correct CSS class to choose the right font. if (font === "Size1-Regular") { sizeClass = "delim-size1"; @@ -4166,26 +6205,24 @@ var makeInner = function(symbol, font, mode) { sizeClass = "delim-size4"; } - var inner = makeSpan( - ["delimsizinginner", sizeClass], - [makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); + var inner = _buildCommon2.default.makeSpan(["delimsizinginner", sizeClass], [_buildCommon2.default.makeSpan([], [_buildCommon2.default.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element // in the appropriate tag that VList uses. - return {type: "elem", elem: inner}; + return { type: "elem", elem: inner }; }; /** * Make a stacked delimiter out of a given delimiter, with the total height at * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. */ -var makeStackedDelim = function(delim, heightTotal, center, options, mode) { +var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { // There are four parts, the top, an optional middle, a repeated part, and a // bottom. - var top; - var middle; - var repeat; - var bottom; + var top = void 0; + var middle = void 0; + var repeat = void 0; + var bottom = void 0; top = repeat = bottom = delim; middle = null; // Also keep track of what font the delimiters are in @@ -4195,93 +6232,88 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the // repeats of the arrows if (delim === "\\uparrow") { - repeat = bottom = "\u23d0"; + repeat = bottom = "\u23D0"; } else if (delim === "\\Uparrow") { repeat = bottom = "\u2016"; } else if (delim === "\\downarrow") { - top = repeat = "\u23d0"; + top = repeat = "\u23D0"; } else if (delim === "\\Downarrow") { top = repeat = "\u2016"; } else if (delim === "\\updownarrow") { top = "\\uparrow"; - repeat = "\u23d0"; + repeat = "\u23D0"; bottom = "\\downarrow"; } else if (delim === "\\Updownarrow") { top = "\\Uparrow"; repeat = "\u2016"; bottom = "\\Downarrow"; } else if (delim === "[" || delim === "\\lbrack") { - top = "\u23a1"; - repeat = "\u23a2"; - bottom = "\u23a3"; + top = "\u23A1"; + repeat = "\u23A2"; + bottom = "\u23A3"; font = "Size4-Regular"; } else if (delim === "]" || delim === "\\rbrack") { - top = "\u23a4"; - repeat = "\u23a5"; - bottom = "\u23a6"; + top = "\u23A4"; + repeat = "\u23A5"; + bottom = "\u23A6"; font = "Size4-Regular"; } else if (delim === "\\lfloor") { - repeat = top = "\u23a2"; - bottom = "\u23a3"; + repeat = top = "\u23A2"; + bottom = "\u23A3"; font = "Size4-Regular"; } else if (delim === "\\lceil") { - top = "\u23a1"; - repeat = bottom = "\u23a2"; + top = "\u23A1"; + repeat = bottom = "\u23A2"; font = "Size4-Regular"; } else if (delim === "\\rfloor") { - repeat = top = "\u23a5"; - bottom = "\u23a6"; + repeat = top = "\u23A5"; + bottom = "\u23A6"; font = "Size4-Regular"; } else if (delim === "\\rceil") { - top = "\u23a4"; - repeat = bottom = "\u23a5"; + top = "\u23A4"; + repeat = bottom = "\u23A5"; font = "Size4-Regular"; } else if (delim === "(") { - top = "\u239b"; - repeat = "\u239c"; - bottom = "\u239d"; + top = "\u239B"; + repeat = "\u239C"; + bottom = "\u239D"; font = "Size4-Regular"; } else if (delim === ")") { - top = "\u239e"; - repeat = "\u239f"; - bottom = "\u23a0"; + top = "\u239E"; + repeat = "\u239F"; + bottom = "\u23A0"; font = "Size4-Regular"; } else if (delim === "\\{" || delim === "\\lbrace") { - top = "\u23a7"; - middle = "\u23a8"; - bottom = "\u23a9"; - repeat = "\u23aa"; + top = "\u23A7"; + middle = "\u23A8"; + bottom = "\u23A9"; + repeat = "\u23AA"; font = "Size4-Regular"; } else if (delim === "\\}" || delim === "\\rbrace") { - top = "\u23ab"; - middle = "\u23ac"; - bottom = "\u23ad"; - repeat = "\u23aa"; + top = "\u23AB"; + middle = "\u23AC"; + bottom = "\u23AD"; + repeat = "\u23AA"; font = "Size4-Regular"; } else if (delim === "\\lgroup") { - top = "\u23a7"; - bottom = "\u23a9"; - repeat = "\u23aa"; + top = "\u23A7"; + bottom = "\u23A9"; + repeat = "\u23AA"; font = "Size4-Regular"; } else if (delim === "\\rgroup") { - top = "\u23ab"; - bottom = "\u23ad"; - repeat = "\u23aa"; + top = "\u23AB"; + bottom = "\u23AD"; + repeat = "\u23AA"; font = "Size4-Regular"; } else if (delim === "\\lmoustache") { - top = "\u23a7"; - bottom = "\u23ad"; - repeat = "\u23aa"; + top = "\u23A7"; + bottom = "\u23AD"; + repeat = "\u23AA"; font = "Size4-Regular"; } else if (delim === "\\rmoustache") { - top = "\u23ab"; - bottom = "\u23a9"; - repeat = "\u23aa"; - font = "Size4-Regular"; - } else if (delim === "\\surd") { - top = "\ue001"; - bottom = "\u23b7"; - repeat = "\ue000"; + top = "\u23AB"; + bottom = "\u23A9"; + repeat = "\u23AA"; font = "Size4-Regular"; } @@ -4305,20 +6337,18 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need - var repeatCount = Math.ceil( - (heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); + var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); // Compute the total height of the delimiter including all the symbols - var realHeightTotal = - minHeight + repeatCount * middleFactor * repeatHeightTotal; + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note // that in this context, "center" means that the delimiter should be // centered around the axis in the current style, while normally it is // centered around the axis in textstyle. - var axisHeight = fontMetrics.metrics.axisHeight; + var axisHeight = options.fontMetrics().axisHeight; if (center) { - axisHeight *= options.style.sizeMultiplier; + axisHeight *= options.sizeMultiplier; } // Calculate the depth var depth = realHeightTotal / 2 - axisHeight; @@ -4331,20 +6361,19 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { // Add the bottom symbol inners.push(makeInner(bottom, font, mode)); - var i; if (middle === null) { // Add that many symbols - for (i = 0; i < repeatCount; i++) { + for (var i = 0; i < repeatCount; i++) { inners.push(makeInner(repeat, font, mode)); } } else { // When there is a middle bit, we need the middle part and two repeated // sections - for (i = 0; i < repeatCount; i++) { + for (var _i = 0; _i < repeatCount; _i++) { inners.push(makeInner(repeat, font, mode)); } inners.push(makeInner(middle, font, mode)); - for (i = 0; i < repeatCount; i++) { + for (var _i2 = 0; _i2 < repeatCount; _i2++) { inners.push(makeInner(repeat, font, mode)); } } @@ -4353,35 +6382,99 @@ var makeStackedDelim = function(delim, heightTotal, center, options, mode) { inners.push(makeInner(top, font, mode)); // Finally, build the vlist - var inner = buildCommon.makeVList(inners, "bottom", depth, options); + var newOptions = options.havingBaseStyle(_Style2.default.TEXT); + var inner = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: depth, + children: inners + }, newOptions); - return styleWrap( - makeSpan(["delimsizing", "mult"], [inner], options.getColor()), - Style.TEXT, options); + return styleWrap(_buildCommon2.default.makeSpan(["delimsizing", "mult"], [inner], newOptions), _Style2.default.TEXT, options, classes); +}; + +var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, options) { + var alternate = void 0; + if (sqrtName === "sqrtTall") { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs from the viniculumn + // to a point near (14 units) the bottom of the surd. The viniculum + // is 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54; + alternate = "M702 0H400000v40H742v" + vertSegment + "l-4 4-4 4c-.667.667\n-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667\n-294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155\n 77-156c66 199.333 139 419.667 219 661 l218 661zM702 0H400000v40H742z"; + } + var pathNode = new _domTree2.default.pathNode(sqrtName, alternate); + + var svg = new _domTree2.default.svgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": height + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + + return _buildCommon2.default.makeSpan(["hide-tail"], [svg], options); +}; + +/** + * Make a sqrt image of the given height, + */ +var makeSqrtImage = function makeSqrtImage(height, options) { + var delim = traverseSequence("\\surd", height, stackLargeDelimiterSequence, options); + + // Create a span containing an SVG image of a sqrt symbol. + var span = void 0; + var sizeMultiplier = options.sizeMultiplier; // default + var spanHeight = void 0; + var viewBoxHeight = void 0; + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + viewBoxHeight = 1000; // from font + var newOptions = options.havingBaseStyle(delim.style); + sizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + spanHeight = 1 * sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, options); + span.style.minWidth = "0.853em"; + span.advanceWidth = 0.833 * sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = 1000 * sizeToMaxHeight[delim.size]; + spanHeight = sizeToMaxHeight[delim.size] / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, options); + span.style.minWidth = "1.02em"; + span.advanceWidth = 1.0 / sizeMultiplier; // from the font + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height / sizeMultiplier; + viewBoxHeight = Math.floor(1000 * height); + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, options); + span.style.minWidth = "0.742em"; + span.advanceWidth = 1.056 / sizeMultiplier; + } + + span.height = spanHeight; + span.style.height = spanHeight + "em"; + + return { + span: span, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: options.fontMetrics().sqrtRuleThickness * sizeMultiplier + }; }; // There are three kinds of delimiters, delimiters that stack when they become // too large -var stackLargeDelimiters = [ - "(", ")", "[", "\\lbrack", "]", "\\rbrack", - "\\{", "\\lbrace", "\\}", "\\rbrace", - "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", - "\\surd", -]; +var stackLargeDelimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "\\surd"]; // delimiters that always stack -var stackAlwaysDelimiters = [ - "\\uparrow", "\\downarrow", "\\updownarrow", - "\\Uparrow", "\\Downarrow", "\\Updownarrow", - "|", "\\|", "\\vert", "\\Vert", - "\\lvert", "\\rvert", "\\lVert", "\\rVert", - "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", -]; +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache"]; // and delimiters that never stack -var stackNeverDelimiters = [ - "<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt", -]; +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of // $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ @@ -4391,7 +6484,7 @@ var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; /** * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. */ -var makeSizedDelim = function(delim, size, options, mode) { +var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { // < and > turn into \langle and \rangle in delimiters if (delim === "<" || delim === "\\lt") { delim = "\\langle"; @@ -4400,14 +6493,12 @@ var makeSizedDelim = function(delim, size, options, mode) { } // Sized delimiters are never centered. - if (utils.contains(stackLargeDelimiters, delim) || - utils.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode); - } else if (utils.contains(stackAlwaysDelimiters, delim)) { - return makeStackedDelim( - delim, sizeToMaxHeight[size], false, options, mode); + if (_utils2.default.contains(stackLargeDelimiters, delim) || _utils2.default.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (_utils2.default.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); } else { - throw new ParseError("Illegal delimiter: '" + delim + "'"); + throw new _ParseError2.default("Illegal delimiter: '" + delim + "'"); } }; @@ -4424,41 +6515,19 @@ var makeSizedDelim = function(delim, size, options, mode) { */ // Delimiters that never stack try small delimiters and large delimiters only -var stackNeverDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "large", size: 1}, - {type: "large", size: 2}, - {type: "large", size: 3}, - {type: "large", size: 4}, -]; +var stackNeverDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }]; // Delimiters that always stack try the small delimiters first, then stack -var stackAlwaysDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "stack"}, -]; +var stackAlwaysDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "stack" }]; // Delimiters that stack when large try the small and then large delimiters, and // stack afterwards -var stackLargeDelimiterSequence = [ - {type: "small", style: Style.SCRIPTSCRIPT}, - {type: "small", style: Style.SCRIPT}, - {type: "small", style: Style.TEXT}, - {type: "large", size: 1}, - {type: "large", size: 2}, - {type: "large", size: 3}, - {type: "large", size: 4}, - {type: "stack"}, -]; +var stackLargeDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }, { type: "stack" }]; /** * Get the font used in a delimiter based on what kind of delimiter it is. */ -var delimTypeToFont = function(type) { +var delimTypeToFont = function delimTypeToFont(type) { if (type.type === "small") { return "Main-Regular"; } else if (type.type === "large") { @@ -4472,7 +6541,7 @@ var delimTypeToFont = function(type) { * Traverse a sequence of types of delimiters to decide what kind of delimiter * should be used to create a delimiter of the given height+depth. */ -var traverseSequence = function(delim, height, sequence, options) { +var traverseSequence = function traverseSequence(delim, height, sequence, options) { // Here, we choose the index we should start at in the sequences. In smaller // sizes (which correspond to larger numbers in style.size) we start earlier // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts @@ -4491,7 +6560,8 @@ var traverseSequence = function(delim, height, sequence, options) { // account for the style change size. if (sequence[i].type === "small") { - heightDepth *= sequence[i].style.sizeMultiplier; + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; } // Check if the delimiter at this size works for the given height. @@ -4508,7 +6578,7 @@ var traverseSequence = function(delim, height, sequence, options) { * Make a delimiter of a given height+depth, with optional centering. Here, we * traverse the sequences, and create a delimiter that the sequence tells us to. */ -var makeCustomSizedDelim = function(delim, height, center, options, mode) { +var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { if (delim === "<" || delim === "\\lt") { delim = "\\langle"; } else if (delim === ">" || delim === "\\gt") { @@ -4516,10 +6586,10 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) { } // Decide what sequence to use - var sequence; - if (utils.contains(stackNeverDelimiters, delim)) { + var sequence = void 0; + if (_utils2.default.contains(stackNeverDelimiters, delim)) { sequence = stackNeverDelimiterSequence; - } else if (utils.contains(stackLargeDelimiters, delim)) { + } else if (_utils2.default.contains(stackLargeDelimiters, delim)) { sequence = stackLargeDelimiterSequence; } else { sequence = stackAlwaysDelimiterSequence; @@ -4528,75 +6598,92 @@ var makeCustomSizedDelim = function(delim, height, center, options, mode) { // Look through the sequence var delimType = traverseSequence(delim, height, sequence, options); - // Depending on the sequence element we decided on, call the appropriate - // function. + // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode); + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode); - } else if (delimType.type === "stack") { - return makeStackedDelim(delim, height, center, options, mode); - } + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else /* if (delimType.type === "stack") */{ + return makeStackedDelim(delim, height, center, options, mode, classes); + } }; /** * Make a delimiter for use with `\left` and `\right`, given a height and depth * of an expression that the delimiters surround. */ -var makeLeftRightDelim = function(delim, height, depth, options, mode) { +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { // We always center \left/\right delimiters, so the axis is always shifted - var axisHeight = - fontMetrics.metrics.axisHeight * options.style.sizeMultiplier; + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right var delimiterFactor = 901; - var delimiterExtend = 5.0 / fontMetrics.metrics.ptPerEm; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; - var maxDistFromAxis = Math.max( - height - axisHeight, depth + axisHeight); + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); var totalHeight = Math.max( - // In real TeX, calculations are done using integral values which are - // 65536 per pt, or 655360 per em. So, the division here truncates in - // TeX but doesn't here, producing different results. If we wanted to - // exactly match TeX's calculation, we could do - // Math.floor(655360 * maxDistFromAxis / 500) * - // delimiterFactor / 655360 - // (To see the difference, compare - // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} - // in TeX and KaTeX) - maxDistFromAxis / 500 * delimiterFactor, - 2 * maxDistFromAxis - delimiterExtend); + // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total // height - return makeCustomSizedDelim(delim, totalHeight, true, options, mode); + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); }; -module.exports = { +exports.default = { + sqrtImage: makeSqrtImage, sizedDelim: makeSizedDelim, customSizedDelim: makeCustomSizedDelim, - leftRightDelim: makeLeftRightDelim, + leftRightDelim: makeLeftRightDelim }; -},{"./ParseError":6,"./Style":9,"./buildCommon":10,"./fontMetrics":17,"./symbols":23,"./utils":25}],15:[function(require,module,exports){ -/** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - */ -var unicodeRegexes = require("./unicodeRegexes"); -var utils = require("./utils"); +},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./domTree":98,"./fontMetrics":101,"./symbols":125,"./utils":128}],98:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getIterator2 = require("babel-runtime/core-js/get-iterator"); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _unicodeRegexes = require("./unicodeRegexes"); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _svgGeometry = require("./svgGeometry"); + +var _svgGeometry2 = _interopRequireDefault(_svgGeometry); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Create an HTML className based on a list of classes. In addition to joining * with spaces, we also remove null or empty classes. */ -var createClass = function(classes) { +var createClass = function createClass(classes) { classes = classes.slice(); for (var i = classes.length - 1; i >= 0; i--) { if (!classes[i]) { @@ -4607,107 +6694,317 @@ var createClass = function(classes) { return classes.join(" "); }; +// To ensure that all nodes have compatible signatures for these methods. + + +/** + * All `DomChildNode`s MUST have `height`, `depth`, and `maxFontSize` numeric + * fields. + * + * `DomChildNode` is not defined as an interface since `documentFragment` also + * has these fields but should not be considered a `DomChildNode`. + */ + +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + */ + /** * This node represents a span node, with a className, a list of children, and * an inline style. It also contains information about its height, depth, and * maxFontSize. */ -function span(classes, children, height, depth, maxFontSize, style) { - this.classes = classes || []; - this.children = children || []; - this.height = height || 0; - this.depth = depth || 0; - this.maxFontSize = maxFontSize || 0; - this.style = style || {}; - this.attributes = {}; -} +var span = function () { + function span(classes, children, options) { + (0, _classCallCheck3.default)(this, span); -/** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all - * browsers support attributes the same, and having too many custom attributes - * is probably bad. - */ -span.prototype.setAttribute = function(attribute, value) { - this.attributes[attribute] = value; -}; - -/** - * Convert the span into an HTML node - */ -span.prototype.toNode = function() { - var span = document.createElement("span"); - - // Apply the class - span.className = createClass(this.classes); - - // Apply inline styles - for (var style in this.style) { - if (Object.prototype.hasOwnProperty.call(this.style, style)) { - span.style[style] = this.style[style]; + this.classes = classes || []; + this.children = children || []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + this.attributes = {}; + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + var color = options.getColor(); + if (color) { + this.style.color = color; + } } } - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - span.setAttribute(attr, this.attributes[attr]); + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all + * browsers support attributes the same, and having too many custom attributes + * is probably bad. + */ + + + (0, _createClass3.default)(span, [{ + key: "setAttribute", + value: function setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + }, { + key: "tryCombine", + value: function tryCombine(sibling) { + return false; } - } - // Append the children, also as HTML nodes - for (var i = 0; i < this.children.length; i++) { - span.appendChild(this.children[i].toNode()); - } + /** + * Convert the span into an HTML node + */ + }, { + key: "toNode", + value: function toNode() { + var span = document.createElement("span"); + + // Apply the class + span.className = createClass(this.classes); + + // Apply inline styles + for (var style in this.style) { + if (Object.prototype.hasOwnProperty.call(this.style, style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + span.style[style] = this.style[style]; + } + } + + // Apply attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + span.setAttribute(attr, this.attributes[attr]); + } + } + + // Append the children, also as HTML nodes + for (var i = 0; i < this.children.length; i++) { + span.appendChild(this.children[i].toNode()); + } + + return span; + } + + /** + * Convert the span into an HTML markup string + */ + + }, { + key: "toMarkup", + value: function toMarkup() { + var markup = ") element with a hyperlink, a list of classes, + * a list of children, and an inline style. It also contains information about its + * height, depth, and maxFontSize. */ -span.prototype.toMarkup = function() { - var markup = " 0 || createClass(this.classes) !== createClass(sibling.classes) || this.skew !== sibling.skew || this.maxFontSize !== sibling.maxFontSize) { + return false; + } + for (var style in this.style) { + if (this.style.hasOwnProperty(style) && this.style[style] !== sibling.style[style]) { + return false; + } + } + for (var _style in sibling.style) { + if (sibling.style.hasOwnProperty(_style) && this.style[_style] !== sibling.style[_style]) { + return false; + } + } + this.value += sibling.value; + this.height = Math.max(this.height, sibling.height); + this.depth = Math.max(this.depth, sibling.depth); + this.italic = sibling.italic; + return true; + } + + /** + * Creates a text node or span from a symbol node. Note that a span is only + * created if it is needed. + */ + + }, { + key: "toNode", + value: function toNode() { + var node = document.createTextNode(this.value); + var span = null; + + if (this.italic > 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); + // $FlowFixMe Flow doesn't seem to understand span.style's type. + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + + /** + * Creates markup for a symbol node. + */ + + }, { + key: "toMarkup", + value: function toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += _utils2.default.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + _utils2.default.escape(styles) + "\""; + } + + var escaped = _utils2.default.escape(this.value); + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } + }]); + return symbolNode; +}(); /** - * Creates a text node or span from a symbol node. Note that a span is only - * created if it is needed. + * SVG nodes are used to render stretchy wide elements. */ -symbolNode.prototype.toNode = function() { - var node = document.createTextNode(this.value); - var span = null; - if (this.italic > 0) { - span = document.createElement("span"); - span.style.marginRight = this.italic + "em"; + +var svgNode = function () { + function svgNode(children, attributes) { + (0, _classCallCheck3.default)(this, svgNode); + + this.children = children || []; + this.attributes = attributes || {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; } + // Required for all `DomChildNode`s. Are always 0 for svgNode. - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); - span.style[style] = this.style[style]; + (0, _createClass3.default)(svgNode, [{ + key: "toNode", + value: function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); + + // Apply attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + return node; } - } + }, { + key: "toMarkup", + value: function toMarkup() { + var markup = " 0) { - styles += "margin-right:" + this.italic + "em;"; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + return markup; } + }]); + return svgNode; +}(); + +var pathNode = function () { + function pathNode(pathName, alternate) { + (0, _classCallCheck3.default)(this, pathNode); + + this.pathName = pathName; + this.alternate = alternate; // Used only for tall \sqrt } - if (styles) { - needsSpan = true; - markup += " style=\"" + utils.escape(styles) + "\""; + (0, _createClass3.default)(pathNode, [{ + key: "toNode", + value: function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "path"); + + if (this.alternate) { + node.setAttribute("d", this.alternate); + } else { + node.setAttribute("d", _svgGeometry2.default.path[this.pathName]); + } + + return node; + } + }, { + key: "toMarkup", + value: function toMarkup() { + if (this.alternate) { + return ""; + } else { + return ""; + } + } + }]); + return pathNode; +}(); + +var lineNode = function () { + function lineNode(attributes) { + (0, _classCallCheck3.default)(this, lineNode); + + this.attributes = attributes || {}; } - var escaped = utils.escape(this.value); - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += ""; - return markup; - } else { - return escaped; - } -}; + (0, _createClass3.default)(lineNode, [{ + key: "toNode", + value: function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); -module.exports = { + // Apply attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + } + }, { + key: "toMarkup", + value: function toMarkup() { + var markup = " 1 && lastRow.length === 1 && lastRow[0].value.value[0].value.length === 0) { + body.pop(); + } break; } else if (next === "\\\\" || next === "\\cr") { var cr = parser.parseFunction(); @@ -4908,201 +7478,447 @@ function parseArray(parser, result) { row = []; body.push(row); } else { - throw new ParseError("Expected & or \\\\ or \\end", - parser.nextToken); + throw new _ParseError2.default("Expected & or \\\\ or \\end", parser.nextToken); } } result.body = body; result.rowGaps = rowGaps; - return new ParseNode(result.type, result, parser.mode); + return new _ParseNode2.default(result.type, result, parser.mode); } -/* - * An environment definition is very similar to a function definition: - * it is declared with a name or a list of names, a set of properties - * and a handler containing the actual implementation. - * - * The properties include: - * - numArgs: The number of arguments after the \begin{name} function. - * - argTypes: (optional) Just like for a function - * - allowedInText: (optional) Whether or not the environment is allowed inside - * text mode (default false) (not enforced yet) - * - numOptionalArgs: (optional) Just like for a function - * A bare number instead of that object indicates the numArgs value. - * - * The handler function will receive two arguments - * - context: information and references provided by the parser - * - args: an array of arguments passed to \begin{name} - * The context contains the following properties: - * - envName: the name of the environment, one of the listed names. - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions associated with these arguments from args. - * The handler must return a ParseResult. - */ +// Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. +function dCellStyle(envName) { + if (envName.substr(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} -function defineEnvironment(names, props, handler) { - if (typeof names === "string") { - names = [names]; +var htmlBuilder = function htmlBuilder(group, options) { + var r = void 0; + var c = void 0; + var nr = group.value.body.length; + var nc = 0; + var body = new Array(nr); + + // Horizontal spacing + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // \arraycolsep in article.cls + + // Vertical spacing + var baselineskip = 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + var jot = 3 * pt; + // Default \arraystretch from lttab.dtx + // TODO(gagern): may get redefined once we have user-defined macros + var arraystretch = _utils2.default.deflt(group.value.arraystretch, 1); + var arrayskip = arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; + for (r = 0; r < group.value.body.length; ++r) { + var inrow = group.value.body[r]; + var _height = arstrutHeight; // \@array adds an \@arstrut + var _depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + for (c = 0; c < inrow.length; ++c) { + var elt = html.buildGroup(inrow[c], options); + if (_depth < elt.depth) { + _depth = elt.depth; + } + if (_height < elt.height) { + _height = elt.height; + } + outrow[c] = elt; + } + + var gap = 0; + if (group.value.rowGaps[r]) { + gap = (0, _units.calculateSize)(group.value.rowGaps[r].value, options); + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + if (_depth < gap) { + _depth = gap; // \@xargarraycr + } + gap = 0; + } + } + // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + if (group.value.addJot) { + _depth += jot; + } + + outrow.height = _height; + outrow.depth = _depth; + totalHeight += _height; + outrow.pos = totalHeight; + totalHeight += _depth + gap; // \@yargarraycr + body[r] = outrow; } - if (typeof props === "number") { - props = { numArgs: props }; + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.value.cols || []; + var cols = []; + var colSep = void 0; + var colDescrNum = void 0; + for (c = 0, colDescrNum = 0; + // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + + var colDescr = colDescriptions[colDescrNum] || {}; + + var firstSeparator = true; + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); + colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|") { + var _separator = _stretchy2.default.ruleSpan("vertical-separator", options); + _separator.style.height = totalHeight + "em"; + _separator.style.verticalAlign = -(totalHeight - offset) + "em"; + + cols.push(_separator); + } else { + throw new _ParseError2.default("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + if (c > 0 || group.value.hskipBeforeAndAfter) { + sepwidth = _utils2.default.deflt(colDescr.pregap, arraycolsep); + if (sepwidth !== 0) { + colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + var col = []; + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + if (!elem) { + continue; + } + var shift = row.pos - offset; + elem.depth = row.depth; + elem.height = row.height; + col.push({ type: "elem", elem: elem, shift: shift }); + } + + col = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = _buildCommon2.default.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.value.hskipBeforeAndAfter) { + sepwidth = _utils2.default.deflt(colDescr.postgap, arraycolsep); + if (sepwidth !== 0) { + colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } } - // Set default values of environments - var data = { - numArgs: props.numArgs || 0, - argTypes: props.argTypes, - greediness: 1, - allowedInText: !!props.allowedInText, - numOptionalArgs: props.numOptionalArgs || 0, - handler: handler, + body = _buildCommon2.default.makeSpan(["mtable"], cols); + return _buildCommon2.default.makeSpan(["mord"], [body], options); +}; + +var mathmlBuilder = function mathmlBuilder(group, options) { + return new _mathMLTree2.default.MathNode("mtable", group.value.body.map(function (row) { + return new _mathMLTree2.default.MathNode("mtr", row.map(function (cell) { + return new _mathMLTree2.default.MathNode("mtd", [mml.buildGroup(cell, options)]); + })); + })); +}; + +// Convinient function for aligned and alignedat environments. +var alignedHandler = function alignedHandler(context, args) { + var res = { + type: "array", + cols: [], + addJot: true }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; + res = parseArray(context.parser, res, "display"); + + // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + var numMaths = void 0; + var numCols = 0; + var emptyGroup = new _ParseNode2.default("ordgroup", [], context.mode); + if (args[0] && args[0].value) { + var arg0 = ""; + for (var i = 0; i < args[0].value.length; i++) { + arg0 += args[0].value[i].value; + } + numMaths = Number(arg0); + numCols = numMaths * 2; } -} + var isAligned = !numCols; + res.value.body.forEach(function (row) { + for (var _i = 1; _i < row.length; _i += 2) { + // Modify ordgroup node within styling node + var ordgroup = row[_i].value.value[0]; + ordgroup.value.unshift(emptyGroup); + } + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + if (numMaths < curMaths) { + throw new _ParseError2.default("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); + + // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + for (var _i2 = 0; _i2 < numCols; ++_i2) { + var _align = "r"; + var _pregap = 0; + if (_i2 % 2 === 1) { + _align = "l"; + } else if (_i2 > 0 && isAligned) { + // "aligned" mode. + _pregap = 1; // add one \quad + } + res.value.cols[_i2] = { + type: "align", + align: _align, + pregap: _pregap, + postgap: 0 + }; + } + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation // is part of the source2e.pdf file of LaTeX2e source documentation. -defineEnvironment("array", { - numArgs: 1, -}, function(context, args) { - var colalign = args[0]; - colalign = colalign.value.map ? colalign.value : [colalign]; - var cols = colalign.map(function(node) { - var ca = node.value; - if ("lcr".indexOf(ca) !== -1) { - return { - type: "align", - align: ca, - }; - } else if (ca === "|") { - return { - type: "separator", - separator: "|", - }; - } - throw new ParseError( - "Unknown column alignment: " + node.value, - node); - }); - var res = { - type: "array", - cols: cols, - hskipBeforeAndAfter: true, // \@preamble in lttab.dtx - }; - res = parseArray(context.parser, res); - return res; +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. +(0, _defineEnvironment2.default)({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var colalign = args[0]; + colalign = colalign.value.map ? colalign.value : [colalign]; + var cols = colalign.map(function (node) { + var ca = node.value; + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } + throw new _ParseError2.default("Unknown column alignment: " + node.value, node); + }); + var res = { + type: "array", + cols: cols, + hskipBeforeAndAfter: true // \@preamble in lttab.dtx + }; + res = parseArray(context.parser, res, dCellStyle(context.envName)); + return res; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder }); // The matrix environments of amsmath builds on the array environment // of LaTeX, which is discussed above. -defineEnvironment([ - "matrix", - "pmatrix", - "bmatrix", - "Bmatrix", - "vmatrix", - "Vmatrix", -], { -}, function(context) { - var delimiters = { - "matrix": null, - "pmatrix": ["(", ")"], - "bmatrix": ["[", "]"], - "Bmatrix": ["\\{", "\\}"], - "vmatrix": ["|", "|"], - "Vmatrix": ["\\Vert", "\\Vert"], - }[context.envName]; - var res = { - type: "array", - hskipBeforeAndAfter: false, // \hskip -\arraycolsep in amsmath - }; - res = parseArray(context.parser, res); - if (delimiters) { - res = new ParseNode("leftright", { - body: [res], - left: delimiters[0], - right: delimiters[1], - }, context.mode); - } - return res; +(0, _defineEnvironment2.default)({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName]; + var res = { + type: "array", + hskipBeforeAndAfter: false // \hskip -\arraycolsep in amsmath + }; + res = parseArray(context.parser, res, dCellStyle(context.envName)); + if (delimiters) { + res = new _ParseNode2.default("leftright", { + body: [res], + left: delimiters[0], + right: delimiters[1] + }, context.mode); + } + return res; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder }); // A cases environment (in amsmath.sty) is almost equivalent to // \def\arraystretch{1.2}% // \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. -defineEnvironment("cases", { -}, function(context) { - var res = { - type: "array", - arraystretch: 1.2, - cols: [{ - type: "align", - align: "l", - pregap: 0, - postgap: fontMetrics.metrics.quad, - }, { - type: "align", - align: "l", - pregap: 0, - postgap: 0, - }], - }; - res = parseArray(context.parser, res); - res = new ParseNode("leftright", { - body: [res], - left: "\\{", - right: ".", - }, context.mode); - return res; +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. +(0, _defineEnvironment2.default)({ + type: "array", + names: ["cases", "dcases"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var res = { + type: "array", + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 /* 1em quad */ + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + res = parseArray(context.parser, res, dCellStyle(context.envName)); + res = new _ParseNode2.default("leftright", { + body: [res], + left: "\\{", + right: "." + }, context.mode); + return res; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder }); // An aligned environment is like the align* environment // except it operates within math mode. // Note that we assume \nomallineskiplimit to be zero, // so that \strut@ is the same as \strut. -defineEnvironment("aligned", { -}, function(context) { - var res = { - type: "array", - cols: [], - }; - res = parseArray(context.parser, res); - var emptyGroup = new ParseNode("ordgroup", [], context.mode); - var numCols = 0; - res.value.body.forEach(function(row) { - var i; - for (i = 1; i < row.length; i += 2) { - row[i].value.unshift(emptyGroup); - } - if (numCols < row.length) { - numCols = row.length; - } - }); - for (var i = 0; i < numCols; ++i) { - var align = "r"; - var pregap = 0; - if (i % 2 === 1) { - align = "l"; - } else if (i > 0) { - pregap = 2; // one \qquad between columns - } - res.value.cols[i] = { - type: "align", - align: align, - pregap: pregap, - postgap: 0, - }; - } - return res; +(0, _defineEnvironment2.default)({ + type: "array", + names: ["aligned"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder }); -},{"./ParseError":6,"./fontMetrics":17,"./parseData":21}],17:[function(require,module,exports){ -/* eslint no-unused-vars:0 */ +// A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. +(0, _defineEnvironment2.default)({ + type: "array", + names: ["gathered"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var res = { + type: "array", + cols: [{ + type: "align", + align: "c" + }], + addJot: true + }; + res = parseArray(context.parser, res, "display"); + return res; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); -var Style = require("./Style"); -var cjkRegex = require("./unicodeRegexes").cjkRegex; +// alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. +(0, _defineEnvironment2.default)({ + type: "array", + names: ["alignedat"], + // One for numbered and for unnumbered; + // but, KaTeX doesn't supports math numbering yet, + // they make no difference for now. + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); + +},{"../ParseError":84,"../ParseNode":85,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineEnvironment":95,"../mathMLTree":121,"../stretchy":123,"../units":127,"../utils":128}],101:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _unicodeRegexes = require("./unicodeRegexes"); + +var _fontMetricsData = require("./fontMetricsData"); + +var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * This file contains metrics regarding fonts and individual symbols. The sigma @@ -5111,117 +7927,85 @@ var cjkRegex = require("./unicodeRegexes").cjkRegex; * `metrics` variable and the getCharacterMetrics function. */ -// These font metrics are extracted from TeX by using -// \font\a=cmmi10 -// \showthe\fontdimenX\a -// where X is the corresponding variable number. These correspond to the font -// parameters of the symbol fonts. In TeX, there are actually three sets of -// dimensions, one for each of textstyle, scriptstyle, and scriptscriptstyle, -// but we only use the textstyle ones, and scale certain dimensions accordingly. -// See the TeXbook, page 441. -var sigma1 = 0.025; -var sigma2 = 0; -var sigma3 = 0; -var sigma4 = 0; -var sigma5 = 0.431; -var sigma6 = 1; -var sigma7 = 0; -var sigma8 = 0.677; -var sigma9 = 0.394; -var sigma10 = 0.444; -var sigma11 = 0.686; -var sigma12 = 0.345; -var sigma13 = 0.413; -var sigma14 = 0.363; -var sigma15 = 0.289; -var sigma16 = 0.150; -var sigma17 = 0.247; -var sigma18 = 0.386; -var sigma19 = 0.050; -var sigma20 = 2.390; -var sigma21 = 1.01; -var sigma21Script = 0.81; -var sigma21ScriptScript = 0.71; -var sigma22 = 0.250; +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], // sigma1 + space: [0.000, 0.000, 0.000], // sigma2 + stretch: [0.000, 0.000, 0.000], // sigma3 + shrink: [0.000, 0.000, 0.000], // sigma4 + xHeight: [0.431, 0.431, 0.431], // sigma5 + quad: [1.000, 1.171, 1.472], // sigma6 + extraSpace: [0.000, 0.000, 0.000], // sigma7 + num1: [0.677, 0.732, 0.925], // sigma8 + num2: [0.394, 0.384, 0.387], // sigma9 + num3: [0.444, 0.471, 0.504], // sigma10 + denom1: [0.686, 0.752, 1.025], // sigma11 + denom2: [0.345, 0.344, 0.532], // sigma12 + sup1: [0.413, 0.503, 0.504], // sigma13 + sup2: [0.363, 0.431, 0.404], // sigma14 + sup3: [0.289, 0.286, 0.294], // sigma15 + sub1: [0.150, 0.143, 0.200], // sigma16 + sub2: [0.247, 0.286, 0.400], // sigma17 + supDrop: [0.386, 0.353, 0.494], // sigma18 + subDrop: [0.050, 0.071, 0.100], // sigma19 + delim1: [2.390, 1.700, 1.980], // sigma20 + delim2: [1.010, 1.157, 1.420], // sigma21 + axisHeight: [0.250, 0.250, 0.250], // sigma22 -// These font metrics are extracted from TeX by using -// \font\a=cmex10 -// \showthe\fontdimenX\a -// where X is the corresponding variable number. These correspond to the font -// parameters of the extension fonts (family 3). See the TeXbook, page 441. -var xi1 = 0; -var xi2 = 0; -var xi3 = 0; -var xi4 = 0; -var xi5 = 0.431; -var xi6 = 1; -var xi7 = 0; -var xi8 = 0.04; -var xi9 = 0.111; -var xi10 = 0.166; -var xi11 = 0.2; -var xi12 = 0.6; -var xi13 = 0.1; + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], // xi13; cmex7: 0.143 -// This value determines how large a pt is, for metrics which are defined in -// terms of pts. -// This value is also used in katex.less; if you change it make sure the values -// match. -var ptPerEm = 10.0; + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], -// The space between adjacent `|` columns in an array definition. From -// `\showthe\doublerulesep` in LaTeX. -var doubleRuleSep = 2.0 / ptPerEm; + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], -/** - * This is just a mapping from common names to real metrics - */ -var metrics = { - xHeight: sigma5, - quad: sigma6, - num1: sigma8, - num2: sigma9, - num3: sigma10, - denom1: sigma11, - denom2: sigma12, - sup1: sigma13, - sup2: sigma14, - sup3: sigma15, - sub1: sigma16, - sub2: sigma17, - supDrop: sigma18, - subDrop: sigma19, - axisHeight: sigma22, - defaultRuleThickness: xi8, - bigOpSpacing1: xi9, - bigOpSpacing2: xi10, - bigOpSpacing3: xi11, - bigOpSpacing4: xi12, - bigOpSpacing5: xi13, - ptPerEm: ptPerEm, - emPerEx: sigma5 / sigma6, - doubleRuleSep: doubleRuleSep, - - // TODO(alpert): Missing parallel structure here. We should probably add - // style-specific metrics for all of these. - delim1: sigma20, - getDelim2: function(style) { - if (style.size === Style.TEXT.size) { - return sigma21; - } else if (style.size === Style.SCRIPT.size) { - return sigma21Script; - } else if (style.size === Style.SCRIPTSCRIPT.size) { - return sigma21ScriptScript; - } - throw new Error("Unexpected style size: " + style.size); - }, + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2] }; // This map contains a mapping from font name and character code to character // metrics, including height, depth, italic correction, and skew (kern from the // character to the corresponding \skewchar) // This map is generated via `make metrics`. It should not be changed manually. -var metricMap = require("./fontMetricsData"); + // These are very rough approximations. We default to Times New Roman which // should have Latin-1 and Cyrillic characters, but may not depending on the @@ -5359,42 +8143,74 @@ var extraCharacterMap = { 'ь': 'a', 'э': 'e', 'ю': 'm', - 'я': 'r', + 'я': 'r' }; /** * This function is a convenience function for looking up information in the - * metricMap table. It takes a character as a string, and a style. + * metricMap table. It takes a character as a string, and a font. * * Note: the `width` property may be undefined if fontMetricsData.js wasn't * built using `Make extended_metrics`. */ -var getCharacterMetrics = function(character, style) { +var getCharacterMetrics = function getCharacterMetrics(character, font) { var ch = character.charCodeAt(0); if (character[0] in extraCharacterMap) { ch = extraCharacterMap[character[0]].charCodeAt(0); - } else if (cjkRegex.test(character[0])) { + } else if (_unicodeRegexes.cjkRegex.test(character[0])) { ch = 'M'.charCodeAt(0); } - var metrics = metricMap[style][ch]; + var metrics = _fontMetricsData2.default[font]['' + ch]; if (metrics) { return { depth: metrics[0], height: metrics[1], italic: metrics[2], skew: metrics[3], - width: metrics[4], + width: metrics[4] }; } }; -module.exports = { - metrics: metrics, - getCharacterMetrics: getCharacterMetrics, +var fontMetricsBySizeIndex = {}; + +/** + * Get the font metrics for a given size. + */ +var getFontMetrics = function getFontMetrics(size) { + var sizeIndex = void 0; + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + return fontMetricsBySizeIndex[sizeIndex]; }; -},{"./Style":9,"./fontMetricsData":18,"./unicodeRegexes":24}],18:[function(require,module,exports){ -module.exports = { +exports.default = { + getFontMetrics: getFontMetrics, + getCharacterMetrics: getCharacterMetrics +}; + +},{"./fontMetricsData":102,"./unicodeRegexes":126}],102:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var fontMetricsData = { "AMS-Regular": { "65": [0, 0.68889, 0, 0], "66": [0, 0.68889, 0, 0], @@ -5650,7 +8466,7 @@ module.exports = { "57368": [0.25142, 0.75726, 0, 0], "57369": [0.25142, 0.75726, 0, 0], "57370": [0.13597, 0.63597, 0, 0], - "57371": [0.13597, 0.63597, 0, 0], + "57371": [0.13597, 0.63597, 0, 0] }, "Caligraphic-Regular": { "48": [0, 0.43056, 0, 0], @@ -5688,7 +8504,7 @@ module.exports = { "87": [0, 0.68333, 0.08222, 0.08334], "88": [0, 0.68333, 0.14643, 0.13889], "89": [0.09722, 0.68333, 0.08222, 0.08334], - "90": [0, 0.68333, 0.07944, 0.13889], + "90": [0, 0.68333, 0.07944, 0.13889] }, "Fraktur-Regular": { "33": [0, 0.69141, 0, 0], @@ -5781,7 +8597,7 @@ module.exports = { "58116": [0.18906, 0.47534, 0, 0], "58117": [0, 0.69141, 0, 0], "58118": [0, 0.62119, 0, 0], - "58119": [0, 0.47534, 0, 0], + "58119": [0, 0.47534, 0, 0] }, "Main-Bold": { "33": [0, 0.69444, 0, 0], @@ -6036,7 +8852,7 @@ module.exports = { "10217": [0.25, 0.75, 0, 0], "10815": [0, 0.68611, 0, 0], "10927": [0.19667, 0.69667, 0, 0], - "10928": [0.19667, 0.69667, 0, 0], + "10928": [0.19667, 0.69667, 0, 0] }, "Main-Italic": { "33": [0, 0.69444, 0.12417, 0], @@ -6156,7 +8972,7 @@ module.exports = { "8217": [0, 0.69444, 0.12417, 0], "8220": [0, 0.69444, 0.1685, 0], "8221": [0, 0.69444, 0.06961, 0], - "8463": [0, 0.68889, 0, 0], + "8463": [0, 0.68889, 0, 0] }, "Main-Regular": { "32": [0, 0, 0, 0], @@ -6437,7 +9253,7 @@ module.exports = { "10236": [0.011, 0.511, 0, 0], "10815": [0, 0.68333, 0, 0], "10927": [0.13597, 0.63597, 0, 0], - "10928": [0.13597, 0.63597, 0, 0], + "10928": [0.13597, 0.63597, 0, 0] }, "Math-BoldItalic": { "47": [0.19444, 0.69444, 0, 0], @@ -6533,7 +9349,7 @@ module.exports = { "981": [0.19444, 0.69444, 0, 0], "982": [0, 0.44444, 0.03194, 0], "1009": [0.19444, 0.44444, 0, 0], - "1013": [0, 0.44444, 0, 0], + "1013": [0, 0.44444, 0, 0] }, "Math-Italic": { "47": [0.19444, 0.69444, 0, 0], @@ -6629,7 +9445,7 @@ module.exports = { "981": [0.19444, 0.69444, 0, 0.08334], "982": [0, 0.43056, 0.02778, 0], "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556], + "1013": [0, 0.43056, 0, 0.05556] }, "Math-Regular": { "65": [0, 0.68333, 0, 0.13889], @@ -6724,7 +9540,7 @@ module.exports = { "981": [0.19444, 0.69444, 0, 0.08334], "982": [0, 0.43056, 0.02778, 0], "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556], + "1013": [0, 0.43056, 0, 0.05556] }, "SansSerif-Regular": { "33": [0, 0.69444, 0, 0], @@ -6843,7 +9659,7 @@ module.exports = { "8216": [0, 0.69444, 0, 0], "8217": [0, 0.69444, 0, 0], "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], + "8221": [0, 0.69444, 0, 0] }, "Script-Regular": { "65": [0, 0.7, 0.22925, 0], @@ -6871,7 +9687,7 @@ module.exports = { "87": [0, 0.7, 0.27523, 0], "88": [0, 0.7, 0.26006, 0], "89": [0, 0.7, 0.2939, 0], - "90": [0, 0.7, 0.24037, 0], + "90": [0, 0.7, 0.24037, 0] }, "Size1-Regular": { "40": [0.35001, 0.85, 0, 0], @@ -6916,7 +9732,7 @@ module.exports = { "10753": [0.25001, 0.75, 0, 0], "10754": [0.25001, 0.75, 0, 0], "10756": [0.25001, 0.75, 0, 0], - "10758": [0.25001, 0.75, 0, 0], + "10758": [0.25001, 0.75, 0, 0] }, "Size2-Regular": { "40": [0.65002, 1.15, 0, 0], @@ -6953,7 +9769,7 @@ module.exports = { "10753": [0.55001, 1.05, 0, 0], "10754": [0.55001, 1.05, 0, 0], "10756": [0.55001, 1.05, 0, 0], - "10758": [0.55001, 1.05, 0, 0], + "10758": [0.55001, 1.05, 0, 0] }, "Size3-Regular": { "40": [0.95003, 1.45, 0, 0], @@ -6974,7 +9790,7 @@ module.exports = { "8970": [0.95003, 1.45, 0, 0], "8971": [0.95003, 1.45, 0, 0], "10216": [0.95003, 1.45, 0, 0], - "10217": [0.95003, 1.45, 0, 0], + "10217": [0.95003, 1.45, 0, 0] }, "Size4-Regular": { "40": [1.25003, 1.75, 0, 0], @@ -7021,7 +9837,7 @@ module.exports = { "57680": [0, 0.12, 0, 0], "57681": [0, 0.12, 0, 0], "57682": [0, 0.12, 0, 0], - "57683": [0, 0.12, 0, 0], + "57683": [0, 0.12, 0, 0] }, "Typewriter-Regular": { "33": [0, 0.61111, 0, 0], @@ -7143,518 +9959,263 @@ module.exports = { "937": [0, 0.61111, 0, 0], "2018": [0, 0.61111, 0, 0], "2019": [0, 0.61111, 0, 0], + "8216": [0, 0.61111, 0, 0], + "8217": [0, 0.61111, 0, 0], "8242": [0, 0.61111, 0, 0], - }, + "9251": [0.11111, 0.21944, 0, 0] + } }; -},{}],19:[function(require,module,exports){ -var utils = require("./utils"); -var ParseError = require("./ParseError"); +exports.default = fontMetricsData; -/* This file contains a list of functions that we parse, identified by - * the calls to defineFunction. - * - * The first argument to defineFunction is a single name or a list of names. - * All functions named in such a list will share a single implementation. - * - * Each declared function can have associated properties, which - * include the following: - * - * - numArgs: The number of arguments the function takes. - * If this is the only property, it can be passed as a number - * instead of an element of a properties object. - * - argTypes: (optional) An array corresponding to each argument of the - * function, giving the type of argument that should be parsed. Its - * length should be equal to `numArgs + numOptionalArgs`. Valid - * types: - * - "size": A size-like thing, such as "1em" or "5ex" - * - "color": An html color, like "#abc" or "blue" - * - "original": The same type as the environment that the - * function being parsed is in (e.g. used for the - * bodies of functions like \color where the first - * argument is special and the second argument is - * parsed normally) - * Other possible types (probably shouldn't be used) - * - "text": Text-like (e.g. \text) - * - "math": Normal math - * If undefined, this will be treated as an appropriate length - * array of "original" strings - * - greediness: (optional) The greediness of the function to use ungrouped - * arguments. - * - * E.g. if you have an expression - * \sqrt \frac 1 2 - * since \frac has greediness=2 vs \sqrt's greediness=1, \frac - * will use the two arguments '1' and '2' as its two arguments, - * then that whole function will be used as the argument to - * \sqrt. On the other hand, the expressions - * \frac \frac 1 2 3 - * and - * \frac \sqrt 1 2 - * will fail because \frac and \frac have equal greediness - * and \sqrt has a lower greediness than \frac respectively. To - * make these parse, we would have to change them to: - * \frac {\frac 1 2} 3 - * and - * \frac {\sqrt 1} 2 - * - * The default value is `1` - * - allowedInText: (optional) Whether or not the function is allowed inside - * text mode (default false) - * - numOptionalArgs: (optional) The number of optional arguments the function - * should parse. If the optional arguments aren't found, - * `null` will be passed to the handler in their place. - * (default 0) - * - infix: (optional) Must be true if the function is an infix operator. - * - * The last argument is that implementation, the handler for the function(s). - * It is called to handle these functions and their arguments. - * It receives two arguments: - * - context contains information and references provided by the parser - * - args is an array of arguments obtained from TeX input - * The context contains the following properties: - * - funcName: the text (i.e. name) of the function, including \ - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions in the overall string of the function - * and the arguments. - * The latter three should only be used to produce error messages. - * - * The function should return an object with the following keys: - * - type: The type of element that this is. This is then used in - * buildHTML/buildMathML to determine which function - * should be called to build this node into a DOM node - * Any other data can be added to the object, which will be passed - * in to the function in buildHTML/buildMathML as `group.value`. - */ +},{}],103:[function(require,module,exports){ +"use strict"; -function defineFunction(names, props, handler) { - if (typeof names === "string") { - names = [names]; - } - if (typeof props === "number") { - props = { numArgs: props }; - } - // Set default values of functions - var data = { - numArgs: props.numArgs, - argTypes: props.argTypes, - greediness: (props.greediness === undefined) ? 1 : props.greediness, - allowedInText: !!props.allowedInText, - numOptionalArgs: props.numOptionalArgs || 0, - infix: !!props.infix, - handler: handler, - }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; - } -} +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _ParseNode = require("./ParseNode"); + +var _ParseNode2 = _interopRequireDefault(_ParseNode); + +var _defineFunction2 = require("./defineFunction"); + +var _defineFunction3 = _interopRequireDefault(_defineFunction2); + +require("./functions/color"); + +require("./functions/text"); + +require("./functions/overline"); + +require("./functions/underline"); + +require("./functions/rule"); + +require("./functions/kern"); + +require("./functions/phantom"); + +require("./functions/mod"); + +require("./functions/op"); + +require("./functions/operatorname"); + +require("./functions/genfrac"); + +require("./functions/lap"); + +require("./functions/smash"); + +require("./functions/delimsizing"); + +require("./functions/href"); + +require("./functions/mathchoice"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// WARNING: New functions should be added to src/functions and imported here. + +/** Include this to ensure that all functions are defined. */ +var functions = _defineFunction2._functions; +exports.default = functions; + +// Define a convenience function that mimcs the old semantics of defineFunction +// to support existing code so that we can migrate it a little bit at a time. + +var defineFunction = function defineFunction(names, props, handler) // null only if handled in parser +{ + (0, _defineFunction3.default)({ names: names, props: props, handler: handler }); +}; // A normal square root -defineFunction("\\sqrt", { +defineFunction(["\\sqrt"], { numArgs: 1, - numOptionalArgs: 1, -}, function(context, args) { - var index = args[0]; - var body = args[1]; + numOptionalArgs: 1 +}, function (context, args, optArgs) { + var index = optArgs[0]; + var body = args[0]; return { type: "sqrt", body: body, - index: index, + index: index }; }); -// Some non-mathy text -defineFunction("\\text", { +// \color is handled in Parser.js's parseImplicitGroup +defineFunction(["\\color"], { numArgs: 1, - argTypes: ["text"], - greediness: 2, -}, function(context, args) { - var body = args[0]; - // Since the corresponding buildHTML/buildMathML function expects a - // list of elements, we normalize for different kinds of arguments - // TODO(emily): maybe this should be done somewhere else - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } + allowedInText: true, + greediness: 3, + argTypes: ["color"] +}, null); - return { - type: "text", - body: inner, - }; -}); - -// A two-argument custom color -defineFunction("\\color", { +// colorbox +defineFunction(["\\colorbox"], { numArgs: 2, allowedInText: true, greediness: 3, - argTypes: ["color", "original"], -}, function(context, args) { + argTypes: ["color", "text"] +}, function (context, args) { var color = args[0]; var body = args[1]; - // Normalize the different kinds of bodies (see \text above) - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } - return { - type: "color", - color: color.value, - value: inner, + type: "enclose", + label: context.funcName, + backgroundColor: color, + body: body }; }); -// An overline -defineFunction("\\overline", { - numArgs: 1, -}, function(context, args) { +// fcolorbox +defineFunction(["\\fcolorbox"], { + numArgs: 3, + allowedInText: true, + greediness: 3, + argTypes: ["color", "color", "text"] +}, function (context, args) { + var borderColor = args[0]; + var backgroundColor = args[1]; + var body = args[2]; + return { + type: "enclose", + label: context.funcName, + backgroundColor: backgroundColor, + borderColor: borderColor, + body: body + }; +}); + +// Math class commands except \mathop +defineFunction(["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], { + numArgs: 1 +}, function (context, args) { var body = args[0]; return { - type: "overline", - body: body, + type: "mclass", + mclass: "m" + context.funcName.substr(5), + value: (0, _defineFunction2.ordargument)(body) }; }); -// An underline -defineFunction("\\underline", { - numArgs: 1, -}, function(context, args) { - var body = args[0]; - return { - type: "underline", - body: body, - }; -}); +// Build a relation by placing one symbol on top of another +defineFunction(["\\stackrel"], { + numArgs: 2 +}, function (context, args) { + var top = args[0]; + var bottom = args[1]; -// A box of the width and height -defineFunction("\\rule", { - numArgs: 2, - numOptionalArgs: 1, - argTypes: ["size", "size", "size"], -}, function(context, args) { - var shift = args[0]; - var width = args[1]; - var height = args[2]; - return { - type: "rule", - shift: shift && shift.value, - width: width.value, - height: height.value, - }; -}); + var bottomop = new _ParseNode2.default("op", { + type: "op", + limits: true, + alwaysHandleSupSub: true, + symbol: false, + value: (0, _defineFunction2.ordargument)(bottom) + }, bottom.mode); -defineFunction("\\kern", { - numArgs: 1, - argTypes: ["size"], -}, function(context, args) { - return { - type: "kern", - dimension: args[0].value, - }; -}); - -// A KaTeX logo -defineFunction("\\KaTeX", { - numArgs: 0, -}, function(context) { - return { - type: "katex", - }; -}); - -defineFunction("\\phantom", { - numArgs: 1, -}, function(context, args) { - var body = args[0]; - var inner; - if (body.type === "ordgroup") { - inner = body.value; - } else { - inner = [body]; - } + var supsub = new _ParseNode2.default("supsub", { + base: bottomop, + sup: top, + sub: null + }, top.mode); return { - type: "phantom", - value: inner, + type: "mclass", + mclass: "mrel", + value: [supsub] }; }); -// Extra data needed for the delimiter handler down below -var delimiterSizes = { - "\\bigl" : {type: "open", size: 1}, - "\\Bigl" : {type: "open", size: 2}, - "\\biggl": {type: "open", size: 3}, - "\\Biggl": {type: "open", size: 4}, - "\\bigr" : {type: "close", size: 1}, - "\\Bigr" : {type: "close", size: 2}, - "\\biggr": {type: "close", size: 3}, - "\\Biggr": {type: "close", size: 4}, - "\\bigm" : {type: "rel", size: 1}, - "\\Bigm" : {type: "rel", size: 2}, - "\\biggm": {type: "rel", size: 3}, - "\\Biggm": {type: "rel", size: 4}, - "\\big" : {type: "textord", size: 1}, - "\\Big" : {type: "textord", size: 2}, - "\\bigg" : {type: "textord", size: 3}, - "\\Bigg" : {type: "textord", size: 4}, -}; - -var delimiters = [ - "(", ")", "[", "\\lbrack", "]", "\\rbrack", - "\\{", "\\lbrace", "\\}", "\\rbrace", - "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", - "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", - "\\lvert", "\\rvert", "\\lVert", "\\rVert", - "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", - "/", "\\backslash", - "|", "\\vert", "\\|", "\\Vert", - "\\uparrow", "\\Uparrow", - "\\downarrow", "\\Downarrow", - "\\updownarrow", "\\Updownarrow", - ".", -]; - var fontAliases = { "\\Bbb": "\\mathbb", "\\bold": "\\mathbf", - "\\frak": "\\mathfrak", + "\\frak": "\\mathfrak" }; -// Single-argument color functions -defineFunction([ - "\\blue", "\\orange", "\\pink", "\\red", - "\\green", "\\gray", "\\purple", - "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", - "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", - "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", - "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", - "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", - "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", - "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", - "\\mintA", "\\mintB", "\\mintC", - "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", - "\\grayF", "\\grayG", "\\grayH", "\\grayI", - "\\kaBlue", "\\kaGreen", -], { - numArgs: 1, - allowedInText: true, - greediness: 3, -}, function(context, args) { - var body = args[0]; - var atoms; - if (body.type === "ordgroup") { - atoms = body.value; - } else { - atoms = [body]; - } - - return { - type: "color", - color: "katex-" + context.funcName.slice(1), - value: atoms, - }; -}); +var singleCharIntegrals = { + "\u222B": "\\int", + "\u222C": "\\iint", + "\u222D": "\\iiint", + "\u222E": "\\oint" +}; // There are 2 flags for operators; whether they produce limits in // displaystyle, and whether they are symbols and should grow in // displaystyle. These four groups cover the four possible choices. // No limits, not symbols -defineFunction([ - "\\arcsin", "\\arccos", "\\arctan", "\\arg", "\\cos", "\\cosh", - "\\cot", "\\coth", "\\csc", "\\deg", "\\dim", "\\exp", "\\hom", - "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", - "\\tan", "\\tanh", -], { - numArgs: 0, -}, function(context) { +defineFunction(["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], { + numArgs: 0 +}, function (context) { return { type: "op", limits: false, symbol: false, - body: context.funcName, + body: context.funcName }; }); // Limits, not symbols -defineFunction([ - "\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", - "\\min", "\\Pr", "\\sup", -], { - numArgs: 0, -}, function(context) { +defineFunction(["\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", "\\min", "\\Pr", "\\sup"], { + numArgs: 0 +}, function (context) { return { type: "op", limits: true, symbol: false, - body: context.funcName, + body: context.funcName }; }); // No limits, symbols -defineFunction([ - "\\int", "\\iint", "\\iiint", "\\oint", -], { - numArgs: 0, -}, function(context) { +defineFunction(["\\int", "\\iint", "\\iiint", "\\oint", "\u222B", "\u222C", "\u222D", "\u222E"], { + numArgs: 0 +}, function (context) { + var fName = context.funcName; + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } return { type: "op", limits: false, symbol: true, - body: context.funcName, + body: fName }; }); -// Limits, symbols -defineFunction([ - "\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", - "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", - "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", -], { - numArgs: 0, -}, function(context) { - return { - type: "op", - limits: true, - symbol: true, - body: context.funcName, - }; -}); - -// Fractions -defineFunction([ - "\\dfrac", "\\frac", "\\tfrac", - "\\dbinom", "\\binom", "\\tbinom", -], { - numArgs: 2, - greediness: 2, -}, function(context, args) { - var numer = args[0]; - var denom = args[1]; - var hasBarLine; - var leftDelim = null; - var rightDelim = null; - var size = "auto"; - - switch (context.funcName) { - case "\\dfrac": - case "\\frac": - case "\\tfrac": - hasBarLine = true; - break; - case "\\dbinom": - case "\\binom": - case "\\tbinom": - hasBarLine = false; - leftDelim = "("; - rightDelim = ")"; - break; - default: - throw new Error("Unrecognized genfrac command"); - } - - switch (context.funcName) { - case "\\dfrac": - case "\\dbinom": - size = "display"; - break; - case "\\tfrac": - case "\\tbinom": - size = "text"; - break; - } - - return { - type: "genfrac", - numer: numer, - denom: denom, - hasBarLine: hasBarLine, - leftDelim: leftDelim, - rightDelim: rightDelim, - size: size, - }; -}); - -// Left and right overlap functions -defineFunction(["\\llap", "\\rlap"], { - numArgs: 1, - allowedInText: true, -}, function(context, args) { - var body = args[0]; - return { - type: context.funcName.slice(1), - body: body, - }; -}); - -// Delimiter functions -defineFunction([ - "\\bigl", "\\Bigl", "\\biggl", "\\Biggl", - "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", - "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", - "\\big", "\\Big", "\\bigg", "\\Bigg", - "\\left", "\\right", -], { - numArgs: 1, -}, function(context, args) { - var delim = args[0]; - if (!utils.contains(delimiters, delim.value)) { - throw new ParseError( - "Invalid delimiter: '" + delim.value + "' after '" + - context.funcName + "'", delim); - } - - // \left and \right are caught somewhere in Parser.js, which is - // why this data doesn't match what is in buildHTML. - if (context.funcName === "\\left" || context.funcName === "\\right") { - return { - type: "leftright", - value: delim.value, - }; - } else { - return { - type: "delimsizing", - size: delimiterSizes[context.funcName].size, - delimType: delimiterSizes[context.funcName].type, - value: delim.value, - }; - } -}); - // Sizing functions (handled in Parser.js explicitly, hence no handler) -defineFunction([ - "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", - "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge", -], 0, null); +defineFunction(["\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"], { numArgs: 0 }, null); // Style changing functions (handled in Parser.js explicitly, hence no // handler) -defineFunction([ - "\\displaystyle", "\\textstyle", "\\scriptstyle", - "\\scriptscriptstyle", -], 0, null); +defineFunction(["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], { numArgs: 0 }, null); + +// Old font changing functions +defineFunction(["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], { numArgs: 0 }, null); defineFunction([ - // styles - "\\mathrm", "\\mathit", "\\mathbf", +// styles +"\\mathrm", "\\mathit", "\\mathbf", - // families - "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", - "\\mathtt", +// families +"\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", - // aliases - "\\Bbb", "\\bold", "\\frak", -], { +// aliases +"\\Bbb", "\\bold", "\\frak"], { numArgs: 1, - greediness: 2, -}, function(context, args) { + greediness: 2 +}, function (context, args) { var body = args[0]; var func = context.funcName; if (func in fontAliases) { @@ -7663,33 +10224,104 @@ defineFunction([ return { type: "font", font: func.slice(1), - body: body, + body: body }; }); // Accents -defineFunction([ - "\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", - "\\check", "\\hat", "\\vec", "\\dot", - // We don't support expanding accents yet - // "\\widetilde", "\\widehat" -], { - numArgs: 1, -}, function(context, args) { +defineFunction(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], { + numArgs: 1 +}, function (context, args) { var base = args[0]; + + var isStretchy = !_utils2.default.contains(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot"], context.funcName); + + var isShifty = !isStretchy || _utils2.default.contains(["\\widehat", "\\widetilde"], context.funcName); + return { type: "accent", - accent: context.funcName, - base: base, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; +}); + +// Text-mode accents +defineFunction(["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v"], { + numArgs: 1, + allowedInText: true, + allowedInMath: false +}, function (context, args) { + var base = args[0]; + + return { + type: "accent", + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; +}); + +// Horizontal stretchy braces +defineFunction(["\\overbrace", "\\underbrace"], { + numArgs: 1 +}, function (context, args) { + var base = args[0]; + return { + type: "horizBrace", + label: context.funcName, + isOver: /^\\over/.test(context.funcName), + base: base + }; +}); + +// Stretchy accents under the body +defineFunction(["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], { + numArgs: 1 +}, function (context, args) { + var base = args[0]; + return { + type: "accentUnder", + label: context.funcName, + base: base + }; +}); + +// Stretchy arrows with an optional argument +defineFunction(["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom"], { + numArgs: 1, + numOptionalArgs: 1 +}, function (context, args, optArgs) { + var below = optArgs[0]; + var body = args[0]; + return { + type: "xArrow", // x for extensible + label: context.funcName, + body: body, + below: below + }; +}); + +// enclose +defineFunction(["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\fbox"], { + numArgs: 1 +}, function (context, args) { + var body = args[0]; + return { + type: "enclose", + label: context.funcName, + body: body }; }); // Infix generalized fractions -defineFunction(["\\over", "\\choose"], { +defineFunction(["\\over", "\\choose", "\\atop"], { numArgs: 0, - infix: true, -}, function(context) { - var replaceWith; + infix: true +}, function (context) { + var replaceWith = void 0; switch (context.funcName) { case "\\over": replaceWith = "\\frac"; @@ -7697,13 +10329,16 @@ defineFunction(["\\over", "\\choose"], { case "\\choose": replaceWith = "\\binom"; break; + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; default: throw new Error("Unrecognized infix genfrac command"); } return { type: "infix", replaceWith: replaceWith, - token: context.token, + token: context.token }; }); @@ -7711,23 +10346,23 @@ defineFunction(["\\over", "\\choose"], { defineFunction(["\\\\", "\\cr"], { numArgs: 0, numOptionalArgs: 1, - argTypes: ["size"], -}, function(context, args) { - var size = args[0]; + argTypes: ["size"] +}, function (context, args, optArgs) { + var size = optArgs[0]; return { type: "cr", - size: size, + size: size }; }); // Environment delimiters defineFunction(["\\begin", "\\end"], { numArgs: 1, - argTypes: ["text"], -}, function(context, args) { + argTypes: ["text"] +}, function (context, args) { var nameGroup = args[0]; if (nameGroup.type !== "ordgroup") { - throw new ParseError("Invalid environment name", nameGroup); + throw new _ParseError2.default("Invalid environment name", nameGroup); } var name = ""; for (var i = 0; i < nameGroup.value.length; ++i) { @@ -7736,11 +10371,2505 @@ defineFunction(["\\begin", "\\end"], { return { type: "environment", name: name, - nameGroup: nameGroup, + nameGroup: nameGroup }; }); -},{"./ParseError":6,"./utils":25}],20:[function(require,module,exports){ +// Box manipulation +defineFunction(["\\raisebox"], { + numArgs: 2, + argTypes: ["size", "text"], + allowedInText: true +}, function (context, args) { + var amount = args[0]; + var body = args[1]; + return { + type: "raisebox", + dy: amount, + body: body, + value: (0, _defineFunction2.ordargument)(body) + }; +}); + +// \verb and \verb* are dealt with directly in Parser.js. +// If we end up here, it's because of a failure to match the two delimiters +// in the regex in Lexer.js. LaTeX raises the following error when \verb is +// terminated by end of line (or file). +defineFunction(["\\verb"], { + numArgs: 0, + allowedInText: true +}, function (context) { + throw new _ParseError2.default("\\verb ended by end of line instead of matching delimiter"); +}); + +// Hyperlinks + + +// MathChoice + +},{"./ParseError":84,"./ParseNode":85,"./defineFunction":96,"./functions/color":104,"./functions/delimsizing":105,"./functions/genfrac":106,"./functions/href":107,"./functions/kern":108,"./functions/lap":109,"./functions/mathchoice":110,"./functions/mod":111,"./functions/op":112,"./functions/operatorname":113,"./functions/overline":114,"./functions/phantom":115,"./functions/rule":116,"./functions/smash":117,"./functions/text":118,"./functions/underline":119,"./utils":128}],104:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var htmlBuilder = function htmlBuilder(group, options) { + var elements = html.buildExpression(group.value.value, options.withColor(group.value.color), false); + + // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + return new _buildCommon2.default.makeFragment(elements); +}; + + +var mathmlBuilder = function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.value, options); + + var node = new _mathMLTree2.default.MathNode("mstyle", inner); + + node.setAttribute("mathcolor", group.value.color); + + return node; +}; + +(0, _defineFunction2.default)({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "original"] + }, + handler: function handler(context, args) { + var color = args[0]; + var body = args[1]; + return { + type: "color", + color: color.value, + value: (0, _defineFunction.ordargument)(body) + }; + }, + + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); + +// TODO(kevinb): define these using macros +(0, _defineFunction2.default)({ + type: "color", + names: ["\\blue", "\\orange", "\\pink", "\\red", "\\green", "\\gray", "\\purple", "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", "\\mintA", "\\mintB", "\\mintC", "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", "\\grayF", "\\grayG", "\\grayH", "\\grayI", "\\kaBlue", "\\kaGreen"], + props: { + numArgs: 1, + allowedInText: true, + greediness: 3 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "color", + color: "katex-" + context.funcName.slice(1), + value: (0, _defineFunction.ordargument)(body) + }; + }, + + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],105:[function(require,module,exports){ +"use strict"; + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _delimiter = require("../delimiter"); + +var _delimiter2 = _interopRequireDefault(_delimiter); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _ParseError = require("../ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _utils = require("../utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { mclass: "mopen", size: 1 }, + "\\Bigl": { mclass: "mopen", size: 2 }, + "\\biggl": { mclass: "mopen", size: 3 }, + "\\Biggl": { mclass: "mopen", size: 4 }, + "\\bigr": { mclass: "mclose", size: 1 }, + "\\Bigr": { mclass: "mclose", size: 2 }, + "\\biggr": { mclass: "mclose", size: 3 }, + "\\Biggr": { mclass: "mclose", size: 4 }, + "\\bigm": { mclass: "mrel", size: 1 }, + "\\Bigm": { mclass: "mrel", size: 2 }, + "\\biggm": { mclass: "mrel", size: 3 }, + "\\Biggm": { mclass: "mrel", size: 4 }, + "\\big": { mclass: "mord", size: 1 }, + "\\Big": { mclass: "mord", size: 2 }, + "\\bigg": { mclass: "mord", size: 3 }, + "\\Bigg": { mclass: "mord", size: 4 } +}; + +var delimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + if (_utils2.default.contains(delimiters, delim.value)) { + return delim; + } else { + throw new _ParseError2.default("Invalid delimiter: '" + delim.value + "' after '" + context.funcName + "'", delim); + } +} + +(0, _defineFunction2.default)({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + + return { + type: "delimsizing", + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + value: delim.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var delim = group.value.value; + + if (delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return _buildCommon2.default.makeSpan([group.value.mclass]); + } + + // Use delimiter.sizedDelim to generate the delimiter. + return _delimiter2.default.sizedDelim(delim, group.value.size, options, group.mode, [group.value.mclass]); + }, + mathmlBuilder: function mathmlBuilder(group) { + var children = []; + + if (group.value.value !== ".") { + children.push(mml.makeText(group.value.value, group.mode)); + } + + var node = new _mathMLTree2.default.MathNode("mo", children); + + if (group.value.mclass === "mopen" || group.value.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + return node; + } +}); + +(0, _defineFunction2.default)({ + type: "leftright", + names: ["\\left", "\\right"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + + // \left and \right are caught somewhere in Parser.js, which is + // why this data doesn't match what is in buildHTML. + return { + type: "leftright", + value: delim.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Build the inner expression + var inner = html.buildExpression(group.value.body, options, true); + + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; + + // Calculate its height and depth + for (var i = 0; i < inner.length; i++) { + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } + + // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + + var leftDelim = void 0; + if (group.value.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = html.makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = _delimiter2.default.leftRightDelim(group.value.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } + // Add it to the beginning of the expression + inner.unshift(leftDelim); + + // Handle middle delimiters + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; + if (middleDelim.isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = _delimiter2.default.leftRightDelim(middleDelim.isMiddle.value, innerHeight, innerDepth, middleDelim.isMiddle.options, group.mode, []); + // Add back spaces shifted into the delimiter + var spaces = html.spliceSpaces(middleDelim.children, 0); + if (spaces) { + _buildCommon2.default.prependChildren(inner[_i], spaces); + } + } + } + } + + var rightDelim = void 0; + // Same for the right delimiter + if (group.value.right === ".") { + rightDelim = html.makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = _delimiter2.default.leftRightDelim(group.value.right, innerHeight, innerDepth, options, group.mode, ["mclose"]); + } + // Add it to the end of the expression. + inner.push(rightDelim); + + return _buildCommon2.default.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.body, options); + + if (group.value.left !== ".") { + var leftNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.left, group.mode)]); + + leftNode.setAttribute("fence", "true"); + + inner.unshift(leftNode); + } + + if (group.value.right !== ".") { + var rightNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.right, group.mode)]); + + rightNode.setAttribute("fence", "true"); + + inner.push(rightNode); + } + + var outerNode = new _mathMLTree2.default.MathNode("mrow", inner); + + return outerNode; + } +}); + +(0, _defineFunction2.default)({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + if (!context.parser.leftrightDepth) { + throw new _ParseError2.default("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + value: delim.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var middleDelim = void 0; + if (group.value.value === ".") { + middleDelim = html.makeNullDelimiter(options, []); + } else { + middleDelim = _delimiter2.default.sizedDelim(group.value.value, 1, options, group.mode, []); + middleDelim.isMiddle = { value: group.value.value, options: options }; + } + return middleDelim; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var middleNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.middle, group.mode)]); + middleNode.setAttribute("fence", "true"); + return middleNode; + } +}); + +},{"../ParseError":84,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../delimiter":97,"../mathMLTree":121,"../utils":128}],106:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _delimiter = require("../delimiter"); + +var _delimiter2 = _interopRequireDefault(_delimiter); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _Style = require("../Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "genfrac", + names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac"], + props: { + numArgs: 2, + greediness: 2 + }, + handler: function handler(context, args) { + var numer = args[0]; + var denom = args[1]; + var hasBarLine = void 0; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (context.funcName) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + case "\\\\atopfrac": + hasBarLine = false; + break; + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (context.funcName) { + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + numer: numer, + denom: denom, + hasBarLine: hasBarLine, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + // Figure out what style this fraction should be in based on the + // function used + var style = options.style; + if (group.value.size === "display") { + style = _Style2.default.DISPLAY; + } else if (group.value.size === "text") { + style = _Style2.default.TEXT; + } + + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions = void 0; + + newOptions = options.havingStyle(nstyle); + var numerm = html.buildGroup(group.value.numer, newOptions, options); + + newOptions = options.havingStyle(dstyle); + var denomm = html.buildGroup(group.value.denom, newOptions, options); + + var rule = void 0; + var ruleWidth = void 0; + var ruleSpacing = void 0; + if (group.value.hasBarLine) { + rule = _buildCommon2.default.makeLineSpan("frac-line", options); + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } + + // Rule 15b + var numShift = void 0; + var clearance = void 0; + var denomShift = void 0; + if (style.size === _Style2.default.DISPLAY.size) { + numShift = options.fontMetrics().num1; + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + denomShift = options.fontMetrics().denom2; + } + + var frac = void 0; + if (ruleWidth === 0) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [{ type: "elem", elem: denomm, shift: denomShift }, { type: "elem", elem: numerm, shift: -numShift }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + + frac = _buildCommon2.default.makeVList({ + positionType: "individualShift", + children: [{ type: "elem", elem: denomm, shift: denomShift }, + // $FlowFixMe `rule` cannot be `null` here. + { type: "elem", elem: rule, shift: midShift }, { type: "elem", elem: numerm, shift: -numShift }] + }, options); + } + + // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; + + // Rule 15e + var delimSize = void 0; + if (style.size === _Style2.default.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim = void 0; + var rightDelim = void 0; + if (group.value.leftDelim == null) { + leftDelim = html.makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = _delimiter2.default.customSizedDelim(group.value.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + if (group.value.rightDelim == null) { + rightDelim = html.makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = _delimiter2.default.customSizedDelim(group.value.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return _buildCommon2.default.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, _buildCommon2.default.makeSpan(["mfrac"], [frac]), rightDelim], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new _mathMLTree2.default.MathNode("mfrac", [mml.buildGroup(group.value.numer, options), mml.buildGroup(group.value.denom, options)]); + + if (!group.value.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } + + if (group.value.leftDelim != null || group.value.rightDelim != null) { + var withDelims = []; + + if (group.value.leftDelim != null) { + var leftOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.leftDelim)]); + + leftOp.setAttribute("fence", "true"); + + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.value.rightDelim != null) { + var rightOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.rightDelim)]); + + rightOp.setAttribute("fence", "true"); + + withDelims.push(rightOp); + } + + var outerNode = new _mathMLTree2.default.MathNode("mrow", withDelims); + + return outerNode; + } + + return node; + } +}); + +},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../delimiter":97,"../mathMLTree":121}],107:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"] + }, + handler: function handler(context, args) { + var body = args[1]; + var href = args[0].value; + return { + type: "href", + href: href, + body: (0, _defineFunction.ordargument)(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = html.buildExpression(group.value.body, options, false); + + var href = group.value.href; + + /** + * Determining class for anchors. + * 1. if it has the only element, use its class; + * 2. if it has more than two elements, and the classes + * of its first and last elements coincide, then use it; + * 3. otherwise, we will inject an empty s at both ends, + * with the same classes of both ends of elements, with the + * first span having the same class as the first element of body, + * and the second one the same as the last. + */ + + var classes = []; // Default behaviour for Case 3. + var first = void 0; // mathtype of the first child + var last = void 0; // mathtype of the last child + // Invariants: both first and last must be non-null if classes is null. + if (elements.length === 1) { + // Case 1 + classes = elements[0].classes; + } else if (elements.length >= 2) { + first = html.getTypeOfDomTree(elements[0]) || 'mord'; + last = html.getTypeOfDomTree(elements[elements.length - 1]) || 'mord'; + if (first === last) { + // Case 2 : type of both ends coincides + classes = [first]; + } else { + // Case 3: both ends have different types. + var anc = _buildCommon2.default.makeAnchor(href, [], elements, options); + return new _buildCommon2.default.makeFragment([new _buildCommon2.default.makeSpan([first], [], options), anc, new _buildCommon2.default.makeSpan([last], [], options)]); + } + } + return new _buildCommon2.default.makeAnchor(href, classes, elements, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.body, options); + var math = new _mathMLTree2.default.MathNode("mrow", inner); + math.setAttribute("href", group.value.href); + return math; + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],108:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _units = require("../units"); + +var _ParseError = require("../ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// TODO: \hskip and \mskip should support plus and minus in lengths + +(0, _defineFunction2.default)({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + handler: function handler(context, args) { + var mathFunction = context.funcName[1] === 'm'; // \mkern, \mskip + var muUnit = args[0].value.unit === 'mu'; + if (mathFunction) { + if (!muUnit) { + typeof console !== "undefined" && console.warn("In LaTeX, " + context.funcName + " supports only mu units, " + ("not " + args[0].value.unit + " units")); + } + if (context.parser.mode !== "math") { + throw new _ParseError2.default("Can't use function '" + context.funcName + "' in text mode"); + } + } else { + // !mathFunction + if (muUnit) { + typeof console !== "undefined" && console.warn("In LaTeX, " + context.funcName + " does not support mu units"); + } + } + return { + type: "kern", + dimension: args[0].value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = _buildCommon2.default.makeSpan(["mord", "rule"], [], options); + + if (group.value.dimension) { + var dimension = (0, _units.calculateSize)(group.value.dimension, options); + rule.style.marginLeft = dimension + "em"; + } + + return rule; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new _mathMLTree2.default.MathNode("mspace"); + + if (group.value.dimension) { + var dimension = (0, _units.calculateSize)(group.value.dimension, options); + node.setAttribute("width", dimension + "em"); + } + + return node; + } +}); +/* eslint no-console:0 */ +// Horizontal spacing commands + +},{"../ParseError":84,"../buildCommon":91,"../defineFunction":96,"../mathMLTree":121,"../units":127}],109:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "lap", + alignment: context.funcName.slice(5), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var inner = void 0; + if (group.value.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = _buildCommon2.default.makeSpan([], [html.buildGroup(group.value.body, options)]); + // wrap, since CSS will center a .clap > .inner > span + inner = _buildCommon2.default.makeSpan(["inner"], [inner], options); + } else { + inner = _buildCommon2.default.makeSpan(["inner"], [html.buildGroup(group.value.body, options)]); + } + var fix = _buildCommon2.default.makeSpan(["fix"], []); + return _buildCommon2.default.makeSpan(["mord", group.value.alignment], [inner, fix], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var node = new _mathMLTree2.default.MathNode("mpadded", [mml.buildGroup(group.value.body, options)]); + + if (group.value.alignment !== "rlap") { + var offset = group.value.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + node.setAttribute("width", "0px"); + + return node; + } +}); +// Horizontal overlap functions + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],110:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _Style = require("../Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var chooseMathStyle = function chooseMathStyle(group, options) { + var style = options.style; + if (style.size === _Style2.default.DISPLAY.size) { + return group.value.display; + } else if (style.size === _Style2.default.TEXT.size) { + return group.value.text; + } else if (style.size === _Style2.default.SCRIPT.size) { + return group.value.script; + } else if (style.size === _Style2.default.SCRIPTSCRIPT.size) { + return group.value.scriptscript; + } + return group.value.text; +}; + +(0, _defineFunction2.default)({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4 + }, + handler: function handler(context, args) { + return { + type: "mathchoice", + display: (0, _defineFunction.ordargument)(args[0]), + text: (0, _defineFunction.ordargument)(args[1]), + script: (0, _defineFunction.ordargument)(args[2]), + scriptscript: (0, _defineFunction.ordargument)(args[3]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + var elements = html.buildExpression(body, options, false); + return new _buildCommon2.default.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = chooseMathStyle(group, options); + var elements = mml.buildExpression(body, options, false); + return new _mathMLTree2.default.MathNode("mrow", elements); + } +}); + +},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],111:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _Style = require("../Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// \mod-type functions +var htmlModBuilder = function htmlModBuilder(group, options) { + var inner = []; + + if (group.value.modType === "bmod") { + // “\nonscript\mskip-\medmuskip\mkern5mu”, where \medmuskip is + // 4mu plus 2mu minus 1mu, translates to 1mu space in + // display/textstyle and 5mu space in script/scriptscriptstyle. + if (!options.style.isTight()) { + inner.push(_buildCommon2.default.makeSpan(["mspace", "muspace"], [], options)); + } else { + inner.push(_buildCommon2.default.makeSpan(["mspace", "thickspace"], [], options)); + } + } else if (options.style.size === _Style2.default.DISPLAY.size) { + inner.push(_buildCommon2.default.makeSpan(["mspace", "quad"], [], options)); + } else if (group.value.modType === "mod") { + inner.push(_buildCommon2.default.makeSpan(["mspace", "twelvemuspace"], [], options)); + } else { + inner.push(_buildCommon2.default.makeSpan(["mspace", "eightmuspace"], [], options)); + } + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(_buildCommon2.default.mathsym("(", group.mode)); + } + + if (group.value.modType !== "pod") { + var modInner = [_buildCommon2.default.mathsym("m", group.mode), _buildCommon2.default.mathsym("o", group.mode), _buildCommon2.default.mathsym("d", group.mode)]; + if (group.value.modType === "bmod") { + inner.push(_buildCommon2.default.makeSpan(["mbin"], modInner, options)); + // “\mkern5mu\nonscript\mskip-\medmuskip” as above + if (!options.style.isTight()) { + inner.push(_buildCommon2.default.makeSpan(["mspace", "muspace"], [], options)); + } else { + inner.push(_buildCommon2.default.makeSpan(["mspace", "thickspace"], [], options)); + } + } else { + Array.prototype.push.apply(inner, modInner); + inner.push(_buildCommon2.default.makeSpan(["mspace", "sixmuspace"], [], options)); + } + } + + if (group.value.value) { + Array.prototype.push.apply(inner, html.buildExpression(group.value.value, options, false)); + } + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(_buildCommon2.default.mathsym(")", group.mode)); + } + + return _buildCommon2.default.makeFragment(inner); +}; + +var mmlModBuilder = function mmlModBuilder(group, options) { + var inner = []; + + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText("(", group.mode)])); + } + if (group.value.modType !== "pod") { + inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText("mod", group.mode)])); + } + if (group.value.value) { + var space = new _mathMLTree2.default.MathNode("mspace"); + space.setAttribute("width", "0.333333em"); + inner.push(space); + inner = inner.concat(mml.buildExpression(group.value.value, options)); + } + if (group.value.modType === "pod" || group.value.modType === "pmod") { + inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText(")", group.mode)])); + } + + return new _mathMLTree2.default.MathNode("mo", inner); +}; + +(0, _defineFunction2.default)({ + type: "mod", + names: ["\\bmod"], + props: { + numArgs: 0 + }, + handler: function handler(context, args) { + return { + type: "mod", + modType: "bmod", + value: null + }; + }, + htmlBuilder: htmlModBuilder, + mathmlBuilder: mmlModBuilder +}); + +// Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. +(0, _defineFunction2.default)({ + type: "mod", + names: ["\\pod", "\\pmod", "\\mod"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "mod", + modType: context.funcName.substr(1), + value: (0, _defineFunction.ordargument)(body) + }; + }, + htmlBuilder: htmlModBuilder, + mathmlBuilder: mmlModBuilder +}); + +},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],112:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _domTree = require("../domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _utils = require("../utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _Style = require("../Style"); + +var _Style2 = _interopRequireDefault(_Style); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Limits, symbols +var htmlBuilder = function htmlBuilder(group, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup = void 0; + var subGroup = void 0; + var hasLimits = false; + if (group.type === "supsub") { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = group.value.sup; + subGroup = group.value.sub; + group = group.value.base; + hasLimits = true; + } + + var style = options.style; + + // Most operators have a large successor symbol, but these don't. + var noSuccessor = ["\\smallint"]; + + var large = false; + if (style.size === _Style2.default.DISPLAY.size && group.value.symbol && !_utils2.default.contains(noSuccessor, group.value.body)) { + + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base = void 0; + if (group.value.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + base = _buildCommon2.default.makeSymbol(group.value.body, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + } else if (group.value.value) { + // If this is a list, compose that list. + var inner = html.buildExpression(group.value.value, options, true); + if (inner.length === 1 && inner[0] instanceof _domTree2.default.symbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = _buildCommon2.default.makeSpan(["mop"], inner, options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup + var output = []; + for (var i = 1; i < group.value.body.length; i++) { + output.push(_buildCommon2.default.mathsym(group.value.body[i], group.mode)); + } + base = _buildCommon2.default.makeSpan(["mop"], output, options); + } + + // If content of op is a single symbol, shift it vertically. + var baseShift = 0; + var slant = 0; + if (base instanceof _domTree2.default.symbolNode) { + // Shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; + + // The slant of the symbol is just its italic correction. + slant = base.italic; + } + + if (hasLimits) { + // IE 8 clips \int if it is in a display: inline-block. We wrap it + // in a new span so it is an inline, and works. + base = _buildCommon2.default.makeSpan([], [base]); + + var sub = void 0; + var sup = void 0; + // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + if (supGroup) { + var elem = html.buildGroup(supGroup, options.havingStyle(style.sup()), options); + + sup = { + elem: elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = html.buildGroup(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } + + // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + var finalGroup = void 0; + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + + finalGroup = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: sub.elem, marginLeft: -slant + "em" }, { type: "kern", size: sub.kern }, { type: "elem", elem: base }, { type: "kern", size: sup.kern }, { type: "elem", elem: sup.elem, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }] + }, options); + } else if (sub) { + var top = base.height - baseShift; + + // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + finalGroup = _buildCommon2.default.makeVList({ + positionType: "top", + positionData: top, + children: [{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: sub.elem, marginLeft: -slant + "em" }, { type: "kern", size: sub.kern }, { type: "elem", elem: base }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = _buildCommon2.default.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ type: "elem", elem: base }, { type: "kern", size: sup.kern }, { type: "elem", elem: sup.elem, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + return _buildCommon2.default.makeSpan(["mop", "op-limits"], [finalGroup], options); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +var mathmlBuilder = function mathmlBuilder(group, options) { + var node = void 0; + + // TODO(emily): handle big operators using the `largeop` attribute + + if (group.value.symbol) { + // This is a symbol. Just add the symbol. + node = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.body, group.mode)]); + } else if (group.value.value) { + // This is an operator with children. Add them. + node = new _mathMLTree2.default.MathNode("mo", mml.buildExpression(group.value.value, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup. + node = new _mathMLTree2.default.MathNode("mi", [new _mathMLTree2.default.TextNode(group.value.body.slice(1))]); + + // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + var operator = new _mathMLTree2.default.MathNode("mo", [mml.makeText("\u2061", "text")]); + + return new _domTree2.default.documentFragment([node, operator]); + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22C0": "\\bigwedge", + "\u22C1": "\\bigvee", + "\u22C2": "\\bigcap", + "\u22C3": "\\bigcap", + "\u2A00": "\\bigodot", + "\u2A01": "\\bigoplus", + "\u2A02": "\\bigotimes", + "\u2A04": "\\biguplus", + "\u2A06": "\\bigsqcup" +}; + +(0, _defineFunction2.default)({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"], + props: { + numArgs: 0 + }, + handler: function handler(context, args) { + var fName = context.funcName; + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + return { + type: "op", + limits: true, + symbol: true, + body: fName + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); + +// Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. +(0, _defineFunction2.default)({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "op", + limits: false, + symbol: false, + value: (0, _defineFunction.ordargument)(body) + }; + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder +}); + +},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../domTree":98,"../mathMLTree":121,"../utils":128}],113:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _domTree = require("../domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ +(0, _defineFunction2.default)({ + type: "operatorname", + names: ["\\operatorname"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "operatorname", + value: (0, _defineFunction.ordargument)(body) + }; + }, + + htmlBuilder: function htmlBuilder(group, options) { + var output = []; + if (group.value.value.length > 0) { + var letter = ""; + var mode = ""; + + // Consolidate Greek letter function names into symbol characters. + var temp = html.buildExpression(group.value.value, options, true); + + // All we want from temp are the letters. With them, we'll + // create a text operator similar to \tan or \cos. + for (var i = 0; i < temp.length; i++) { + letter = temp[i].value; + + // In the amsopn package, \newmcodes@ changes four + // characters, *-/:’, from math operators back into text. + // Given what is in temp, we have to address two of them. + letter = letter.replace(/\u2212/, "-"); // minus => hyphen + letter = letter.replace(/\u2217/, "*"); + + // Use math mode for Greek letters + mode = /[\u0391-\u03D7]/.test(letter) ? "math" : "text"; + output.push(_buildCommon2.default.mathsym(letter, mode)); + } + } + return _buildCommon2.default.makeSpan(["mop"], output, options); + }, + + mathmlBuilder: function mathmlBuilder(group, options) { + // The steps taken here are similar to the html version. + var output = []; + if (group.value.value.length > 0) { + var temp = mml.buildExpression(group.value.value, options); + + var word = ""; + for (var i = 0; i < temp.length; i++) { + word += temp[i].children[0].text; + } + word = word.replace(/\u2212/g, "-"); + word = word.replace(/\u2217/g, "*"); + output = [new _mathMLTree2.default.TextNode(word)]; + } + var identifier = new _mathMLTree2.default.MathNode("mi", output); + identifier.setAttribute("mathvariant", "normal"); + + // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + var operator = new _mathMLTree2.default.MathNode("mo", [mml.makeText("\u2061", "text")]); + + return new _domTree2.default.documentFragment([identifier, operator]); + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../domTree":98,"../mathMLTree":121}],114:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "overline", + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + + // Build the inner group in the cramped style. + var innerGroup = html.buildGroup(group.value.body, options.havingCrampedStyle()); + + // Create the line above the body + var line = _buildCommon2.default.makeLineSpan("overline-line", options); + + // Generate the vlist, with the appropriate kerns + var vlist = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: innerGroup }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: line }, { type: "kern", size: line.height }] + }, options); + + return _buildCommon2.default.makeSpan(["mord", "overline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + + var node = new _mathMLTree2.default.MathNode("mover", [mml.buildGroup(group.value.body, options), operator]); + node.setAttribute("accent", "true"); + + return node; + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],115:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "phantom", + value: (0, _defineFunction.ordargument)(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = html.buildExpression(group.value.value, options.withPhantom(), false); + + // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + return new _buildCommon2.default.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.value, options); + return new _mathMLTree2.default.MathNode("mphantom", inner); + } +}); + + +(0, _defineFunction2.default)({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "hphantom", + value: (0, _defineFunction.ordargument)(body), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = _buildCommon2.default.makeSpan([], [html.buildGroup(group.value.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } + + // See smash for comment re: use of makeVList + node = _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: node }] + }, options); + + return node; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.value, options); + var node = new _mathMLTree2.default.MathNode("mphantom", inner); + node.setAttribute("height", "0px"); + return node; + } +}); + +(0, _defineFunction2.default)({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "vphantom", + value: (0, _defineFunction.ordargument)(body), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var inner = _buildCommon2.default.makeSpan(["inner"], [html.buildGroup(group.value.body, options.withPhantom())]); + var fix = _buildCommon2.default.makeSpan(["fix"], []); + return _buildCommon2.default.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = mml.buildExpression(group.value.value, options); + var node = new _mathMLTree2.default.MathNode("mphantom", inner); + node.setAttribute("width", "0px"); + return node; + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],116:[function(require,module,exports){ +"use strict"; + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _units = require("../units"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + handler: function handler(context, args, optArgs) { + var shift = optArgs[0]; + var width = args[0]; + var height = args[1]; + return { + type: "rule", + shift: shift && shift.value, + width: width.value, + height: height.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = _buildCommon2.default.makeSpan(["mord", "rule"], [], options); + + // Calculate the shift, width, and height of the rule, and account for units + var shift = 0; + if (group.value.shift) { + shift = (0, _units.calculateSize)(group.value.shift, options); + } + + var width = (0, _units.calculateSize)(group.value.width, options); + var height = (0, _units.calculateSize)(group.value.height, options); + + // Style the rule to the right size + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; + + // Record the height and width + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; + // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + + return rule; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // TODO(emily): Figure out if there's an actual way to draw black boxes + // in MathML. + var node = new _mathMLTree2.default.MathNode("mrow"); + + return node; + } +}); + +},{"../buildCommon":91,"../defineFunction":96,"../mathMLTree":121,"../units":127}],117:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: function handler(context, args, optArgs) { + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0]; + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + for (var i = 0; i < tbArg.value.length; ++i) { + letter = tbArg.value[i].value; + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + body: body, + smashHeight: smashHeight, + smashDepth: smashDepth + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = _buildCommon2.default.makeSpan(["mord"], [html.buildGroup(group.value.body, options)]); + + if (!group.value.smashHeight && !group.value.smashDepth) { + return node; + } + + if (group.value.smashHeight) { + node.height = 0; + // In order to influence makeVList, we have to reset the children. + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.value.smashDepth) { + node.depth = 0; + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } + + // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + return _buildCommon2.default.makeVList({ + positionType: "firstBaseline", + children: [{ type: "elem", elem: node }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new _mathMLTree2.default.MathNode("mpadded", [mml.buildGroup(group.value.body, options)]); + + if (group.value.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.value.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); +// smash, with optional [tb], as in AMS + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],118:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// Non-mathy text, possibly in a font +var textFunctionFonts = { + "\\text": undefined, "\\textrm": "mathrm", "\\textsf": "mathsf", + "\\texttt": "mathtt", "\\textnormal": "mathrm", "\\textbf": "mathbf", + "\\textit": "textit" +}; + + +(0, _defineFunction2.default)({ + type: "text", + names: ["\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", "\\textbf", "\\textit"], + props: { + numArgs: 1, + argTypes: ["text"], + greediness: 2, + allowedInText: true + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "text", + body: (0, _defineFunction.ordargument)(body), + font: textFunctionFonts[context.funcName] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = options.withFont(group.value.font); + var inner = html.buildExpression(group.value.body, newOptions, true); + _buildCommon2.default.tryCombineChars(inner); + return _buildCommon2.default.makeSpan(["mord", "text"], inner, newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = group.value.body; + + // Convert each element of the body into MathML, and combine consecutive + // outputs into a single tag. In this way, we don't + // nest non-text items (e.g., $nested-math$) within an . + var inner = []; + var currentText = null; + for (var i = 0; i < body.length; i++) { + var _group = mml.buildGroup(body[i], options); + if (_group.type === 'mtext' && currentText != null) { + Array.prototype.push.apply(currentText.children, _group.children); + } else { + inner.push(_group); + if (_group.type === 'mtext') { + currentText = _group; + } + } + } + + // If there is a single tag in the end (presumably ), + // just return it. Otherwise, wrap them in an . + if (inner.length === 1) { + return inner[0]; + } else { + return new _mathMLTree2.default.MathNode("mrow", inner); + } + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],119:[function(require,module,exports){ +"use strict"; + +var _defineFunction = require("../defineFunction"); + +var _defineFunction2 = _interopRequireDefault(_defineFunction); + +var _buildCommon = require("../buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("../mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _buildHTML = require("../buildHTML"); + +var html = _interopRequireWildcard(_buildHTML); + +var _buildMathML = require("../buildMathML"); + +var mml = _interopRequireWildcard(_buildMathML); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(0, _defineFunction2.default)({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var body = args[0]; + return { + type: "underline", + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = html.buildGroup(group.value.body, options); + + // Create the line above the body + var line = _buildCommon2.default.makeLineSpan("underline-line", options); + + // Generate the vlist, with the appropriate kerns + var vlist = _buildCommon2.default.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ type: "kern", size: line.height }, { type: "elem", elem: line }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: innerGroup }] + }, options); + + return _buildCommon2.default.makeSpan(["mord", "underline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + + var node = new _mathMLTree2.default.MathNode("munder", [mml.buildGroup(group.value.body, options), operator]); + node.setAttribute("accentunder", "true"); + + return node; + } +}); + +},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],120:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _fontMetricsData = require("./fontMetricsData"); + +var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData); + +var _symbols = require("./symbols"); + +var _symbols2 = _interopRequireDefault(_symbols); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +var _Token = require("./Token"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Provides context to macros defined by functions. Implemented by + * MacroExpander. + */ + + +/** Macro tokens (in reverse order). */ + +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ + +var builtinMacros = {}; +exports.default = builtinMacros; + +// This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + builtinMacros[name] = body; +} + +////////////////////////////////////////////////////////////////////// +// macro tools + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { tokens: args[0], numArgs: 0 }; +}); + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + var nextToken = context.future(); + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { tokens: args[1], numArgs: 0 }; + } else { + return { tokens: args[2], numArgs: 0 }; + } +}); + +// \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); + +////////////////////////////////////////////////////////////////////// +// basics +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); +defineMacro("\\begingroup", "{"); +defineMacro("\\endgroup", "}"); + +// Unicode double-struck letters +defineMacro("\u2102", "\\mathbb{C}"); +defineMacro("\u210D", "\\mathbb{H}"); +defineMacro("\u2115", "\\mathbb{N}"); +defineMacro("\u2119", "\\mathbb{P}"); +defineMacro("\u211A", "\\mathbb{Q}"); +defineMacro("\u211D", "\\mathbb{R}"); +defineMacro("\u2124", "\\mathbb{Z}"); + +// \llap and \rlap render their contents in text mode +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); + +////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf + +// \def\overset#1#2{\binrel@{#2}\binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} +defineMacro("\\overset", "\\mathop{#2}\\limits^{#1}"); +defineMacro("\\underset", "\\mathop{#2}\\limits_{#1}"); + +// \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} +defineMacro("\\boxed", "\\fbox{\\displaystyle{#1}}"); + +// \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); + +// AMSMath's automatic \dots, based on \mdots@@ macro. +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\implies': '\\dotsb', + '\\impliedby': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\iff': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + '\\bmod': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; + +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.substr(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in _symbols2.default.math) { + if (_utils2.default.contains(['bin', 'rel'], _symbols2.default.math[next].group)) { + thedots = '\\dotsb'; + } + } + return thedots; +}); + +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; + +defineMacro("\\dotso", function (context) { + var next = context.future().text; + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); + +defineMacro("\\dotsc", function (context) { + var next = context.future().text; + // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); + +defineMacro("\\cdots", function (context) { + var next = context.future().text; + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); + +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); +// amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. +defineMacro("\\dotsx", "\\ldots\\,"); + +// \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); + +// http://texdoc.net/texmf-dist/doc/latex/amsmath/amsmath.pdf +defineMacro("\\thinspace", "\\,"); // \let\thinspace\, +defineMacro("\\medspace", "\\:"); // \let\medspace\: +defineMacro("\\thickspace", "\\;"); // \let\thickspace\; + +////////////////////////////////////////////////////////////////////// +// LaTeX source2e + +// \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. +defineMacro("\\TeX", "\\textrm{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}"); + +// \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered at \scriptsize, +// which is size3, which has a scale factor of 0.7 (see Options.js). +var latexRaiseA = _fontMetricsData2.default['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * _fontMetricsData2.default['Main-Regular']["A".charCodeAt(0)][1] + "em"; +defineMacro("\\LaTeX", "\\textrm{L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptsize A}" + "\\kern-.15em\\TeX}"); + +// New KaTeX logo based on tweaking LaTeX logo +defineMacro("\\KaTeX", "\\textrm{K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptsize A}" + "\\kern-.15em\\TeX}"); + +// \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// KaTeX doesn't do line breaks, so \hspace and \hspace* are the same as \kern +defineMacro("\\hspace", "\\@ifstar\\kern\\kern"); + +////////////////////////////////////////////////////////////////////// +// mathtools.sty + +//\providecommand\ordinarycolon{:} +defineMacro("\\ordinarycolon", ":"); +//\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); +// \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} +defineMacro("\\dblcolon", "\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon"); +// \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} +defineMacro("\\coloneqq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}="); +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} +defineMacro("\\Coloneqq", "\\dblcolon\\mathrel{\\mkern-1.2mu}="); +// \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} +defineMacro("\\coloneq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); +// \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} +defineMacro("\\Coloneq", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); +// \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} +defineMacro("\\eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\vcentcolon"); +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} +defineMacro("\\Eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\dblcolon"); +// \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} +defineMacro("\\eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon"); +// \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} +defineMacro("\\Eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon"); +// \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} +defineMacro("\\colonapprox", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx"); +// \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} +defineMacro("\\Colonapprox", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx"); +// \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} +defineMacro("\\colonsim", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim"); +// \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} +defineMacro("\\Colonsim", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim"); + +////////////////////////////////////////////////////////////////////// +// colonequals.sty + +// Alternate names for mathtools's macros: +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); +// \colonapprox name is same in mathtools and colonequals. +defineMacro("\\coloncolonapprox", "\\Colonapprox"); +// \colonsim name is same in mathtools and colonequals. +defineMacro("\\coloncolonsim", "\\Colonsim"); + +// Additional macros, implemented by analogy with mathtools definitions: +defineMacro("\\simcolon", "\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon"); +defineMacro("\\simcoloncolon", "\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon"); +defineMacro("\\approxcolon", "\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon"); +defineMacro("\\approxcoloncolon", "\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon"); + +// Present in newtxmath, pxfonts and txfonts +// TODO: The unicode character U+220C ∌ should be added to the font, and this +// macro turned into a propper defineSymbol in symbols.js. That way, the +// MathML result will be much cleaner. +defineMacro("\\notni", "\\not\\ni"); + +},{"./Token":90,"./fontMetricsData":102,"./symbols":125,"./utils":128}],121:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _getIterator2 = require("babel-runtime/core-js/get-iterator"); + +var _getIterator3 = _interopRequireDefault(_getIterator2); + +var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); + +var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + +var _createClass2 = require("babel-runtime/helpers/createClass"); + +var _createClass3 = _interopRequireDefault(_createClass2); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + + +/** + * MathML node types used in KaTeX. For a complete list of MathML nodes, see + * https://developer.mozilla.org/en-US/docs/Web/MathML/Element. + */ +var MathNode = function () { + function MathNode(type, children) { + (0, _classCallCheck3.default)(this, MathNode); + + this.type = type; + this.attributes = {}; + this.children = children || []; + } + + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + (0, _createClass3.default)(MathNode, [{ + key: "setAttribute", + value: function setAttribute(name, value) { + this.attributes[name] = value; + } + + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + }, { + key: "toNode", + value: function toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator3.default)(this.children), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var child = _step.value; + + node.appendChild(child.toNode()); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return node; + } + + /** + * Converts the math node into an HTML markup string. + */ + + }, { + key: "toMarkup", + value: function toMarkup() { + var markup = "<" + this.type; + + // Add the attributes + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += _utils2.default.escape(this.attributes[attr]); + markup += "\""; + } + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + + return markup; + } + }]); + return MathNode; +}(); + +/** + * This node represents a piece of text. + */ + /** * These objects store data about MathML nodes. This is the MathML equivalent * of the types in domTree.js. Since MathML handles its own rendering, and @@ -7751,156 +12880,562 @@ defineFunction(["\\begin", "\\end"], { * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. */ -var utils = require("./utils"); +var TextNode = function () { + function TextNode(text) { + (0, _classCallCheck3.default)(this, TextNode); -/** - * This node represents a general purpose MathML node of any type. The - * constructor requires the type of node to create (for example, `"mo"` or - * `"mspace"`, corresponding to `` and `` tags). - */ -function MathNode(type, children) { - this.type = type; - this.attributes = {}; - this.children = children || []; -} + this.text = text; + } -/** - * Sets an attribute on a MathML node. MathML depends on attributes to convey a - * semantic content, so this is used heavily. - */ -MathNode.prototype.setAttribute = function(name, value) { - this.attributes[name] = value; -}; + /** + * Converts the text node into a DOM text node. + */ -/** - * Converts the math node into a MathML-namespaced DOM element. - */ -MathNode.prototype.toNode = function() { - var node = document.createElementNS( - "http://www.w3.org/1998/Math/MathML", this.type); - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); + (0, _createClass3.default)(TextNode, [{ + key: "toNode", + value: function toNode() { + return document.createTextNode(this.text); } - } - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } + /** + * Converts the text node into HTML markup (which is just the text itself). + */ - return node; -}; - -/** - * Converts the math node into an HTML markup string. - */ -MathNode.prototype.toMarkup = function() { - var markup = "<" + this.type; - - // Add the attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += utils.escape(this.attributes[attr]); - markup += "\""; + }, { + key: "toMarkup", + value: function toMarkup() { + return _utils2.default.escape(this.text); } - } + }]); + return TextNode; +}(); - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += ""; - - return markup; -}; - -/** - * This node represents a piece of text. - */ -function TextNode(text) { - this.text = text; -} - -/** - * Converts the text node into a DOM text node. - */ -TextNode.prototype.toNode = function() { - return document.createTextNode(this.text); -}; - -/** - * Converts the text node into HTML markup (which is just the text itself). - */ -TextNode.prototype.toMarkup = function() { - return utils.escape(this.text); -}; - -module.exports = { +exports.default = { MathNode: MathNode, - TextNode: TextNode, + TextNode: TextNode }; -},{"./utils":25}],21:[function(require,module,exports){ +},{"./utils":128,"babel-runtime/core-js/get-iterator":3,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],122:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _Parser = require("./Parser"); + +var _Parser2 = _interopRequireDefault(_Parser); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + /** - * The resulting parse tree nodes of the parse tree. - * - * It is possible to provide position information, so that a ParseNode can - * fulfil a role similar to a Token in error reporting. - * For details on the corresponding properties see Token constructor. - * Providing such information can lead to better error reporting. - * - * @param {string} type type of node, like e.g. "ordgroup" - * @param {?object} value type-specific representation of the node - * @param {string} mode parse mode in action for this node, - * "math" or "text" - * @param {Token=} firstToken first token of the input for this node, - * will omit position information if unset - * @param {Token=} lastToken last token of the input for this node, - * will default to firstToken if unset + * Parses an expression using a Parser, then returns the parsed result. */ -function ParseNode(type, value, mode, firstToken, lastToken) { - this.type = type; - this.value = value; - this.mode = mode; - if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) { - this.lexer = firstToken.lexer; - this.start = firstToken.start; - this.end = (lastToken || firstToken).end; - } -} +var parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + var parser = new _Parser2.default(toParse, settings); -module.exports = { - ParseNode: ParseNode, + return parser.parse(); }; - - -},{}],22:[function(require,module,exports){ /** * Provides a single function for parsing an expression using a Parser * TODO(emily): Remove this */ -var Parser = require("./Parser"); +exports.default = parseTree; + +},{"./Parser":86}],123:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray"); + +var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); + +var _domTree = require("./domTree"); + +var _domTree2 = _interopRequireDefault(_domTree); + +var _buildCommon = require("./buildCommon"); + +var _buildCommon2 = _interopRequireDefault(_buildCommon); + +var _mathMLTree = require("./mathMLTree"); + +var _mathMLTree2 = _interopRequireDefault(_mathMLTree); + +var _utils = require("./utils"); + +var _utils2 = _interopRequireDefault(_utils); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** - * Parses an expression using a Parser, then returns the parsed result. + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. */ -var parseTree = function(toParse, settings) { - if (!(typeof toParse === 'string' || toParse instanceof String)) { - throw new TypeError('KaTeX can only parse string typed expression'); - } - var parser = new Parser(toParse, settings); - return parser.parse(); +var stretchyCodePoint = { + widehat: "^", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23B5", + overbrace: "\u23DE", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21D2", + xRightarrow: "\u21D2", + overleftharpoon: "\u21BC", + xleftharpoonup: "\u21BC", + overrightharpoon: "\u21C0", + xrightharpoonup: "\u21C0", + xLeftarrow: "\u21D0", + xLeftrightarrow: "\u21D4", + xhookleftarrow: "\u21A9", + xhookrightarrow: "\u21AA", + xmapsto: "\u21A6", + xrightharpoondown: "\u21C1", + xleftharpoondown: "\u21BD", + xrightleftharpoons: "\u21CC", + xleftrightharpoons: "\u21CB", + xtwoheadleftarrow: "\u219E", + xtwoheadrightarrow: "\u21A0", + xlongequal: "=", + xtofrom: "\u21C4" }; -module.exports = parseTree; +var mathMLnode = function mathMLnode(label) { + var node = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(stretchyCodePoint[label.substr(1)])]); + node.setAttribute("stretchy", "true"); + return node; +}; + +// Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL + +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. + +// The SVG typically contains a very long (400 em) arrow. + +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. + +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. + +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. + +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. + +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. + +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. + +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.value.length; + } else { + return 1; + } +}; + +var svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + var label = group.value.label.substr(1); + if (_utils2.default.contains(["widehat", "widetilde", "utilde"], label)) { + // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + var numChars = groupLength(group.value.base); + var viewBoxHeight = void 0; + var pathName = void 0; + var _height = void 0; + + if (numChars > 5) { + viewBoxHeight = label === "widehat" ? 420 : 312; + viewBoxWidth = label === "widehat" ? 2364 : 2340; + // Next get the span height, in 1000 ems + _height = label === "widehat" ? 0.42 : 0.34; + pathName = (label === "widehat" ? "widehat" : "tilde") + "4"; + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + if (label === "widehat") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = "widehat" + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + var path = new _domTree2.default.pathNode(pathName); + var svgNode = new _domTree2.default.svgNode([path], { + "width": "100%", + "height": _height + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: _buildCommon2.default.makeSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + + var _katexImagesData$labe = (0, _slicedToArray3.default)(katexImagesData[label], 4), + paths = _katexImagesData$labe[0], + _minWidth = _katexImagesData$labe[1], + _viewBoxHeight = _katexImagesData$labe[2], + align1 = _katexImagesData$labe[3]; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses = void 0; + var aligns = void 0; + if (numSvgChildren === 1) { + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new _domTree2.default.pathNode(paths[i]); + + var _svgNode = new _domTree2.default.svgNode([_path], { + "width": "400em", + "height": _height2 + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = _buildCommon2.default.makeSpan([widthClasses[i]], [_svgNode], options); + if (numSvgChildren === 1) { + return { span: _span, minWidth: _minWidth, height: _height2 }; + } else { + _span.style.height = _height2 + "em"; + spans.push(_span); + } + } + + return { + span: _buildCommon2.default.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + var _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; + + // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + + span.height = height; + span.style.height = height + "em"; + if (minWidth > 0) { + span.style.minWidth = minWidth + "em"; + } + + return span; +}; + +var encloseSpan = function encloseSpan(inner, label, pad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, or \fbox + var img = void 0; + var totalHeight = inner.height + inner.depth + 2 * pad; + + if (/fbox|color/.test(label)) { + img = _buildCommon2.default.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + + var lines = []; + if (/^[bx]cancel$/.test(label)) { + lines.push(new _domTree2.default.lineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new _domTree2.default.lineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new _domTree2.default.svgNode(lines, { + "width": "100%", + "height": totalHeight + "em" + }); + + img = _buildCommon2.default.makeSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = totalHeight + "em"; + + return img; +}; + +var ruleSpan = function ruleSpan(className, options) { + // Get a big square image. The parent span will hide the overflow. + var pathNode = new _domTree2.default.pathNode('bigRule'); + var svg = new _domTree2.default.svgNode([pathNode], { + "width": "400em", + "height": "400em", + "viewBox": "0 0 400000 400000", + "preserveAspectRatio": "xMinYMin slice" + }); + return _buildCommon2.default.makeSpan([className, "hide-tail"], [svg], options); +}; + +exports.default = { + encloseSpan: encloseSpan, + mathMLnode: mathMLnode, + ruleSpan: ruleSpan, + svgSpan: svgSpan +}; + +},{"./buildCommon":91,"./domTree":98,"./mathMLTree":121,"./utils":128,"babel-runtime/helpers/slicedToArray":10}],124:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var path = { + // bigRule provides a big square image for frac-lines, etc. + // The actual rendered rule is smaller, controlled by overflow:hidden. + bigRule: 'M0 0 h400000 v400000 h-400000z M0 0 h400000 v400000 h-400000z', + + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + sqrtMain: 'M95 622c-2.667 0-7.167-2.667-13.5\n-8S72 604 72 600c0-2 .333-3.333 1-4 1.333-2.667 23.833-20.667 67.5-54s\n65.833-50.333 66.5-51c1.333-1.333 3-2 5-2 4.667 0 8.667 3.333 12 10l173\n378c.667 0 35.333-71 104-213s137.5-285 206.5-429S812 17.333 812 14c5.333\n-9.333 12-14 20-14h399166v40H845.272L620 507 385 993c-2.667 4.667-9 7-19\n7-6 0-10-1-12-3L160 575l-65 47zM834 0h399166v40H845z', + + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + sqrtSize1: 'M263 601c.667 0 18 39.667 52 119s68.167\n 158.667 102.5 238 51.833 119.333 52.5 120C810 373.333 980.667 17.667 982 11\nc4.667-7.333 11-11 19-11h398999v40H1012.333L741 607c-38.667 80.667-84 175-136\n 283s-89.167 185.333-111.5 232-33.833 70.333-34.5 71c-4.667 4.667-12.333 7-23\n 7l-12-1-109-253c-72.667-168-109.333-252-110-252-10.667 8-22 16.667-34 26-22\n 17.333-33.333 26-34 26l-26-26 76-59 76-60zM1001 0h398999v40H1012z', + + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + sqrtSize2: 'M1001 0h398999v40H1013.084S929.667 308 749\n 880s-277 876.333-289 913c-4.667 4.667-12.667 7-24 7h-12c-1.333-3.333-3.667\n-11.667-7-25-35.333-125.333-106.667-373.333-214-744-10 12-21 25-33 39l-32 39\nc-6-5.333-15-14-27-26l25-30c26.667-32.667 52-63 76-91l52-60 208 722c56-175.333\n 126.333-397.333 211-666s153.833-488.167 207.5-658.5C944.167 129.167 975 32.667\n 983 10c4-6.667 10-10 18-10zm0 0h398999v40H1013z', + + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + sqrtSize3: 'M424 2398c-1.333-.667-38.5-172-111.5-514 S202.667 1370.667 202\n 1370c0-2-10.667 14.333-32 49-4.667 7.333-9.833 15.667-15.5 25s-9.833 16-12.5\n 20l-5 7c-4-3.333-8.333-7.667-13-13l-13-13 76-122 77-121 209 968c0-2 84.667\n-361.667 254-1079C896.333 373.667 981.667 13.333 983 10c4-6.667 10-10 18-10\nh398999v40H1014.622S927.332 418.667 742 1206c-185.333 787.333-279.333 1182.333\n-282 1185-2 6-10 9-24 9-8 0-12-.667-12-2zM1001 0h398999v40H1014z', + + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + sqrtSize4: 'M473 2713C812.333 913.667 982.333 13 983 11c3.333-7.333 9.333\n-11 18-11h399110v40H1017.698S927.168 518 741.5 1506C555.833 2494 462 2989 460\n 2991c-2 6-10 9-24 9-8 0-12-.667-12-2s-5.333-32-16-92c-50.667-293.333-119.667\n-693.333-207-1200 0-1.333-5.333 8.667-16 30l-32 64-16 33-26-26 76-153 77-151\nc.667.667 35.667 202 105 604 67.333 400.667 102 602.667 104 606z\nM1001 0h398999v40H1017z', + + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: 'M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z', + + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: 'M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z', + + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: 'M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z', + + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: 'M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z', + + leftbraceunder: 'M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z', + + // overgroup is from the MnSymbol package (public domain) + leftgroup: 'M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z', + + leftgroupunder: 'M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z', + + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: 'M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z', + + leftharpoonplus: 'M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z', + + leftharpoondown: 'M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z', + + leftharpoondownplus: 'M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z', + + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: 'M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z', + + leftlinesegment: 'M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z', + + leftmapsto: 'M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z', + + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: 'M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z', + + longequal: 'M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z', + + midbrace: 'M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z', + + midbraceunder: 'M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z', + + rightarrow: 'M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z', + + rightbrace: 'M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z', + + rightbraceunder: 'M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z', + + rightgroup: 'M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z', + + rightgroupunder: 'M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z', + + rightharpoon: 'M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z', + + rightharpoonplus: 'M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z', + + rightharpoondown: 'M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z', + + rightharpoondownplus: 'M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z', + + righthook: 'M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z', + + rightlinesegment: 'M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z', + + rightToFrom: 'M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z', + + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: 'M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z', + + twoheadrightarrow: 'M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z', + + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: 'M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z', + + // ditto tilde2, tilde3, & tilde4 + tilde2: 'M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z', + + tilde3: 'M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z', + + tilde4: 'M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z', + + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: 'M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z', + + // ditto widehat2, widehat3, & widehat4 + widehat2: 'M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z', + + widehat3: 'M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z', + + widehat4: 'M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z' +}; + +exports.default = { path: path }; + +},{}],125:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); -},{"./Parser":7}],23:[function(require,module,exports){ /** * This file holds a list of all no-argument functions and single-character * symbols (like 'a' or ';'). @@ -7919,17 +13454,20 @@ module.exports = parseTree; * accepted in (e.g. "math" or "text"). */ -module.exports = { - math: {}, - text: {}, +var symbols = { + "math": {}, + "text": {} }; +exports.default = symbols; -function defineSymbol(mode, font, group, replace, name) { - module.exports[mode][name] = { - font: font, - group: group, - replace: replace, - }; +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { font: font, group: group, replace: replace }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } } // Some abbreviations for commonly used strings. @@ -7959,621 +13497,810 @@ var textord = "textord"; // Now comes the symbol table // Relation Symbols -defineSymbol(math, main, rel, "\u2261", "\\equiv"); -defineSymbol(math, main, rel, "\u227a", "\\prec"); -defineSymbol(math, main, rel, "\u227b", "\\succ"); -defineSymbol(math, main, rel, "\u223c", "\\sim"); -defineSymbol(math, main, rel, "\u22a5", "\\perp"); -defineSymbol(math, main, rel, "\u2aaf", "\\preceq"); -defineSymbol(math, main, rel, "\u2ab0", "\\succeq"); -defineSymbol(math, main, rel, "\u2243", "\\simeq"); -defineSymbol(math, main, rel, "\u2223", "\\mid"); -defineSymbol(math, main, rel, "\u226a", "\\ll"); -defineSymbol(math, main, rel, "\u226b", "\\gg"); -defineSymbol(math, main, rel, "\u224d", "\\asymp"); +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227A", "\\prec", true); +defineSymbol(math, main, rel, "\u227B", "\\succ", true); +defineSymbol(math, main, rel, "\u223C", "\\sim", true); +defineSymbol(math, main, rel, "\u22A5", "\\perp"); +defineSymbol(math, main, rel, "\u2AAF", "\\preceq", true); +defineSymbol(math, main, rel, "\u2AB0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226A", "\\ll"); +defineSymbol(math, main, rel, "\u226B", "\\gg", true); +defineSymbol(math, main, rel, "\u224D", "\\asymp", true); defineSymbol(math, main, rel, "\u2225", "\\parallel"); -defineSymbol(math, main, rel, "\u22c8", "\\bowtie"); -defineSymbol(math, main, rel, "\u2323", "\\smile"); -defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq"); -defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq"); -defineSymbol(math, main, rel, "\u2250", "\\doteq"); -defineSymbol(math, main, rel, "\u2322", "\\frown"); -defineSymbol(math, main, rel, "\u220b", "\\ni"); -defineSymbol(math, main, rel, "\u221d", "\\propto"); -defineSymbol(math, main, rel, "\u22a2", "\\vdash"); -defineSymbol(math, main, rel, "\u22a3", "\\dashv"); -defineSymbol(math, main, rel, "\u220b", "\\owns"); +defineSymbol(math, main, rel, "\u22C8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220B", "\\ni", true); +defineSymbol(math, main, rel, "\u221D", "\\propto", true); +defineSymbol(math, main, rel, "\u22A2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22A3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220B", "\\owns"); // Punctuation -defineSymbol(math, main, punct, "\u002e", "\\ldotp"); -defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); +defineSymbol(math, main, punct, ".", "\\ldotp"); +defineSymbol(math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols -defineSymbol(math, main, textord, "\u0023", "\\#"); -defineSymbol(math, main, textord, "\u0026", "\\&"); -defineSymbol(math, main, textord, "\u2135", "\\aleph"); -defineSymbol(math, main, textord, "\u2200", "\\forall"); -defineSymbol(math, main, textord, "\u210f", "\\hbar"); -defineSymbol(math, main, textord, "\u2203", "\\exists"); -defineSymbol(math, main, textord, "\u2207", "\\nabla"); -defineSymbol(math, main, textord, "\u266d", "\\flat"); -defineSymbol(math, main, textord, "\u2113", "\\ell"); -defineSymbol(math, main, textord, "\u266e", "\\natural"); -defineSymbol(math, main, textord, "\u2663", "\\clubsuit"); -defineSymbol(math, main, textord, "\u2118", "\\wp"); -defineSymbol(math, main, textord, "\u266f", "\\sharp"); -defineSymbol(math, main, textord, "\u2662", "\\diamondsuit"); -defineSymbol(math, main, textord, "\u211c", "\\Re"); -defineSymbol(math, main, textord, "\u2661", "\\heartsuit"); -defineSymbol(math, main, textord, "\u2111", "\\Im"); -defineSymbol(math, main, textord, "\u2660", "\\spadesuit"); +defineSymbol(math, main, textord, "#", "\\#"); +defineSymbol(text, main, textord, "#", "\\#"); +defineSymbol(math, main, textord, "&", "\\&"); +defineSymbol(text, main, textord, "&", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210F", "\\hbar"); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266D", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266E", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266F", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211C", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); // Math and Text defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\dag"); +defineSymbol(text, main, textord, "\u2020", "\\textdagger"); defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2021", "\\ddag"); +defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl"); // Large Delimiters -defineSymbol(math, main, close, "\u23b1", "\\rmoustache"); -defineSymbol(math, main, open, "\u23b0", "\\lmoustache"); -defineSymbol(math, main, close, "\u27ef", "\\rgroup"); -defineSymbol(math, main, open, "\u27ee", "\\lgroup"); +defineSymbol(math, main, close, "\u23B1", "\\rmoustache"); +defineSymbol(math, main, open, "\u23B0", "\\lmoustache"); +defineSymbol(math, main, close, "\u27EF", "\\rgroup"); +defineSymbol(math, main, open, "\u27EE", "\\lgroup"); // Binary Operators -defineSymbol(math, main, bin, "\u2213", "\\mp"); -defineSymbol(math, main, bin, "\u2296", "\\ominus"); -defineSymbol(math, main, bin, "\u228e", "\\uplus"); -defineSymbol(math, main, bin, "\u2293", "\\sqcap"); +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228E", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); defineSymbol(math, main, bin, "\u2217", "\\ast"); -defineSymbol(math, main, bin, "\u2294", "\\sqcup"); -defineSymbol(math, main, bin, "\u25ef", "\\bigcirc"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25EF", "\\bigcirc"); defineSymbol(math, main, bin, "\u2219", "\\bullet"); defineSymbol(math, main, bin, "\u2021", "\\ddagger"); -defineSymbol(math, main, bin, "\u2240", "\\wr"); -defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2A3F", "\\amalg"); +defineSymbol(math, main, bin, "&", "\\And"); // from amsmath // Arrow Symbols -defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow"); -defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow"); -defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow"); -defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow"); -defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow"); -defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow"); -defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow"); -defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow"); -defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow"); -defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow"); -defineSymbol(math, main, rel, "\u21a6", "\\mapsto"); -defineSymbol(math, main, rel, "\u27fc", "\\longmapsto"); -defineSymbol(math, main, rel, "\u2197", "\\nearrow"); -defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow"); -defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow"); -defineSymbol(math, main, rel, "\u2198", "\\searrow"); -defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup"); -defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup"); -defineSymbol(math, main, rel, "\u2199", "\\swarrow"); -defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown"); -defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown"); -defineSymbol(math, main, rel, "\u2196", "\\nwarrow"); -defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons"); +defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21A6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27FC", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations -defineSymbol(math, ams, rel, "\u226e", "\\nless"); -defineSymbol(math, ams, rel, "\ue010", "\\nleqslant"); -defineSymbol(math, ams, rel, "\ue011", "\\nleqq"); -defineSymbol(math, ams, rel, "\u2a87", "\\lneq"); -defineSymbol(math, ams, rel, "\u2268", "\\lneqq"); -defineSymbol(math, ams, rel, "\ue00c", "\\lvertneqq"); -defineSymbol(math, ams, rel, "\u22e6", "\\lnsim"); -defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox"); -defineSymbol(math, ams, rel, "\u2280", "\\nprec"); -defineSymbol(math, ams, rel, "\u22e0", "\\npreceq"); -defineSymbol(math, ams, rel, "\u22e8", "\\precnsim"); -defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox"); -defineSymbol(math, ams, rel, "\u2241", "\\nsim"); -defineSymbol(math, ams, rel, "\ue006", "\\nshortmid"); -defineSymbol(math, ams, rel, "\u2224", "\\nmid"); -defineSymbol(math, ams, rel, "\u22ac", "\\nvdash"); -defineSymbol(math, ams, rel, "\u22ad", "\\nvDash"); -defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); -defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq"); -defineSymbol(math, ams, rel, "\u228a", "\\subsetneq"); -defineSymbol(math, ams, rel, "\ue01a", "\\varsubsetneq"); -defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq"); -defineSymbol(math, ams, rel, "\ue017", "\\varsubsetneqq"); -defineSymbol(math, ams, rel, "\u226f", "\\ngtr"); -defineSymbol(math, ams, rel, "\ue00f", "\\ngeqslant"); -defineSymbol(math, ams, rel, "\ue00e", "\\ngeqq"); -defineSymbol(math, ams, rel, "\u2a88", "\\gneq"); -defineSymbol(math, ams, rel, "\u2269", "\\gneqq"); -defineSymbol(math, ams, rel, "\ue00d", "\\gvertneqq"); -defineSymbol(math, ams, rel, "\u22e7", "\\gnsim"); -defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox"); -defineSymbol(math, ams, rel, "\u2281", "\\nsucc"); -defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq"); -defineSymbol(math, ams, rel, "\u22e9", "\\succnsim"); -defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox"); -defineSymbol(math, ams, rel, "\u2246", "\\ncong"); -defineSymbol(math, ams, rel, "\ue007", "\\nshortparallel"); -defineSymbol(math, ams, rel, "\u2226", "\\nparallel"); -defineSymbol(math, ams, rel, "\u22af", "\\nVDash"); -defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); -defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq"); -defineSymbol(math, ams, rel, "\ue018", "\\nsupseteqq"); -defineSymbol(math, ams, rel, "\u228b", "\\supsetneq"); -defineSymbol(math, ams, rel, "\ue01b", "\\varsupsetneq"); -defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq"); -defineSymbol(math, ams, rel, "\ue019", "\\varsupsetneqq"); -defineSymbol(math, ams, rel, "\u22ae", "\\nVdash"); -defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq"); -defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq"); -defineSymbol(math, ams, rel, "\ue016", "\\nsubseteqq"); -defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); -defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); +defineSymbol(math, ams, rel, "\u226E", "\\nless", true); +defineSymbol(math, ams, rel, "\uE010", "\\nleqslant"); +defineSymbol(math, ams, rel, "\uE011", "\\nleqq"); +defineSymbol(math, ams, rel, "\u2A87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\uE00C", "\\lvertneqq"); +defineSymbol(math, ams, rel, "\u22E6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); +// unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u22E0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22E8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\uE006", "\\nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22AC", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22AD", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228A", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\uE01A", "\\varsubsetneq"); +defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\uE017", "\\varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226F", "\\ngtr", true); +defineSymbol(math, ams, rel, "\uE00F", "\\ngeqslant"); +defineSymbol(math, ams, rel, "\uE00E", "\\ngeqq"); +defineSymbol(math, ams, rel, "\u2A88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\uE00D", "\\gvertneqq"); +defineSymbol(math, ams, rel, "\u22E7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); +// unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22E9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox", true); +// unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\uE007", "\\nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22AF", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\uE018", "\\nsupseteqq"); +defineSymbol(math, ams, rel, "\u228B", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\uE01B", "\\varsupsetneq"); +defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\uE019", "\\varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22AE", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\uE016", "\\nsubseteqq"); +defineSymbol(math, ams, bin, "\u22B4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows -defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow"); -defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow"); -defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow"); -defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow"); -defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow"); -defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow"); +defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc -defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); -defineSymbol(math, ams, textord, "\u210f", "\\hslash"); -defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); -defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); -defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); -defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); -defineSymbol(math, ams, textord, "\u2221", "\\measuredangle"); +defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210F", "\\hslash"); +defineSymbol(math, ams, textord, "\u25BD", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25CA", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24C8", "\\circledS"); +defineSymbol(math, ams, textord, "\xAE", "\\circledR"); +defineSymbol(text, ams, textord, "\xAE", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); defineSymbol(math, ams, textord, "\u2204", "\\nexists"); defineSymbol(math, ams, textord, "\u2127", "\\mho"); -defineSymbol(math, ams, textord, "\u2132", "\\Finv"); -defineSymbol(math, ams, textord, "\u2141", "\\Game"); -defineSymbol(math, ams, textord, "\u006b", "\\Bbbk"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "k", "\\Bbbk"); defineSymbol(math, ams, textord, "\u2035", "\\backprime"); -defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); -defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); -defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); -defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge"); defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); -defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle"); -defineSymbol(math, ams, textord, "\u2201", "\\complement"); -defineSymbol(math, ams, textord, "\u00f0", "\\eth"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); +// unicode-math maps U+F0 to \matheth. We map to AMS function \eth +defineSymbol(math, ams, textord, "\xF0", "\\eth", true); defineSymbol(math, ams, textord, "\u2571", "\\diagup"); defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); -defineSymbol(math, ams, textord, "\u25a1", "\\square"); -defineSymbol(math, ams, textord, "\u25a1", "\\Box"); -defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); -defineSymbol(math, ams, textord, "\u00a5", "\\yen"); -defineSymbol(math, ams, textord, "\u2713", "\\checkmark"); +defineSymbol(math, ams, textord, "\u25A1", "\\square"); +defineSymbol(math, ams, textord, "\u25A1", "\\Box"); +defineSymbol(math, ams, textord, "\u25CA", "\\Diamond"); +// unicode-math maps U+A5 to \mathyen. We map to AMS function \yen +defineSymbol(math, ams, textord, "\xA5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew -defineSymbol(math, ams, textord, "\u2136", "\\beth"); -defineSymbol(math, ams, textord, "\u2138", "\\daleth"); -defineSymbol(math, ams, textord, "\u2137", "\\gimel"); +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek -defineSymbol(math, ams, textord, "\u03dd", "\\digamma"); -defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); +defineSymbol(math, ams, textord, "\u03DD", "\\digamma"); +defineSymbol(math, ams, textord, "\u03F0", "\\varkappa"); // AMS Delimiters -defineSymbol(math, ams, open, "\u250c", "\\ulcorner"); +defineSymbol(math, ams, open, "\u250C", "\\ulcorner"); defineSymbol(math, ams, close, "\u2510", "\\urcorner"); defineSymbol(math, ams, open, "\u2514", "\\llcorner"); defineSymbol(math, ams, close, "\u2518", "\\lrcorner"); // AMS Binary Relations -defineSymbol(math, ams, rel, "\u2266", "\\leqq"); -defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant"); -defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless"); +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant"); +defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless", true); defineSymbol(math, ams, rel, "\u2272", "\\lesssim"); -defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox"); -defineSymbol(math, ams, rel, "\u224a", "\\approxeq"); -defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); -defineSymbol(math, ams, rel, "\u22d8", "\\lll"); +defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox"); +defineSymbol(math, ams, rel, "\u224A", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22D6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22D8", "\\lll"); defineSymbol(math, ams, rel, "\u2276", "\\lessgtr"); -defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr"); -defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr"); +defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr"); +defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr"); defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); -defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq"); -defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq"); -defineSymbol(math, ams, rel, "\u223d", "\\backsim"); -defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq"); -defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq"); -defineSymbol(math, ams, rel, "\u22d0", "\\Subset"); -defineSymbol(math, ams, rel, "\u228f", "\\sqsubset"); -defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq"); -defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec"); -defineSymbol(math, ams, rel, "\u227e", "\\precsim"); -defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox"); -defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); -defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); -defineSymbol(math, ams, rel, "\u22a8", "\\vDash"); -defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223D", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22D0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228F", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227E", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22A8", "\\vDash"); +defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash", true); defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); -defineSymbol(math, ams, rel, "\u224f", "\\bumpeq"); -defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq"); -defineSymbol(math, ams, rel, "\u2267", "\\geqq"); -defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant"); -defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr"); -defineSymbol(math, ams, rel, "\u2273", "\\gtrsim"); -defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox"); -defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); -defineSymbol(math, ams, rel, "\u22d9", "\\ggg"); -defineSymbol(math, ams, rel, "\u2277", "\\gtrless"); -defineSymbol(math, ams, rel, "\u22db", "\\gtreqless"); -defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless"); -defineSymbol(math, ams, rel, "\u2256", "\\eqcirc"); -defineSymbol(math, ams, rel, "\u2257", "\\circeq"); -defineSymbol(math, ams, rel, "\u225c", "\\triangleq"); -defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u224F", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22D9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225C", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223C", "\\thicksim"); defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); -defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq"); -defineSymbol(math, ams, rel, "\u22d1", "\\Supset"); -defineSymbol(math, ams, rel, "\u2290", "\\sqsupset"); -defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq"); -defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc"); -defineSymbol(math, ams, rel, "\u227f", "\\succsim"); -defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox"); -defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); -defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); -defineSymbol(math, ams, rel, "\u22a9", "\\Vdash"); +defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22D1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227F", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22A9", "\\Vdash", true); defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); -defineSymbol(math, ams, rel, "\u226c", "\\between"); -defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork"); -defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); -defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); -defineSymbol(math, ams, rel, "\u2234", "\\therefore"); -defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); -defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); -defineSymbol(math, ams, rel, "\u2235", "\\because"); -defineSymbol(math, ams, rel, "\u22d8", "\\llless"); -defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); -defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); -defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); -defineSymbol(math, ams, rel, "\u2242", "\\eqsim"); -defineSymbol(math, main, rel, "\u22c8", "\\Join"); -defineSymbol(math, ams, rel, "\u2251", "\\Doteq"); +defineSymbol(math, ams, rel, "\u226C", "\\between", true); +defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221D", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft"); +// unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220D", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright"); +// unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22D8", "\\llless"); +defineSymbol(math, ams, rel, "\u22D9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22B2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22B3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22C8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators -defineSymbol(math, ams, bin, "\u2214", "\\dotplus"); +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); -defineSymbol(math, ams, bin, "\u22d2", "\\Cap"); -defineSymbol(math, ams, bin, "\u22d3", "\\Cup"); -defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge"); -defineSymbol(math, ams, bin, "\u229f", "\\boxminus"); -defineSymbol(math, ams, bin, "\u229e", "\\boxplus"); -defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes"); -defineSymbol(math, ams, bin, "\u22c9", "\\ltimes"); -defineSymbol(math, ams, bin, "\u22ca", "\\rtimes"); -defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes"); -defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes"); -defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge"); -defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee"); -defineSymbol(math, ams, bin, "\u229d", "\\circleddash"); -defineSymbol(math, ams, bin, "\u229b", "\\circledast"); -defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); -defineSymbol(math, ams, bin, "\u22ba", "\\intercal"); -defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); -defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); -defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes"); +defineSymbol(math, ams, bin, "\u22D2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22D3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229F", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229E", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22C9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22CA", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229D", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229B", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22C5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22BA", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22D2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22D3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows -defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow"); -defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow"); -defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows"); -defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows"); -defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow"); -defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow"); -defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail"); -defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft"); -defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons"); -defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft"); -defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft"); -defineSymbol(math, ams, rel, "\u21b0", "\\Lsh"); -defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows"); -defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft"); -defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft"); -defineSymbol(math, ams, rel, "\u22b8", "\\multimap"); -defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow"); -defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows"); -defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows"); -defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow"); -defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail"); -defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright"); -defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright"); -defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright"); -defineSymbol(math, ams, rel, "\u21b1", "\\Rsh"); -defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows"); -defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright"); -defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright"); -defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow"); -defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); -defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow"); -defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. +defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow", true); +// unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft", true); +// unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21B0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft", true); +defineSymbol(math, ams, rel, "\u22B8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright", true); +// unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. +defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21B1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21DD", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21BE", "\\restriction"); defineSymbol(math, main, textord, "\u2018", "`"); defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\$"); +defineSymbol(text, main, textord, "$", "\\textdollar"); defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text, main, textord, "%", "\\%"); defineSymbol(math, main, textord, "_", "\\_"); -defineSymbol(math, main, textord, "\u2220", "\\angle"); -defineSymbol(math, main, textord, "\u221e", "\\infty"); +defineSymbol(text, main, textord, "_", "\\_"); +defineSymbol(text, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221E", "\\infty", true); defineSymbol(math, main, textord, "\u2032", "\\prime"); -defineSymbol(math, main, textord, "\u25b3", "\\triangle"); -defineSymbol(math, main, textord, "\u0393", "\\Gamma"); -defineSymbol(math, main, textord, "\u0394", "\\Delta"); -defineSymbol(math, main, textord, "\u0398", "\\Theta"); -defineSymbol(math, main, textord, "\u039b", "\\Lambda"); -defineSymbol(math, main, textord, "\u039e", "\\Xi"); -defineSymbol(math, main, textord, "\u03a0", "\\Pi"); -defineSymbol(math, main, textord, "\u03a3", "\\Sigma"); -defineSymbol(math, main, textord, "\u03a5", "\\Upsilon"); -defineSymbol(math, main, textord, "\u03a6", "\\Phi"); -defineSymbol(math, main, textord, "\u03a8", "\\Psi"); -defineSymbol(math, main, textord, "\u03a9", "\\Omega"); -defineSymbol(math, main, textord, "\u00ac", "\\neg"); -defineSymbol(math, main, textord, "\u00ac", "\\lnot"); -defineSymbol(math, main, textord, "\u22a4", "\\top"); -defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u25B3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039B", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039E", "\\Xi", true); +defineSymbol(math, main, textord, "\u03A0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03A6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03A8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03A9", "\\Omega", true); +defineSymbol(math, main, textord, "\xAC", "\\neg"); +defineSymbol(math, main, textord, "\xAC", "\\lnot"); +defineSymbol(math, main, textord, "\u22A4", "\\top"); +defineSymbol(math, main, textord, "\u22A5", "\\bot"); defineSymbol(math, main, textord, "\u2205", "\\emptyset"); defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); -defineSymbol(math, main, mathord, "\u03b1", "\\alpha"); -defineSymbol(math, main, mathord, "\u03b2", "\\beta"); -defineSymbol(math, main, mathord, "\u03b3", "\\gamma"); -defineSymbol(math, main, mathord, "\u03b4", "\\delta"); -defineSymbol(math, main, mathord, "\u03f5", "\\epsilon"); -defineSymbol(math, main, mathord, "\u03b6", "\\zeta"); -defineSymbol(math, main, mathord, "\u03b7", "\\eta"); -defineSymbol(math, main, mathord, "\u03b8", "\\theta"); -defineSymbol(math, main, mathord, "\u03b9", "\\iota"); -defineSymbol(math, main, mathord, "\u03ba", "\\kappa"); -defineSymbol(math, main, mathord, "\u03bb", "\\lambda"); -defineSymbol(math, main, mathord, "\u03bc", "\\mu"); -defineSymbol(math, main, mathord, "\u03bd", "\\nu"); -defineSymbol(math, main, mathord, "\u03be", "\\xi"); -defineSymbol(math, main, mathord, "o", "\\omicron"); -defineSymbol(math, main, mathord, "\u03c0", "\\pi"); -defineSymbol(math, main, mathord, "\u03c1", "\\rho"); -defineSymbol(math, main, mathord, "\u03c3", "\\sigma"); -defineSymbol(math, main, mathord, "\u03c4", "\\tau"); -defineSymbol(math, main, mathord, "\u03c5", "\\upsilon"); -defineSymbol(math, main, mathord, "\u03d5", "\\phi"); -defineSymbol(math, main, mathord, "\u03c7", "\\chi"); -defineSymbol(math, main, mathord, "\u03c8", "\\psi"); -defineSymbol(math, main, mathord, "\u03c9", "\\omega"); -defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon"); -defineSymbol(math, main, mathord, "\u03d1", "\\vartheta"); -defineSymbol(math, main, mathord, "\u03d6", "\\varpi"); -defineSymbol(math, main, mathord, "\u03f1", "\\varrho"); -defineSymbol(math, main, mathord, "\u03c2", "\\varsigma"); -defineSymbol(math, main, mathord, "\u03c6", "\\varphi"); +defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03B2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03B4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03B7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03B8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03B9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03BC", "\\mu", true); +defineSymbol(math, main, mathord, "\u03BD", "\\nu", true); +defineSymbol(math, main, mathord, "\u03BE", "\\xi", true); +defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03C0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03C1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03C4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03D5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03C7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03C8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03C9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); defineSymbol(math, main, bin, "\u2217", "*"); defineSymbol(math, main, bin, "+", "+"); defineSymbol(math, main, bin, "\u2212", "-"); -defineSymbol(math, main, bin, "\u22c5", "\\cdot"); +defineSymbol(math, main, bin, "\u22C5", "\\cdot"); defineSymbol(math, main, bin, "\u2218", "\\circ"); -defineSymbol(math, main, bin, "\u00f7", "\\div"); -defineSymbol(math, main, bin, "\u00b1", "\\pm"); -defineSymbol(math, main, bin, "\u00d7", "\\times"); -defineSymbol(math, main, bin, "\u2229", "\\cap"); -defineSymbol(math, main, bin, "\u222a", "\\cup"); +defineSymbol(math, main, bin, "\xF7", "\\div", true); +defineSymbol(math, main, bin, "\xB1", "\\pm", true); +defineSymbol(math, main, bin, "\xD7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222A", "\\cup", true); defineSymbol(math, main, bin, "\u2216", "\\setminus"); defineSymbol(math, main, bin, "\u2227", "\\land"); defineSymbol(math, main, bin, "\u2228", "\\lor"); -defineSymbol(math, main, bin, "\u2227", "\\wedge"); -defineSymbol(math, main, bin, "\u2228", "\\vee"); -defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221A", "\\surd"); defineSymbol(math, main, open, "(", "("); defineSymbol(math, main, open, "[", "["); -defineSymbol(math, main, open, "\u27e8", "\\langle"); +defineSymbol(math, main, open, "\u27E8", "\\langle"); defineSymbol(math, main, open, "\u2223", "\\lvert"); defineSymbol(math, main, open, "\u2225", "\\lVert"); defineSymbol(math, main, close, ")", ")"); defineSymbol(math, main, close, "]", "]"); defineSymbol(math, main, close, "?", "?"); defineSymbol(math, main, close, "!", "!"); -defineSymbol(math, main, close, "\u27e9", "\\rangle"); +defineSymbol(math, main, close, "\u27E9", "\\rangle"); defineSymbol(math, main, close, "\u2223", "\\rvert"); defineSymbol(math, main, close, "\u2225", "\\rVert"); defineSymbol(math, main, rel, "=", "="); defineSymbol(math, main, rel, "<", "<"); defineSymbol(math, main, rel, ">", ">"); defineSymbol(math, main, rel, ":", ":"); -defineSymbol(math, main, rel, "\u2248", "\\approx"); -defineSymbol(math, main, rel, "\u2245", "\\cong"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); defineSymbol(math, main, rel, "\u2265", "\\ge"); -defineSymbol(math, main, rel, "\u2265", "\\geq"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); defineSymbol(math, main, rel, "\u2190", "\\gets"); defineSymbol(math, main, rel, ">", "\\gt"); -defineSymbol(math, main, rel, "\u2208", "\\in"); -defineSymbol(math, main, rel, "\u2209", "\\notin"); -defineSymbol(math, main, rel, "\u2282", "\\subset"); -defineSymbol(math, main, rel, "\u2283", "\\supset"); -defineSymbol(math, main, rel, "\u2286", "\\subseteq"); -defineSymbol(math, main, rel, "\u2287", "\\supseteq"); -defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq"); -defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq"); -defineSymbol(math, main, rel, "\u22a8", "\\models"); -defineSymbol(math, main, rel, "\u2190", "\\leftarrow"); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\u2209", "\\notin", true); +defineSymbol(math, main, rel, "\u0338", "\\not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22A8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); defineSymbol(math, main, rel, "\u2264", "\\le"); -defineSymbol(math, main, rel, "\u2264", "\\leq"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); defineSymbol(math, main, rel, "<", "\\lt"); -defineSymbol(math, main, rel, "\u2260", "\\ne"); +defineSymbol(math, main, rel, "\u2260", "\\ne", true); defineSymbol(math, main, rel, "\u2260", "\\neq"); -defineSymbol(math, main, rel, "\u2192", "\\rightarrow"); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); defineSymbol(math, main, rel, "\u2192", "\\to"); -defineSymbol(math, ams, rel, "\u2271", "\\ngeq"); -defineSymbol(math, ams, rel, "\u2270", "\\nleq"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); defineSymbol(math, main, spacing, null, "\\!"); -defineSymbol(math, main, spacing, "\u00a0", "\\ "); -defineSymbol(math, main, spacing, "\u00a0", "~"); +defineSymbol(math, main, spacing, "\xA0", "\\ "); +defineSymbol(math, main, spacing, "\xA0", "~"); defineSymbol(math, main, spacing, null, "\\,"); defineSymbol(math, main, spacing, null, "\\:"); defineSymbol(math, main, spacing, null, "\\;"); defineSymbol(math, main, spacing, null, "\\enspace"); defineSymbol(math, main, spacing, null, "\\qquad"); defineSymbol(math, main, spacing, null, "\\quad"); -defineSymbol(math, main, spacing, "\u00a0", "\\space"); +defineSymbol(math, main, spacing, "\xA0", "\\space"); defineSymbol(math, main, punct, ",", ","); defineSymbol(math, main, punct, ";", ";"); defineSymbol(math, main, punct, ":", "\\colon"); -defineSymbol(math, ams, bin, "\u22bc", "\\barwedge"); -defineSymbol(math, ams, bin, "\u22bb", "\\veebar"); -defineSymbol(math, main, bin, "\u2299", "\\odot"); -defineSymbol(math, main, bin, "\u2295", "\\oplus"); -defineSymbol(math, main, bin, "\u2297", "\\otimes"); -defineSymbol(math, main, textord, "\u2202", "\\partial"); -defineSymbol(math, main, bin, "\u2298", "\\oslash"); -defineSymbol(math, ams, bin, "\u229a", "\\circledcirc"); -defineSymbol(math, ams, bin, "\u22a1", "\\boxdot"); -defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); -defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, ams, bin, "\u22BC", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22BB", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229A", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22A1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown"); defineSymbol(math, main, bin, "\u2020", "\\dagger"); -defineSymbol(math, main, bin, "\u22c4", "\\diamond"); -defineSymbol(math, main, bin, "\u22c6", "\\star"); -defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); -defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, bin, "\u22C4", "\\diamond"); +defineSymbol(math, main, bin, "\u22C6", "\\star"); +defineSymbol(math, main, bin, "\u25C3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25B9", "\\triangleright"); defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\{"); +defineSymbol(text, main, textord, "{", "\\textbraceleft"); defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\}"); +defineSymbol(text, main, textord, "}", "\\textbraceright"); defineSymbol(math, main, open, "{", "\\lbrace"); defineSymbol(math, main, close, "}", "\\rbrace"); defineSymbol(math, main, open, "[", "\\lbrack"); defineSymbol(math, main, close, "]", "\\rbrack"); -defineSymbol(math, main, open, "\u230a", "\\lfloor"); -defineSymbol(math, main, close, "\u230b", "\\rfloor"); +defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc +defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc +defineSymbol(math, main, open, "\u230A", "\\lfloor"); +defineSymbol(math, main, close, "\u230B", "\\rfloor"); defineSymbol(math, main, open, "\u2308", "\\lceil"); defineSymbol(math, main, close, "\u2309", "\\rceil"); defineSymbol(math, main, textord, "\\", "\\backslash"); defineSymbol(math, main, textord, "\u2223", "|"); defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc defineSymbol(math, main, textord, "\u2225", "\\|"); defineSymbol(math, main, textord, "\u2225", "\\Vert"); -defineSymbol(math, main, rel, "\u2191", "\\uparrow"); -defineSymbol(math, main, rel, "\u21d1", "\\Uparrow"); -defineSymbol(math, main, rel, "\u2193", "\\downarrow"); -defineSymbol(math, main, rel, "\u21d3", "\\Downarrow"); -defineSymbol(math, main, rel, "\u2195", "\\updownarrow"); -defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow"); -defineSymbol(math, math, op, "\u2210", "\\coprod"); -defineSymbol(math, math, op, "\u22c1", "\\bigvee"); -defineSymbol(math, math, op, "\u22c0", "\\bigwedge"); -defineSymbol(math, math, op, "\u2a04", "\\biguplus"); -defineSymbol(math, math, op, "\u22c2", "\\bigcap"); -defineSymbol(math, math, op, "\u22c3", "\\bigcup"); -defineSymbol(math, math, op, "\u222b", "\\int"); -defineSymbol(math, math, op, "\u222b", "\\intop"); -defineSymbol(math, math, op, "\u222c", "\\iint"); -defineSymbol(math, math, op, "\u222d", "\\iiint"); -defineSymbol(math, math, op, "\u220f", "\\prod"); -defineSymbol(math, math, op, "\u2211", "\\sum"); -defineSymbol(math, math, op, "\u2a02", "\\bigotimes"); -defineSymbol(math, math, op, "\u2a01", "\\bigoplus"); -defineSymbol(math, math, op, "\u2a00", "\\bigodot"); -defineSymbol(math, math, op, "\u222e", "\\oint"); -defineSymbol(math, math, op, "\u2a06", "\\bigsqcup"); -defineSymbol(math, math, op, "\u222b", "\\smallint"); -defineSymbol(math, main, inner, "\u2026", "\\ldots"); -defineSymbol(math, main, inner, "\u22ef", "\\cdots"); -defineSymbol(math, main, inner, "\u22f1", "\\ddots"); -defineSymbol(math, main, textord, "\u22ee", "\\vdots"); -defineSymbol(math, main, accent, "\u00b4", "\\acute"); -defineSymbol(math, main, accent, "\u0060", "\\grave"); -defineSymbol(math, main, accent, "\u00a8", "\\ddot"); -defineSymbol(math, main, accent, "\u007e", "\\tilde"); -defineSymbol(math, main, accent, "\u00af", "\\bar"); -defineSymbol(math, main, accent, "\u02d8", "\\breve"); -defineSymbol(math, main, accent, "\u02c7", "\\check"); -defineSymbol(math, main, accent, "\u005e", "\\hat"); -defineSymbol(math, main, accent, "\u20d7", "\\vec"); -defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21D1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21D3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22C1", "\\bigvee"); +defineSymbol(math, main, op, "\u22C0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2A04", "\\biguplus"); +defineSymbol(math, main, op, "\u22C2", "\\bigcap"); +defineSymbol(math, main, op, "\u22C3", "\\bigcup"); +defineSymbol(math, main, op, "\u222B", "\\int"); +defineSymbol(math, main, op, "\u222B", "\\intop"); +defineSymbol(math, main, op, "\u222C", "\\iint"); +defineSymbol(math, main, op, "\u222D", "\\iiint"); +defineSymbol(math, main, op, "\u220F", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2A02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2A01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2A00", "\\bigodot"); +defineSymbol(math, main, op, "\u222E", "\\oint"); +defineSymbol(math, main, op, "\u2A06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222B", "\\smallint"); +defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22EF", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22F1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22EE", "\\vdots", true); +defineSymbol(math, main, accent, "\xB4", "\\acute"); +defineSymbol(math, main, accent, "`", "\\grave"); +defineSymbol(math, main, accent, "\xA8", "\\ddot"); +defineSymbol(math, main, accent, "~", "\\tilde"); +defineSymbol(math, main, accent, "\xAF", "\\bar"); +defineSymbol(math, main, accent, "\u02D8", "\\breve"); +defineSymbol(math, main, accent, "\u02C7", "\\check"); +defineSymbol(math, main, accent, "^", "\\hat"); +defineSymbol(math, main, accent, "\u20D7", "\\vec"); +defineSymbol(math, main, accent, "\u02D9", "\\dot"); defineSymbol(math, main, mathord, "\u0131", "\\imath"); defineSymbol(math, main, mathord, "\u0237", "\\jmath"); +defineSymbol(text, main, accent, "\u02CA", "\\'"); // acute +defineSymbol(text, main, accent, "\u02CB", "\\`"); // grave +defineSymbol(text, main, accent, "\u02C6", "\\^"); // circumflex +defineSymbol(text, main, accent, "\u02DC", "\\~"); // tilde +defineSymbol(text, main, accent, "\u02C9", "\\="); // macron +defineSymbol(text, main, accent, "\u02D8", "\\u"); // breve +defineSymbol(text, main, accent, "\u02D9", "\\."); // dot above +defineSymbol(text, main, accent, "\u02DA", "\\r"); // ring above +defineSymbol(text, main, accent, "\u02C7", "\\v"); // caron +defineSymbol(text, main, accent, "\xA8", '\\"'); // diaresis +defineSymbol(text, main, accent, "\u030B", "\\H"); // double acute defineSymbol(text, main, textord, "\u2013", "--"); +defineSymbol(text, main, textord, "\u2013", "\\textendash"); defineSymbol(text, main, textord, "\u2014", "---"); +defineSymbol(text, main, textord, "\u2014", "\\textemdash"); defineSymbol(text, main, textord, "\u2018", "`"); +defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); defineSymbol(text, main, textord, "\u2019", "'"); -defineSymbol(text, main, textord, "\u201c", "``"); -defineSymbol(text, main, textord, "\u201d", "''"); -defineSymbol(math, main, textord, "\u00b0", "\\degree"); -defineSymbol(text, main, textord, "\u00b0", "\\degree"); -defineSymbol(math, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(text, main, textord, "\u201C", "``"); +defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft"); +defineSymbol(text, main, textord, "\u201D", "''"); +defineSymbol(text, main, textord, "\u201D", "\\textquotedblright"); +defineSymbol(math, main, textord, "\xB0", "\\degree"); +defineSymbol(text, main, textord, "\xB0", "\\degree"); +// TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Italic defines this character "163". +defineSymbol(math, main, mathord, "\xA3", "\\pounds"); +defineSymbol(math, main, mathord, "\xA3", "\\mathsterling", true); +defineSymbol(text, main, mathord, "\xA3", "\\pounds"); +defineSymbol(text, main, mathord, "\xA3", "\\textsterling"); defineSymbol(math, ams, textord, "\u2720", "\\maltese"); defineSymbol(text, ams, textord, "\u2720", "\\maltese"); -defineSymbol(text, main, spacing, "\u00a0", "\\ "); -defineSymbol(text, main, spacing, "\u00a0", " "); -defineSymbol(text, main, spacing, "\u00a0", "~"); +defineSymbol(text, main, spacing, "\xA0", "\\ "); +defineSymbol(text, main, spacing, "\xA0", " "); +defineSymbol(text, main, spacing, "\xA0", "~"); // There are lots of symbols which are the same, so we add them in afterwards. -var i; -var ch; // All of these are textords in math mode var mathTextSymbols = "0123456789/@.\""; -for (i = 0; i < mathTextSymbols.length; i++) { - ch = mathTextSymbols.charAt(i); +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); defineSymbol(math, main, textord, ch, ch); } // All of these are textords in text mode -var textSymbols = "0123456789!@*()-=+[]\";:?/.,"; -for (i = 0; i < textSymbols.length; i++) { - ch = textSymbols.charAt(i); - defineSymbol(text, main, textord, ch, ch); +var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; +for (var _i = 0; _i < textSymbols.length; _i++) { + var _ch = textSymbols.charAt(_i); + defineSymbol(text, main, textord, _ch, _ch); } // All of these are textords in text mode, and mathords in math mode var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -for (i = 0; i < letters.length; i++) { - ch = letters.charAt(i); - defineSymbol(math, main, mathord, ch, ch); - defineSymbol(text, main, textord, ch, ch); +for (var _i2 = 0; _i2 < letters.length; _i2++) { + var _ch2 = letters.charAt(_i2); + defineSymbol(math, main, mathord, _ch2, _ch2); + defineSymbol(text, main, textord, _ch2, _ch2); } // Latin-1 letters -for (i = 0x00C0; i <= 0x00D6; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); +for (var _i3 = 0x00C0; _i3 <= 0x00D6; _i3++) { + var _ch3 = String.fromCharCode(_i3); + defineSymbol(math, main, mathord, _ch3, _ch3); + defineSymbol(text, main, textord, _ch3, _ch3); } -for (i = 0x00D8; i <= 0x00F6; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); +for (var _i4 = 0x00D8; _i4 <= 0x00F6; _i4++) { + var _ch4 = String.fromCharCode(_i4); + defineSymbol(math, main, mathord, _ch4, _ch4); + defineSymbol(text, main, textord, _ch4, _ch4); } -for (i = 0x00F8; i <= 0x00FF; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); +for (var _i5 = 0x00F8; _i5 <= 0x00FF; _i5++) { + var _ch5 = String.fromCharCode(_i5); + defineSymbol(math, main, mathord, _ch5, _ch5); + defineSymbol(text, main, textord, _ch5, _ch5); } // Cyrillic -for (i = 0x0410; i <= 0x044F; i++) { - ch = String.fromCharCode(i); - defineSymbol(text, main, textord, ch, ch); +for (var _i6 = 0x0410; _i6 <= 0x044F; _i6++) { + var _ch6 = String.fromCharCode(_i6); + defineSymbol(text, main, textord, _ch6, _ch6); } -},{}],24:[function(require,module,exports){ -var hangulRegex = /[\uAC00-\uD7AF]/; +// Unicode versions of existing characters +defineSymbol(text, main, textord, "\u2013", "–"); +defineSymbol(text, main, textord, "\u2014", "—"); +defineSymbol(text, main, textord, "\u2018", "‘"); +defineSymbol(text, main, textord, "\u2019", "’"); +defineSymbol(text, main, textord, "\u201C", "“"); +defineSymbol(text, main, textord, "\u201D", "”"); + +},{}],126:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var hangulRegex = exports.hangulRegex = /[\uAC00-\uD7AF]/; // This regex combines +// - CJK symbols and punctuation: [\u3000-\u303F] // - Hiragana: [\u3040-\u309F] // - Katakana: [\u30A0-\u30FF] // - CJK ideograms: [\u4E00-\u9FAF] // - Hangul syllables: [\uAC00-\uD7AF] +// - Fullwidth punctuation: [\uFF00-\uFF60] // Notably missing are halfwidth Katakana and Romanji glyphs. -var cjkRegex = - /[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/; +var cjkRegex = exports.cjkRegex = /[\u3000-\u30FF\u4E00-\u9FAF\uAC00-\uD7AF\uFF00-\uFF60]/; -module.exports = { - cjkRegex: cjkRegex, - hangulRegex: hangulRegex, +},{}],127:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.calculateSize = exports.validUnit = undefined; + +var _ParseError = require("./ParseError"); + +var _ParseError2 = _interopRequireDefault(_ParseError); + +var _Options = require("./Options"); + +var _Options2 = _interopRequireDefault(_Options); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + + +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, // TeX point + "mm": 7227 / 2540, // millimeter + "cm": 7227 / 254, // centimeter + "in": 72.27, // inch + "bp": 803 / 800, // big (PostScript) points + "pc": 12, // pica + "dd": 1238 / 1157, // didot + "cc": 14856 / 1157, // cicero (12 didot) + "nd": 685 / 642, // new didot + "nc": 1370 / 107, // new cicero (12 new didot) + "sp": 1 / 65536, // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX }; -},{}],25:[function(require,module,exports){ +// Dictionary of relative units, for fast validity testing. +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = exports.validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; + +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ +var calculateSize = exports.calculateSize = function calculateSize(sizeValue, options) { + var scale = void 0; + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions = void 0; + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } + // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new _ParseError2.default("Invalid unit: '" + sizeValue.unit + "'"); + } + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + return Math.min(sizeValue.number * scale, options.maxSize); +}; + +},{"./Options":83,"./ParseError":84}],128:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + /** * This file contains a list of utility functions which are useful in other * files. @@ -8584,16 +14311,15 @@ module.exports = { * possible. */ var nativeIndexOf = Array.prototype.indexOf; -var indexOf = function(list, elem) { +var indexOf = function indexOf(list, elem) { if (list == null) { return -1; } if (nativeIndexOf && list.indexOf === nativeIndexOf) { return list.indexOf(elem); } - var i = 0; var l = list.length; - for (; i < l; i++) { + for (var i = 0; i < l; i++) { if (list[i] === elem) { return i; } @@ -8604,21 +14330,22 @@ var indexOf = function(list, elem) { /** * Return whether an element is contained in a list */ -var contains = function(list, elem) { +var contains = function contains(list, elem) { return indexOf(list, elem) !== -1; }; /** * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. */ -var deflt = function(setting, defaultIfUndefined) { +var deflt = function deflt(setting, defaultIfUndefined) { return setting === undefined ? defaultIfUndefined : setting; }; // hyphenate and escape adapted from Facebook's React under Apache 2 license var uppercase = /([A-Z])/g; -var hyphenate = function(str) { +var hyphenate = function hyphenate(str) { return str.replace(uppercase, "-$1").toLowerCase(); }; @@ -8627,38 +14354,33 @@ var ESCAPE_LOOKUP = { ">": ">", "<": "<", "\"": """, - "'": "'", + "'": "'" }; var ESCAPE_REGEX = /[&><"']/g; -function escaper(match) { - return ESCAPE_LOOKUP[match]; -} - /** * Escapes text to prevent scripting attacks. - * - * @param {*} text Text value to escape. - * @return {string} An escaped string. */ function escape(text) { - return ("" + text).replace(ESCAPE_REGEX, escaper); + return String(text).replace(ESCAPE_REGEX, function (match) { + return ESCAPE_LOOKUP[match]; + }); } /** * A function to set the text content of a DOM element in all supported * browsers. Note that we don't define this if there is no document. */ -var setTextContent; +var setTextContent = void 0; if (typeof document !== "undefined") { var testNode = document.createElement("span"); if ("textContent" in testNode) { - setTextContent = function(node, text) { + setTextContent = function setTextContent(node, text) { node.textContent = text; }; } else { - setTextContent = function(node, text) { + setTextContent = function setTextContent(node, text) { node.innerText = text; }; } @@ -8671,14 +14393,14 @@ function clearNode(node) { setTextContent(node, ""); } -module.exports = { +exports.default = { contains: contains, deflt: deflt, escape: escape, hyphenate: hyphenate, indexOf: indexOf, setTextContent: setTextContent, - clearNode: clearNode, + clearNode: clearNode }; },{}]},{},[1])(1) diff --git a/vendor/assets/stylesheets/katex.scss b/vendor/assets/stylesheets/katex.scss index b45836716f2..937a67ddc42 100644 --- a/vendor/assets/stylesheets/katex.scss +++ b/vendor/assets/stylesheets/katex.scss @@ -1,32 +1,32 @@ /* -The MIT License (MIT) + The MIT License (MIT) -Copyright (c) 2015 Khan Academy + Copyright (c) 2015 Khan Academy -This software also uses portions of the underscore.js project, which is -MIT licensed with the following copyright: + This software also uses portions of the underscore.js project, which is + MIT licensed with the following copyright: -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors + Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative + Reporters & Editors -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ /* Here is how to build a version of KaTeX that works with gitlab. @@ -45,112 +45,112 @@ SOFTWARE. font-family: 'KaTeX_AMS'; src: url(font-path('KaTeX_AMS-Regular.eot')); src: url(font-path('KaTeX_AMS-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_AMS-Regular.woff2')) format('woff2'), url(font-path('KaTeX_AMS-Regular.woff')) format('woff'), url(font-path('KaTeX_AMS-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Caligraphic'; src: url(font-path('KaTeX_Caligraphic-Bold.eot')); src: url(font-path('KaTeX_Caligraphic-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Caligraphic-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Caligraphic-Bold.woff')) format('woff'), url(font-path('KaTeX_Caligraphic-Bold.ttf')) format('truetype'); - font-weight: 600; + font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Caligraphic'; src: url(font-path('KaTeX_Caligraphic-Regular.eot')); src: url(font-path('KaTeX_Caligraphic-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Caligraphic-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Caligraphic-Regular.woff')) format('woff'), url(font-path('KaTeX_Caligraphic-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Fraktur'; src: url(font-path('KaTeX_Fraktur-Bold.eot')); src: url(font-path('KaTeX_Fraktur-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Fraktur-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Fraktur-Bold.woff')) format('woff'), url(font-path('KaTeX_Fraktur-Bold.ttf')) format('truetype'); - font-weight: 600; + font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Fraktur'; src: url(font-path('KaTeX_Fraktur-Regular.eot')); src: url(font-path('KaTeX_Fraktur-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Fraktur-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Fraktur-Regular.woff')) format('woff'), url(font-path('KaTeX_Fraktur-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Main'; src: url(font-path('KaTeX_Main-Bold.eot')); src: url(font-path('KaTeX_Main-Bold.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Bold.woff2')) format('woff2'), url(font-path('KaTeX_Main-Bold.woff')) format('woff'), url(font-path('KaTeX_Main-Bold.ttf')) format('truetype'); - font-weight: 600; + font-weight: bold; font-style: normal; } @font-face { font-family: 'KaTeX_Main'; src: url(font-path('KaTeX_Main-Italic.eot')); src: url(font-path('KaTeX_Main-Italic.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Italic.woff2')) format('woff2'), url(font-path('KaTeX_Main-Italic.woff')) format('woff'), url(font-path('KaTeX_Main-Italic.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: italic; } @font-face { font-family: 'KaTeX_Main'; src: url(font-path('KaTeX_Main-Regular.eot')); src: url(font-path('KaTeX_Main-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Main-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Main-Regular.woff')) format('woff'), url(font-path('KaTeX_Main-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Math'; src: url(font-path('KaTeX_Math-Italic.eot')); src: url(font-path('KaTeX_Math-Italic.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Math-Italic.woff2')) format('woff2'), url(font-path('KaTeX_Math-Italic.woff')) format('woff'), url(font-path('KaTeX_Math-Italic.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: italic; } @font-face { font-family: 'KaTeX_SansSerif'; src: url(font-path('KaTeX_SansSerif-Regular.eot')); src: url(font-path('KaTeX_SansSerif-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_SansSerif-Regular.woff2')) format('woff2'), url(font-path('KaTeX_SansSerif-Regular.woff')) format('woff'), url(font-path('KaTeX_SansSerif-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Script'; src: url(font-path('KaTeX_Script-Regular.eot')); src: url(font-path('KaTeX_Script-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Script-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Script-Regular.woff')) format('woff'), url(font-path('KaTeX_Script-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size1'; src: url(font-path('KaTeX_Size1-Regular.eot')); src: url(font-path('KaTeX_Size1-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size1-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size1-Regular.woff')) format('woff'), url(font-path('KaTeX_Size1-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size2'; src: url(font-path('KaTeX_Size2-Regular.eot')); src: url(font-path('KaTeX_Size2-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size2-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size2-Regular.woff')) format('woff'), url(font-path('KaTeX_Size2-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size3'; src: url(font-path('KaTeX_Size3-Regular.eot')); src: url(font-path('KaTeX_Size3-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size3-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size3-Regular.woff')) format('woff'), url(font-path('KaTeX_Size3-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Size4'; src: url(font-path('KaTeX_Size4-Regular.eot')); src: url(font-path('KaTeX_Size4-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Size4-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Size4-Regular.woff')) format('woff'), url(font-path('KaTeX_Size4-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } @font-face { font-family: 'KaTeX_Typewriter'; src: url(font-path('KaTeX_Typewriter-Regular.eot')); src: url(font-path('KaTeX_Typewriter-Regular.eot#iefix')) format('embedded-opentype'), url(font-path('KaTeX_Typewriter-Regular.woff2')) format('woff2'), url(font-path('KaTeX_Typewriter-Regular.woff')) format('woff'), url(font-path('KaTeX_Typewriter-Regular.ttf')) format('truetype'); - font-weight: 400; + font-weight: normal; font-style: normal; } .katex-display { @@ -167,6 +167,10 @@ SOFTWARE. line-height: 1.2; white-space: nowrap; text-indent: 0; + text-rendering: auto; +} +.katex * { + -ms-high-contrast-adjust: none !important; } .katex .katex-html { display: inline-block; @@ -181,18 +185,25 @@ SOFTWARE. overflow: hidden; } .katex .base { + position: relative; display: inline-block; } .katex .strut { display: inline-block; } +.katex .mathrm { + font-style: normal; +} +.katex .textit { + font-style: italic; +} .katex .mathit { font-family: KaTeX_Math; font-style: italic; } .katex .mathbf { font-family: KaTeX_Main; - font-weight: 600; + font-weight: bold; } .katex .amsrm { font-family: KaTeX_AMS; @@ -219,155 +230,162 @@ SOFTWARE. font-family: KaTeX_Main; font-style: italic; } -.katex .textstyle > .mord + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mord + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mord + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mord + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mop + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mop + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mbin + .mord { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .mop { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .mopen { - margin-left: 0.22222em; -} -.katex .textstyle > .mbin + .minner { - margin-left: 0.22222em; -} -.katex .textstyle > .mrel + .mord { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .mop { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .mopen { - margin-left: 0.27778em; -} -.katex .textstyle > .mrel + .minner { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mclose + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .mclose + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .mclose + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mrel { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mopen { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mclose { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .mpunct { - margin-left: 0.16667em; -} -.katex .textstyle > .mpunct + .minner { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mord { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mop { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mbin { - margin-left: 0.22222em; -} -.katex .textstyle > .minner + .mrel { - margin-left: 0.27778em; -} -.katex .textstyle > .minner + .mopen { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .mpunct { - margin-left: 0.16667em; -} -.katex .textstyle > .minner + .minner { - margin-left: 0.16667em; +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; } .katex .mord + .mop { margin-left: 0.16667em; } +.katex .mord + .mbin { + margin-left: 0.22222em; +} +.katex .mord + .mrel { + margin-left: 0.27778em; +} +.katex .mord + .minner { + margin-left: 0.16667em; +} .katex .mop + .mord { margin-left: 0.16667em; } .katex .mop + .mop { margin-left: 0.16667em; } +.katex .mop + .mrel { + margin-left: 0.27778em; +} +.katex .mop + .minner { + margin-left: 0.16667em; +} +.katex .mbin + .mord { + margin-left: 0.22222em; +} +.katex .mbin + .mop { + margin-left: 0.22222em; +} +.katex .mbin + .mopen { + margin-left: 0.22222em; +} +.katex .mbin + .minner { + margin-left: 0.22222em; +} +.katex .mrel + .mord { + margin-left: 0.27778em; +} +.katex .mrel + .mop { + margin-left: 0.27778em; +} +.katex .mrel + .mopen { + margin-left: 0.27778em; +} +.katex .mrel + .minner { + margin-left: 0.27778em; +} .katex .mclose + .mop { margin-left: 0.16667em; } +.katex .mclose + .mbin { + margin-left: 0.22222em; +} +.katex .mclose + .mrel { + margin-left: 0.27778em; +} +.katex .mclose + .minner { + margin-left: 0.16667em; +} +.katex .mpunct + .mord { + margin-left: 0.16667em; +} +.katex .mpunct + .mop { + margin-left: 0.16667em; +} +.katex .mpunct + .mrel { + margin-left: 0.16667em; +} +.katex .mpunct + .mopen { + margin-left: 0.16667em; +} +.katex .mpunct + .mclose { + margin-left: 0.16667em; +} +.katex .mpunct + .mpunct { + margin-left: 0.16667em; +} +.katex .mpunct + .minner { + margin-left: 0.16667em; +} +.katex .minner + .mord { + margin-left: 0.16667em; +} .katex .minner + .mop { margin-left: 0.16667em; } -.katex .reset-textstyle.textstyle { - font-size: 1em; +.katex .minner + .mbin { + margin-left: 0.22222em; } -.katex .reset-textstyle.scriptstyle { - font-size: 0.7em; +.katex .minner + .mrel { + margin-left: 0.27778em; } -.katex .reset-textstyle.scriptscriptstyle { - font-size: 0.5em; +.katex .minner + .mopen { + margin-left: 0.16667em; } -.katex .reset-scriptstyle.textstyle { - font-size: 1.42857em; +.katex .minner + .mpunct { + margin-left: 0.16667em; } -.katex .reset-scriptstyle.scriptstyle { - font-size: 1em; +.katex .minner + .minner { + margin-left: 0.16667em; } -.katex .reset-scriptstyle.scriptscriptstyle { - font-size: 0.71429em; +.katex .mord.mtight { + margin-left: 0; } -.katex .reset-scriptscriptstyle.textstyle { - font-size: 2em; +.katex .mop.mtight { + margin-left: 0; } -.katex .reset-scriptscriptstyle.scriptstyle { - font-size: 1.4em; +.katex .mbin.mtight { + margin-left: 0; } -.katex .reset-scriptscriptstyle.scriptscriptstyle { - font-size: 1em; +.katex .mrel.mtight { + margin-left: 0; } -.katex .style-wrap { - position: relative; +.katex .mopen.mtight { + margin-left: 0; +} +.katex .mclose.mtight { + margin-left: 0; +} +.katex .mpunct.mtight { + margin-left: 0; +} +.katex .minner.mtight { + margin-left: 0; +} +.katex .mord + .mop.mtight { + margin-left: 0.16667em; +} +.katex .mop + .mord.mtight { + margin-left: 0.16667em; +} +.katex .mop + .mop.mtight { + margin-left: 0.16667em; +} +.katex .mclose + .mop.mtight { + margin-left: 0.16667em; +} +.katex .minner + .mop.mtight { + margin-left: 0.16667em; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; +} +.katex .vlist-r { + display: table-row; } .katex .vlist { - display: inline-block; + display: table-cell; + vertical-align: bottom; + position: relative; } .katex .vlist > span { display: block; @@ -377,9 +395,18 @@ SOFTWARE. .katex .vlist > span > span { display: inline-block; } -.katex .vlist .baseline-fix { - display: inline-table; - table-layout: fixed; +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; } .katex .msupsub { text-align: left; @@ -388,20 +415,22 @@ SOFTWARE. text-align: center; } .katex .mfrac .frac-line { + display: inline-block; width: 100%; } -.katex .mfrac .frac-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; +@media screen { + .katex .mfrac .frac-line, + .katex .overline .overline-line, + .katex .underline .underline-line { + min-height: 1px; + } } -.katex .mfrac .frac-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; +@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (min-resolution: 192dpi) { + .katex .mfrac .frac-line, + .katex .overline .overline-line, + .katex .underline .underline-line { + min-height: 0.5px; + } } .katex .mspace { display: inline-block; @@ -409,18 +438,33 @@ SOFTWARE. .katex .mspace.negativethinspace { margin-left: -0.16667em; } +.katex .mspace.muspace { + width: 0.055556em; +} .katex .mspace.thinspace { width: 0.16667em; } +.katex .mspace.negativemediumspace { + margin-left: -0.22222em; +} .katex .mspace.mediumspace { width: 0.22222em; } .katex .mspace.thickspace { width: 0.27778em; } +.katex .mspace.sixmuspace { + width: 0.333333em; +} +.katex .mspace.eightmuspace { + width: 0.444444em; +} .katex .mspace.enspace { width: 0.5em; } +.katex .mspace.twelvemuspace { + width: 0.666667em; +} .katex .mspace.quad { width: 1em; } @@ -428,24 +472,32 @@ SOFTWARE. width: 2em; } .katex .llap, -.katex .rlap { +.katex .rlap, +.katex .clap { width: 0; position: relative; } .katex .llap > .inner, -.katex .rlap > .inner { +.katex .rlap > .inner, +.katex .clap > .inner { position: absolute; } .katex .llap > .fix, -.katex .rlap > .fix { +.katex .rlap > .fix, +.katex .clap > .fix { display: inline-block; } .katex .llap > .inner { right: 0; } -.katex .rlap > .inner { +.katex .rlap > .inner, +.katex .clap > .inner { left: 0; } +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} .katex .katex-logo .a { font-size: 0.75em; margin-left: -0.32em; @@ -470,42 +522,9 @@ SOFTWARE. } .katex .overline .overline-line, .katex .underline .underline-line { + display: inline-block; width: 100%; } -.katex .overline .overline-line:before, -.katex .underline .underline-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .overline .overline-line:after, -.katex .underline .underline-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} -.katex .sqrt > .sqrt-sign { - position: relative; -} -.katex .sqrt .sqrt-line { - width: 100%; -} -.katex .sqrt .sqrt-line:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} -.katex .sqrt .sqrt-line:after { - border-bottom-style: solid; - border-bottom-width: 0.04em; - content: ""; - display: block; - margin-top: -1px; -} .katex .sqrt > .root { margin-left: 0.27777778em; margin-right: -0.55555556em; @@ -520,43 +539,47 @@ SOFTWARE. } .katex .sizing.reset-size1.size2, .katex .fontsize-ensurer.reset-size1.size2 { - font-size: 1.4em; + font-size: 1.2em; } .katex .sizing.reset-size1.size3, .katex .fontsize-ensurer.reset-size1.size3 { - font-size: 1.6em; + font-size: 1.4em; } .katex .sizing.reset-size1.size4, .katex .fontsize-ensurer.reset-size1.size4 { - font-size: 1.8em; + font-size: 1.6em; } .katex .sizing.reset-size1.size5, .katex .fontsize-ensurer.reset-size1.size5 { - font-size: 2em; + font-size: 1.8em; } .katex .sizing.reset-size1.size6, .katex .fontsize-ensurer.reset-size1.size6 { - font-size: 2.4em; + font-size: 2em; } .katex .sizing.reset-size1.size7, .katex .fontsize-ensurer.reset-size1.size7 { - font-size: 2.88em; + font-size: 2.4em; } .katex .sizing.reset-size1.size8, .katex .fontsize-ensurer.reset-size1.size8 { - font-size: 3.46em; + font-size: 2.88em; } .katex .sizing.reset-size1.size9, .katex .fontsize-ensurer.reset-size1.size9 { - font-size: 4.14em; + font-size: 3.456em; } .katex .sizing.reset-size1.size10, .katex .fontsize-ensurer.reset-size1.size10 { - font-size: 4.98em; + font-size: 4.148em; +} +.katex .sizing.reset-size1.size11, +.katex .fontsize-ensurer.reset-size1.size11 { + font-size: 4.976em; } .katex .sizing.reset-size2.size1, .katex .fontsize-ensurer.reset-size2.size1 { - font-size: 0.71428571em; + font-size: 0.83333333em; } .katex .sizing.reset-size2.size2, .katex .fontsize-ensurer.reset-size2.size2 { @@ -564,43 +587,47 @@ SOFTWARE. } .katex .sizing.reset-size2.size3, .katex .fontsize-ensurer.reset-size2.size3 { - font-size: 1.14285714em; + font-size: 1.16666667em; } .katex .sizing.reset-size2.size4, .katex .fontsize-ensurer.reset-size2.size4 { - font-size: 1.28571429em; + font-size: 1.33333333em; } .katex .sizing.reset-size2.size5, .katex .fontsize-ensurer.reset-size2.size5 { - font-size: 1.42857143em; + font-size: 1.5em; } .katex .sizing.reset-size2.size6, .katex .fontsize-ensurer.reset-size2.size6 { - font-size: 1.71428571em; + font-size: 1.66666667em; } .katex .sizing.reset-size2.size7, .katex .fontsize-ensurer.reset-size2.size7 { - font-size: 2.05714286em; + font-size: 2em; } .katex .sizing.reset-size2.size8, .katex .fontsize-ensurer.reset-size2.size8 { - font-size: 2.47142857em; + font-size: 2.4em; } .katex .sizing.reset-size2.size9, .katex .fontsize-ensurer.reset-size2.size9 { - font-size: 2.95714286em; + font-size: 2.88em; } .katex .sizing.reset-size2.size10, .katex .fontsize-ensurer.reset-size2.size10 { - font-size: 3.55714286em; + font-size: 3.45666667em; +} +.katex .sizing.reset-size2.size11, +.katex .fontsize-ensurer.reset-size2.size11 { + font-size: 4.14666667em; } .katex .sizing.reset-size3.size1, .katex .fontsize-ensurer.reset-size3.size1 { - font-size: 0.625em; + font-size: 0.71428571em; } .katex .sizing.reset-size3.size2, .katex .fontsize-ensurer.reset-size3.size2 { - font-size: 0.875em; + font-size: 0.85714286em; } .katex .sizing.reset-size3.size3, .katex .fontsize-ensurer.reset-size3.size3 { @@ -608,43 +635,47 @@ SOFTWARE. } .katex .sizing.reset-size3.size4, .katex .fontsize-ensurer.reset-size3.size4 { - font-size: 1.125em; + font-size: 1.14285714em; } .katex .sizing.reset-size3.size5, .katex .fontsize-ensurer.reset-size3.size5 { - font-size: 1.25em; + font-size: 1.28571429em; } .katex .sizing.reset-size3.size6, .katex .fontsize-ensurer.reset-size3.size6 { - font-size: 1.5em; + font-size: 1.42857143em; } .katex .sizing.reset-size3.size7, .katex .fontsize-ensurer.reset-size3.size7 { - font-size: 1.8em; + font-size: 1.71428571em; } .katex .sizing.reset-size3.size8, .katex .fontsize-ensurer.reset-size3.size8 { - font-size: 2.1625em; + font-size: 2.05714286em; } .katex .sizing.reset-size3.size9, .katex .fontsize-ensurer.reset-size3.size9 { - font-size: 2.5875em; + font-size: 2.46857143em; } .katex .sizing.reset-size3.size10, .katex .fontsize-ensurer.reset-size3.size10 { - font-size: 3.1125em; + font-size: 2.96285714em; +} +.katex .sizing.reset-size3.size11, +.katex .fontsize-ensurer.reset-size3.size11 { + font-size: 3.55428571em; } .katex .sizing.reset-size4.size1, .katex .fontsize-ensurer.reset-size4.size1 { - font-size: 0.55555556em; + font-size: 0.625em; } .katex .sizing.reset-size4.size2, .katex .fontsize-ensurer.reset-size4.size2 { - font-size: 0.77777778em; + font-size: 0.75em; } .katex .sizing.reset-size4.size3, .katex .fontsize-ensurer.reset-size4.size3 { - font-size: 0.88888889em; + font-size: 0.875em; } .katex .sizing.reset-size4.size4, .katex .fontsize-ensurer.reset-size4.size4 { @@ -652,43 +683,47 @@ SOFTWARE. } .katex .sizing.reset-size4.size5, .katex .fontsize-ensurer.reset-size4.size5 { - font-size: 1.11111111em; + font-size: 1.125em; } .katex .sizing.reset-size4.size6, .katex .fontsize-ensurer.reset-size4.size6 { - font-size: 1.33333333em; + font-size: 1.25em; } .katex .sizing.reset-size4.size7, .katex .fontsize-ensurer.reset-size4.size7 { - font-size: 1.6em; + font-size: 1.5em; } .katex .sizing.reset-size4.size8, .katex .fontsize-ensurer.reset-size4.size8 { - font-size: 1.92222222em; + font-size: 1.8em; } .katex .sizing.reset-size4.size9, .katex .fontsize-ensurer.reset-size4.size9 { - font-size: 2.3em; + font-size: 2.16em; } .katex .sizing.reset-size4.size10, .katex .fontsize-ensurer.reset-size4.size10 { - font-size: 2.76666667em; + font-size: 2.5925em; +} +.katex .sizing.reset-size4.size11, +.katex .fontsize-ensurer.reset-size4.size11 { + font-size: 3.11em; } .katex .sizing.reset-size5.size1, .katex .fontsize-ensurer.reset-size5.size1 { - font-size: 0.5em; + font-size: 0.55555556em; } .katex .sizing.reset-size5.size2, .katex .fontsize-ensurer.reset-size5.size2 { - font-size: 0.7em; + font-size: 0.66666667em; } .katex .sizing.reset-size5.size3, .katex .fontsize-ensurer.reset-size5.size3 { - font-size: 0.8em; + font-size: 0.77777778em; } .katex .sizing.reset-size5.size4, .katex .fontsize-ensurer.reset-size5.size4 { - font-size: 0.9em; + font-size: 0.88888889em; } .katex .sizing.reset-size5.size5, .katex .fontsize-ensurer.reset-size5.size5 { @@ -696,43 +731,47 @@ SOFTWARE. } .katex .sizing.reset-size5.size6, .katex .fontsize-ensurer.reset-size5.size6 { - font-size: 1.2em; + font-size: 1.11111111em; } .katex .sizing.reset-size5.size7, .katex .fontsize-ensurer.reset-size5.size7 { - font-size: 1.44em; + font-size: 1.33333333em; } .katex .sizing.reset-size5.size8, .katex .fontsize-ensurer.reset-size5.size8 { - font-size: 1.73em; + font-size: 1.6em; } .katex .sizing.reset-size5.size9, .katex .fontsize-ensurer.reset-size5.size9 { - font-size: 2.07em; + font-size: 1.92em; } .katex .sizing.reset-size5.size10, .katex .fontsize-ensurer.reset-size5.size10 { - font-size: 2.49em; + font-size: 2.30444444em; +} +.katex .sizing.reset-size5.size11, +.katex .fontsize-ensurer.reset-size5.size11 { + font-size: 2.76444444em; } .katex .sizing.reset-size6.size1, .katex .fontsize-ensurer.reset-size6.size1 { - font-size: 0.41666667em; + font-size: 0.5em; } .katex .sizing.reset-size6.size2, .katex .fontsize-ensurer.reset-size6.size2 { - font-size: 0.58333333em; + font-size: 0.6em; } .katex .sizing.reset-size6.size3, .katex .fontsize-ensurer.reset-size6.size3 { - font-size: 0.66666667em; + font-size: 0.7em; } .katex .sizing.reset-size6.size4, .katex .fontsize-ensurer.reset-size6.size4 { - font-size: 0.75em; + font-size: 0.8em; } .katex .sizing.reset-size6.size5, .katex .fontsize-ensurer.reset-size6.size5 { - font-size: 0.83333333em; + font-size: 0.9em; } .katex .sizing.reset-size6.size6, .katex .fontsize-ensurer.reset-size6.size6 { @@ -744,35 +783,39 @@ SOFTWARE. } .katex .sizing.reset-size6.size8, .katex .fontsize-ensurer.reset-size6.size8 { - font-size: 1.44166667em; + font-size: 1.44em; } .katex .sizing.reset-size6.size9, .katex .fontsize-ensurer.reset-size6.size9 { - font-size: 1.725em; + font-size: 1.728em; } .katex .sizing.reset-size6.size10, .katex .fontsize-ensurer.reset-size6.size10 { - font-size: 2.075em; + font-size: 2.074em; +} +.katex .sizing.reset-size6.size11, +.katex .fontsize-ensurer.reset-size6.size11 { + font-size: 2.488em; } .katex .sizing.reset-size7.size1, .katex .fontsize-ensurer.reset-size7.size1 { - font-size: 0.34722222em; + font-size: 0.41666667em; } .katex .sizing.reset-size7.size2, .katex .fontsize-ensurer.reset-size7.size2 { - font-size: 0.48611111em; + font-size: 0.5em; } .katex .sizing.reset-size7.size3, .katex .fontsize-ensurer.reset-size7.size3 { - font-size: 0.55555556em; + font-size: 0.58333333em; } .katex .sizing.reset-size7.size4, .katex .fontsize-ensurer.reset-size7.size4 { - font-size: 0.625em; + font-size: 0.66666667em; } .katex .sizing.reset-size7.size5, .katex .fontsize-ensurer.reset-size7.size5 { - font-size: 0.69444444em; + font-size: 0.75em; } .katex .sizing.reset-size7.size6, .katex .fontsize-ensurer.reset-size7.size6 { @@ -784,43 +827,47 @@ SOFTWARE. } .katex .sizing.reset-size7.size8, .katex .fontsize-ensurer.reset-size7.size8 { - font-size: 1.20138889em; + font-size: 1.2em; } .katex .sizing.reset-size7.size9, .katex .fontsize-ensurer.reset-size7.size9 { - font-size: 1.4375em; + font-size: 1.44em; } .katex .sizing.reset-size7.size10, .katex .fontsize-ensurer.reset-size7.size10 { - font-size: 1.72916667em; + font-size: 1.72833333em; +} +.katex .sizing.reset-size7.size11, +.katex .fontsize-ensurer.reset-size7.size11 { + font-size: 2.07333333em; } .katex .sizing.reset-size8.size1, .katex .fontsize-ensurer.reset-size8.size1 { - font-size: 0.28901734em; + font-size: 0.34722222em; } .katex .sizing.reset-size8.size2, .katex .fontsize-ensurer.reset-size8.size2 { - font-size: 0.40462428em; + font-size: 0.41666667em; } .katex .sizing.reset-size8.size3, .katex .fontsize-ensurer.reset-size8.size3 { - font-size: 0.46242775em; + font-size: 0.48611111em; } .katex .sizing.reset-size8.size4, .katex .fontsize-ensurer.reset-size8.size4 { - font-size: 0.52023121em; + font-size: 0.55555556em; } .katex .sizing.reset-size8.size5, .katex .fontsize-ensurer.reset-size8.size5 { - font-size: 0.57803468em; + font-size: 0.625em; } .katex .sizing.reset-size8.size6, .katex .fontsize-ensurer.reset-size8.size6 { - font-size: 0.69364162em; + font-size: 0.69444444em; } .katex .sizing.reset-size8.size7, .katex .fontsize-ensurer.reset-size8.size7 { - font-size: 0.83236994em; + font-size: 0.83333333em; } .katex .sizing.reset-size8.size8, .katex .fontsize-ensurer.reset-size8.size8 { @@ -828,43 +875,47 @@ SOFTWARE. } .katex .sizing.reset-size8.size9, .katex .fontsize-ensurer.reset-size8.size9 { - font-size: 1.19653179em; + font-size: 1.2em; } .katex .sizing.reset-size8.size10, .katex .fontsize-ensurer.reset-size8.size10 { - font-size: 1.43930636em; + font-size: 1.44027778em; +} +.katex .sizing.reset-size8.size11, +.katex .fontsize-ensurer.reset-size8.size11 { + font-size: 1.72777778em; } .katex .sizing.reset-size9.size1, .katex .fontsize-ensurer.reset-size9.size1 { - font-size: 0.24154589em; + font-size: 0.28935185em; } .katex .sizing.reset-size9.size2, .katex .fontsize-ensurer.reset-size9.size2 { - font-size: 0.33816425em; + font-size: 0.34722222em; } .katex .sizing.reset-size9.size3, .katex .fontsize-ensurer.reset-size9.size3 { - font-size: 0.38647343em; + font-size: 0.40509259em; } .katex .sizing.reset-size9.size4, .katex .fontsize-ensurer.reset-size9.size4 { - font-size: 0.43478261em; + font-size: 0.46296296em; } .katex .sizing.reset-size9.size5, .katex .fontsize-ensurer.reset-size9.size5 { - font-size: 0.48309179em; + font-size: 0.52083333em; } .katex .sizing.reset-size9.size6, .katex .fontsize-ensurer.reset-size9.size6 { - font-size: 0.57971014em; + font-size: 0.5787037em; } .katex .sizing.reset-size9.size7, .katex .fontsize-ensurer.reset-size9.size7 { - font-size: 0.69565217em; + font-size: 0.69444444em; } .katex .sizing.reset-size9.size8, .katex .fontsize-ensurer.reset-size9.size8 { - font-size: 0.83574879em; + font-size: 0.83333333em; } .katex .sizing.reset-size9.size9, .katex .fontsize-ensurer.reset-size9.size9 { @@ -872,48 +923,100 @@ SOFTWARE. } .katex .sizing.reset-size9.size10, .katex .fontsize-ensurer.reset-size9.size10 { - font-size: 1.20289855em; + font-size: 1.20023148em; +} +.katex .sizing.reset-size9.size11, +.katex .fontsize-ensurer.reset-size9.size11 { + font-size: 1.43981481em; } .katex .sizing.reset-size10.size1, .katex .fontsize-ensurer.reset-size10.size1 { - font-size: 0.20080321em; + font-size: 0.24108004em; } .katex .sizing.reset-size10.size2, .katex .fontsize-ensurer.reset-size10.size2 { - font-size: 0.2811245em; + font-size: 0.28929605em; } .katex .sizing.reset-size10.size3, .katex .fontsize-ensurer.reset-size10.size3 { - font-size: 0.32128514em; + font-size: 0.33751205em; } .katex .sizing.reset-size10.size4, .katex .fontsize-ensurer.reset-size10.size4 { - font-size: 0.36144578em; + font-size: 0.38572806em; } .katex .sizing.reset-size10.size5, .katex .fontsize-ensurer.reset-size10.size5 { - font-size: 0.40160643em; + font-size: 0.43394407em; } .katex .sizing.reset-size10.size6, .katex .fontsize-ensurer.reset-size10.size6 { - font-size: 0.48192771em; + font-size: 0.48216008em; } .katex .sizing.reset-size10.size7, .katex .fontsize-ensurer.reset-size10.size7 { - font-size: 0.57831325em; + font-size: 0.57859209em; } .katex .sizing.reset-size10.size8, .katex .fontsize-ensurer.reset-size10.size8 { - font-size: 0.69477912em; + font-size: 0.69431051em; } .katex .sizing.reset-size10.size9, .katex .fontsize-ensurer.reset-size10.size9 { - font-size: 0.8313253em; + font-size: 0.83317261em; } .katex .sizing.reset-size10.size10, .katex .fontsize-ensurer.reset-size10.size10 { font-size: 1em; } +.katex .sizing.reset-size10.size11, +.katex .fontsize-ensurer.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .sizing.reset-size11.size1, +.katex .fontsize-ensurer.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .sizing.reset-size11.size2, +.katex .fontsize-ensurer.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .sizing.reset-size11.size3, +.katex .fontsize-ensurer.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .sizing.reset-size11.size4, +.katex .fontsize-ensurer.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .sizing.reset-size11.size5, +.katex .fontsize-ensurer.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .sizing.reset-size11.size6, +.katex .fontsize-ensurer.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .sizing.reset-size11.size7, +.katex .fontsize-ensurer.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .sizing.reset-size11.size8, +.katex .fontsize-ensurer.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .sizing.reset-size11.size9, +.katex .fontsize-ensurer.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .sizing.reset-size11.size10, +.katex .fontsize-ensurer.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .sizing.reset-size11.size11, +.katex .fontsize-ensurer.reset-size11.size11 { + font-size: 1em; +} .katex .delimsizing.size1 { font-family: KaTeX_Size1; } @@ -936,6 +1039,9 @@ SOFTWARE. display: inline-block; width: 0.12em; } +.katex .delimcenter { + position: relative; +} .katex .op-symbol { position: relative; } @@ -945,10 +1051,10 @@ SOFTWARE. .katex .op-symbol.large-op { font-family: KaTeX_Size2; } -.katex .op-limits > .vlist > span { +.katex .op-limits > .vlist-t { text-align: center; } -.katex .accent > .vlist > span { +.katex .accent > .vlist-t { text-align: center; } .katex .accent .accent-body > span { @@ -958,20 +1064,126 @@ SOFTWARE. position: relative; left: 0.326em; } +.katex .accent .accent-body.accent-hungarian > span { + position: relative; + left: 0.250em; +} .katex .mtable .vertical-separator { display: inline-block; margin: 0 -0.025em; - border-right: 0.05em solid black; + width: 0.05em; +} +@media screen { + .katex .mtable .vertical-separator { + min-width: 1px; + } +} +@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (min-resolution: 192dpi) { + .katex .mtable .vertical-separator { + min-width: 0.5px; + } } .katex .mtable .arraycolsep { display: inline-block; } -.katex .mtable .col-align-c > .vlist { +.katex .mtable .col-align-c > .vlist-t { text-align: center; } -.katex .mtable .col-align-l > .vlist { +.katex .mtable .col-align-l > .vlist-t { text-align: left; } -.katex .mtable .col-align-r > .vlist { +.katex .mtable .col-align-r > .vlist-t { text-align: right; } +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; +} +.katex svg path { + fill: currentColor; +} +.katex svg line { + stroke: currentColor; +} +.katex .stretchy { + width: 100%; + display: block; +} +.katex .stretchy:before, +.katex .stretchy:after { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.1%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .x-arrow, +.katex .mover, +.katex .munder { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em 0 0.3em; +} +.katex .fbox { + box-sizing: border-box; + border: 0.04em solid black; +} +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em 0 0.2em; +} +.katex .mord + .cancel-lap, +.katex .mbin + .cancel-lap { + margin-left: -0.2em; +} +.katex .cancel-lap + .mord, +.katex .cancel-lap + .mbin, +.katex .cancel-lap + .msupsub { + margin-left: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} From ad9e3dfe5d3d8136ae659b4de9f37af9f6b5462f Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Thu, 14 Dec 2017 17:16:55 -0600 Subject: [PATCH 02/25] added katex.js and load it via webpack --- app/assets/javascripts/render_math.js | 22 +- lib/gitlab/gon_helper.rb | 1 - package.json | 1 + .../notebook/cells/markdown_spec.js | 2 +- vendor/assets/javascripts/katex.js | 14407 ---------------- yarn.lock | 10 + 6 files changed, 20 insertions(+), 14423 deletions(-) delete mode 100644 vendor/assets/javascripts/katex.js diff --git a/app/assets/javascripts/render_math.js b/app/assets/javascripts/render_math.js index a759992cd54..2e68a9642e7 100644 --- a/app/assets/javascripts/render_math.js +++ b/app/assets/javascripts/render_math.js @@ -1,4 +1,5 @@ -/* global katex */ +// import katex from 'katex'; +import Flash from './flash'; // Renders math using KaTeX in any element with the // `js-render-math` class @@ -7,11 +8,9 @@ // // // - // Only load once -let katexLoaded = false; // Loop over all math elements and render math -function renderWithKaTeX(elements) { +function renderWithKaTeX(elements, katex) { elements.each(function katexElementsLoop() { const mathNode = $(''); const $this = $(this); @@ -30,9 +29,7 @@ function renderWithKaTeX(elements) { export default function renderMath($els) { if (!$els.length) return; - if (katexLoaded) { - renderWithKaTeX($els); - } else { + import(/* webpackChunkName: 'katex' */ 'katex').then((katex) => { $.get(gon.katex_css_url, () => { const css = $('', { rel: 'stylesheet', @@ -40,12 +37,9 @@ export default function renderMath($els) { href: gon.katex_css_url, }); css.appendTo('head'); - - // Load KaTeX js - $.getScript(gon.katex_js_url, () => { - katexLoaded = true; - renderWithKaTeX($els); // Run KaTeX - }); + renderWithKaTeX($els, katex); }); - } + }).catch((err) => { + Flash(`Can't load katex module: ${err}`); + }); } diff --git a/lib/gitlab/gon_helper.rb b/lib/gitlab/gon_helper.rb index dfcdfc307b6..f91be9a7142 100644 --- a/lib/gitlab/gon_helper.rb +++ b/lib/gitlab/gon_helper.rb @@ -15,7 +15,6 @@ module Gitlab gon.shortcuts_path = help_page_path('shortcuts') gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class gon.katex_css_url = ActionController::Base.helpers.asset_path('katex.css') - gon.katex_js_url = ActionController::Base.helpers.asset_path('katex.js') gon.sentry_dsn = current_application_settings.clientside_sentry_dsn if current_application_settings.clientside_sentry_enabled gon.gitlab_url = Gitlab.config.gitlab.url gon.revision = Gitlab::REVISION diff --git a/package.json b/package.json index aa4e4e79f49..a50364d0929 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "js-cookie": "^2.1.3", "jszip": "^3.1.3", "jszip-utils": "^0.0.2", + "katex": "^0.9.0-alpha2", "marked": "^0.3.6", "monaco-editor": "0.10.0", "mousetrap": "^1.4.6", diff --git a/spec/javascripts/notebook/cells/markdown_spec.js b/spec/javascripts/notebook/cells/markdown_spec.js index a88e9ed3d99..58f4fbc5791 100644 --- a/spec/javascripts/notebook/cells/markdown_spec.js +++ b/spec/javascripts/notebook/cells/markdown_spec.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import MarkdownComponent from '~/notebook/cells/markdown.vue'; -import katex from 'vendor/katex'; +import katex from 'katex'; const Component = Vue.extend(MarkdownComponent); diff --git a/vendor/assets/javascripts/katex.js b/vendor/assets/javascripts/katex.js deleted file mode 100644 index 92936bb247f..00000000000 --- a/vendor/assets/javascripts/katex.js +++ /dev/null @@ -1,14407 +0,0 @@ -/* - The MIT License (MIT) - - Copyright (c) 2015 Khan Academy - - This software also uses portions of the underscore.js project, which is - MIT licensed with the following copyright: - - Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative - Reporters & Editors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ - -/* - Here is how to build a version of KaTeX that works with gitlab. - - The problem is that the standard procedure for changing font location doesn't work for the empty string. - - 1. Clone KaTeX. Anything later than 4fb9445a9 (is merged into master) will do. - 2. make (requires node) - 3. sed -e 's,fonts/,,' -e 's/url\(([^)]*)\)/url(font-path\1)/g' build/katex.css > build/katex.scss - 4. Copy build/katex.js to gitlab/vendor/assets/javascripts/katex.js, - build/katex.scss to gitlab/vendor/assets/stylesheets/katex.scss and - fonts/* to gitlab/vendor/assets/fonts/. -*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.katex = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o Array#indexOf -// true -> Array#includes -var toIObject = require('./_to-iobject'); -var toLength = require('./_to-length'); -var toAbsoluteIndex = require('./_to-absolute-index'); -module.exports = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -},{"./_to-absolute-index":62,"./_to-iobject":64,"./_to-length":65}],22:[function(require,module,exports){ -// getting tag from 19.1.3.6 Object.prototype.toString() -var cof = require('./_cof'); -var TAG = require('./_wks')('toStringTag'); -// ES3 wrong here -var ARG = cof(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (e) { /* empty */ } -}; - -module.exports = function (it) { - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; -}; - -},{"./_cof":23,"./_wks":69}],23:[function(require,module,exports){ -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - -},{}],24:[function(require,module,exports){ -var core = module.exports = { version: '2.5.1' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - -},{}],25:[function(require,module,exports){ -'use strict'; -var $defineProperty = require('./_object-dp'); -var createDesc = require('./_property-desc'); - -module.exports = function (object, index, value) { - if (index in object) $defineProperty.f(object, index, createDesc(0, value)); - else object[index] = value; -}; - -},{"./_object-dp":50,"./_property-desc":56}],26:[function(require,module,exports){ -// optional / simple context binding -var aFunction = require('./_a-function'); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - -},{"./_a-function":18}],27:[function(require,module,exports){ -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - -},{}],28:[function(require,module,exports){ -// Thank's IE8 for his funny defineProperty -module.exports = !require('./_fails')(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - -},{"./_fails":32}],29:[function(require,module,exports){ -var isObject = require('./_is-object'); -var document = require('./_global').document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - -},{"./_global":33,"./_is-object":40}],30:[function(require,module,exports){ -// IE 8- don't enum bug keys -module.exports = ( - 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' -).split(','); - -},{}],31:[function(require,module,exports){ -var global = require('./_global'); -var core = require('./_core'); -var ctx = require('./_ctx'); -var hide = require('./_hide'); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var IS_WRAP = type & $export.W; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE]; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; - var key, own, out; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if (own && key in exports) continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function (C) { - var F = function (a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: return new C(); - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if (IS_PROTO) { - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); - } - } -}; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - -},{"./_core":24,"./_ctx":26,"./_global":33,"./_hide":35}],32:[function(require,module,exports){ -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - -},{}],33:[function(require,module,exports){ -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - -},{}],34:[function(require,module,exports){ -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - -},{}],35:[function(require,module,exports){ -var dP = require('./_object-dp'); -var createDesc = require('./_property-desc'); -module.exports = require('./_descriptors') ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - -},{"./_descriptors":28,"./_object-dp":50,"./_property-desc":56}],36:[function(require,module,exports){ -var document = require('./_global').document; -module.exports = document && document.documentElement; - -},{"./_global":33}],37:[function(require,module,exports){ -module.exports = !require('./_descriptors') && !require('./_fails')(function () { - return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - -},{"./_descriptors":28,"./_dom-create":29,"./_fails":32}],38:[function(require,module,exports){ -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = require('./_cof'); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - -},{"./_cof":23}],39:[function(require,module,exports){ -// check on default Array iterator -var Iterators = require('./_iterators'); -var ITERATOR = require('./_wks')('iterator'); -var ArrayProto = Array.prototype; - -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); -}; - -},{"./_iterators":46,"./_wks":69}],40:[function(require,module,exports){ -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - -},{}],41:[function(require,module,exports){ -// call something on iterator step with safe closing on error -var anObject = require('./_an-object'); -module.exports = function (iterator, fn, value, entries) { - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (e) { - var ret = iterator['return']; - if (ret !== undefined) anObject(ret.call(iterator)); - throw e; - } -}; - -},{"./_an-object":20}],42:[function(require,module,exports){ -'use strict'; -var create = require('./_object-create'); -var descriptor = require('./_property-desc'); -var setToStringTag = require('./_set-to-string-tag'); -var IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; }); - -module.exports = function (Constructor, NAME, next) { - Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); - setToStringTag(Constructor, NAME + ' Iterator'); -}; - -},{"./_hide":35,"./_object-create":49,"./_property-desc":56,"./_set-to-string-tag":58,"./_wks":69}],43:[function(require,module,exports){ -'use strict'; -var LIBRARY = require('./_library'); -var $export = require('./_export'); -var redefine = require('./_redefine'); -var hide = require('./_hide'); -var has = require('./_has'); -var Iterators = require('./_iterators'); -var $iterCreate = require('./_iter-create'); -var setToStringTag = require('./_set-to-string-tag'); -var getPrototypeOf = require('./_object-gpo'); -var ITERATOR = require('./_wks')('iterator'); -var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` -var FF_ITERATOR = '@@iterator'; -var KEYS = 'keys'; -var VALUES = 'values'; - -var returnThis = function () { return this; }; - -module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { - $iterCreate(Constructor, NAME, next); - var getMethod = function (kind) { - if (!BUGGY && kind in proto) return proto[kind]; - switch (kind) { - case KEYS: return function keys() { return new Constructor(this, kind); }; - case VALUES: return function values() { return new Constructor(this, kind); }; - } return function entries() { return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator'; - var DEF_VALUES = DEFAULT == VALUES; - var VALUES_BUG = false; - var proto = Base.prototype; - var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); - var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; - var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; - var methods, key, IteratorPrototype; - // Fix native - if ($anyNative) { - IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); - if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // fix for some old engines - if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); - } - } - // fix Array#{values, @@iterator}.name in V8 / FF - if (DEF_VALUES && $native && $native.name !== VALUES) { - VALUES_BUG = true; - $default = function values() { return $native.call(this); }; - } - // Define iterator - if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if (DEFAULT) { - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if (FORCED) for (key in methods) { - if (!(key in proto)) redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; -}; - -},{"./_export":31,"./_has":34,"./_hide":35,"./_iter-create":42,"./_iterators":46,"./_library":47,"./_object-gpo":52,"./_redefine":57,"./_set-to-string-tag":58,"./_wks":69}],44:[function(require,module,exports){ -var ITERATOR = require('./_wks')('iterator'); -var SAFE_CLOSING = false; - -try { - var riter = [7][ITERATOR](); - riter['return'] = function () { SAFE_CLOSING = true; }; - // eslint-disable-next-line no-throw-literal - Array.from(riter, function () { throw 2; }); -} catch (e) { /* empty */ } - -module.exports = function (exec, skipClosing) { - if (!skipClosing && !SAFE_CLOSING) return false; - var safe = false; - try { - var arr = [7]; - var iter = arr[ITERATOR](); - iter.next = function () { return { done: safe = true }; }; - arr[ITERATOR] = function () { return iter; }; - exec(arr); - } catch (e) { /* empty */ } - return safe; -}; - -},{"./_wks":69}],45:[function(require,module,exports){ -module.exports = function (done, value) { - return { value: value, done: !!done }; -}; - -},{}],46:[function(require,module,exports){ -module.exports = {}; - -},{}],47:[function(require,module,exports){ -module.exports = true; - -},{}],48:[function(require,module,exports){ -var META = require('./_uid')('meta'); -var isObject = require('./_is-object'); -var has = require('./_has'); -var setDesc = require('./_object-dp').f; -var id = 0; -var isExtensible = Object.isExtensible || function () { - return true; -}; -var FREEZE = !require('./_fails')(function () { - return isExtensible(Object.preventExtensions({})); -}); -var setMeta = function (it) { - setDesc(it, META, { value: { - i: 'O' + ++id, // object ID - w: {} // weak collections IDs - } }); -}; -var fastKey = function (it, create) { - // return primitive with prefix - if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return 'F'; - // not necessary to add metadata - if (!create) return 'E'; - // add missing metadata - setMeta(it); - // return object ID - } return it[META].i; -}; -var getWeak = function (it, create) { - if (!has(it, META)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return true; - // not necessary to add metadata - if (!create) return false; - // add missing metadata - setMeta(it); - // return hash weak collections IDs - } return it[META].w; -}; -// add metadata on freeze-family methods calling -var onFreeze = function (it) { - if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); - return it; -}; -var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze -}; - -},{"./_fails":32,"./_has":34,"./_is-object":40,"./_object-dp":50,"./_uid":68}],49:[function(require,module,exports){ -// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) -var anObject = require('./_an-object'); -var dPs = require('./_object-dps'); -var enumBugKeys = require('./_enum-bug-keys'); -var IE_PROTO = require('./_shared-key')('IE_PROTO'); -var Empty = function () { /* empty */ }; -var PROTOTYPE = 'prototype'; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var createDict = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = require('./_dom-create')('iframe'); - var i = enumBugKeys.length; - var lt = '<'; - var gt = '>'; - var iframeDocument; - iframe.style.display = 'none'; - require('./_html').appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; - return createDict(); -}; - -module.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = createDict(); - return Properties === undefined ? result : dPs(result, Properties); -}; - -},{"./_an-object":20,"./_dom-create":29,"./_enum-bug-keys":30,"./_html":36,"./_object-dps":51,"./_shared-key":59}],50:[function(require,module,exports){ -var anObject = require('./_an-object'); -var IE8_DOM_DEFINE = require('./_ie8-dom-define'); -var toPrimitive = require('./_to-primitive'); -var dP = Object.defineProperty; - -exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - -},{"./_an-object":20,"./_descriptors":28,"./_ie8-dom-define":37,"./_to-primitive":67}],51:[function(require,module,exports){ -var dP = require('./_object-dp'); -var anObject = require('./_an-object'); -var getKeys = require('./_object-keys'); - -module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = getKeys(Properties); - var length = keys.length; - var i = 0; - var P; - while (length > i) dP.f(O, P = keys[i++], Properties[P]); - return O; -}; - -},{"./_an-object":20,"./_descriptors":28,"./_object-dp":50,"./_object-keys":54}],52:[function(require,module,exports){ -// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) -var has = require('./_has'); -var toObject = require('./_to-object'); -var IE_PROTO = require('./_shared-key')('IE_PROTO'); -var ObjectProto = Object.prototype; - -module.exports = Object.getPrototypeOf || function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } return O instanceof Object ? ObjectProto : null; -}; - -},{"./_has":34,"./_shared-key":59,"./_to-object":66}],53:[function(require,module,exports){ -var has = require('./_has'); -var toIObject = require('./_to-iobject'); -var arrayIndexOf = require('./_array-includes')(false); -var IE_PROTO = require('./_shared-key')('IE_PROTO'); - -module.exports = function (object, names) { - var O = toIObject(object); - var i = 0; - var result = []; - var key; - for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); - } - return result; -}; - -},{"./_array-includes":21,"./_has":34,"./_shared-key":59,"./_to-iobject":64}],54:[function(require,module,exports){ -// 19.1.2.14 / 15.2.3.14 Object.keys(O) -var $keys = require('./_object-keys-internal'); -var enumBugKeys = require('./_enum-bug-keys'); - -module.exports = Object.keys || function keys(O) { - return $keys(O, enumBugKeys); -}; - -},{"./_enum-bug-keys":30,"./_object-keys-internal":53}],55:[function(require,module,exports){ -// most Object methods by ES6 should accept primitives -var $export = require('./_export'); -var core = require('./_core'); -var fails = require('./_fails'); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - -},{"./_core":24,"./_export":31,"./_fails":32}],56:[function(require,module,exports){ -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - -},{}],57:[function(require,module,exports){ -module.exports = require('./_hide'); - -},{"./_hide":35}],58:[function(require,module,exports){ -var def = require('./_object-dp').f; -var has = require('./_has'); -var TAG = require('./_wks')('toStringTag'); - -module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); -}; - -},{"./_has":34,"./_object-dp":50,"./_wks":69}],59:[function(require,module,exports){ -var shared = require('./_shared')('keys'); -var uid = require('./_uid'); -module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); -}; - -},{"./_shared":60,"./_uid":68}],60:[function(require,module,exports){ -var global = require('./_global'); -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || (global[SHARED] = {}); -module.exports = function (key) { - return store[key] || (store[key] = {}); -}; - -},{"./_global":33}],61:[function(require,module,exports){ -var toInteger = require('./_to-integer'); -var defined = require('./_defined'); -// true -> String#at -// false -> String#codePointAt -module.exports = function (TO_STRING) { - return function (that, pos) { - var s = String(defined(that)); - var i = toInteger(pos); - var l = s.length; - var a, b; - if (i < 0 || i >= l) return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff - ? TO_STRING ? s.charAt(i) : a - : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; -}; - -},{"./_defined":27,"./_to-integer":63}],62:[function(require,module,exports){ -var toInteger = require('./_to-integer'); -var max = Math.max; -var min = Math.min; -module.exports = function (index, length) { - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); -}; - -},{"./_to-integer":63}],63:[function(require,module,exports){ -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; - -},{}],64:[function(require,module,exports){ -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = require('./_iobject'); -var defined = require('./_defined'); -module.exports = function (it) { - return IObject(defined(it)); -}; - -},{"./_defined":27,"./_iobject":38}],65:[function(require,module,exports){ -// 7.1.15 ToLength -var toInteger = require('./_to-integer'); -var min = Math.min; -module.exports = function (it) { - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 -}; - -},{"./_to-integer":63}],66:[function(require,module,exports){ -// 7.1.13 ToObject(argument) -var defined = require('./_defined'); -module.exports = function (it) { - return Object(defined(it)); -}; - -},{"./_defined":27}],67:[function(require,module,exports){ -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = require('./_is-object'); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - -},{"./_is-object":40}],68:[function(require,module,exports){ -var id = 0; -var px = Math.random(); -module.exports = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); -}; - -},{}],69:[function(require,module,exports){ -var store = require('./_shared')('wks'); -var uid = require('./_uid'); -var Symbol = require('./_global').Symbol; -var USE_SYMBOL = typeof Symbol == 'function'; - -var $exports = module.exports = function (name) { - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); -}; - -$exports.store = store; - -},{"./_global":33,"./_shared":60,"./_uid":68}],70:[function(require,module,exports){ -var classof = require('./_classof'); -var ITERATOR = require('./_wks')('iterator'); -var Iterators = require('./_iterators'); -module.exports = require('./_core').getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - -},{"./_classof":22,"./_core":24,"./_iterators":46,"./_wks":69}],71:[function(require,module,exports){ -var anObject = require('./_an-object'); -var get = require('./core.get-iterator-method'); -module.exports = require('./_core').getIterator = function (it) { - var iterFn = get(it); - if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!'); - return anObject(iterFn.call(it)); -}; - -},{"./_an-object":20,"./_core":24,"./core.get-iterator-method":70}],72:[function(require,module,exports){ -var classof = require('./_classof'); -var ITERATOR = require('./_wks')('iterator'); -var Iterators = require('./_iterators'); -module.exports = require('./_core').isIterable = function (it) { - var O = Object(it); - return O[ITERATOR] !== undefined - || '@@iterator' in O - // eslint-disable-next-line no-prototype-builtins - || Iterators.hasOwnProperty(classof(O)); -}; - -},{"./_classof":22,"./_core":24,"./_iterators":46,"./_wks":69}],73:[function(require,module,exports){ -'use strict'; -var ctx = require('./_ctx'); -var $export = require('./_export'); -var toObject = require('./_to-object'); -var call = require('./_iter-call'); -var isArrayIter = require('./_is-array-iter'); -var toLength = require('./_to-length'); -var createProperty = require('./_create-property'); -var getIterFn = require('./core.get-iterator-method'); - -$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', { - // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) - from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { - var O = toObject(arrayLike); - var C = typeof this == 'function' ? this : Array; - var aLen = arguments.length; - var mapfn = aLen > 1 ? arguments[1] : undefined; - var mapping = mapfn !== undefined; - var index = 0; - var iterFn = getIterFn(O); - var length, result, step, iterator; - if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); - // if object isn't iterable or it's array with default iterator - use simple case - if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { - for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { - createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); - } - } else { - length = toLength(O.length); - for (result = new C(length); length > index; index++) { - createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); - } - } - result.length = index; - return result; - } -}); - -},{"./_create-property":25,"./_ctx":26,"./_export":31,"./_is-array-iter":39,"./_iter-call":41,"./_iter-detect":44,"./_to-length":65,"./_to-object":66,"./core.get-iterator-method":70}],74:[function(require,module,exports){ -'use strict'; -var addToUnscopables = require('./_add-to-unscopables'); -var step = require('./_iter-step'); -var Iterators = require('./_iterators'); -var toIObject = require('./_to-iobject'); - -// 22.1.3.4 Array.prototype.entries() -// 22.1.3.13 Array.prototype.keys() -// 22.1.3.29 Array.prototype.values() -// 22.1.3.30 Array.prototype[@@iterator]() -module.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) { - this._t = toIObject(iterated); // target - this._i = 0; // next index - this._k = kind; // kind -// 22.1.5.2.1 %ArrayIteratorPrototype%.next() -}, function () { - var O = this._t; - var kind = this._k; - var index = this._i++; - if (!O || index >= O.length) { - this._t = undefined; - return step(1); - } - if (kind == 'keys') return step(0, index); - if (kind == 'values') return step(0, O[index]); - return step(0, [index, O[index]]); -}, 'values'); - -// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) -Iterators.Arguments = Iterators.Array; - -addToUnscopables('keys'); -addToUnscopables('values'); -addToUnscopables('entries'); - -},{"./_add-to-unscopables":19,"./_iter-define":43,"./_iter-step":45,"./_iterators":46,"./_to-iobject":64}],75:[function(require,module,exports){ -var $export = require('./_export'); -// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) -$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f }); - -},{"./_descriptors":28,"./_export":31,"./_object-dp":50}],76:[function(require,module,exports){ -// 19.1.2.5 Object.freeze(O) -var isObject = require('./_is-object'); -var meta = require('./_meta').onFreeze; - -require('./_object-sap')('freeze', function ($freeze) { - return function freeze(it) { - return $freeze && isObject(it) ? $freeze(meta(it)) : it; - }; -}); - -},{"./_is-object":40,"./_meta":48,"./_object-sap":55}],77:[function(require,module,exports){ -'use strict'; -var $at = require('./_string-at')(true); - -// 21.1.3.27 String.prototype[@@iterator]() -require('./_iter-define')(String, 'String', function (iterated) { - this._t = String(iterated); // target - this._i = 0; // next index -// 21.1.5.2.1 %StringIteratorPrototype%.next() -}, function () { - var O = this._t; - var index = this._i; - var point; - if (index >= O.length) return { value: undefined, done: true }; - point = $at(O, index); - this._i += point.length; - return { value: point, done: false }; -}); - -},{"./_iter-define":43,"./_string-at":61}],78:[function(require,module,exports){ -require('./es6.array.iterator'); -var global = require('./_global'); -var hide = require('./_hide'); -var Iterators = require('./_iterators'); -var TO_STRING_TAG = require('./_wks')('toStringTag'); - -var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' + - 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' + - 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' + - 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' + - 'TextTrackList,TouchList').split(','); - -for (var i = 0; i < DOMIterables.length; i++) { - var NAME = DOMIterables[i]; - var Collection = global[NAME]; - var proto = Collection && Collection.prototype; - if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); - Iterators[NAME] = Iterators.Array; -} - -},{"./_global":33,"./_hide":35,"./_iterators":46,"./_wks":69,"./es6.array.iterator":74}],79:[function(require,module,exports){ -function getRelocatable(re) { - // In the future, this could use a WeakMap instead of an expando. - if (!re.__matchAtRelocatable) { - // Disjunctions are the lowest-precedence operator, so we can make any - // pattern match the empty string by appending `|()` to it: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns - var source = re.source + '|()'; - - // We always make the new regex global. - var flags = 'g' + (re.ignoreCase ? 'i' : '') + (re.multiline ? 'm' : '') + (re.unicode ? 'u' : '') - // sticky (/.../y) doesn't make sense in conjunction with our relocation - // logic, so we ignore it here. - ; - - re.__matchAtRelocatable = new RegExp(source, flags); - } - return re.__matchAtRelocatable; -} - -function matchAt(re, str, pos) { - if (re.global || re.sticky) { - throw new Error('matchAt(...): Only non-global regexes are supported'); - } - var reloc = getRelocatable(re); - reloc.lastIndex = pos; - var match = reloc.exec(str); - // Last capturing group is our sentinel that indicates whether the regex - // matched at the given location. - if (match[match.length - 1] == null) { - // Original regex matched. - match.length = match.length - 1; - return match; - } else { - return null; - } -} - -module.exports = matchAt; -},{}],80:[function(require,module,exports){ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -'use strict'; -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; - -},{}],81:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.controlWordRegex = undefined; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _matchAt = require("match-at"); - -var _matchAt2 = _interopRequireDefault(_matchAt); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _SourceLocation = require("./SourceLocation"); - -var _SourceLocation2 = _interopRequireDefault(_SourceLocation); - -var _Token = require("./Token"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* The following tokenRegex - * - matches typical whitespace (but not NBSP etc.) using its first group - * - matches comments (must have trailing newlines) - * - does not match any control character \x00-\x1f except whitespace - * - does not match a bare backslash - * - matches any ASCII character except those just mentioned - * - does not match the BMP private use area \uE000-\uF8FF - * - does not match bare surrogate code units - * - matches any BMP character except for those just described - * - matches any valid Unicode surrogate pair - * - matches a backslash followed by one or more letters - * - matches a backslash followed by any BMP character, including newline - * Just because the Lexer matches something doesn't mean it's valid input: - * If there is no matching function or symbol definition, the Parser will - * still reject the input. - */ - -/** - * The Lexer class handles tokenizing the input in various ways. Since our - * parser expects us to be able to backtrack, the lexer allows lexing from any - * given starting point. - * - * Its main exposed function is the `lex` function, which takes a position to - * lex from and a type of token to lex. It defers to the appropriate `_innerLex` - * function. - * - * The various `_innerLex` functions perform the actual lexing of different - * kinds. - */ - -var commentRegexString = "%[^\n]*[\n]"; -var controlWordRegexString = "\\\\[a-zA-Z@]+"; -var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; -var tokenRegex = new RegExp("([ \r\n\t]+)|" + ( // whitespace -"(" + commentRegexString + "|") + // comments -"[!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint -"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair -"|\\\\verb\\*([^]).*?\\3" + // \verb* -"|\\\\verb([^*a-zA-Z]).*?\\4" + ( // \verb unstarred -"|" + controlWordRegexString) + ( // \macroName -"|" + controlSymbolRegexString) + // \\, \', etc. -")"); - -// tokenRegex has no ^ marker, as required by matchAt. -// These regexs are for matching results from tokenRegex, -// so they do have ^ markers. -var controlWordRegex = exports.controlWordRegex = new RegExp("^" + controlWordRegexString); -var commentRegex = new RegExp("^" + commentRegexString); - -/** Main Lexer class */ - -var Lexer = function () { - function Lexer(input) { - (0, _classCallCheck3.default)(this, Lexer); - - this.input = input; - this.pos = 0; - } - - /** - * This function lexes a single token. - */ - - - (0, _createClass3.default)(Lexer, [{ - key: "lex", - value: function lex() { - var input = this.input; - var pos = this.pos; - if (pos === input.length) { - return new _Token.Token("EOF", new _SourceLocation2.default(this, pos, pos)); - } - var match = (0, _matchAt2.default)(tokenRegex, input, pos); - if (match === null) { - throw new _ParseError2.default("Unexpected character: '" + input[pos] + "'", new _Token.Token(input[pos], new _SourceLocation2.default(this, pos, pos + 1))); - } - var text = match[2] || " "; - var start = this.pos; - this.pos += match[0].length; - var end = this.pos; - - if (commentRegex.test(text)) { - return this.lex(); - } else { - return new _Token.Token(text, new _SourceLocation2.default(this, start, end)); - } - } - }]); - return Lexer; -}(); - -exports.default = Lexer; - -},{"./ParseError":84,"./SourceLocation":88,"./Token":90,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9,"match-at":79}],82:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _Lexer = require("./Lexer"); - -var _Lexer2 = _interopRequireDefault(_Lexer); - -var _Token = require("./Token"); - -var _macros = require("./macros"); - -var _macros2 = _interopRequireDefault(_macros); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _objectAssign = require("object-assign"); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var MacroExpander = function () { - function MacroExpander(input, macros) { - (0, _classCallCheck3.default)(this, MacroExpander); - - this.lexer = new _Lexer2.default(input); - this.macros = (0, _objectAssign2.default)({}, _macros2.default, macros); - this.stack = []; // contains tokens in REVERSE order - } - - /** - * Returns the topmost token on the stack, without expanding it. - * Similar in behavior to TeX's `\futurelet`. - */ - - - (0, _createClass3.default)(MacroExpander, [{ - key: "future", - value: function future() { - if (this.stack.length === 0) { - this.pushToken(this.lexer.lex()); - } - return this.stack[this.stack.length - 1]; - } - - /** - * Remove and return the next unexpanded token. - */ - - }, { - key: "popToken", - value: function popToken() { - this.future(); // ensure non-empty stack - return this.stack.pop(); - } - - /** - * Add a given token to the token stack. In particular, this get be used - * to put back a token returned from one of the other methods. - */ - - }, { - key: "pushToken", - value: function pushToken(token) { - this.stack.push(token); - } - - /** - * Append an array of tokens to the token stack. - */ - - }, { - key: "pushTokens", - value: function pushTokens(tokens) { - var _stack; - - (_stack = this.stack).push.apply(_stack, (0, _toConsumableArray3.default)(tokens)); - } - - /** - * Consume all following space tokens, without expansion. - */ - - }, { - key: "consumeSpaces", - value: function consumeSpaces() { - for (;;) { - var token = this.future(); - if (token.text === " ") { - this.stack.pop(); - } else { - break; - } - } - } - - /** - * Consume the specified number of arguments from the token stream, - * and return the resulting array of arguments. - */ - - }, { - key: "consumeArgs", - value: function consumeArgs(numArgs) { - var args = []; - // obtain arguments, either single token or balanced {…} group - for (var i = 0; i < numArgs; ++i) { - this.consumeSpaces(); // ignore spaces before each argument - var startOfArg = this.popToken(); - if (startOfArg.text === "{") { - var arg = []; - var depth = 1; - while (depth !== 0) { - var tok = this.popToken(); - arg.push(tok); - if (tok.text === "{") { - ++depth; - } else if (tok.text === "}") { - --depth; - } else if (tok.text === "EOF") { - throw new _ParseError2.default("End of input in macro argument", startOfArg); - } - } - arg.pop(); // remove last } - arg.reverse(); // like above, to fit in with stack order - args[i] = arg; - } else if (startOfArg.text === "EOF") { - throw new _ParseError2.default("End of input expecting macro argument"); - } else { - args[i] = [startOfArg]; - } - } - return args; - } - - /** - * Expand the next token only once if possible. - * - * If the token is expanded, the resulting tokens will be pushed onto - * the stack in reverse order and will be returned as an array, - * also in reverse order. - * - * If not, the next token will be returned without removing it - * from the stack. This case can be detected by a `Token` return value - * instead of an `Array` return value. - * - * In either case, the next token will be on the top of the stack, - * or the stack will be empty. - * - * Used to implement `expandAfterFuture` and `expandNextToken`. - * - * At the moment, macro expansion doesn't handle delimited macros, - * i.e. things like those defined by \def\foo#1\end{…}. - * See the TeX book page 202ff. for details on how those should behave. - */ - - }, { - key: "expandOnce", - value: function expandOnce() { - var topToken = this.popToken(); - var name = topToken.text; - var isMacro = name.charAt(0) === "\\"; - if (isMacro && _Lexer.controlWordRegex.test(name)) { - // Consume all spaces after \macro (but not \\, \', etc.) - this.consumeSpaces(); - } - if (!this.macros.hasOwnProperty(name)) { - // Fully expanded - this.pushToken(topToken); - return topToken; - } - - var _getExpansion2 = this._getExpansion(name), - tokens = _getExpansion2.tokens, - numArgs = _getExpansion2.numArgs; - - var expansion = tokens; - if (numArgs) { - var args = this.consumeArgs(numArgs); - // paste arguments in place of the placeholders - expansion = expansion.slice(); // make a shallow copy - for (var i = expansion.length - 1; i >= 0; --i) { - var tok = expansion[i]; - if (tok.text === "#") { - if (i === 0) { - throw new _ParseError2.default("Incomplete placeholder at end of macro body", tok); - } - tok = expansion[--i]; // next token on stack - if (tok.text === "#") { - // ## → # - expansion.splice(i + 1, 1); // drop first # - } else if (/^[1-9]$/.test(tok.text)) { - var _expansion; - - // replace the placeholder with the indicated argument - (_expansion = expansion).splice.apply(_expansion, [i, 2].concat((0, _toConsumableArray3.default)(args[+tok.text - 1]))); - } else { - throw new _ParseError2.default("Not a valid argument number", tok); - } - } - } - } - // Concatenate expansion onto top of stack. - this.pushTokens(expansion); - return expansion; - } - - /** - * Expand the next token only once (if possible), and return the resulting - * top token on the stack (without removing anything from the stack). - * Similar in behavior to TeX's `\expandafter\futurelet`. - * Equivalent to expandOnce() followed by future(). - */ - - }, { - key: "expandAfterFuture", - value: function expandAfterFuture() { - this.expandOnce(); - return this.future(); - } - - /** - * Recursively expand first token, then return first non-expandable token. - */ - - }, { - key: "expandNextToken", - value: function expandNextToken() { - for (;;) { - var expanded = this.expandOnce(); - // expandOnce returns Token if and only if it's fully expanded. - if (expanded instanceof _Token.Token) { - // \relax stops the expansion, but shouldn't get returned (a - // null return value couldn't get implemented as a function). - if (expanded.text === "\\relax") { - this.stack.pop(); - } else { - return this.stack.pop(); // === expanded - } - } - } - - // Flow unable to figure out that this pathway is impossible. - // https://github.com/facebook/flow/issues/4808 - throw new Error(); // eslint-disable-line no-unreachable - } - - /** - * Returns the expanded macro as a reversed array of tokens and a macro - * argument count. - * Caches macro expansions for those that were defined simple TeX strings. - */ - - }, { - key: "_getExpansion", - value: function _getExpansion(name) { - var definition = this.macros[name]; - var expansion = typeof definition === "function" ? definition(this) : definition; - if (typeof expansion === "string") { - var numArgs = 0; - if (expansion.indexOf("#") !== -1) { - var stripped = expansion.replace(/##/g, ""); - while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { - ++numArgs; - } - } - var bodyLexer = new _Lexer2.default(expansion); - var tokens = []; - var tok = bodyLexer.lex(); - while (tok.text !== "EOF") { - tokens.push(tok); - tok = bodyLexer.lex(); - } - tokens.reverse(); // to fit in with stack using push and pop - var expanded = { tokens: tokens, numArgs: numArgs }; - // Cannot cache a macro defined using a function since it relies on - // parser context. - if (typeof definition !== "function") { - this.macros[name] = expanded; - } - return expanded; - } - - return expansion; - } - }]); - return MacroExpander; -}(); -/** - * This file contains the “gullet” where macros are expanded - * until only non-macro tokens remain. - */ - -exports.default = MacroExpander; - -},{"./Lexer":81,"./ParseError":84,"./Token":90,"./macros":120,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9,"babel-runtime/helpers/toConsumableArray":11,"object-assign":80}],83:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _fontMetrics2 = require("./fontMetrics"); - -var _fontMetrics3 = _interopRequireDefault(_fontMetrics2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var sizeStyleMap = [ -// Each element contains [textsize, scriptsize, scriptscriptsize]. -// The size mappings are taken from TeX with \normalsize=10pt. -[1, 1, 1], // size1: [5, 5, 5] \tiny -[2, 1, 1], // size2: [6, 5, 5] -[3, 1, 1], // size3: [7, 5, 5] \scriptsize -[4, 2, 1], // size4: [8, 6, 5] \footnotesize -[5, 2, 1], // size5: [9, 6, 5] \small -[6, 3, 1], // size6: [10, 7, 5] \normalsize -[7, 4, 2], // size7: [12, 8, 6] \large -[8, 6, 3], // size8: [14.4, 10, 7] \Large -[9, 7, 6], // size9: [17.28, 12, 10] \LARGE -[10, 8, 7], // size10: [20.74, 14.4, 12] \huge -[11, 10, 9]]; -/** - * This file contains information about the options that the Parser carries - * around with it while parsing. Data is held in an `Options` object, and when - * recursing, a new `Options` object can be created with the `.with*` and - * `.reset` functions. - */ - -var sizeMultipliers = [ -// fontMetrics.js:getFontMetrics also uses size indexes, so if -// you change size indexes, change that function. -0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; - -var sizeAtStyle = function sizeAtStyle(size, style) { - return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; -}; - -/** - * This is the main options class. It contains the current style, size, color, - * and font. - * - * Options objects should not be modified. To create a new Options with - * different properties, call a `.having*` method. - */ -var Options = function () { - function Options(data) { - (0, _classCallCheck3.default)(this, Options); - - this.style = data.style; - this.color = data.color; - this.size = data.size || Options.BASESIZE; - this.textSize = data.textSize || this.size; - this.phantom = !!data.phantom; - this.font = data.font; - this.sizeMultiplier = sizeMultipliers[this.size - 1]; - this.maxSize = data.maxSize; - this._fontMetrics = undefined; - } - - /** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ - - - /** - * The base size index. - */ - - - (0, _createClass3.default)(Options, [{ - key: "extend", - value: function extend(extension) { - var data = { - style: this.style, - size: this.size, - textSize: this.textSize, - color: this.color, - phantom: this.phantom, - font: this.font, - maxSize: this.maxSize - }; - - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; - } - } - - return new Options(data); - } - - /** - * Return an options object with the given style. If `this.style === style`, - * returns `this`. - */ - - }, { - key: "havingStyle", - value: function havingStyle(style) { - if (this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: sizeAtStyle(this.textSize, style) - }); - } - } - - /** - * Return an options object with a cramped version of the current style. If - * the current style is cramped, returns `this`. - */ - - }, { - key: "havingCrampedStyle", - value: function havingCrampedStyle() { - return this.havingStyle(this.style.cramp()); - } - - /** - * Return an options object with the given size and in at least `\textstyle`. - * Returns `this` if appropriate. - */ - - }, { - key: "havingSize", - value: function havingSize(size) { - if (this.size === size && this.textSize === size) { - return this; - } else { - return this.extend({ - style: this.style.text(), - size: size, - textSize: size - }); - } - } - - /** - * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, - * changes to at least `\textstyle`. - */ - - }, { - key: "havingBaseStyle", - value: function havingBaseStyle(style) { - style = style || this.style.text(); - var wantSize = sizeAtStyle(Options.BASESIZE, style); - if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: wantSize - }); - } - } - - /** - * Create a new options object with the given color. - */ - - }, { - key: "withColor", - value: function withColor(color) { - return this.extend({ - color: color - }); - } - - /** - * Create a new options object with "phantom" set to true. - */ - - }, { - key: "withPhantom", - value: function withPhantom() { - return this.extend({ - phantom: true - }); - } - - /** - * Create a new options objects with the give font. - */ - - }, { - key: "withFont", - value: function withFont(font) { - return this.extend({ - font: font || this.font - }); - } - - /** - * Return the CSS sizing classes required to switch from enclosing options - * `oldOptions` to `this`. Returns an array of classes. - */ - - }, { - key: "sizingClasses", - value: function sizingClasses(oldOptions) { - if (oldOptions.size !== this.size) { - return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; - } else { - return []; - } - } - - /** - * Return the CSS sizing classes required to switch to the base size. Like - * `this.havingSize(BASESIZE).sizingClasses(this)`. - */ - - }, { - key: "baseSizingClasses", - value: function baseSizingClasses() { - if (this.size !== Options.BASESIZE) { - return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; - } else { - return []; - } - } - - /** - * Return the font metrics for this size. - */ - - }, { - key: "fontMetrics", - value: function fontMetrics() { - if (!this._fontMetrics) { - this._fontMetrics = _fontMetrics3.default.getFontMetrics(this.size); - } - return this._fontMetrics; - } - - /** - * A map of color names to CSS colors. - * TODO(emily): Remove this when we have real macros - */ - - }, { - key: "getColor", - - - /** - * Gets the CSS color of the current options object, accounting for the - * `colorMap`. - */ - value: function getColor() { - if (this.phantom) { - return "transparent"; - } else if (this.color != null && Options.colorMap.hasOwnProperty(this.color)) { - return Options.colorMap[this.color]; - } else { - return this.color; - } - } - }]); - return Options; -}(); - -Options.BASESIZE = 6; -Options.colorMap = { - "katex-blue": "#6495ed", - "katex-orange": "#ffa500", - "katex-pink": "#ff00af", - "katex-red": "#df0030", - "katex-green": "#28ae7b", - "katex-gray": "gray", - "katex-purple": "#9d38bd", - "katex-blueA": "#ccfaff", - "katex-blueB": "#80f6ff", - "katex-blueC": "#63d9ea", - "katex-blueD": "#11accd", - "katex-blueE": "#0c7f99", - "katex-tealA": "#94fff5", - "katex-tealB": "#26edd5", - "katex-tealC": "#01d1c1", - "katex-tealD": "#01a995", - "katex-tealE": "#208170", - "katex-greenA": "#b6ffb0", - "katex-greenB": "#8af281", - "katex-greenC": "#74cf70", - "katex-greenD": "#1fab54", - "katex-greenE": "#0d923f", - "katex-goldA": "#ffd0a9", - "katex-goldB": "#ffbb71", - "katex-goldC": "#ff9c39", - "katex-goldD": "#e07d10", - "katex-goldE": "#a75a05", - "katex-redA": "#fca9a9", - "katex-redB": "#ff8482", - "katex-redC": "#f9685d", - "katex-redD": "#e84d39", - "katex-redE": "#bc2612", - "katex-maroonA": "#ffbde0", - "katex-maroonB": "#ff92c6", - "katex-maroonC": "#ed5fa6", - "katex-maroonD": "#ca337c", - "katex-maroonE": "#9e034e", - "katex-purpleA": "#ddd7ff", - "katex-purpleB": "#c6b9fc", - "katex-purpleC": "#aa87ff", - "katex-purpleD": "#7854ab", - "katex-purpleE": "#543b78", - "katex-mintA": "#f5f9e8", - "katex-mintB": "#edf2df", - "katex-mintC": "#e0e5cc", - "katex-grayA": "#f6f7f7", - "katex-grayB": "#f0f1f2", - "katex-grayC": "#e3e5e6", - "katex-grayD": "#d6d8da", - "katex-grayE": "#babec2", - "katex-grayF": "#888d93", - "katex-grayG": "#626569", - "katex-grayH": "#3b3e40", - "katex-grayI": "#21242c", - "katex-kaBlue": "#314453", - "katex-kaGreen": "#71B307" -}; -exports.default = Options; - -},{"./fontMetrics":101,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],84:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _ParseNode = require("./ParseNode"); - -var _ParseNode2 = _interopRequireDefault(_ParseNode); - -var _Token = require("./Token"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This is the ParseError class, which is the main error thrown by KaTeX - * functions when something has gone wrong. This is used to distinguish internal - * errors from errors in the expression that the user provided. - * - * If possible, a caller should provide a Token or ParseNode with information - * about where in the source string the problem occurred. - */ -var ParseError = -// Error position based on passed-in Token or ParseNode. - -function ParseError(message, // The error message -token) // An object providing position information -{ - (0, _classCallCheck3.default)(this, ParseError); - - var error = "KaTeX parse error: " + message; - var start = void 0; - - var loc = token && token.loc; - if (loc && loc.start <= loc.end) { - // If we have the input and a position, make the error a bit fancier - - // Get the input - var input = loc.lexer.input; - - // Prepend some information - start = loc.start; - var end = loc.end; - if (start === input.length) { - error += " at end of input: "; - } else { - error += " at position " + (start + 1) + ": "; - } - - // Underline token in question using combining underscores - var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); - - // Extract some context from the input and add it to the error - var left = void 0; - if (start > 15) { - left = "…" + input.slice(start - 15, start); - } else { - left = input.slice(0, start); - } - var right = void 0; - if (end + 15 < input.length) { - right = input.slice(end, end + 15) + "…"; - } else { - right = input.slice(end); - } - error += left + underlined + right; - } - - // Some hackery to make ParseError a prototype of Error - // See http://stackoverflow.com/a/8460753 - var self = new Error(error); - self.name = "ParseError"; - // $FlowFixMe - self.__proto__ = ParseError.prototype; - // $FlowFixMe - self.position = start; - return self; -}; - -// $FlowFixMe More hackery - - -ParseError.prototype.__proto__ = Error.prototype; - -exports.default = ParseError; - -},{"./ParseNode":85,"./Token":90,"babel-runtime/helpers/classCallCheck":8}],85:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _Token = require("./Token"); - -var _SourceLocation = require("./SourceLocation"); - -var _SourceLocation2 = _interopRequireDefault(_SourceLocation); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * The resulting parse tree nodes of the parse tree. - * - * It is possible to provide position information, so that a `ParseNode` can - * fulfill a role similar to a `Token` in error reporting. - * For details on the corresponding properties see `Token` constructor. - * Providing such information can lead to better error reporting. - */ -var ParseNode = function ParseNode(type, // type of node, like e.g. "ordgroup" -value, // type-specific representation of the node -mode, // parse mode in action for this node, "math" or "text" -firstToken, // first token of the input for this node, -lastToken) // last token of the input for this node, -// will default to firstToken if unset -{ - (0, _classCallCheck3.default)(this, ParseNode); - - this.type = type; - this.value = value; - this.mode = mode; - this.loc = _SourceLocation2.default.range(firstToken, lastToken); -}; - -exports.default = ParseNode; - -},{"./SourceLocation":88,"./Token":90,"babel-runtime/helpers/classCallCheck":8}],86:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _functions = require("./functions"); - -var _functions2 = _interopRequireDefault(_functions); - -var _environments = require("./environments"); - -var _environments2 = _interopRequireDefault(_environments); - -var _MacroExpander = require("./MacroExpander"); - -var _MacroExpander2 = _interopRequireDefault(_MacroExpander); - -var _symbols = require("./symbols"); - -var _symbols2 = _interopRequireDefault(_symbols); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _units = require("./units"); - -var _unicodeRegexes = require("./unicodeRegexes"); - -var _ParseNode = require("./ParseNode"); - -var _ParseNode2 = _interopRequireDefault(_ParseNode); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This file contains the parser used to parse out a TeX expression from the - * input. Since TeX isn't context-free, standard parsers don't work particularly - * well. - * - * The strategy of this parser is as such: - * - * The main functions (the `.parse...` ones) take a position in the current - * parse string to parse tokens from. The lexer (found in Lexer.js, stored at - * this.lexer) also supports pulling out tokens at arbitrary places. When - * individual tokens are needed at a position, the lexer is called to pull out a - * token, which is then used. - * - * The parser has a property called "mode" indicating the mode that - * the parser is currently in. Currently it has to be one of "math" or - * "text", which denotes whether the current environment is a math-y - * one or a text-y one (e.g. inside \text). Currently, this serves to - * limit the functions which can be used in text mode. - * - * The main functions then return an object which contains the useful data that - * was parsed at its given point, and a new position at the end of the parsed - * data. The main functions can call each other and continue the parsing by - * using the returned position as a new starting point. - * - * There are also extra `.handle...` functions, which pull out some reused - * functionality into self-contained functions. - * - * The earlier functions return ParseNodes. - * The later functions (which are called deeper in the parse) sometimes return - * ParsedFuncOrArgOrDollar, which contain a ParseNode as well as some data about - * whether the parsed object is a function which is missing some arguments, or a - * standalone object which can be used as an argument to another function. - */ - -/* TODO: Uncomment when porting to flow. -type ParsedType = "fn" | "arg" | "$" -type ParsedFunc = {| - type: "fn", - result: string, // Function name defined via defineFunction (e.g. "\\frac"). - token: Token, -|}; -type ParsedArg = {| - type: "arg", - result: ParseNode, - token: Token, -|}; -type ParsedDollar = {| - // Math mode switch - type: "$", - result: "$", - token: Token, -|}; -type ParsedFuncOrArgOrDollar = ParsedFunc | ParsedArg | ParsedDollar; -*/ - -/** - * @param {ParseNode} result - * @param {Token} token - * @return {ParsedArg} - */ -function newArgument(result, token) { - return { type: "arg", result: result, token: token }; -} - -/** - * @param {Token} token - * @return {ParsedFunc} - */ -/* eslint no-constant-condition:0 */ -function newFunction(token) { - return { type: "fn", result: token.text, token: token }; -} - -/** - * @param {Token} token - * @return {ParsedDollar} - */ -function newDollar(token) { - return { type: "$", result: "$", token: token }; -} - -/** - * @param {ParsedFuncOrArgOrDollar} parsed - * @return {ParsedFuncOrArg} - */ -function assertFuncOrArg(parsed) { - if (parsed.type === "$") { - throw new _ParseError2.default("Unexpected $", parsed.token); - } - return parsed; -} - -var Parser = function () { - function Parser(input, settings) { - (0, _classCallCheck3.default)(this, Parser); - - // Create a new macro expander (gullet) and (indirectly via that) also a - // new lexer (mouth) for this parser (stomach, in the language of TeX) - this.gullet = new _MacroExpander2.default(input, settings.macros); - // Use old \color behavior (same as LaTeX's \textcolor) if requested. - // We do this after the macros object has been copied by MacroExpander. - if (settings.colorIsTextColor) { - this.gullet.macros["\\color"] = "\\textcolor"; - } - // Store the settings for use in parsing - this.settings = settings; - // Count leftright depth (for \middle errors) - this.leftrightDepth = 0; - } - - /** - * Checks a result to make sure it has the right type, and throws an - * appropriate error otherwise. - * - * @param {boolean=} consume whether to consume the expected token, - * defaults to true - */ - - - (0, _createClass3.default)(Parser, [{ - key: "expect", - value: function expect(text, consume) { - if (this.nextToken.text !== text) { - throw new _ParseError2.default("Expected '" + text + "', got '" + this.nextToken.text + "'", this.nextToken); - } - if (consume !== false) { - this.consume(); - } - } - - /** - * Considers the current look ahead token as consumed, - * and fetches the one after that as the new look ahead. - */ - - }, { - key: "consume", - value: function consume() { - this.nextToken = this.gullet.expandNextToken(); - } - - /** - * Switches between "text" and "math" modes. - */ - - }, { - key: "switchMode", - value: function switchMode(newMode) { - this.mode = newMode; - } - - /** - * Main parsing function, which parses an entire input. - * - * @return {Array.} - */ - - }, { - key: "parse", - value: function parse() { - // Try to parse the input - this.mode = "math"; - this.consume(); - var parse = this.parseInput(); - return parse; - } - - /** - * Parses an entire input tree. - */ - - }, { - key: "parseInput", - value: function parseInput() { - // Parse an expression - var expression = this.parseExpression(false); - // If we succeeded, make sure there's an EOF at the end - this.expect("EOF", false); - return expression; - } - }, { - key: "parseExpression", - - - /** - * Parses an "expression", which is a list of atoms. - * - * @param {boolean} breakOnInfix Should the parsing stop when we hit infix - * nodes? This happens when functions have higher precendence - * than infix nodes in implicit parses. - * - * @param {?string} breakOnTokenText The text of the token that the expression - * should end with, or `null` if something else should end the - * expression. - * - * @return {Array} - */ - value: function parseExpression(breakOnInfix, breakOnTokenText) { - var body = []; - // Keep adding atoms to the body until we can't parse any more atoms (either - // we reached the end, a }, or a \right) - while (true) { - // Ignore spaces in math mode - if (this.mode === "math") { - this.consumeSpaces(); - } - var lex = this.nextToken; - if (Parser.endOfExpression.indexOf(lex.text) !== -1) { - break; - } - if (breakOnTokenText && lex.text === breakOnTokenText) { - break; - } - if (breakOnInfix && _functions2.default[lex.text] && _functions2.default[lex.text].infix) { - break; - } - var atom = this.parseAtom(breakOnTokenText); - if (!atom) { - if (!this.settings.throwOnError && lex.text[0] === "\\") { - var errorNode = this.handleUnsupportedCmd(); - body.push(errorNode); - continue; - } - - break; - } - body.push(atom); - } - return this.handleInfixNodes(body); - } - - /** - * Rewrites infix operators such as \over with corresponding commands such - * as \frac. - * - * There can only be one infix operator per group. If there's more than one - * then the expression is ambiguous. This can be resolved by adding {}. - * - * @param {Array} body - * @return {Array} - */ - - }, { - key: "handleInfixNodes", - value: function handleInfixNodes(body) { - var overIndex = -1; - var funcName = void 0; - - for (var i = 0; i < body.length; i++) { - var node = body[i]; - if (node.type === "infix") { - if (overIndex !== -1) { - throw new _ParseError2.default("only one infix operator per group", node.value.token); - } - overIndex = i; - funcName = node.value.replaceWith; - } - } - - if (overIndex !== -1) { - var numerNode = void 0; - var denomNode = void 0; - - var numerBody = body.slice(0, overIndex); - var denomBody = body.slice(overIndex + 1); - - if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { - numerNode = numerBody[0]; - } else { - numerNode = new _ParseNode2.default("ordgroup", numerBody, this.mode); - } - - if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { - denomNode = denomBody[0]; - } else { - denomNode = new _ParseNode2.default("ordgroup", denomBody, this.mode); - } - - var value = this.callFunction(funcName, [numerNode, denomNode], []); - return [new _ParseNode2.default(value.type, value, this.mode)]; - } else { - return body; - } - } - - // The greediness of a superscript or subscript - - }, { - key: "handleSupSubscript", - - - /** - * Handle a subscript or superscript with nice errors. - * @param {string} name For error reporting. - * @return {ParsedNode} - */ - value: function handleSupSubscript(name) { - var symbolToken = this.nextToken; - var symbol = symbolToken.text; - this.consume(); - this.consumeSpaces(); // ignore spaces before sup/subscript argument - var group = this.parseGroup(); - - if (!group) { - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - return this.handleUnsupportedCmd(); - } else { - throw new _ParseError2.default("Expected group after '" + symbol + "'", symbolToken); - } - } - - var arg = assertFuncOrArg(group); - if (arg.type === "fn") { - // ^ and _ have a greediness, so handle interactions with functions' - // greediness - var funcGreediness = _functions2.default[group.result].greediness; - if (funcGreediness > Parser.SUPSUB_GREEDINESS) { - return this.parseGivenFunction(group); - } else { - throw new _ParseError2.default("Got function '" + group.result + "' with no arguments " + "as " + name, symbolToken); - } - } else { - return group.result; - } - } - - /** - * Converts the textual input of an unsupported command into a text node - * contained within a color node whose color is determined by errorColor - */ - - }, { - key: "handleUnsupportedCmd", - value: function handleUnsupportedCmd() { - var text = this.nextToken.text; - var textordArray = []; - - for (var i = 0; i < text.length; i++) { - textordArray.push(new _ParseNode2.default("textord", text[i], "text")); - } - - var textNode = new _ParseNode2.default("text", { - body: textordArray, - type: "text" - }, this.mode); - - var colorNode = new _ParseNode2.default("color", { - color: this.settings.errorColor, - value: [textNode], - type: "color" - }, this.mode); - - this.consume(); - return colorNode; - } - - /** - * Parses a group with optional super/subscripts. - * - * @param {"]" | "}"} breakOnTokenText - character to stop parsing the group on. - * @return {?ParseNode} - */ - - }, { - key: "parseAtom", - value: function parseAtom(breakOnTokenText) { - // The body of an atom is an implicit group, so that things like - // \left(x\right)^2 work correctly. - var base = this.parseImplicitGroup(breakOnTokenText); - - // In text mode, we don't have superscripts or subscripts - if (this.mode === "text") { - return base; - } - - // Note that base may be empty (i.e. null) at this point. - - var superscript = void 0; - var subscript = void 0; - while (true) { - // Guaranteed in math mode, so eat any spaces first. - this.consumeSpaces(); - - // Lex the first token - var lex = this.nextToken; - - if (lex.text === "\\limits" || lex.text === "\\nolimits") { - // We got a limit control - if (!base || base.type !== "op") { - throw new _ParseError2.default("Limit controls must follow a math operator", lex); - } else { - var limits = lex.text === "\\limits"; - base.value.limits = limits; - base.value.alwaysHandleSupSub = true; - } - this.consume(); - } else if (lex.text === "^") { - // We got a superscript start - if (superscript) { - throw new _ParseError2.default("Double superscript", lex); - } - superscript = this.handleSupSubscript("superscript"); - } else if (lex.text === "_") { - // We got a subscript start - if (subscript) { - throw new _ParseError2.default("Double subscript", lex); - } - subscript = this.handleSupSubscript("subscript"); - } else if (lex.text === "'") { - // We got a prime - if (superscript) { - throw new _ParseError2.default("Double superscript", lex); - } - var prime = new _ParseNode2.default("textord", "\\prime", this.mode); - - // Many primes can be grouped together, so we handle this here - var primes = [prime]; - this.consume(); - // Keep lexing tokens until we get something that's not a prime - while (this.nextToken.text === "'") { - // For each one, add another prime to the list - primes.push(prime); - this.consume(); - } - // If there's a superscript following the primes, combine that - // superscript in with the primes. - if (this.nextToken.text === "^") { - primes.push(this.handleSupSubscript("superscript")); - } - // Put everything into an ordgroup as the superscript - superscript = new _ParseNode2.default("ordgroup", primes, this.mode); - } else { - // If it wasn't ^, _, or ', stop parsing super/subscripts - break; - } - } - - if (superscript || subscript) { - // If we got either a superscript or subscript, create a supsub - return new _ParseNode2.default("supsub", { - base: base, - sup: superscript, - sub: subscript - }, this.mode); - } else { - // Otherwise return the original body - return base; - } - } - - // A list of the size-changing functions, for use in parseImplicitGroup - - - // A list of the style-changing functions, for use in parseImplicitGroup - - - // Old font functions - - }, { - key: "parseImplicitGroup", - - - /** - * Parses an implicit group, which is a group that starts at the end of a - * specified, and ends right before a higher explicit group ends, or at EOL. It - * is used for functions that appear to affect the current style, like \Large or - * \textrm, where instead of keeping a style we just pretend that there is an - * implicit grouping after it until the end of the group. E.g. - * small text {\Large large text} small text again - * It is also used for \left and \right to get the correct grouping. - * - * @param {"]" | "}"} breakOnTokenText - character to stop parsing the group on. - * @return {?ParseNode} - */ - value: function parseImplicitGroup(breakOnTokenText) { - var start = this.parseSymbol(); - - if (start == null) { - // If we didn't get anything we handle, fall back to parseFunction - return this.parseFunction(); - } - - var func = start.result; - - if (func === "\\left") { - // If we see a left: - // Parse the entire left function (including the delimiter) - var left = this.parseGivenFunction(start); - // Parse out the implicit body - ++this.leftrightDepth; - var body = this.parseExpression(false); - --this.leftrightDepth; - // Check the next token - this.expect("\\right", false); - var right = this.parseFunction(); - return new _ParseNode2.default("leftright", { - body: body, - left: left.value.value, - right: right.value.value - }, this.mode); - } else if (func === "\\begin") { - // begin...end is similar to left...right - var begin = this.parseGivenFunction(start); - var envName = begin.value.name; - if (!_environments2.default.has(envName)) { - throw new _ParseError2.default("No such environment: " + envName, begin.value.nameGroup); - } - // Build the environment object. Arguments and other information will - // be made available to the begin and end methods using properties. - var env = _environments2.default.get(envName); - - var _parseArguments = this.parseArguments("\\begin{" + envName + "}", env), - args = _parseArguments.args, - optArgs = _parseArguments.optArgs; - - var context = { - mode: this.mode, - envName: envName, - parser: this - }; - var result = env.handler(context, args, optArgs); - this.expect("\\end", false); - var endNameToken = this.nextToken; - var end = this.parseFunction(); - if (end.value.name !== envName) { - throw new _ParseError2.default("Mismatch: \\begin{" + envName + "} matched " + "by \\end{" + end.value.name + "}", endNameToken); - } - result.position = end.position; - return result; - } else if (_utils2.default.contains(Parser.sizeFuncs, func)) { - // If we see a sizing function, parse out the implicit body - this.consumeSpaces(); - var _body = this.parseExpression(false, breakOnTokenText); - return new _ParseNode2.default("sizing", { - // Figure out what size to use based on the list of functions above - size: _utils2.default.indexOf(Parser.sizeFuncs, func) + 1, - value: _body - }, this.mode); - } else if (_utils2.default.contains(Parser.styleFuncs, func)) { - // If we see a styling function, parse out the implicit body - this.consumeSpaces(); - var _body2 = this.parseExpression(true, breakOnTokenText); - return new _ParseNode2.default("styling", { - // Figure out what style to use by pulling out the style from - // the function name - style: func.slice(1, func.length - 5), - value: _body2 - }, this.mode); - } else if (func in Parser.oldFontFuncs) { - var style = Parser.oldFontFuncs[func]; - // If we see an old font function, parse out the implicit body - this.consumeSpaces(); - var _body3 = this.parseExpression(true, breakOnTokenText); - if (style.slice(0, 4) === 'text') { - return new _ParseNode2.default("text", { - style: style, - body: new _ParseNode2.default("ordgroup", _body3, this.mode) - }, this.mode); - } else { - return new _ParseNode2.default("font", { - font: style, - body: new _ParseNode2.default("ordgroup", _body3, this.mode) - }, this.mode); - } - } else if (func === "\\color") { - // If we see a styling function, parse out the implicit body - var color = this.parseColorGroup(false); - if (!color) { - throw new _ParseError2.default("\\color not followed by color"); - } - var _body4 = this.parseExpression(true, breakOnTokenText); - return new _ParseNode2.default("color", { - type: "color", - color: color.result.value, - value: _body4 - }, this.mode); - } else if (func === "$") { - if (this.mode === "math") { - throw new _ParseError2.default("$ within math mode"); - } - this.consume(); - var outerMode = this.mode; - this.switchMode("math"); - var _body5 = this.parseExpression(false, "$"); - this.expect("$", true); - this.switchMode(outerMode); - return new _ParseNode2.default("styling", { - style: "text", - value: _body5 - }, "math"); - } else { - // Defer to parseGivenFunction if it's not a function we handle - return this.parseGivenFunction(start); - } - } - - /** - * Parses an entire function, including its base and all of its arguments. - * It also handles the case where the parsed node is not a function. - * - * @return {?ParseNode} - */ - - }, { - key: "parseFunction", - value: function parseFunction() { - var baseGroup = this.parseGroup(); - return baseGroup ? this.parseGivenFunction(baseGroup) : null; - } - - /** - * Same as parseFunction(), except that the base is provided, guaranteeing a - * non-nullable result. - * - * @param {ParsedFuncOrArgOrDollar} baseGroup - * @return {ParseNode} - */ - - }, { - key: "parseGivenFunction", - value: function parseGivenFunction(baseGroup) { - baseGroup = assertFuncOrArg(baseGroup); - if (baseGroup.type === "fn") { - var func = baseGroup.result; - var funcData = _functions2.default[func]; - if (this.mode === "text" && !funcData.allowedInText) { - throw new _ParseError2.default("Can't use function '" + func + "' in text mode", baseGroup.token); - } else if (this.mode === "math" && funcData.allowedInMath === false) { - throw new _ParseError2.default("Can't use function '" + func + "' in math mode", baseGroup.token); - } - - var _parseArguments2 = this.parseArguments(func, funcData), - args = _parseArguments2.args, - optArgs = _parseArguments2.optArgs; - - var token = baseGroup.token; - var result = this.callFunction(func, args, optArgs, token); - return new _ParseNode2.default(result.type, result, this.mode); - } else { - return baseGroup.result; - } - } - - /** - * Call a function handler with a suitable context and arguments. - * @param {string} name - * @param {Array} args - * @param {Array} optArgs - * @param {Token=} token - */ - - }, { - key: "callFunction", - value: function callFunction(name, args, optArgs, token) { - var context = { - funcName: name, - parser: this, - token: token - }; - return _functions2.default[name].handler(context, args, optArgs); - } - - /** - * Parses the arguments of a function or environment - * - * @param {string} func "\name" or "\begin{name}" - * @param {{ - * numArgs: number, - * numOptionalArgs: (number|undefined), - * }} funcData - * @return {{ - * args: Array, - * optArgs: Array, - * }} - */ - - }, { - key: "parseArguments", - value: function parseArguments(func, funcData) { - var totalArgs = funcData.numArgs + funcData.numOptionalArgs; - if (totalArgs === 0) { - return { args: [], optArgs: [] }; - } - - var baseGreediness = funcData.greediness; - var args = []; - var optArgs = []; - - for (var i = 0; i < totalArgs; i++) { - var argType = funcData.argTypes && funcData.argTypes[i]; - var isOptional = i < funcData.numOptionalArgs; - // Ignore spaces between arguments. As the TeXbook says: - // "After you have said ‘\def\row#1#2{...}’, you are allowed to - // put spaces between the arguments (e.g., ‘\row x n’), because - // TeX doesn’t use single spaces as undelimited arguments." - if (i > 0 && !isOptional) { - this.consumeSpaces(); - } - // Also consume leading spaces in math mode, as parseSymbol - // won't know what to do with them. This can only happen with - // macros, e.g. \frac\foo\foo where \foo expands to a space symbol. - // In LaTeX, the \foo's get treated as (blank) arguments). - // In KaTeX, for now, both spaces will get consumed. - // TODO(edemaine) - if (i === 0 && !isOptional && this.mode === "math") { - this.consumeSpaces(); - } - var nextToken = this.nextToken; - var arg = argType ? this.parseGroupOfType(argType, isOptional) : this.parseGroup(isOptional); - if (!arg) { - if (isOptional) { - optArgs.push(null); - continue; - } - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - arg = newArgument(this.handleUnsupportedCmd(), nextToken); - } else { - throw new _ParseError2.default("Expected group after '" + func + "'", nextToken); - } - } - var argNode = void 0; - arg = assertFuncOrArg(arg); - if (arg.type === "fn") { - var argGreediness = _functions2.default[arg.result].greediness; - if (argGreediness > baseGreediness) { - argNode = this.parseGivenFunction(arg); - } else { - throw new _ParseError2.default("Got function '" + arg.result + "' as " + "argument to '" + func + "'", nextToken); - } - } else { - argNode = arg.result; - } - (isOptional ? optArgs : args).push(argNode); - } - - return { args: args, optArgs: optArgs }; - } - - /** - * Parses a group when the mode is changing. - * - * @return {?ParsedFuncOrArgOrDollar} - */ - - }, { - key: "parseGroupOfType", - value: function parseGroupOfType(innerMode, optional) { - var outerMode = this.mode; - // Handle `original` argTypes - if (innerMode === "original") { - innerMode = outerMode; - } - - if (innerMode === "color") { - return this.parseColorGroup(optional); - } - if (innerMode === "size") { - return this.parseSizeGroup(optional); - } - if (innerMode === "url") { - return this.parseUrlGroup(optional); - } - - // By the time we get here, innerMode is one of "text" or "math". - // We switch the mode of the parser, recurse, then restore the old mode. - this.switchMode(innerMode); - var res = this.parseGroup(optional); - this.switchMode(outerMode); - return res; - } - }, { - key: "consumeSpaces", - value: function consumeSpaces() { - while (this.nextToken.text === " ") { - this.consume(); - } - } - - /** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information. - * - * @param {string} modeName Used to describe the mode in error messages - * @param {boolean=} optional Whether the group is optional or required - * @return {?Token} - */ - - }, { - key: "parseStringGroup", - value: function parseStringGroup(modeName, optional) { - if (optional && this.nextToken.text !== "[") { - return null; - } - var outerMode = this.mode; - this.mode = "text"; - this.expect(optional ? "[" : "{"); - var str = ""; - var firstToken = this.nextToken; - var lastToken = firstToken; - while (this.nextToken.text !== (optional ? "]" : "}")) { - if (this.nextToken.text === "EOF") { - throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str)); - } - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - this.mode = outerMode; - this.expect(optional ? "]" : "}"); - return firstToken.range(lastToken, str); - } - - /** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information, possibly - * with nested braces. - * - * @param {string} modeName Used to describe the mode in error messages - * @param {boolean=} optional Whether the group is optional or required - * @return {?Token} - */ - - }, { - key: "parseStringGroupWithBalancedBraces", - value: function parseStringGroupWithBalancedBraces(modeName, optional) { - if (optional && this.nextToken.text !== "[") { - return null; - } - var outerMode = this.mode; - this.mode = "text"; - this.expect(optional ? "[" : "{"); - var str = ""; - var nest = 0; - var firstToken = this.nextToken; - var lastToken = firstToken; - while (nest > 0 || this.nextToken.text !== (optional ? "]" : "}")) { - if (this.nextToken.text === "EOF") { - throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str)); - } - lastToken = this.nextToken; - str += lastToken.text; - if (lastToken.text === "{") { - nest += 1; - } else if (lastToken.text === "}") { - if (nest <= 0) { - throw new _ParseError2.default("Unbalanced brace of input in " + modeName, firstToken.range(this.nextToken, str)); - } else { - nest -= 1; - } - } - this.consume(); - } - this.mode = outerMode; - this.expect(optional ? "]" : "}"); - return firstToken.range(lastToken, str); - } - - /** - * Parses a regex-delimited group: the largest sequence of tokens - * whose concatenated strings match `regex`. Returns the string - * formed by the tokens plus some position information. - * - * @param {RegExp} regex - * @param {string} modeName Used to describe the mode in error messages - * @return {Token} - */ - - }, { - key: "parseRegexGroup", - value: function parseRegexGroup(regex, modeName) { - var outerMode = this.mode; - this.mode = "text"; - var firstToken = this.nextToken; - var lastToken = firstToken; - var str = ""; - while (this.nextToken.text !== "EOF" && regex.test(str + this.nextToken.text)) { - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - if (str === "") { - throw new _ParseError2.default("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); - } - this.mode = outerMode; - return firstToken.range(lastToken, str); - } - - /** - * Parses a color description. - */ - - }, { - key: "parseColorGroup", - value: function parseColorGroup(optional) { - var res = this.parseStringGroup("color", optional); - if (!res) { - return null; - } - var match = /^(#[a-f0-9]{3}|#[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); - if (!match) { - throw new _ParseError2.default("Invalid color: '" + res.text + "'", res); - } - return newArgument(new _ParseNode2.default("color", match[0], this.mode), res); - } - - /** - * Parses a url string. - */ - - }, { - key: "parseUrlGroup", - value: function parseUrlGroup(optional) { - var res = this.parseStringGroupWithBalancedBraces("url", optional); - if (!res) { - return null; - } - var raw = res.text; - // hyperref package allows backslashes alone in href, but doesn't generate - // valid links in such cases; we interpret this as "undefiend" behaviour, - // and keep them as-is. Some browser will replace backslashes with - // forward slashes. - var url = raw.replace(/\\([#$%&~_^{}])/g, '$1'); - return newArgument(new _ParseNode2.default("url", url, this.mode), res); - } - - /** - * Parses a size specification, consisting of magnitude and unit. - */ - - }, { - key: "parseSizeGroup", - value: function parseSizeGroup(optional) { - var res = void 0; - if (!optional && this.nextToken.text !== "{") { - res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); - } else { - res = this.parseStringGroup("size", optional); - } - if (!res) { - return null; - } - var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); - if (!match) { - throw new _ParseError2.default("Invalid size: '" + res.text + "'", res); - } - var data = { - number: +(match[1] + match[2]), // sign + magnitude, cast to number - unit: match[3] - }; - if (!(0, _units.validUnit)(data)) { - throw new _ParseError2.default("Invalid unit: '" + data.unit + "'", res); - } - return newArgument(new _ParseNode2.default("size", data, this.mode), res); - } - - /** - * If the argument is false or absent, this parses an ordinary group, - * which is either a single nucleus (like "x") or an expression - * in braces (like "{x+y}"). - * If the argument is true, it parses either a bracket-delimited expression - * (like "[x+y]") or returns null to indicate the absence of a - * bracket-enclosed group. - * - * @param {boolean=} optional Whether the group is optional or required - * @return {?ParsedFuncOrArgOrDollar} - */ - - }, { - key: "parseGroup", - value: function parseGroup(optional) { - var firstToken = this.nextToken; - // Try to parse an open brace - if (this.nextToken.text === (optional ? "[" : "{")) { - // If we get a brace, parse an expression - this.consume(); - var expression = this.parseExpression(false, optional ? "]" : "}"); - var lastToken = this.nextToken; - // Make sure we get a close brace - this.expect(optional ? "]" : "}"); - if (this.mode === "text") { - this.formLigatures(expression); - } - return newArgument(new _ParseNode2.default("ordgroup", expression, this.mode, firstToken, lastToken), firstToken.range(lastToken, firstToken.text)); - } else { - // Otherwise, just return a nucleus, or nothing for an optional group - return optional ? null : this.parseSymbol(); - } - } - - /** - * Form ligature-like combinations of characters for text mode. - * This includes inputs like "--", "---", "``" and "''". - * The result will simply replace multiple textord nodes with a single - * character in each value by a single textord node having multiple - * characters in its value. The representation is still ASCII source. - * - * @param {Array.} group the nodes of this group, - * list will be moified in place - */ - - }, { - key: "formLigatures", - value: function formLigatures(group) { - var n = group.length - 1; - for (var i = 0; i < n; ++i) { - var a = group[i]; - var v = a.value; - if (v === "-" && group[i + 1].value === "-") { - if (i + 1 < n && group[i + 2].value === "-") { - group.splice(i, 3, new _ParseNode2.default("textord", "---", "text", a, group[i + 2])); - n -= 2; - } else { - group.splice(i, 2, new _ParseNode2.default("textord", "--", "text", a, group[i + 1])); - n -= 1; - } - } - if ((v === "'" || v === "`") && group[i + 1].value === v) { - group.splice(i, 2, new _ParseNode2.default("textord", v + v, "text", a, group[i + 1])); - n -= 1; - } - } - } - - /** - * Parse a single symbol out of the string. Here, we handle both the functions - * we have defined, as well as the single character symbols - * - * @return {?ParsedFuncOrArgOrDollar} - */ - - }, { - key: "parseSymbol", - value: function parseSymbol() { - var nucleus = this.nextToken; - - if (_functions2.default[nucleus.text]) { - this.consume(); - // If there exists a function with this name, we return the function and - // say that it is a function. - return newFunction(nucleus); - } else if (_symbols2.default[this.mode][nucleus.text]) { - this.consume(); - // Otherwise if this is a no-argument function, find the type it - // corresponds to in the symbols map - return newArgument(new _ParseNode2.default(_symbols2.default[this.mode][nucleus.text].group, nucleus.text, this.mode, nucleus), nucleus); - } else if (this.mode === "text" && _unicodeRegexes.cjkRegex.test(nucleus.text)) { - this.consume(); - return newArgument(new _ParseNode2.default("textord", nucleus.text, this.mode, nucleus), nucleus); - } else if (nucleus.text === "$") { - return newDollar(nucleus); - } else if (/^\\verb[^a-zA-Z]/.test(nucleus.text)) { - this.consume(); - var arg = nucleus.text.slice(5); - var star = arg.charAt(0) === "*"; - if (star) { - arg = arg.slice(1); - } - // Lexer's tokenRegex is constructed to always have matching - // first/last characters. - if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { - throw new _ParseError2.default("\\verb assertion failed --\n please report what input caused this bug"); - } - arg = arg.slice(1, -1); // remove first and last char - return newArgument(new _ParseNode2.default("verb", { - body: arg, - star: star - }, "text"), nucleus); - } else { - return null; - } - } - }]); - return Parser; -}(); - -Parser.endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; -Parser.SUPSUB_GREEDINESS = 1; -Parser.sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; -Parser.styleFuncs = ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"]; -Parser.oldFontFuncs = { - "\\rm": "mathrm", - "\\sf": "mathsf", - "\\tt": "mathtt", - "\\bf": "mathbf", - "\\it": "mathit" - //"\\sl": "textsl", - //"\\sc": "textsc", -}; -exports.default = Parser; - -},{"./MacroExpander":82,"./ParseError":84,"./ParseNode":85,"./environments":99,"./functions":103,"./symbols":125,"./unicodeRegexes":126,"./units":127,"./utils":128,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],87:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * The main Settings object - * - * The current options stored are: - * - displayMode: Whether the expression should be typeset as inline math - * (false, the default), meaning that the math starts in - * \textstyle and is placed in an inline-block); or as display - * math (true), meaning that the math starts in \displaystyle - * and is placed in a block with vertical margin. - */ -var Settings = function Settings(options) { - (0, _classCallCheck3.default)(this, Settings); - - // allow null options - options = options || {}; - this.displayMode = _utils2.default.deflt(options.displayMode, false); - this.throwOnError = _utils2.default.deflt(options.throwOnError, true); - this.errorColor = _utils2.default.deflt(options.errorColor, "#cc0000"); - this.macros = options.macros || {}; - this.colorIsTextColor = _utils2.default.deflt(options.colorIsTextColor, false); - this.maxSize = Math.max(0, _utils2.default.deflt(options.maxSize, Infinity)); -}; -/** - * This is a module for storing settings passed into KaTeX. It correctly handles - * default settings. - */ - -exports.default = Settings; - -},{"./utils":128,"babel-runtime/helpers/classCallCheck":8}],88:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _freeze = require("babel-runtime/core-js/object/freeze"); - -var _freeze2 = _interopRequireDefault(_freeze); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Lexing or parsing positional information for error reporting. - * This object is immutable. - */ -var SourceLocation = function () { - // End offset, zero-based exclusive. - - // Lexer holding the input string. - function SourceLocation(lexer, start, end) { - (0, _classCallCheck3.default)(this, SourceLocation); - - this.lexer = lexer; - this.start = start; - this.end = end; - (0, _freeze2.default)(this); // Immutable to allow sharing in range(). - } - - /** - * Merges two `SourceLocation`s from location providers, given they are - * provided in order of appearance. - * - Returns the first one's location if only the first is provided. - * - Returns a merged range of the first and the last if both are provided - * and their lexers match. - * - Otherwise, returns null. - */ - // Start offset, zero-based inclusive. - - - (0, _createClass3.default)(SourceLocation, null, [{ - key: "range", - value: function range(first, second) { - if (!second) { - return first && first.loc; - } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { - return null; - } else { - return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); - } - } - }]); - return SourceLocation; -}(); - -exports.default = SourceLocation; - -},{"babel-runtime/core-js/object/freeze":7,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],89:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This file contains information and classes for the various kinds of styles - * used in TeX. It provides a generic `Style` class, which holds information - * about a specific style. It then provides instances of all the different kinds - * of styles possible, and provides functions to move between them and get - * information about them. - */ - -/** - * The main style class. Contains a unique id for the style, a size (which is - * the same for cramped and uncramped version of a style), and a cramped flag. - */ -var Style = function () { - function Style(id, size, cramped) { - (0, _classCallCheck3.default)(this, Style); - - this.id = id; - this.size = size; - this.cramped = cramped; - } - - /** - * Get the style of a superscript given a base in the current style. - */ - - - (0, _createClass3.default)(Style, [{ - key: "sup", - value: function sup() { - return styles[_sup[this.id]]; - } - - /** - * Get the style of a subscript given a base in the current style. - */ - - }, { - key: "sub", - value: function sub() { - return styles[_sub[this.id]]; - } - - /** - * Get the style of a fraction numerator given the fraction in the current - * style. - */ - - }, { - key: "fracNum", - value: function fracNum() { - return styles[_fracNum[this.id]]; - } - - /** - * Get the style of a fraction denominator given the fraction in the current - * style. - */ - - }, { - key: "fracDen", - value: function fracDen() { - return styles[_fracDen[this.id]]; - } - - /** - * Get the cramped version of a style (in particular, cramping a cramped style - * doesn't change the style). - */ - - }, { - key: "cramp", - value: function cramp() { - return styles[_cramp[this.id]]; - } - - /** - * Get a text or display version of this style. - */ - - }, { - key: "text", - value: function text() { - return styles[_text[this.id]]; - } - - /** - * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) - */ - - }, { - key: "isTight", - value: function isTight() { - return this.size >= 2; - } - }]); - return Style; -}(); - -// Export an interface for type checking, but don't expose the implementation. -// This way, no more styles can be generated. - - -// IDs of the different styles -var D = 0; -var Dc = 1; -var T = 2; -var Tc = 3; -var S = 4; -var Sc = 5; -var SS = 6; -var SSc = 7; - -// Instances of the different styles -var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; - -// Lookup tables for switching from one style to another -var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; -var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; -var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; -var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; -var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; -var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; - -// We only export some of the styles. -exports.default = { - DISPLAY: styles[D], - TEXT: styles[T], - SCRIPT: styles[S], - SCRIPTSCRIPT: styles[SS] -}; - -},{"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],90:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Token = undefined; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _SourceLocation = require("./SourceLocation"); - -var _SourceLocation2 = _interopRequireDefault(_SourceLocation); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * The resulting token returned from `lex`. - * - * It consists of the token text plus some position information. - * The position information is essentially a range in an input string, - * but instead of referencing the bare input string, we refer to the lexer. - * That way it is possible to attach extra metadata to the input string, - * like for example a file name or similar. - * - * The position information is optional, so it is OK to construct synthetic - * tokens if appropriate. Not providing available position information may - * lead to degraded error reporting, though. - */ - - -/** - * Interface required to break circular dependency between Token, Lexer, and - * ParseError. - */ -var Token = exports.Token = function () { - function Token(text, // the text of this token - loc) { - (0, _classCallCheck3.default)(this, Token); - - this.text = text; - this.loc = loc; - } - - /** - * Given a pair of tokens (this and endToken), compute a `Token` encompassing - * the whole input range enclosed by these two. - */ - - - (0, _createClass3.default)(Token, [{ - key: "range", - value: function range(endToken, // last token of the range, inclusive - text) // the text of the newly constructed token - { - return new Token(text, _SourceLocation2.default.range(this, endToken)); - } - }]); - return Token; -}(); - -},{"./SourceLocation":88,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],91:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _domTree = require("./domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _fontMetrics = require("./fontMetrics"); - -var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - -var _symbols = require("./symbols"); - -var _symbols2 = _interopRequireDefault(_symbols); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _stretchy = require("./stretchy"); - -var _stretchy2 = _interopRequireDefault(_stretchy); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// The following have to be loaded from Main-Italic font, using class mainit -var mainitLetters = ["\\imath", // dotless i -"\\jmath", // dotless j -"\\pounds"]; - -/** - * Looks up the given symbol in fontMetrics, after applying any symbol - * replacements defined in symbol.js - */ - -/* eslint no-console:0 */ -/** - * This module contains general functions that can be used for building - * different kinds of domTree nodes in a consistent manner. - */ - -var lookupSymbol = function lookupSymbol(value, -// TODO(#963): Use a union type for this. -fontFamily, mode) { - // Replace the value with its replaced value from symbol.js - if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { - value = _symbols2.default[mode][value].replace; - } - return { - value: value, - metrics: _fontMetrics2.default.getCharacterMetrics(value, fontFamily) - }; -}; - -/** - * Makes a symbolNode after translation via the list of symbols in symbols.js. - * Correctly pulls out metrics for the character, and optionally takes a list of - * classes to be attached to the node. - * - * TODO: make argument order closer to makeSpan - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - * TODO(#953): Make `options` mandatory and always pass it in. - */ -var makeSymbol = function makeSymbol(value, fontFamily, mode, options, classes) { - var lookup = lookupSymbol(value, fontFamily, mode); - var metrics = lookup.metrics; - value = lookup.value; - - var symbolNode = void 0; - if (metrics) { - var italic = metrics.italic; - if (mode === "text") { - italic = 0; - } - symbolNode = new _domTree2.default.symbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, classes); - } else { - // TODO(emily): Figure out a good way to only print this in development - typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontFamily + "'"); - symbolNode = new _domTree2.default.symbolNode(value, 0, 0, 0, 0, classes); - } - - if (options) { - symbolNode.maxFontSize = options.sizeMultiplier; - if (options.style.isTight()) { - symbolNode.classes.push("mtight"); - } - var color = options.getColor(); - if (color) { - symbolNode.style.color = color; - } - } - - return symbolNode; -}; - -/** - * Makes a symbol in Main-Regular or AMS-Regular. - * Used for rel, bin, open, close, inner, and punct. - * - * TODO(#953): Make `options` mandatory and always pass it in. - */ -var mathsym = function mathsym(value, mode, options) { - var classes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; - - // Decide what font to render the symbol in by its entry in the symbols - // table. - // Have a special case for when the value = \ because the \ is used as a - // textord in unsupported command errors but cannot be parsed as a regular - // text ordinal and is therefore not present as a symbol in the symbols - // table for text - if (value === "\\" || _symbols2.default[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, options, classes); - } else { - return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); - } -}; - -/** - * Makes a symbol in the default font for mathords and textords. - */ -var mathDefault = function mathDefault(value, mode, options, classes, type) { - if (type === "mathord") { - var fontLookup = mathit(value, mode, options, classes); - return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass])); - } else if (type === "textord") { - var font = _symbols2.default[mode][value] && _symbols2.default[mode][value].font; - if (font === "ams") { - return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); - } else { - // if (font === "main") { - return makeSymbol(value, "Main-Regular", mode, options, classes.concat(["mathrm"])); - } - } else { - throw new Error("unexpected type: " + type + " in mathDefault"); - } -}; - -/** - * Determines which of the two font names (Main-Italic and Math-Italic) and - * corresponding style tags (mainit or mathit) to use for font "mathit", - * depending on the symbol. Use this function instead of fontMap for font - * "mathit". - */ -var mathit = function mathit(value, mode, options, classes) { - if (/[0-9]/.test(value.charAt(0)) || - // glyphs for \imath and \jmath do not exist in Math-Italic so we - // need to use Main-Italic instead - _utils2.default.contains(mainitLetters, value)) { - return { - fontName: "Main-Italic", - fontClass: "mainit" - }; - } else { - return { - fontName: "Math-Italic", - fontClass: "mathit" - }; - } -}; - -/** - * Makes either a mathord or textord in the correct font and color. - */ -var makeOrd = function makeOrd(group, options, type) { - var mode = group.mode; - var value = group.value; - - var classes = ["mord"]; - - var font = options.font; - if (font) { - var fontLookup = void 0; - if (font === "mathit" || _utils2.default.contains(mainitLetters, value)) { - fontLookup = mathit(value, mode, options, classes); - } else { - fontLookup = fontMap[font]; - } - if (lookupSymbol(value, fontLookup.fontName, mode).metrics) { - return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass || font])); - } else { - return mathDefault(value, mode, options, classes, type); - } - } else { - return mathDefault(value, mode, options, classes, type); - } -}; - -/** - * Combine as many characters as possible in the given array of characters - * via their tryCombine method. - */ -var tryCombineChars = function tryCombineChars(chars) { - for (var i = 0; i < chars.length - 1; i++) { - if (chars[i].tryCombine(chars[i + 1])) { - chars.splice(i + 1, 1); - i--; - } - } - return chars; -}; - -/** - * Calculate the height, depth, and maxFontSize of an element based on its - * children. - */ -var sizeElementFromChildren = function sizeElementFromChildren(elem) { - var height = 0; - var depth = 0; - var maxFontSize = 0; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(elem.children), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var child = _step.value; - - if (child.height > height) { - height = child.height; - } - if (child.depth > depth) { - depth = child.depth; - } - if (child.maxFontSize > maxFontSize) { - maxFontSize = child.maxFontSize; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - elem.height = height; - elem.depth = depth; - elem.maxFontSize = maxFontSize; -}; - -/** - * Makes a span with the given list of classes, list of children, and options. - * - * TODO(#953): Ensure that `options` is always provided (currently some call - * sites don't pass it) and make the type below mandatory. - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - */ -var makeSpan = function makeSpan(classes, children, options) { - var span = new _domTree2.default.span(classes, children, options); - - sizeElementFromChildren(span); - - return span; -}; - -var makeLineSpan = function makeLineSpan(className, options) { - // Fill the entire span instead of just a border. That way, the min-height - // value in katex.less will ensure that at least one screen pixel displays. - var line = _stretchy2.default.ruleSpan(className, options); - line.height = options.fontMetrics().defaultRuleThickness; - line.style.height = line.height + "em"; - line.maxFontSize = 1.0; - return line; -}; - -/** - * Makes an anchor with the given href, list of classes, list of children, - * and options. - */ -var makeAnchor = function makeAnchor(href, classes, children, options) { - var anchor = new _domTree2.default.anchor(href, classes, children, options); - - sizeElementFromChildren(anchor); - - return anchor; -}; - -/** - * Prepends the given children to the given span, updating height, depth, and - * maxFontSize. - */ -var prependChildren = function prependChildren(span, children) { - span.children = children.concat(span.children); - - sizeElementFromChildren(span); -}; - -/** - * Makes a document fragment with the given list of children. - */ -var makeFragment = function makeFragment(children) { - var fragment = new _domTree2.default.documentFragment(children); - - sizeElementFromChildren(fragment); - - return fragment; -}; - -// These are exact object types to catch typos in the names of the optional fields. - - -// A list of child or kern nodes to be stacked on top of each other (i.e. the -// first element will be at the bottom, and the last at the top). - - -// Computes the updated `children` list and the overall depth. -// -// This helper function for makeVList makes it easier to enforce type safety by -// allowing early exits (returns) in the logic. -var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { - if (params.positionType === "individualShift") { - var oldChildren = params.children; - var _children = [oldChildren[0]]; - - // Add in kerns to the list of params.children to get each element to be - // shifted to the correct specified shift - var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; - var currPos = _depth; - for (var i = 1; i < oldChildren.length; i++) { - var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; - var _size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); - - currPos = currPos + diff; - - _children.push({ type: "kern", size: _size }); - _children.push(oldChildren[i]); - } - - return { children: _children, depth: _depth }; - } - - var depth = void 0; - if (params.positionType === "top") { - // We always start at the bottom, so calculate the bottom by adding up - // all the sizes - var bottom = params.positionData; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = (0, _getIterator3.default)(params.children), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var child = _step2.value; - - bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - depth = bottom; - } else if (params.positionType === "bottom") { - depth = -params.positionData; - } else { - var firstChild = params.children[0]; - if (firstChild.type !== "elem") { - throw new Error('First child must have type "elem".'); - } - if (params.positionType === "shift") { - depth = -firstChild.elem.depth - params.positionData; - } else if (params.positionType === "firstBaseline") { - depth = -firstChild.elem.depth; - } else { - throw new Error("Invalid positionType " + params.positionType + "."); - } - } - return { children: params.children, depth: depth }; -}; - -/** - * Makes a vertical list by stacking elements and kerns on top of each other. - * Allows for many different ways of specifying the positioning method. - * - * See VListParam documentation above. - */ -var makeVList = function makeVList(params, options) { - var _getVListChildrenAndD = getVListChildrenAndDepth(params), - children = _getVListChildrenAndD.children, - depth = _getVListChildrenAndD.depth; - - // Create a strut that is taller than any list item. The strut is added to - // each item, where it will determine the item's baseline. Since it has - // `overflow:hidden`, the strut's top edge will sit on the item's line box's - // top edge and the strut's bottom edge will sit on the item's baseline, - // with no additional line-height spacing. This allows the item baseline to - // be positioned precisely without worrying about font ascent and - // line-height. - - - var pstrutSize = 0; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = (0, _getIterator3.default)(children), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var child = _step3.value; - - if (child.type === "elem") { - var _elem = child.elem; - pstrutSize = Math.max(pstrutSize, _elem.maxFontSize, _elem.height); - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - pstrutSize += 2; - var pstrut = makeSpan(["pstrut"], []); - pstrut.style.height = pstrutSize + "em"; - - // Create a new list of actual children at the correct offsets - var realChildren = []; - var minPos = depth; - var maxPos = depth; - var currPos = depth; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = (0, _getIterator3.default)(children), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var _child = _step4.value; - - if (_child.type === "kern") { - currPos += _child.size; - } else { - var _elem2 = _child.elem; - - var childWrap = makeSpan([], [pstrut, _elem2]); - childWrap.style.top = -pstrutSize - currPos - _elem2.depth + "em"; - if (_child.marginLeft) { - childWrap.style.marginLeft = _child.marginLeft; - } - if (_child.marginRight) { - childWrap.style.marginRight = _child.marginRight; - } - - realChildren.push(childWrap); - currPos += _elem2.height + _elem2.depth; - } - minPos = Math.min(minPos, currPos); - maxPos = Math.max(maxPos, currPos); - } - - // The vlist contents go in a table-cell with `vertical-align:bottom`. - // This cell's bottom edge will determine the containing table's baseline - // without overly expanding the containing line-box. - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - var vlist = makeSpan(["vlist"], realChildren); - vlist.style.height = maxPos + "em"; - - // A second row is used if necessary to represent the vlist's depth. - var rows = void 0; - if (minPos < 0) { - var depthStrut = makeSpan(["vlist"], []); - depthStrut.style.height = -minPos + "em"; - - // Safari wants the first row to have inline content; otherwise it - // puts the bottom of the *second* row on the baseline. - var topStrut = makeSpan(["vlist-s"], [new _domTree2.default.symbolNode("\u200B")]); - - rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; - } else { - rows = [makeSpan(["vlist-r"], [vlist])]; - } - - var vtable = makeSpan(["vlist-t"], rows); - if (rows.length === 2) { - vtable.classes.push("vlist-t2"); - } - vtable.height = maxPos; - vtable.depth = -minPos; - return vtable; -}; - -// Converts verb group into body string, dealing with \verb* form -var makeVerb = function makeVerb(group, options) { - // TODO(#892): Make ParseNode type-safe and confirm `group.type` to guarantee - // that `group.value.body` is of type string. - var text = group.value.body; - if (group.value.star) { - text = text.replace(/ /g, "\u2423"); // Open Box - } else { - text = text.replace(/ /g, '\xA0'); // No-Break Space - // (so that, in particular, spaces don't coalesce) - } - return text; -}; - -// A map of spacing functions to their attributes, like size and corresponding -// CSS class -var spacingFunctions = { - "\\qquad": { - size: "2em", - className: "qquad" - }, - "\\quad": { - size: "1em", - className: "quad" - }, - "\\enspace": { - size: "0.5em", - className: "enspace" - }, - "\\;": { - size: "0.277778em", - className: "thickspace" - }, - "\\:": { - size: "0.22222em", - className: "mediumspace" - }, - "\\,": { - size: "0.16667em", - className: "thinspace" - }, - "\\!": { - size: "-0.16667em", - className: "negativethinspace" - } -}; - -/** - * Maps TeX font commands to objects containing: - * - variant: string used for "mathvariant" attribute in buildMathML.js - * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics - */ -// A map between tex font commands an MathML mathvariant attribute values -var fontMap = { - // styles - "mathbf": { - variant: "bold", - fontName: "Main-Bold" - }, - "mathrm": { - variant: "normal", - fontName: "Main-Regular" - }, - "textit": { - variant: "italic", - fontName: "Main-Italic" - }, - - // "mathit" is missing because it requires the use of two fonts: Main-Italic - // and Math-Italic. This is handled by a special case in makeOrd which ends - // up calling mathit. - - // families - "mathbb": { - variant: "double-struck", - fontName: "AMS-Regular" - }, - "mathcal": { - variant: "script", - fontName: "Caligraphic-Regular" - }, - "mathfrak": { - variant: "fraktur", - fontName: "Fraktur-Regular" - }, - "mathscr": { - variant: "script", - fontName: "Script-Regular" - }, - "mathsf": { - variant: "sans-serif", - fontName: "SansSerif-Regular" - }, - "mathtt": { - variant: "monospace", - fontName: "Typewriter-Regular" - } -}; - -exports.default = { - fontMap: fontMap, - makeSymbol: makeSymbol, - mathsym: mathsym, - makeSpan: makeSpan, - makeLineSpan: makeLineSpan, - makeAnchor: makeAnchor, - makeFragment: makeFragment, - makeVList: makeVList, - makeOrd: makeOrd, - makeVerb: makeVerb, - tryCombineChars: tryCombineChars, - prependChildren: prependChildren, - spacingFunctions: spacingFunctions -}; - -},{"./domTree":98,"./fontMetrics":101,"./stretchy":123,"./symbols":125,"./utils":128,"babel-runtime/core-js/get-iterator":3}],92:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.buildGroup = exports.groupTypes = exports.makeNullDelimiter = exports.getTypeOfDomTree = exports.buildExpression = exports.spliceSpaces = undefined; - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -exports.default = buildHTML; - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _Style = require("./Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _buildCommon = require("./buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _delimiter = require("./delimiter"); - -var _delimiter2 = _interopRequireDefault(_delimiter); - -var _domTree = require("./domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _units = require("./units"); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _stretchy = require("./stretchy"); - -var _stretchy2 = _interopRequireDefault(_stretchy); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * WARNING: New methods on groupTypes should be added to src/functions. - * - * This file does the main work of building a domTree structure from a parse - * tree. The entry point is the `buildHTML` function, which takes a parse tree. - * Then, the buildExpression, buildGroup, and various groupTypes functions are - * called, to produce a final HTML tree. - */ - -var makeSpan = _buildCommon2.default.makeSpan; - -var isSpace = function isSpace(node) { - return node instanceof _domTree2.default.span && node.classes[0] === "mspace"; -}; - -// Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) -// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, -// and the text before Rule 19. -var isBin = function isBin(node) { - return node && node.classes[0] === "mbin"; -}; - -var isBinLeftCanceller = function isBinLeftCanceller(node, isRealGroup) { - // TODO: This code assumes that a node's math class is the first element - // of its `classes` array. A later cleanup should ensure this, for - // instance by changing the signature of `makeSpan`. - if (node) { - return _utils2.default.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], node.classes[0]); - } else { - return isRealGroup; - } -}; - -var isBinRightCanceller = function isBinRightCanceller(node, isRealGroup) { - if (node) { - return _utils2.default.contains(["mrel", "mclose", "mpunct"], node.classes[0]); - } else { - return isRealGroup; - } -}; - -/** - * Splice out any spaces from `children` starting at position `i`, and return - * the spliced-out array. Returns null if `children[i]` does not exist or is not - * a space. - */ -var spliceSpaces = exports.spliceSpaces = function spliceSpaces(children, i) { - var j = i; - while (j < children.length && isSpace(children[j])) { - j++; - } - if (j === i) { - return null; - } else { - return children.splice(i, j - i); - } -}; - -/** - * Take a list of nodes, build them in order, and return a list of the built - * nodes. documentFragments are flattened into their contents, so the - * returned list contains no fragments. `isRealGroup` is true if `expression` - * is a real group (no atoms will be added on either side), as opposed to - * a partial group (e.g. one created by \color). - */ -var buildExpression = exports.buildExpression = function buildExpression(expression, options, isRealGroup) { - // Parse expressions into `groups`. - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - var output = buildGroup(group, options); - if (output instanceof _domTree2.default.documentFragment) { - Array.prototype.push.apply(groups, output.children); - } else { - groups.push(output); - } - } - // At this point `groups` consists entirely of `symbolNode`s and `span`s. - - // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom - // spacing (e.g., "add thick space between mord and mrel"). Since CSS - // adjacency rules implement atom spacing, spaces should be invisible to - // CSS. So we splice them out of `groups` and into the atoms themselves. - for (var _i = 0; _i < groups.length; _i++) { - var spaces = spliceSpaces(groups, _i); - if (spaces) { - // Splicing of spaces may have removed all remaining groups. - if (_i < groups.length) { - // If there is a following group, move space within it. - if (groups[_i] instanceof _domTree2.default.symbolNode) { - groups[_i] = makeSpan([].concat(groups[_i].classes), [groups[_i]]); - } - _buildCommon2.default.prependChildren(groups[_i], spaces); - } else { - // Otherwise, put any spaces back at the end of the groups. - Array.prototype.push.apply(groups, spaces); - break; - } - } - } - - // Binary operators change to ordinary symbols in some contexts. - for (var _i2 = 0; _i2 < groups.length; _i2++) { - if (isBin(groups[_i2]) && (isBinLeftCanceller(groups[_i2 - 1], isRealGroup) || isBinRightCanceller(groups[_i2 + 1], isRealGroup))) { - groups[_i2].classes[0] = "mord"; - } - } - - // Process \\not commands within the group. - // TODO(kevinb): Handle multiple \\not commands in a row. - // TODO(kevinb): Handle \\not{abc} correctly. The \\not should appear over - // the 'a' instead of the 'c'. - for (var _i3 = 0; _i3 < groups.length; _i3++) { - if (groups[_i3].value === "\u0338" && _i3 + 1 < groups.length) { - var children = groups.slice(_i3, _i3 + 2); - - children[0].classes = ["mainrm"]; - // \u0338 is a combining glyph so we could reorder the children so - // that it comes after the other glyph. This works correctly on - // most browsers except for Safari. Instead we absolutely position - // the glyph and set its right side to match that of the other - // glyph which is visually equivalent. - children[0].style.position = "absolute"; - children[0].style.right = "0"; - - // Copy the classes from the second glyph to the new container. - // This is so it behaves the same as though there was no \\not. - var classes = groups[_i3 + 1].classes; - var container = makeSpan(classes, children); - - // LaTeX adds a space between ords separated by a \\not. - if (classes.indexOf("mord") !== -1) { - // \glue(\thickmuskip) 2.77771 plus 2.77771 - container.style.paddingLeft = "0.277771em"; - } - - // Ensure that the \u0338 is positioned relative to the container. - container.style.position = "relative"; - groups.splice(_i3, 2, container); - } - } - - return groups; -}; - -// Return math atom class (mclass) of a domTree. -var getTypeOfDomTree = exports.getTypeOfDomTree = function getTypeOfDomTree(node) { - if (node instanceof _domTree2.default.documentFragment) { - if (node.children.length) { - return getTypeOfDomTree(node.children[node.children.length - 1]); - } - } else { - if (_utils2.default.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", "mpunct", "minner"], node.classes[0])) { - return node.classes[0]; - } - } - return null; -}; - -/** - * Sometimes, groups perform special rules when they have superscripts or - * subscripts attached to them. This function lets the `supsub` group know that - * its inner element should handle the superscripts and subscripts instead of - * handling them itself. - */ -var shouldHandleSupSub = function shouldHandleSupSub(group, options) { - if (!group.value.base) { - return false; - } else { - var base = group.value.base; - if (base.type === "op") { - // Operators handle supsubs differently when they have limits - // (e.g. `\displaystyle\sum_2^3`) - return base.value.limits && (options.style.size === _Style2.default.DISPLAY.size || base.value.alwaysHandleSupSub); - } else if (base.type === "accent") { - return isCharacterBox(base.value.base); - } else if (base.type === "horizBrace") { - var isSup = group.value.sub ? false : true; - return isSup === base.value.isOver; - } else { - return null; - } - } -}; - -/** - * Sometimes we want to pull out the innermost element of a group. In most - * cases, this will just be the group itself, but when ordgroups and colors have - * a single element, we want to pull that out. - */ -var getBaseElem = function getBaseElem(group) { - if (!group) { - return false; - } else if (group.type === "ordgroup") { - if (group.value.length === 1) { - return getBaseElem(group.value[0]); - } else { - return group; - } - } else if (group.type === "color") { - if (group.value.value.length === 1) { - return getBaseElem(group.value.value[0]); - } else { - return group; - } - } else if (group.type === "font") { - return getBaseElem(group.value.body); - } else { - return group; - } -}; - -/** - * TeXbook algorithms often reference "character boxes", which are simply groups - * with a single character in them. To decide if something is a character box, - * we find its innermost group, and see if it is a single character. - */ -var isCharacterBox = function isCharacterBox(group) { - var baseElem = getBaseElem(group); - - // These are all they types of groups which hold single characters - return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "bin" || baseElem.type === "rel" || baseElem.type === "inner" || baseElem.type === "open" || baseElem.type === "close" || baseElem.type === "punct"; -}; - -var makeNullDelimiter = exports.makeNullDelimiter = function makeNullDelimiter(options, classes) { - var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); - return makeSpan(classes.concat(moreClasses)); -}; - -/** - * This is a map of group types to the function used to handle that type. - * Simpler types come at the beginning, while complicated types come afterwards. - */ -var groupTypes = exports.groupTypes = {}; - -groupTypes.mathord = function (group, options) { - return _buildCommon2.default.makeOrd(group, options, "mathord"); -}; - -groupTypes.textord = function (group, options) { - return _buildCommon2.default.makeOrd(group, options, "textord"); -}; - -groupTypes.bin = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mbin"]); -}; - -groupTypes.rel = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mrel"]); -}; - -groupTypes.open = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mopen"]); -}; - -groupTypes.close = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mclose"]); -}; - -groupTypes.inner = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["minner"]); -}; - -groupTypes.punct = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mpunct"]); -}; - -groupTypes.ordgroup = function (group, options) { - return makeSpan(["mord"], buildExpression(group.value, options, true), options); -}; - -groupTypes.supsub = function (group, options) { - // Superscript and subscripts are handled in the TeXbook on page - // 445-446, rules 18(a-f). - - // Here is where we defer to the inner group if it should handle - // superscripts and subscripts itself. - if (shouldHandleSupSub(group, options)) { - return groupTypes[group.value.base.type](group, options); - } - - var base = buildGroup(group.value.base, options); - var supm = void 0; - var subm = void 0; - - var metrics = options.fontMetrics(); - var newOptions = void 0; - - // Rule 18a - var supShift = 0; - var subShift = 0; - - if (group.value.sup) { - newOptions = options.havingStyle(options.style.sup()); - supm = buildGroup(group.value.sup, newOptions, options); - if (!isCharacterBox(group.value.base)) { - supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - if (group.value.sub) { - newOptions = options.havingStyle(options.style.sub()); - subm = buildGroup(group.value.sub, newOptions, options); - if (!isCharacterBox(group.value.base)) { - subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - // Rule 18c - var minSupShift = void 0; - if (options.style === _Style2.default.DISPLAY) { - minSupShift = metrics.sup1; - } else if (options.style.cramped) { - minSupShift = metrics.sup3; - } else { - minSupShift = metrics.sup2; - } - - // scriptspace is a font-size-independent size, so scale it - // appropriately - var multiplier = options.sizeMultiplier; - var scriptspace = 0.5 / metrics.ptPerEm / multiplier + "em"; - - var supsub = void 0; - if (!group.value.sup) { - // Rule 18b - subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); - - var vlistElem = [{ type: "elem", elem: subm, marginRight: scriptspace }]; - // Subscripts shouldn't be shifted by the base's italic correction. - // Account for that by shifting the subscript back the appropriate - // amount. Note we only do this when the base is a single symbol. - if (base instanceof _domTree2.default.symbolNode) { - vlistElem[0].marginLeft = -base.italic + "em"; - } - - supsub = _buildCommon2.default.makeVList({ - positionType: "shift", - positionData: subShift, - children: vlistElem - }, options); - } else if (!group.value.sub) { - // Rule 18c, d - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - - supsub = _buildCommon2.default.makeVList({ - positionType: "shift", - positionData: -supShift, - children: [{ type: "elem", elem: supm, marginRight: scriptspace }] - }, options); - } else { - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - subShift = Math.max(subShift, metrics.sub2); - - var ruleWidth = metrics.defaultRuleThickness; - - // Rule 18e - if (supShift - supm.depth - (subm.height - subShift) < 4 * ruleWidth) { - subShift = 4 * ruleWidth - (supShift - supm.depth) + subm.height; - var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); - if (psi > 0) { - supShift += psi; - subShift -= psi; - } - } - - var _vlistElem = [{ type: "elem", elem: subm, shift: subShift, marginRight: scriptspace }, { type: "elem", elem: supm, shift: -supShift, marginRight: scriptspace }]; - // See comment above about subscripts not being shifted - if (base instanceof _domTree2.default.symbolNode) { - _vlistElem[0].marginLeft = -base.italic + "em"; - } - - supsub = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: _vlistElem - }, options); - } - - // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align - var mclass = getTypeOfDomTree(base) || "mord"; - return makeSpan([mclass], [base, makeSpan(["msupsub"], [supsub])], options); -}; - -groupTypes.spacing = function (group, options) { - if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { - // Spaces are generated by adding an actual space. Each of these - // things has an entry in the symbols table, so these will be turned - // into appropriate outputs. - if (group.mode === "text") { - return _buildCommon2.default.makeOrd(group, options, "textord"); - } else { - return makeSpan(["mspace"], [_buildCommon2.default.mathsym(group.value, group.mode, options)], options); - } - } else { - // Other kinds of spaces are of arbitrary width. We use CSS to - // generate these. - return makeSpan(["mspace", _buildCommon2.default.spacingFunctions[group.value].className], [], options); - } -}; - -groupTypes.sqrt = function (group, options) { - // Square roots are handled in the TeXbook pg. 443, Rule 11. - - // First, we do the same steps as in overline to build the inner group - // and line - var inner = buildGroup(group.value.body, options.havingCrampedStyle()); - if (inner.height === 0) { - // Render a small surd. - inner.height = options.fontMetrics().xHeight; - } - - // Some groups can return document fragments. Handle those by wrapping - // them in a span. - if (inner instanceof _domTree2.default.documentFragment) { - inner = makeSpan([], [inner], options); - } - - // Calculate the minimum size for the \surd delimiter - var metrics = options.fontMetrics(); - var theta = metrics.defaultRuleThickness; - - var phi = theta; - if (options.style.id < _Style2.default.TEXT.id) { - phi = options.fontMetrics().xHeight; - } - - // Calculate the clearance between the body and line - var lineClearance = theta + phi / 4; - - var minDelimiterHeight = (inner.height + inner.depth + lineClearance + theta) * options.sizeMultiplier; - - // Create a sqrt SVG of the required minimum size - - var _delimiter$sqrtImage = _delimiter2.default.sqrtImage(minDelimiterHeight, options), - img = _delimiter$sqrtImage.span, - ruleWidth = _delimiter$sqrtImage.ruleWidth; - - var delimDepth = img.height - ruleWidth; - - // Adjust the clearance based on the delimiter size - if (delimDepth > inner.height + inner.depth + lineClearance) { - lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; - } - - // Shift the sqrt image - var imgShift = img.height - inner.height - lineClearance - ruleWidth; - - inner.style.paddingLeft = img.advanceWidth + "em"; - - // Overlay the image and the argument. - var body = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: inner }, { type: "kern", size: -(inner.height + imgShift) }, { type: "elem", elem: img }, { type: "kern", size: ruleWidth }] - }, options); - body.children[0].children[0].classes.push("svg-align"); - - if (!group.value.index) { - return makeSpan(["mord", "sqrt"], [body], options); - } else { - // Handle the optional root index - - // The index is always in scriptscript style - var newOptions = options.havingStyle(_Style2.default.SCRIPTSCRIPT); - var rootm = buildGroup(group.value.index, newOptions, options); - - // The amount the index is shifted by. This is taken from the TeX - // source, in the definition of `\r@@t`. - var toShift = 0.6 * (body.height - body.depth); - - // Build a VList with the superscript shifted up correctly - var rootVList = _buildCommon2.default.makeVList({ - positionType: "shift", - positionData: -toShift, - children: [{ type: "elem", elem: rootm }] - }, options); - // Add a class surrounding it so we can add on the appropriate - // kerning - var rootVListWrap = makeSpan(["root"], [rootVList]); - - return makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); - } -}; - -function sizingGroup(value, options, baseOptions) { - var inner = buildExpression(value, options, false); - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; - - // Add size-resetting classes to the inner list and set maxFontSize - // manually. Handle nested size changes. - for (var i = 0; i < inner.length; i++) { - var pos = _utils2.default.indexOf(inner[i].classes, "sizing"); - if (pos < 0) { - Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); - } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { - // This is a nested size change: e.g., inner[i] is the "b" in - // `\Huge a \small b`. Override the old size (the `reset-` class) - // but not the new size. - inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; - } - - inner[i].height *= multiplier; - inner[i].depth *= multiplier; - } - - return _buildCommon2.default.makeFragment(inner); -} - -groupTypes.sizing = function (group, options) { - // Handle sizing operators like \Huge. Real TeX doesn't actually allow - // these functions inside of math expressions, so we do some special - // handling. - var newOptions = options.havingSize(group.value.size); - return sizingGroup(group.value.value, newOptions, options); -}; - -groupTypes.styling = function (group, options) { - // Style changes are handled in the TeXbook on pg. 442, Rule 3. - - // Figure out what style we're changing to. - var styleMap = { - "display": _Style2.default.DISPLAY, - "text": _Style2.default.TEXT, - "script": _Style2.default.SCRIPT, - "scriptscript": _Style2.default.SCRIPTSCRIPT - }; - - var newStyle = styleMap[group.value.style]; - var newOptions = options.havingStyle(newStyle); - return sizingGroup(group.value.value, newOptions, options); -}; - -groupTypes.font = function (group, options) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font)); -}; - -groupTypes.verb = function (group, options) { - var text = _buildCommon2.default.makeVerb(group, options); - var body = []; - // \verb enters text mode and therefore is sized like \textstyle - var newOptions = options.havingStyle(options.style.text()); - for (var i = 0; i < text.length; i++) { - if (text[i] === '\xA0') { - // spaces appear as nonbreaking space - // The space character isn't in the Typewriter-Regular font, - // so we implement it as a kern of the same size as a character. - // 0.525 is the width of a texttt character in LaTeX. - // It automatically gets scaled by the font size. - var rule = makeSpan(["mord", "rule"], [], newOptions); - rule.style.marginLeft = "0.525em"; - body.push(rule); - } else { - body.push(_buildCommon2.default.makeSymbol(text[i], "Typewriter-Regular", group.mode, newOptions, ["mathtt"])); - } - } - _buildCommon2.default.tryCombineChars(body); - return makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), body, newOptions); -}; - -groupTypes.accent = function (group, options) { - // Accents are handled in the TeXbook pg. 443, rule 12. - var base = group.value.base; - - var supsubGroup = void 0; - if (group.type === "supsub") { - // If our base is a character box, and we have superscripts and - // subscripts, the supsub will defer to us. In particular, we want - // to attach the superscripts and subscripts to the inner body (so - // that the position of the superscripts and subscripts won't be - // affected by the height of the accent). We accomplish this by - // sticking the base of the accent into the base of the supsub, and - // rendering that, while keeping track of where the accent is. - - // The supsub group is the group that was passed in - var supsub = group; - // The real accent group is the base of the supsub group - group = supsub.value.base; - // The character box is the base of the accent group - base = group.value.base; - // Stick the character box into the base of the supsub group - supsub.value.base = base; - - // Rerender the supsub group with its new base, and store that - // result. - supsubGroup = buildGroup(supsub, options); - } - - // Build the base group - var body = buildGroup(base, options.havingCrampedStyle()); - - // Does the accent need to shift for the skew of a character? - var mustShift = group.value.isShifty && isCharacterBox(base); - - // Calculate the skew of the accent. This is based on the line "If the - // nucleus is not a single character, let s = 0; otherwise set s to the - // kern amount for the nucleus followed by the \skewchar of its font." - // Note that our skew metrics are just the kern between each character - // and the skewchar. - var skew = 0; - if (mustShift) { - // If the base is a character box, then we want the skew of the - // innermost character. To do that, we find the innermost character: - var baseChar = getBaseElem(base); - // Then, we render its group to get the symbol inside it - var baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); - // Finally, we pull the skew off of the symbol. - skew = baseGroup.skew; - // Note that we now throw away baseGroup, because the layers we - // removed with getBaseElem might contain things like \color which - // we can't get rid of. - // TODO(emily): Find a better way to get the skew - } - - // calculate the amount of space between the body and the accent - var clearance = Math.min(body.height, options.fontMetrics().xHeight); - - // Build the accent - var accentBody = void 0; - if (!group.value.isStretchy) { - var accent = _buildCommon2.default.makeSymbol(group.value.label, "Main-Regular", group.mode, options); - // Remove the italic correction of the accent, because it only serves to - // shift the accent over to a place we don't want. - accent.italic = 0; - - // The \vec character that the fonts use is a combining character, and - // thus shows up much too far to the left. To account for this, we add a - // specific class which shifts the accent over to where we want it. - // TODO(emily): Fix this in a better way, like by changing the font - // Similarly, text accent \H is a combining character and - // requires a different adjustment. - var accentClass = null; - if (group.value.label === "\\vec") { - accentClass = "accent-vec"; - } else if (group.value.label === '\\H') { - accentClass = "accent-hungarian"; - } - - accentBody = makeSpan([], [accent]); - accentBody = makeSpan(["accent-body", accentClass], [accentBody]); - - // Shift the accent over by the skew. Note we shift by twice the skew - // because we are centering the accent, so by adding 2*skew to the left, - // we shift it to the right by 1*skew. - accentBody.style.marginLeft = 2 * skew + "em"; - - accentBody = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: body }, { type: "kern", size: -clearance }, { type: "elem", elem: accentBody }] - }, options); - } else { - accentBody = _stretchy2.default.svgSpan(group, options); - - accentBody = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: body }, { type: "elem", elem: accentBody }] - }, options); - - var styleSpan = accentBody.children[0].children[0].children[1]; - styleSpan.classes.push("svg-align"); // text-align: left; - if (skew > 0) { - // Shorten the accent and nudge it to the right. - styleSpan.style.width = "calc(100% - " + 2 * skew + "em)"; - styleSpan.style.marginLeft = 2 * skew + "em"; - } - } - - var accentWrap = makeSpan(["mord", "accent"], [accentBody], options); - - if (supsubGroup) { - // Here, we replace the "base" child of the supsub with our newly - // generated accent. - supsubGroup.children[0] = accentWrap; - - // Since we don't rerun the height calculation after replacing the - // accent, we manually recalculate height. - supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height); - - // Accents should always be ords, even when their innards are not. - supsubGroup.classes[0] = "mord"; - - return supsubGroup; - } else { - return accentWrap; - } -}; - -groupTypes.horizBrace = function (group, options) { - var style = options.style; - - var hasSupSub = group.type === "supsub"; - var supSubGroup = void 0; - var newOptions = void 0; - if (hasSupSub) { - // Ref: LaTeX source2e: }}}}\limits} - // i.e. LaTeX treats the brace similar to an op and passes it - // with \limits, so we need to assign supsub style. - if (group.value.sup) { - newOptions = options.havingStyle(style.sup()); - supSubGroup = buildGroup(group.value.sup, newOptions, options); - } else { - newOptions = options.havingStyle(style.sub()); - supSubGroup = buildGroup(group.value.sub, newOptions, options); - } - group = group.value.base; - } - - // Build the base group - var body = buildGroup(group.value.base, options.havingBaseStyle(_Style2.default.DISPLAY)); - - // Create the stretchy element - var braceBody = _stretchy2.default.svgSpan(group, options); - - // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ - // This first vlist contains the subject matter and the brace: equation - var vlist = void 0; - if (group.value.isOver) { - vlist = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: body }, { type: "kern", size: 0.1 }, { type: "elem", elem: braceBody }] - }, options); - vlist.children[0].children[0].children[1].classes.push("svg-align"); - } else { - vlist = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: body.depth + 0.1 + braceBody.height, - children: [{ type: "elem", elem: braceBody }, { type: "kern", size: 0.1 }, { type: "elem", elem: body }] - }, options); - vlist.children[0].children[0].children[0].classes.push("svg-align"); - } - - if (hasSupSub) { - // In order to write the supsub, wrap the first vlist in another vlist: - // They can't all go in the same vlist, because the note might be wider - // than the equation. We want the equation to control the brace width. - - // note long note long note - // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ - // equation eqn eqn - - var vSpan = makeSpan(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); - - if (group.value.isOver) { - vlist = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: vSpan }, { type: "kern", size: 0.2 }, { type: "elem", elem: supSubGroup }] - }, options); - } else { - vlist = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: vSpan.depth + 0.2 + supSubGroup.height, - children: [{ type: "elem", elem: supSubGroup }, { type: "kern", size: 0.2 }, { type: "elem", elem: vSpan }] - }, options); - } - } - - return makeSpan(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); -}; - -groupTypes.accentUnder = function (group, options) { - // Treat under accents much like underlines. - var innerGroup = buildGroup(group.value.base, options); - - var accentBody = _stretchy2.default.svgSpan(group, options); - var kern = /tilde/.test(group.value.label) ? 0.12 : 0; - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: accentBody.height + kern, - children: [{ type: "elem", elem: accentBody }, { type: "kern", size: kern }, { type: "elem", elem: innerGroup }] - }, options); - - vlist.children[0].children[0].children[0].classes.push("svg-align"); - - return makeSpan(["mord", "accentunder"], [vlist], options); -}; - -groupTypes.enclose = function (group, options) { - // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox - var inner = buildGroup(group.value.body, options); - - var label = group.value.label.substr(1); - var scale = options.sizeMultiplier; - var img = void 0; - var imgShift = 0; - var isColorbox = /color/.test(label); - - if (label === "sout") { - img = makeSpan(["stretchy", "sout"]); - img.height = options.fontMetrics().defaultRuleThickness / scale; - imgShift = -0.5 * options.fontMetrics().xHeight; - } else { - // Add horizontal padding - inner.classes.push(/cancel/.test(label) ? "cancel-pad" : "boxpad"); - - // Add vertical padding - var vertPad = 0; - // ref: LaTeX source2e: \fboxsep = 3pt; \fboxrule = .4pt - // ref: cancel package: \advance\totalheight2\p@ % "+2" - if (/box/.test(label)) { - vertPad = label === "colorbox" ? 0.3 : 0.34; - } else { - vertPad = isCharacterBox(group.value.body) ? 0.2 : 0; - } - - img = _stretchy2.default.encloseSpan(inner, label, vertPad, options); - imgShift = inner.depth + vertPad; - - if (isColorbox) { - img.style.backgroundColor = group.value.backgroundColor.value; - if (label === "fcolorbox") { - img.style.borderColor = group.value.borderColor.value; - } - } - } - - var vlist = void 0; - if (isColorbox) { - vlist = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [ - // Put the color background behind inner; - { type: "elem", elem: img, shift: imgShift }, { type: "elem", elem: inner, shift: 0 }] - }, options); - } else { - vlist = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [ - // Write the \cancel stroke on top of inner. - { type: "elem", elem: inner, shift: 0 }, { type: "elem", elem: img, shift: imgShift }] - }, options); - } - - if (/cancel/.test(label)) { - vlist.children[0].children[0].children[1].classes.push("svg-align"); - - // cancel does not create horiz space for its line extension. - // That is, not when adjacent to a mord. - return makeSpan(["mord", "cancel-lap"], [vlist], options); - } else { - return makeSpan(["mord"], [vlist], options); - } -}; - -groupTypes.xArrow = function (group, options) { - var style = options.style; - - // Build the argument groups in the appropriate style. - // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% - - var newOptions = options.havingStyle(style.sup()); - var upperGroup = buildGroup(group.value.body, newOptions, options); - upperGroup.classes.push("x-arrow-pad"); - - var lowerGroup = void 0; - if (group.value.below) { - // Build the lower group - newOptions = options.havingStyle(style.sub()); - lowerGroup = buildGroup(group.value.below, newOptions, options); - lowerGroup.classes.push("x-arrow-pad"); - } - - var arrowBody = _stretchy2.default.svgSpan(group, options); - - // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. - // The point we want on the math axis is at 0.5 * arrowBody.height. - var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; - // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi - var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; - - // Generate the vlist - var vlist = void 0; - if (group.value.below) { - var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; - vlist = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }, { type: "elem", elem: lowerGroup, shift: lowerShift }] - }, options); - } else { - vlist = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }] - }, options); - } - - vlist.children[0].children[0].children[1].classes.push("svg-align"); - - return makeSpan(["mrel", "x-arrow"], [vlist], options); -}; - -groupTypes.mclass = function (group, options) { - var elements = buildExpression(group.value.value, options, true); - - return makeSpan([group.value.mclass], elements, options); -}; - -groupTypes.raisebox = function (group, options) { - var body = groupTypes.sizing({ value: { - value: [{ - type: "text", - value: { - body: group.value.value, - font: "mathrm" // simulate \textrm - } - }], - size: 6 // simulate \normalsize - } }, options); - var dy = (0, _units.calculateSize)(group.value.dy.value, options); - return _buildCommon2.default.makeVList({ - positionType: "shift", - positionData: -dy, - children: [{ type: "elem", elem: body }] - }, options); -}; - -/** - * buildGroup is the function that takes a group and calls the correct groupType - * function for it. It also handles the interaction of size and style changes - * between parents and children. - */ -var buildGroup = exports.buildGroup = function buildGroup(group, options, baseOptions) { - if (!group) { - return makeSpan(); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - var groupNode = groupTypes[group.type](group, options); - - // If the size changed between the parent and the current group, account - // for that size difference. - if (baseOptions && options.size !== baseOptions.size) { - groupNode = makeSpan(options.sizingClasses(baseOptions), [groupNode], options); - - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; - - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } - - return groupNode; - } else { - throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); - } -}; - -/** - * Take an entire parse tree, and build it into an appropriate set of HTML - * nodes. - */ -function buildHTML(tree, options) { - // buildExpression is destructive, so we need to make a clone - // of the incoming tree so that it isn't accidentally changed - tree = JSON.parse((0, _stringify2.default)(tree)); - - // Build the expression contained in the tree - var expression = buildExpression(tree, options, true); - var body = makeSpan(["base"], expression, options); - - // Add struts, which ensure that the top of the HTML element falls at the - // height of the expression, and the bottom of the HTML element falls at the - // depth of the expression. - var topStrut = makeSpan(["strut"]); - var bottomStrut = makeSpan(["strut", "bottom"]); - - topStrut.style.height = body.height + "em"; - bottomStrut.style.height = body.height + body.depth + "em"; - // We'd like to use `vertical-align: top` but in IE 9 this lowers the - // baseline of the box to the bottom of this strut (instead staying in the - // normal place) so we use an absolute value for vertical-align instead - bottomStrut.style.verticalAlign = -body.depth + "em"; - - // Wrap the struts and body together - var htmlNode = makeSpan(["katex-html"], [topStrut, bottomStrut, body]); - - htmlNode.setAttribute("aria-hidden", "true"); - - return htmlNode; -} - -},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./delimiter":97,"./domTree":98,"./stretchy":123,"./units":127,"./utils":128,"babel-runtime/core-js/json/stringify":5}],93:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.buildGroup = exports.buildExpression = exports.groupTypes = exports.makeText = undefined; -exports.default = buildMathML; - -var _buildCommon = require("./buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _fontMetrics = require("./fontMetrics"); - -var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - -var _mathMLTree = require("./mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _Style = require("./Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _symbols = require("./symbols"); - -var _symbols2 = _interopRequireDefault(_symbols); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _stretchy = require("./stretchy"); - -var _stretchy2 = _interopRequireDefault(_stretchy); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Takes a symbol and converts it into a MathML text node after performing - * optional replacement from symbols.js. - */ -/** - * WARNING: New methods on groupTypes should be added to src/functions. - * - * This file converts a parse tree into a cooresponding MathML tree. The main - * entry point is the `buildMathML` function, which takes a parse tree from the - * parser. - */ - -var makeText = exports.makeText = function makeText(text, mode) { - if (_symbols2.default[mode][text] && _symbols2.default[mode][text].replace) { - text = _symbols2.default[mode][text].replace; - } - - return new _mathMLTree2.default.TextNode(text); -}; - -/** - * Returns the math variant as a string or null if none is required. - */ -var getVariant = function getVariant(group, options) { - var font = options.font; - if (!font) { - return null; - } - - var mode = group.mode; - if (font === "mathit") { - return "italic"; - } - - var value = group.value; - if (_utils2.default.contains(["\\imath", "\\jmath"], value)) { - return null; - } - - if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { - value = _symbols2.default[mode][value].replace; - } - - var fontName = _buildCommon2.default.fontMap[font].fontName; - if (_fontMetrics2.default.getCharacterMetrics(value, fontName)) { - return _buildCommon2.default.fontMap[options.font].variant; - } - - return null; -}; - -/** - * Functions for handling the different types of groups found in the parse - * tree. Each function should take a parse group and return a MathML node. - */ -var groupTypes = exports.groupTypes = {}; - -var defaultVariant = { - "mi": "italic", - "mn": "normal", - "mtext": "normal" -}; - -groupTypes.mathord = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mi", [makeText(group.value, group.mode)]); - - var variant = getVariant(group, options) || "italic"; - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - return node; -}; - -groupTypes.textord = function (group, options) { - var text = makeText(group.value, group.mode); - - var variant = getVariant(group, options) || "normal"; - - var node = void 0; - if (group.mode === 'text') { - node = new _mathMLTree2.default.MathNode("mtext", [text]); - } else if (/[0-9]/.test(group.value)) { - // TODO(kevinb) merge adjacent nodes - // do it as a post processing step - node = new _mathMLTree2.default.MathNode("mn", [text]); - } else if (group.value === "\\prime") { - node = new _mathMLTree2.default.MathNode("mo", [text]); - } else { - node = new _mathMLTree2.default.MathNode("mi", [text]); - } - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - - return node; -}; - -groupTypes.bin = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.rel = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.open = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.close = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.inner = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; -}; - -groupTypes.punct = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - node.setAttribute("separator", "true"); - - return node; -}; - -groupTypes.ordgroup = function (group, options) { - var inner = buildExpression(group.value, options); - - var node = new _mathMLTree2.default.MathNode("mrow", inner); - - return node; -}; - -groupTypes.supsub = function (group, options) { - // Is the inner group a relevant horizonal brace? - var isBrace = false; - var isOver = void 0; - var isSup = void 0; - if (group.value.base) { - if (group.value.base.value.type === "horizBrace") { - isSup = group.value.sup ? true : false; - if (isSup === group.value.base.value.isOver) { - isBrace = true; - isOver = group.value.base.value.isOver; - } - } - } - - var removeUnnecessaryRow = true; - var children = [buildGroup(group.value.base, options, removeUnnecessaryRow)]; - - if (group.value.sub) { - children.push(buildGroup(group.value.sub, options, removeUnnecessaryRow)); - } - - if (group.value.sup) { - children.push(buildGroup(group.value.sup, options, removeUnnecessaryRow)); - } - - var nodeType = void 0; - if (isBrace) { - nodeType = isOver ? "mover" : "munder"; - } else if (!group.value.sub) { - nodeType = "msup"; - } else if (!group.value.sup) { - nodeType = "msub"; - } else { - var base = group.value.base; - if (base && base.value.limits && options.style === _Style2.default.DISPLAY) { - nodeType = "munderover"; - } else { - nodeType = "msubsup"; - } - } - - var node = new _mathMLTree2.default.MathNode(nodeType, children); - - return node; -}; - -groupTypes.sqrt = function (group, options) { - var node = void 0; - if (group.value.index) { - node = new _mathMLTree2.default.MathNode("mroot", [buildGroup(group.value.body, options), buildGroup(group.value.index, options)]); - } else { - node = new _mathMLTree2.default.MathNode("msqrt", [buildGroup(group.value.body, options)]); - } - - return node; -}; - -groupTypes.accent = function (group, options) { - var accentNode = void 0; - if (group.value.isStretchy) { - accentNode = _stretchy2.default.mathMLnode(group.value.label); - } else { - accentNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.label, group.mode)]); - } - - var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.base, options), accentNode]); - - node.setAttribute("accent", "true"); - - return node; -}; - -groupTypes.spacing = function (group) { - var node = void 0; - - if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { - node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("\xA0")]); - } else { - node = new _mathMLTree2.default.MathNode("mspace"); - - node.setAttribute("width", _buildCommon2.default.spacingFunctions[group.value].size); - } - - return node; -}; - -groupTypes.font = function (group, options) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font)); -}; - -groupTypes.styling = function (group, options) { - // Figure out what style we're changing to. - // TODO(kevinb): dedupe this with buildHTML.js - // This will be easier of handling of styling nodes is in the same file. - var styleMap = { - "display": _Style2.default.DISPLAY, - "text": _Style2.default.TEXT, - "script": _Style2.default.SCRIPT, - "scriptscript": _Style2.default.SCRIPTSCRIPT - }; - - var newStyle = styleMap[group.value.style]; - var newOptions = options.havingStyle(newStyle); - - var inner = buildExpression(group.value.value, newOptions); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - var styleAttributes = { - "display": ["0", "true"], - "text": ["0", "false"], - "script": ["1", "false"], - "scriptscript": ["2", "false"] - }; - - var attr = styleAttributes[group.value.style]; - - node.setAttribute("scriptlevel", attr[0]); - node.setAttribute("displaystyle", attr[1]); - - return node; -}; - -groupTypes.sizing = function (group, options) { - var newOptions = options.havingSize(group.value.size); - var inner = buildExpression(group.value.value, newOptions); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - // TODO(emily): This doesn't produce the correct size for nested size - // changes, because we don't keep state of what style we're currently - // in, so we can't reset the size to normal before changing it. Now - // that we're passing an options parameter we should be able to fix - // this. - node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); - - return node; -}; - -groupTypes.verb = function (group, options) { - var text = new _mathMLTree2.default.TextNode(_buildCommon2.default.makeVerb(group, options)); - var node = new _mathMLTree2.default.MathNode("mtext", [text]); - node.setAttribute("mathvariant", _buildCommon2.default.fontMap["mathtt"].variant); - return node; -}; - -groupTypes.accentUnder = function (group, options) { - var accentNode = _stretchy2.default.mathMLnode(group.value.label); - var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), accentNode]); - node.setAttribute("accentunder", "true"); - return node; -}; - -groupTypes.enclose = function (group, options) { - var node = new _mathMLTree2.default.MathNode("menclose", [buildGroup(group.value.body, options)]); - switch (group.value.label) { - case "\\cancel": - node.setAttribute("notation", "updiagonalstrike"); - break; - case "\\bcancel": - node.setAttribute("notation", "downdiagonalstrike"); - break; - case "\\sout": - node.setAttribute("notation", "horizontalstrike"); - break; - case "\\fbox": - node.setAttribute("notation", "box"); - break; - case "\\colorbox": - node.setAttribute("mathbackground", group.value.backgroundColor.value); - break; - case "\\fcolorbox": - node.setAttribute("mathbackground", group.value.backgroundColor.value); - // TODO(ron): I don't know any way to set the border color. - node.setAttribute("notation", "box"); - break; - default: - // xcancel - node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); - } - return node; -}; - -groupTypes.horizBrace = function (group, options) { - var accentNode = _stretchy2.default.mathMLnode(group.value.label); - return new _mathMLTree2.default.MathNode(group.value.isOver ? "mover" : "munder", [buildGroup(group.value.base, options), accentNode]); -}; - -groupTypes.xArrow = function (group, options) { - var arrowNode = _stretchy2.default.mathMLnode(group.value.label); - var node = void 0; - var lowerNode = void 0; - - if (group.value.body) { - var upperNode = buildGroup(group.value.body, options); - if (group.value.below) { - lowerNode = buildGroup(group.value.below, options); - node = new _mathMLTree2.default.MathNode("munderover", [arrowNode, lowerNode, upperNode]); - } else { - node = new _mathMLTree2.default.MathNode("mover", [arrowNode, upperNode]); - } - } else if (group.value.below) { - lowerNode = buildGroup(group.value.below, options); - node = new _mathMLTree2.default.MathNode("munder", [arrowNode, lowerNode]); - } else { - node = new _mathMLTree2.default.MathNode("mover", [arrowNode]); - } - return node; -}; - -groupTypes.mclass = function (group, options) { - var inner = buildExpression(group.value.value, options); - return new _mathMLTree2.default.MathNode("mstyle", inner); -}; - -groupTypes.raisebox = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]); - var dy = group.value.dy.value.number + group.value.dy.value.unit; - node.setAttribute("voffset", dy); - return node; -}; - -/** - * Takes a list of nodes, builds them, and returns a list of the generated - * MathML nodes. A little simpler than the HTML version because we don't do any - * previous-node handling. - */ -var buildExpression = exports.buildExpression = function buildExpression(expression, options) { - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - groups.push(buildGroup(group, options)); - } - - // TODO(kevinb): combine \\not with mrels and mords - - return groups; -}; - -/** - * Takes a group from the parser and calls the appropriate groupTypes function - * on it to produce a MathML node. - */ -var buildGroup = exports.buildGroup = function buildGroup(group, options) { - var removeUnnecessaryRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!group) { - return new _mathMLTree2.default.MathNode("mrow"); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - var result = groupTypes[group.type](group, options); - if (removeUnnecessaryRow) { - if (result.type === "mrow" && result.children.length === 1) { - return result.children[0]; - } - } - return result; - } else { - throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); - } -}; - -/** - * Takes a full parse tree and settings and builds a MathML representation of - * it. In particular, we put the elements from building the parse tree into a - * tag so we can also include that TeX source as an annotation. - * - * Note that we actually return a domTree element with a `` inside it so - * we can do appropriate styling. - */ -function buildMathML(tree, texExpression, options) { - var expression = buildExpression(tree, options); - - // Wrap up the expression in an mrow so it is presented in the semantics - // tag correctly. - var wrapper = new _mathMLTree2.default.MathNode("mrow", expression); - - // Build a TeX annotation of the source - var annotation = new _mathMLTree2.default.MathNode("annotation", [new _mathMLTree2.default.TextNode(texExpression)]); - - annotation.setAttribute("encoding", "application/x-tex"); - - var semantics = new _mathMLTree2.default.MathNode("semantics", [wrapper, annotation]); - - var math = new _mathMLTree2.default.MathNode("math", [semantics]); - - // You can't style nodes, so we wrap the node in a span. - return _buildCommon2.default.makeSpan(["katex-mathml"], [math]); -} - -},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./fontMetrics":101,"./mathMLTree":121,"./stretchy":123,"./symbols":125,"./utils":128}],94:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _buildHTML = require("./buildHTML"); - -var _buildHTML2 = _interopRequireDefault(_buildHTML); - -var _buildMathML = require("./buildMathML"); - -var _buildMathML2 = _interopRequireDefault(_buildMathML); - -var _buildCommon = require("./buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _Options = require("./Options"); - -var _Options2 = _interopRequireDefault(_Options); - -var _Settings = require("./Settings"); - -var _Settings2 = _interopRequireDefault(_Settings); - -var _Style = require("./Style"); - -var _Style2 = _interopRequireDefault(_Style); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildTree = function buildTree(tree, expression, settings) { - settings = settings || new _Settings2.default({}); - - var startStyle = _Style2.default.TEXT; - if (settings.displayMode) { - startStyle = _Style2.default.DISPLAY; - } - - // Setup the default options - var options = new _Options2.default({ - style: startStyle, - maxSize: settings.maxSize - }); - - // `buildHTML` sometimes messes with the parse tree (like turning bins -> - // ords), so we build the MathML version first. - var mathMLNode = (0, _buildMathML2.default)(tree, expression, options); - var htmlNode = (0, _buildHTML2.default)(tree, options); - - var katexNode = _buildCommon2.default.makeSpan(["katex"], [mathMLNode, htmlNode]); - - if (settings.displayMode) { - return _buildCommon2.default.makeSpan(["katex-display"], [katexNode]); - } else { - return katexNode; - } -}; - -exports.default = buildTree; - -},{"./Options":83,"./Settings":87,"./Style":89,"./buildCommon":91,"./buildHTML":92,"./buildMathML":93}],95:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports._environments = undefined; -exports.default = defineEnvironment; - -var _buildHTML = require("./buildHTML"); - -var _buildMathML = require("./buildMathML"); - -var _Options = require("./Options"); - -var _Options2 = _interopRequireDefault(_Options); - -var _ParseNode = require("./ParseNode"); - -var _ParseNode2 = _interopRequireDefault(_ParseNode); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * All registered environments. - * `environments.js` exports this same dictionary again and makes it public. - * `Parser.js` requires this dictionary via `environments.js`. - */ - - -/** - * The context contains the following properties: - * - mode: current parsing mode. - * - envName: the name of the environment, one of the listed names. - * - parser: the parser object. - */ - - -/** - * - context: information and references provided by the parser - * - args: an array of arguments passed to \begin{name} - * - optArgs: an array of optional arguments passed to \begin{name} - */ - - -/** - * - numArgs: (default 0) The number of arguments after the \begin{name} function. - * - argTypes: (optional) Just like for a function - * - allowedInText: (default false) Whether or not the environment is allowed - * inside text mode (not enforced yet). - * - numOptionalArgs: (default 0) Just like for a function - */ - - -/** - * Final enviornment spec for use at parse time. - * This is almost identical to `EnvDefSpec`, except it - * 1. includes the function handler - * 2. requires all arguments except argType - * It is generated by `defineEnvironment()` below. - */ -var _environments = exports._environments = {}; - -function defineEnvironment(_ref) { - var type = _ref.type, - names = _ref.names, - props = _ref.props, - handler = _ref.handler, - htmlBuilder = _ref.htmlBuilder, - mathmlBuilder = _ref.mathmlBuilder; - - // Set default values of environments - var data = { - numArgs: props.numArgs || 0, - greediness: 1, - allowedInText: false, - numOptionalArgs: 0, - handler: handler - }; - for (var i = 0; i < names.length; ++i) { - _environments[names[i]] = data; - } - if (htmlBuilder) { - _buildHTML.groupTypes[type] = htmlBuilder; - } - if (mathmlBuilder) { - _buildMathML.groupTypes[type] = mathmlBuilder; - } -} - -},{"./Options":83,"./ParseNode":85,"./buildHTML":92,"./buildMathML":93}],96:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.ordargument = exports._functions = undefined; -exports.default = defineFunction; - -var _buildHTML = require("./buildHTML"); - -var _buildMathML = require("./buildMathML"); - -/** - * All registered functions. - * `functions.js` just exports this same dictionary again and makes it public. - * `Parser.js` requires this dictionary. - */ - - -/** Context provided to function handlers for error messages. */ - - -// TODO: Enumerate all allowed output types. - - -/** - * Final function spec for use at parse time. - * This is almost identical to `FunctionPropSpec`, except it - * 1. includes the function handler, and - * 2. requires all arguments except argTypes. - * It is generated by `defineFunction()` below. - */ -var _functions = exports._functions = {}; - -function defineFunction(_ref) { - var type = _ref.type, - names = _ref.names, - props = _ref.props, - handler = _ref.handler, - htmlBuilder = _ref.htmlBuilder, - mathmlBuilder = _ref.mathmlBuilder; - - // Set default values of functions - var data = { - numArgs: props.numArgs, - argTypes: props.argTypes, - greediness: props.greediness === undefined ? 1 : props.greediness, - allowedInText: !!props.allowedInText, - allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, - numOptionalArgs: props.numOptionalArgs || 0, - infix: !!props.infix, - handler: handler - }; - for (var i = 0; i < names.length; ++i) { - _functions[names[i]] = data; - } - if (type) { - if (htmlBuilder) { - _buildHTML.groupTypes[type] = htmlBuilder; - } - if (mathmlBuilder) { - _buildMathML.groupTypes[type] = mathmlBuilder; - } - } -} - -// Since the corresponding buildHTML/buildMathML function expects a -// list of elements, we normalize for different kinds of arguments -var ordargument = exports.ordargument = function ordargument(arg) { - if (arg.type === "ordgroup") { - return arg.value; - } else { - return [arg]; - } -}; - -},{"./buildHTML":92,"./buildMathML":93}],97:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _Style = require("./Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _domTree = require("./domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _buildCommon = require("./buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _fontMetrics = require("./fontMetrics"); - -var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - -var _symbols = require("./symbols"); - -var _symbols2 = _interopRequireDefault(_symbols); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Get the metrics for a given symbol and font, after transformation (i.e. - * after following replacement from symbols.js) - */ -var getMetrics = function getMetrics(symbol, font) { - if (_symbols2.default.math[symbol] && _symbols2.default.math[symbol].replace) { - return _fontMetrics2.default.getCharacterMetrics(_symbols2.default.math[symbol].replace, font); - } else { - return _fontMetrics2.default.getCharacterMetrics(symbol, font); - } -}; - -/** - * Puts a delimiter span in a given style, and adds appropriate height, depth, - * and maxFontSizes. - */ -/** - * This file deals with creating delimiters of various sizes. The TeXbook - * discusses these routines on page 441-442, in the "Another subroutine sets box - * x to a specified variable delimiter" paragraph. - * - * There are three main routines here. `makeSmallDelim` makes a delimiter in the - * normal font, but in either text, script, or scriptscript style. - * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, - * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of - * smaller pieces that are stacked on top of one another. - * - * The functions take a parameter `center`, which determines if the delimiter - * should be centered around the axis. - * - * Then, there are three exposed functions. `sizedDelim` makes a delimiter in - * one of the given sizes. This is used for things like `\bigl`. - * `customSizedDelim` makes a delimiter with a given total height+depth. It is - * called in places like `\sqrt`. `leftRightDelim` makes an appropriate - * delimiter which surrounds an expression of a given height an depth. It is - * used in `\left` and `\right`. - */ - -var styleWrap = function styleWrap(delim, toStyle, options, classes) { - var newOptions = options.havingBaseStyle(toStyle); - - var span = _buildCommon2.default.makeSpan((classes || []).concat(newOptions.sizingClasses(options)), [delim], options); - - span.delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; - span.height *= span.delimSizeMultiplier; - span.depth *= span.delimSizeMultiplier; - span.maxFontSize = newOptions.sizeMultiplier; - - return span; -}; - -var centerSpan = function centerSpan(span, options, style) { - var newOptions = options.havingBaseStyle(style); - var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; - - span.classes.push("delimcenter"); - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; -}; - -/** - * Makes a small delimiter. This is a delimiter that comes in the Main-Regular - * font, but is restyled to either be in textstyle, scriptstyle, or - * scriptscriptstyle. - */ -var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { - var text = _buildCommon2.default.makeSymbol(delim, "Main-Regular", mode, options); - var span = styleWrap(text, style, options, classes); - if (center) { - centerSpan(span, options, style); - } - return span; -}; - -/** - * Builds a symbol in the given font size (note size is an integer) - */ -var mathrmSize = function mathrmSize(value, size, mode, options) { - return _buildCommon2.default.makeSymbol(value, "Size" + size + "-Regular", mode, options); -}; - -/** - * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, - * Size3, or Size4 fonts. It is always rendered in textstyle. - */ -var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { - var inner = mathrmSize(delim, size, mode, options); - var span = styleWrap(_buildCommon2.default.makeSpan(["delimsizing", "size" + size], [inner], options), _Style2.default.TEXT, options, classes); - if (center) { - centerSpan(span, options, _Style2.default.TEXT); - } - return span; -}; - -/** - * Make an inner span with the given offset and in the given font. This is used - * in `makeStackedDelim` to make the stacking pieces for the delimiter. - */ -var makeInner = function makeInner(symbol, font, mode) { - var sizeClass = void 0; - // Apply the correct CSS class to choose the right font. - if (font === "Size1-Regular") { - sizeClass = "delim-size1"; - } else if (font === "Size4-Regular") { - sizeClass = "delim-size4"; - } - - var inner = _buildCommon2.default.makeSpan(["delimsizinginner", sizeClass], [_buildCommon2.default.makeSpan([], [_buildCommon2.default.makeSymbol(symbol, font, mode)])]); - - // Since this will be passed into `makeVList` in the end, wrap the element - // in the appropriate tag that VList uses. - return { type: "elem", elem: inner }; -}; - -/** - * Make a stacked delimiter out of a given delimiter, with the total height at - * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. - */ -var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { - // There are four parts, the top, an optional middle, a repeated part, and a - // bottom. - var top = void 0; - var middle = void 0; - var repeat = void 0; - var bottom = void 0; - top = repeat = bottom = delim; - middle = null; - // Also keep track of what font the delimiters are in - var font = "Size1-Regular"; - - // We set the parts and font based on the symbol. Note that we use - // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the - // repeats of the arrows - if (delim === "\\uparrow") { - repeat = bottom = "\u23D0"; - } else if (delim === "\\Uparrow") { - repeat = bottom = "\u2016"; - } else if (delim === "\\downarrow") { - top = repeat = "\u23D0"; - } else if (delim === "\\Downarrow") { - top = repeat = "\u2016"; - } else if (delim === "\\updownarrow") { - top = "\\uparrow"; - repeat = "\u23D0"; - bottom = "\\downarrow"; - } else if (delim === "\\Updownarrow") { - top = "\\Uparrow"; - repeat = "\u2016"; - bottom = "\\Downarrow"; - } else if (delim === "[" || delim === "\\lbrack") { - top = "\u23A1"; - repeat = "\u23A2"; - bottom = "\u23A3"; - font = "Size4-Regular"; - } else if (delim === "]" || delim === "\\rbrack") { - top = "\u23A4"; - repeat = "\u23A5"; - bottom = "\u23A6"; - font = "Size4-Regular"; - } else if (delim === "\\lfloor") { - repeat = top = "\u23A2"; - bottom = "\u23A3"; - font = "Size4-Regular"; - } else if (delim === "\\lceil") { - top = "\u23A1"; - repeat = bottom = "\u23A2"; - font = "Size4-Regular"; - } else if (delim === "\\rfloor") { - repeat = top = "\u23A5"; - bottom = "\u23A6"; - font = "Size4-Regular"; - } else if (delim === "\\rceil") { - top = "\u23A4"; - repeat = bottom = "\u23A5"; - font = "Size4-Regular"; - } else if (delim === "(") { - top = "\u239B"; - repeat = "\u239C"; - bottom = "\u239D"; - font = "Size4-Regular"; - } else if (delim === ")") { - top = "\u239E"; - repeat = "\u239F"; - bottom = "\u23A0"; - font = "Size4-Regular"; - } else if (delim === "\\{" || delim === "\\lbrace") { - top = "\u23A7"; - middle = "\u23A8"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\}" || delim === "\\rbrace") { - top = "\u23AB"; - middle = "\u23AC"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\lgroup") { - top = "\u23A7"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\rgroup") { - top = "\u23AB"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\lmoustache") { - top = "\u23A7"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\rmoustache") { - top = "\u23AB"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } - - // Get the metrics of the four sections - var topMetrics = getMetrics(top, font); - var topHeightTotal = topMetrics.height + topMetrics.depth; - var repeatMetrics = getMetrics(repeat, font); - var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; - var bottomMetrics = getMetrics(bottom, font); - var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; - var middleHeightTotal = 0; - var middleFactor = 1; - if (middle !== null) { - var middleMetrics = getMetrics(middle, font); - middleHeightTotal = middleMetrics.height + middleMetrics.depth; - middleFactor = 2; // repeat symmetrically above and below middle - } - - // Calcuate the minimal height that the delimiter can have. - // It is at least the size of the top, bottom, and optional middle combined. - var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; - - // Compute the number of copies of the repeat symbol we will need - var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); - - // Compute the total height of the delimiter including all the symbols - var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; - - // The center of the delimiter is placed at the center of the axis. Note - // that in this context, "center" means that the delimiter should be - // centered around the axis in the current style, while normally it is - // centered around the axis in textstyle. - var axisHeight = options.fontMetrics().axisHeight; - if (center) { - axisHeight *= options.sizeMultiplier; - } - // Calculate the depth - var depth = realHeightTotal / 2 - axisHeight; - - // Now, we start building the pieces that will go into the vlist - - // Keep a list of the inner pieces - var inners = []; - - // Add the bottom symbol - inners.push(makeInner(bottom, font, mode)); - - if (middle === null) { - // Add that many symbols - for (var i = 0; i < repeatCount; i++) { - inners.push(makeInner(repeat, font, mode)); - } - } else { - // When there is a middle bit, we need the middle part and two repeated - // sections - for (var _i = 0; _i < repeatCount; _i++) { - inners.push(makeInner(repeat, font, mode)); - } - inners.push(makeInner(middle, font, mode)); - for (var _i2 = 0; _i2 < repeatCount; _i2++) { - inners.push(makeInner(repeat, font, mode)); - } - } - - // Add the top symbol - inners.push(makeInner(top, font, mode)); - - // Finally, build the vlist - var newOptions = options.havingBaseStyle(_Style2.default.TEXT); - var inner = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: depth, - children: inners - }, newOptions); - - return styleWrap(_buildCommon2.default.makeSpan(["delimsizing", "mult"], [inner], newOptions), _Style2.default.TEXT, options, classes); -}; - -var sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, options) { - var alternate = void 0; - if (sqrtName === "sqrtTall") { - // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular - // One path edge has a variable length. It runs from the viniculumn - // to a point near (14 units) the bottom of the surd. The viniculum - // is 40 units thick. So the length of the line in question is: - var vertSegment = viewBoxHeight - 54; - alternate = "M702 0H400000v40H742v" + vertSegment + "l-4 4-4 4c-.667.667\n-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h-12l-28-84c-16.667-52-96.667\n-294.333-240-727l-212 -643 -85 170c-4-3.333-8.333-7.667-13 -13l-13-13l77-155\n 77-156c66 199.333 139 419.667 219 661 l218 661zM702 0H400000v40H742z"; - } - var pathNode = new _domTree2.default.pathNode(sqrtName, alternate); - - var svg = new _domTree2.default.svgNode([pathNode], { - // Note: 1000:1 ratio of viewBox to document em width. - "width": "400em", - "height": height + "em", - "viewBox": "0 0 400000 " + viewBoxHeight, - "preserveAspectRatio": "xMinYMin slice" - }); - - return _buildCommon2.default.makeSpan(["hide-tail"], [svg], options); -}; - -/** - * Make a sqrt image of the given height, - */ -var makeSqrtImage = function makeSqrtImage(height, options) { - var delim = traverseSequence("\\surd", height, stackLargeDelimiterSequence, options); - - // Create a span containing an SVG image of a sqrt symbol. - var span = void 0; - var sizeMultiplier = options.sizeMultiplier; // default - var spanHeight = void 0; - var viewBoxHeight = void 0; - - if (delim.type === "small") { - // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. - viewBoxHeight = 1000; // from font - var newOptions = options.havingBaseStyle(delim.style); - sizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; - spanHeight = 1 * sizeMultiplier; - span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, options); - span.style.minWidth = "0.853em"; - span.advanceWidth = 0.833 * sizeMultiplier; // from the font. - } else if (delim.type === "large") { - // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. - viewBoxHeight = 1000 * sizeToMaxHeight[delim.size]; - spanHeight = sizeToMaxHeight[delim.size] / sizeMultiplier; - span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, options); - span.style.minWidth = "1.02em"; - span.advanceWidth = 1.0 / sizeMultiplier; // from the font - } else { - // Tall sqrt. In TeX, this would be stacked using multiple glyphs. - // We'll use a single SVG to accomplish the same thing. - spanHeight = height / sizeMultiplier; - viewBoxHeight = Math.floor(1000 * height); - span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, options); - span.style.minWidth = "0.742em"; - span.advanceWidth = 1.056 / sizeMultiplier; - } - - span.height = spanHeight; - span.style.height = spanHeight + "em"; - - return { - span: span, - // Calculate the actual line width. - // This actually should depend on the chosen font -- e.g. \boldmath - // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and - // have thicker rules. - ruleWidth: options.fontMetrics().sqrtRuleThickness * sizeMultiplier - }; -}; - -// There are three kinds of delimiters, delimiters that stack when they become -// too large -var stackLargeDelimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "\\surd"]; - -// delimiters that always stack -var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache"]; - -// and delimiters that never stack -var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; - -// Metrics of the different sizes. Found by looking at TeX's output of -// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ -// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. -var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; - -/** - * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. - */ -var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { - // < and > turn into \langle and \rangle in delimiters - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Sized delimiters are never centered. - if (_utils2.default.contains(stackLargeDelimiters, delim) || _utils2.default.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode, classes); - } else if (_utils2.default.contains(stackAlwaysDelimiters, delim)) { - return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); - } else { - throw new _ParseError2.default("Illegal delimiter: '" + delim + "'"); - } -}; - -/** - * There are three different sequences of delimiter sizes that the delimiters - * follow depending on the kind of delimiter. This is used when creating custom - * sized delimiters to decide whether to create a small, large, or stacked - * delimiter. - * - * In real TeX, these sequences aren't explicitly defined, but are instead - * defined inside the font metrics. Since there are only three sequences that - * are possible for the delimiters that TeX defines, it is easier to just encode - * them explicitly here. - */ - -// Delimiters that never stack try small delimiters and large delimiters only -var stackNeverDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }]; - -// Delimiters that always stack try the small delimiters first, then stack -var stackAlwaysDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "stack" }]; - -// Delimiters that stack when large try the small and then large delimiters, and -// stack afterwards -var stackLargeDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }, { type: "stack" }]; - -/** - * Get the font used in a delimiter based on what kind of delimiter it is. - */ -var delimTypeToFont = function delimTypeToFont(type) { - if (type.type === "small") { - return "Main-Regular"; - } else if (type.type === "large") { - return "Size" + type.size + "-Regular"; - } else if (type.type === "stack") { - return "Size4-Regular"; - } -}; - -/** - * Traverse a sequence of types of delimiters to decide what kind of delimiter - * should be used to create a delimiter of the given height+depth. - */ -var traverseSequence = function traverseSequence(delim, height, sequence, options) { - // Here, we choose the index we should start at in the sequences. In smaller - // sizes (which correspond to larger numbers in style.size) we start earlier - // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts - // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 - var start = Math.min(2, 3 - options.style.size); - for (var i = start; i < sequence.length; i++) { - if (sequence[i].type === "stack") { - // This is always the last delimiter, so we just break the loop now. - break; - } - - var metrics = getMetrics(delim, delimTypeToFont(sequence[i])); - var heightDepth = metrics.height + metrics.depth; - - // Small delimiters are scaled down versions of the same font, so we - // account for the style change size. - - if (sequence[i].type === "small") { - var newOptions = options.havingBaseStyle(sequence[i].style); - heightDepth *= newOptions.sizeMultiplier; - } - - // Check if the delimiter at this size works for the given height. - if (heightDepth > height) { - return sequence[i]; - } - } - - // If we reached the end of the sequence, return the last sequence element. - return sequence[sequence.length - 1]; -}; - -/** - * Make a delimiter of a given height+depth, with optional centering. Here, we - * traverse the sequences, and create a delimiter that the sequence tells us to. - */ -var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Decide what sequence to use - var sequence = void 0; - if (_utils2.default.contains(stackNeverDelimiters, delim)) { - sequence = stackNeverDelimiterSequence; - } else if (_utils2.default.contains(stackLargeDelimiters, delim)) { - sequence = stackLargeDelimiterSequence; - } else { - sequence = stackAlwaysDelimiterSequence; - } - - // Look through the sequence - var delimType = traverseSequence(delim, height, sequence, options); - - // Get the delimiter from font glyphs. - // Depending on the sequence element we decided on, call the - // appropriate function. - if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode, classes); - } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode, classes); - } else /* if (delimType.type === "stack") */{ - return makeStackedDelim(delim, height, center, options, mode, classes); - } -}; - -/** - * Make a delimiter for use with `\left` and `\right`, given a height and depth - * of an expression that the delimiters surround. - */ -var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { - // We always center \left/\right delimiters, so the axis is always shifted - var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; - - // Taken from TeX source, tex.web, function make_left_right - var delimiterFactor = 901; - var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; - - var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); - - var totalHeight = Math.max( - // In real TeX, calculations are done using integral values which are - // 65536 per pt, or 655360 per em. So, the division here truncates in - // TeX but doesn't here, producing different results. If we wanted to - // exactly match TeX's calculation, we could do - // Math.floor(655360 * maxDistFromAxis / 500) * - // delimiterFactor / 655360 - // (To see the difference, compare - // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} - // in TeX and KaTeX) - maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); - - // Finally, we defer to `makeCustomSizedDelim` with our calculated total - // height - return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); -}; - -exports.default = { - sqrtImage: makeSqrtImage, - sizedDelim: makeSizedDelim, - customSizedDelim: makeCustomSizedDelim, - leftRightDelim: makeLeftRightDelim -}; - -},{"./ParseError":84,"./Style":89,"./buildCommon":91,"./domTree":98,"./fontMetrics":101,"./symbols":125,"./utils":128}],98:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _unicodeRegexes = require("./unicodeRegexes"); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _svgGeometry = require("./svgGeometry"); - -var _svgGeometry2 = _interopRequireDefault(_svgGeometry); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Create an HTML className based on a list of classes. In addition to joining - * with spaces, we also remove null or empty classes. - */ -var createClass = function createClass(classes) { - classes = classes.slice(); - for (var i = classes.length - 1; i >= 0; i--) { - if (!classes[i]) { - classes.splice(i, 1); - } - } - - return classes.join(" "); -}; - -// To ensure that all nodes have compatible signatures for these methods. - - -/** - * All `DomChildNode`s MUST have `height`, `depth`, and `maxFontSize` numeric - * fields. - * - * `DomChildNode` is not defined as an interface since `documentFragment` also - * has these fields but should not be considered a `DomChildNode`. - */ - -/** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - */ - -/** - * This node represents a span node, with a className, a list of children, and - * an inline style. It also contains information about its height, depth, and - * maxFontSize. - */ -var span = function () { - function span(classes, children, options) { - (0, _classCallCheck3.default)(this, span); - - this.classes = classes || []; - this.children = children || []; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = {}; - this.attributes = {}; - if (options) { - if (options.style.isTight()) { - this.classes.push("mtight"); - } - var color = options.getColor(); - if (color) { - this.style.color = color; - } - } - } - - /** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all - * browsers support attributes the same, and having too many custom attributes - * is probably bad. - */ - - - (0, _createClass3.default)(span, [{ - key: "setAttribute", - value: function setAttribute(attribute, value) { - this.attributes[attribute] = value; - } - }, { - key: "tryCombine", - value: function tryCombine(sibling) { - return false; - } - - /** - * Convert the span into an HTML node - */ - - }, { - key: "toNode", - value: function toNode() { - var span = document.createElement("span"); - - // Apply the class - span.className = createClass(this.classes); - - // Apply inline styles - for (var style in this.style) { - if (Object.prototype.hasOwnProperty.call(this.style, style)) { - // $FlowFixMe Flow doesn't seem to understand span.style's type. - span.style[style] = this.style[style]; - } - } - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - span.setAttribute(attr, this.attributes[attr]); - } - } - - // Append the children, also as HTML nodes - for (var i = 0; i < this.children.length; i++) { - span.appendChild(this.children[i].toNode()); - } - - return span; - } - - /** - * Convert the span into an HTML markup string - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = ") element with a hyperlink, a list of classes, - * a list of children, and an inline style. It also contains information about its - * height, depth, and maxFontSize. - */ - - -var anchor = function () { - function anchor(href, classes, children, options) { - (0, _classCallCheck3.default)(this, anchor); - - this.href = href; - this.classes = classes; - this.children = children; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = {}; - this.attributes = {}; - if (options.style.isTight()) { - this.classes.push("mtight"); - } - var color = options.getColor(); - if (color) { - this.style.color = color; - } - } - - /** - * Sets an arbitrary attribute on the anchor. Warning: use this wisely. Not all - * browsers support attributes the same, and having too many custom attributes - * is probably bad. - */ - - - (0, _createClass3.default)(anchor, [{ - key: "setAttribute", - value: function setAttribute(attribute, value) { - this.attributes[attribute] = value; - } - }, { - key: "tryCombine", - value: function tryCombine(sibling) { - return false; - } - - /** - * Convert the anchor into an HTML node - */ - - }, { - key: "toNode", - value: function toNode() { - var a = document.createElement("a"); - - // Apply the href - a.setAttribute('href', this.href); - - // Apply the class - if (this.classes.length) { - a.className = createClass(this.classes); - } - - // Apply inline styles - for (var style in this.style) { - if (Object.prototype.hasOwnProperty.call(this.style, style)) { - // $FlowFixMe Flow doesn't seem to understand a.style's type. - a.style[style] = this.style[style]; - } - } - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - a.setAttribute(attr, this.attributes[attr]); - } - } - - // Append the children, also as HTML nodes - for (var i = 0; i < this.children.length; i++) { - a.appendChild(this.children[i].toNode()); - } - - return a; - } - - /** - * Convert the a into an HTML markup string - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = " 0 || createClass(this.classes) !== createClass(sibling.classes) || this.skew !== sibling.skew || this.maxFontSize !== sibling.maxFontSize) { - return false; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style) && this.style[style] !== sibling.style[style]) { - return false; - } - } - for (var _style in sibling.style) { - if (sibling.style.hasOwnProperty(_style) && this.style[_style] !== sibling.style[_style]) { - return false; - } - } - this.value += sibling.value; - this.height = Math.max(this.height, sibling.height); - this.depth = Math.max(this.depth, sibling.depth); - this.italic = sibling.italic; - return true; - } - - /** - * Creates a text node or span from a symbol node. Note that a span is only - * created if it is needed. - */ - - }, { - key: "toNode", - value: function toNode() { - var node = document.createTextNode(this.value); - var span = null; - - if (this.italic > 0) { - span = document.createElement("span"); - span.style.marginRight = this.italic + "em"; - } - - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); - // $FlowFixMe Flow doesn't seem to understand span.style's type. - span.style[style] = this.style[style]; - } - } - - if (span) { - span.appendChild(node); - return span; - } else { - return node; - } - } - - /** - * Creates markup for a symbol node. - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - // TODO(alpert): More duplication than I'd like from - // span.prototype.toMarkup and symbolNode.prototype.toNode... - var needsSpan = false; - - var markup = " 0) { - styles += "margin-right:" + this.italic + "em;"; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += _utils2.default.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - needsSpan = true; - markup += " style=\"" + _utils2.default.escape(styles) + "\""; - } - - var escaped = _utils2.default.escape(this.value); - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += ""; - return markup; - } else { - return escaped; - } - } - }]); - return symbolNode; -}(); - -/** - * SVG nodes are used to render stretchy wide elements. - */ - - -var svgNode = function () { - function svgNode(children, attributes) { - (0, _classCallCheck3.default)(this, svgNode); - - this.children = children || []; - this.attributes = attributes || {}; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - } - // Required for all `DomChildNode`s. Are always 0 for svgNode. - - - (0, _createClass3.default)(svgNode, [{ - key: "toNode", - value: function toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "svg"); - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - return node; - } - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = ""; - } else { - return ""; - } - } - }]); - return pathNode; -}(); - -var lineNode = function () { - function lineNode(attributes) { - (0, _classCallCheck3.default)(this, lineNode); - - this.attributes = attributes || {}; - } - - (0, _createClass3.default)(lineNode, [{ - key: "toNode", - value: function toNode() { - var svgNS = "http://www.w3.org/2000/svg"; - var node = document.createElementNS(svgNS, "line"); - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - return node; - } - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = " 1 && lastRow.length === 1 && lastRow[0].value.value[0].value.length === 0) { - body.pop(); - } - break; - } else if (next === "\\\\" || next === "\\cr") { - var cr = parser.parseFunction(); - rowGaps.push(cr.value.size); - row = []; - body.push(row); - } else { - throw new _ParseError2.default("Expected & or \\\\ or \\end", parser.nextToken); - } - } - result.body = body; - result.rowGaps = rowGaps; - return new _ParseNode2.default(result.type, result, parser.mode); -} - -// Decides on a style for cells in an array according to whether the given -// environment name starts with the letter 'd'. -function dCellStyle(envName) { - if (envName.substr(0, 1) === "d") { - return "display"; - } else { - return "text"; - } -} - -var htmlBuilder = function htmlBuilder(group, options) { - var r = void 0; - var c = void 0; - var nr = group.value.body.length; - var nc = 0; - var body = new Array(nr); - - // Horizontal spacing - var pt = 1 / options.fontMetrics().ptPerEm; - var arraycolsep = 5 * pt; // \arraycolsep in article.cls - - // Vertical spacing - var baselineskip = 12 * pt; // see size10.clo - // Default \jot from ltmath.dtx - // TODO(edemaine): allow overriding \jot via \setlength (#687) - var jot = 3 * pt; - // Default \arraystretch from lttab.dtx - // TODO(gagern): may get redefined once we have user-defined macros - var arraystretch = _utils2.default.deflt(group.value.arraystretch, 1); - var arrayskip = arraystretch * baselineskip; - var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and - var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx - - var totalHeight = 0; - for (r = 0; r < group.value.body.length; ++r) { - var inrow = group.value.body[r]; - var _height = arstrutHeight; // \@array adds an \@arstrut - var _depth = arstrutDepth; // to each tow (via the template) - - if (nc < inrow.length) { - nc = inrow.length; - } - - var outrow = new Array(inrow.length); - for (c = 0; c < inrow.length; ++c) { - var elt = html.buildGroup(inrow[c], options); - if (_depth < elt.depth) { - _depth = elt.depth; - } - if (_height < elt.height) { - _height = elt.height; - } - outrow[c] = elt; - } - - var gap = 0; - if (group.value.rowGaps[r]) { - gap = (0, _units.calculateSize)(group.value.rowGaps[r].value, options); - if (gap > 0) { - // \@argarraycr - gap += arstrutDepth; - if (_depth < gap) { - _depth = gap; // \@xargarraycr - } - gap = 0; - } - } - // In AMS multiline environments such as aligned and gathered, rows - // correspond to lines that have additional \jot added to the - // \baselineskip via \openup. - if (group.value.addJot) { - _depth += jot; - } - - outrow.height = _height; - outrow.depth = _depth; - totalHeight += _height; - outrow.pos = totalHeight; - totalHeight += _depth + gap; // \@yargarraycr - body[r] = outrow; - } - - var offset = totalHeight / 2 + options.fontMetrics().axisHeight; - var colDescriptions = group.value.cols || []; - var cols = []; - var colSep = void 0; - var colDescrNum = void 0; - for (c = 0, colDescrNum = 0; - // Continue while either there are more columns or more column - // descriptions, so trailing separators don't get lost. - c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { - - var colDescr = colDescriptions[colDescrNum] || {}; - - var firstSeparator = true; - while (colDescr.type === "separator") { - // If there is more than one separator in a row, add a space - // between them. - if (!firstSeparator) { - colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); - colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; - cols.push(colSep); - } - - if (colDescr.separator === "|") { - var _separator = _stretchy2.default.ruleSpan("vertical-separator", options); - _separator.style.height = totalHeight + "em"; - _separator.style.verticalAlign = -(totalHeight - offset) + "em"; - - cols.push(_separator); - } else { - throw new _ParseError2.default("Invalid separator type: " + colDescr.separator); - } - - colDescrNum++; - colDescr = colDescriptions[colDescrNum] || {}; - firstSeparator = false; - } - - if (c >= nc) { - continue; - } - - var sepwidth = void 0; - if (c > 0 || group.value.hskipBeforeAndAfter) { - sepwidth = _utils2.default.deflt(colDescr.pregap, arraycolsep); - if (sepwidth !== 0) { - colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - - var col = []; - for (r = 0; r < nr; ++r) { - var row = body[r]; - var elem = row[c]; - if (!elem) { - continue; - } - var shift = row.pos - offset; - elem.depth = row.depth; - elem.height = row.height; - col.push({ type: "elem", elem: elem, shift: shift }); - } - - col = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: col - }, options); - col = _buildCommon2.default.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); - cols.push(col); - - if (c < nc - 1 || group.value.hskipBeforeAndAfter) { - sepwidth = _utils2.default.deflt(colDescr.postgap, arraycolsep); - if (sepwidth !== 0) { - colSep = _buildCommon2.default.makeSpan(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - } - body = _buildCommon2.default.makeSpan(["mtable"], cols); - return _buildCommon2.default.makeSpan(["mord"], [body], options); -}; - -var mathmlBuilder = function mathmlBuilder(group, options) { - return new _mathMLTree2.default.MathNode("mtable", group.value.body.map(function (row) { - return new _mathMLTree2.default.MathNode("mtr", row.map(function (cell) { - return new _mathMLTree2.default.MathNode("mtd", [mml.buildGroup(cell, options)]); - })); - })); -}; - -// Convinient function for aligned and alignedat environments. -var alignedHandler = function alignedHandler(context, args) { - var res = { - type: "array", - cols: [], - addJot: true - }; - res = parseArray(context.parser, res, "display"); - - // Determining number of columns. - // 1. If the first argument is given, we use it as a number of columns, - // and makes sure that each row doesn't exceed that number. - // 2. Otherwise, just count number of columns = maximum number - // of cells in each row ("aligned" mode -- isAligned will be true). - // - // At the same time, prepend empty group {} at beginning of every second - // cell in each row (starting with second cell) so that operators become - // binary. This behavior is implemented in amsmath's \start@aligned. - var numMaths = void 0; - var numCols = 0; - var emptyGroup = new _ParseNode2.default("ordgroup", [], context.mode); - if (args[0] && args[0].value) { - var arg0 = ""; - for (var i = 0; i < args[0].value.length; i++) { - arg0 += args[0].value[i].value; - } - numMaths = Number(arg0); - numCols = numMaths * 2; - } - var isAligned = !numCols; - res.value.body.forEach(function (row) { - for (var _i = 1; _i < row.length; _i += 2) { - // Modify ordgroup node within styling node - var ordgroup = row[_i].value.value[0]; - ordgroup.value.unshift(emptyGroup); - } - if (!isAligned) { - // Case 1 - var curMaths = row.length / 2; - if (numMaths < curMaths) { - throw new _ParseError2.default("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row); - } - } else if (numCols < row.length) { - // Case 2 - numCols = row.length; - } - }); - - // Adjusting alignment. - // In aligned mode, we add one \qquad between columns; - // otherwise we add nothing. - for (var _i2 = 0; _i2 < numCols; ++_i2) { - var _align = "r"; - var _pregap = 0; - if (_i2 % 2 === 1) { - _align = "l"; - } else if (_i2 > 0 && isAligned) { - // "aligned" mode. - _pregap = 1; // add one \quad - } - res.value.cols[_i2] = { - type: "align", - align: _align, - pregap: _pregap, - postgap: 0 - }; - } - return res; -}; - -// Arrays are part of LaTeX, defined in lttab.dtx so its documentation -// is part of the source2e.pdf file of LaTeX2e source documentation. -// {darray} is an {array} environment where cells are set in \displaystyle, -// as defined in nccmath.sty. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["array", "darray"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var colalign = args[0]; - colalign = colalign.value.map ? colalign.value : [colalign]; - var cols = colalign.map(function (node) { - var ca = node.value; - if ("lcr".indexOf(ca) !== -1) { - return { - type: "align", - align: ca - }; - } else if (ca === "|") { - return { - type: "separator", - separator: "|" - }; - } - throw new _ParseError2.default("Unknown column alignment: " + node.value, node); - }); - var res = { - type: "array", - cols: cols, - hskipBeforeAndAfter: true // \@preamble in lttab.dtx - }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - return res; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// The matrix environments of amsmath builds on the array environment -// of LaTeX, which is discussed above. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], - props: { - numArgs: 0 - }, - handler: function handler(context) { - var delimiters = { - "matrix": null, - "pmatrix": ["(", ")"], - "bmatrix": ["[", "]"], - "Bmatrix": ["\\{", "\\}"], - "vmatrix": ["|", "|"], - "Vmatrix": ["\\Vert", "\\Vert"] - }[context.envName]; - var res = { - type: "array", - hskipBeforeAndAfter: false // \hskip -\arraycolsep in amsmath - }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - if (delimiters) { - res = new _ParseNode2.default("leftright", { - body: [res], - left: delimiters[0], - right: delimiters[1] - }, context.mode); - } - return res; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// A cases environment (in amsmath.sty) is almost equivalent to -// \def\arraystretch{1.2}% -// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. -// {dcases} is a {cases} environment where cells are set in \displaystyle, -// as defined in mathtools.sty. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["cases", "dcases"], - props: { - numArgs: 0 - }, - handler: function handler(context) { - var res = { - type: "array", - arraystretch: 1.2, - cols: [{ - type: "align", - align: "l", - pregap: 0, - // TODO(kevinb) get the current style. - // For now we use the metrics for TEXT style which is what we were - // doing before. Before attempting to get the current style we - // should look at TeX's behavior especially for \over and matrices. - postgap: 1.0 /* 1em quad */ - }, { - type: "align", - align: "l", - pregap: 0, - postgap: 0 - }] - }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - res = new _ParseNode2.default("leftright", { - body: [res], - left: "\\{", - right: "." - }, context.mode); - return res; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// An aligned environment is like the align* environment -// except it operates within math mode. -// Note that we assume \nomallineskiplimit to be zero, -// so that \strut@ is the same as \strut. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["aligned"], - props: { - numArgs: 0 - }, - handler: alignedHandler, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// A gathered environment is like an array environment with one centered -// column, but where rows are considered lines so get \jot line spacing -// and contents are set in \displaystyle. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["gathered"], - props: { - numArgs: 0 - }, - handler: function handler(context) { - var res = { - type: "array", - cols: [{ - type: "align", - align: "c" - }], - addJot: true - }; - res = parseArray(context.parser, res, "display"); - return res; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// alignat environment is like an align environment, but one must explicitly -// specify maximum number of columns in each row, and can adjust spacing between -// each columns. -(0, _defineEnvironment2.default)({ - type: "array", - names: ["alignedat"], - // One for numbered and for unnumbered; - // but, KaTeX doesn't supports math numbering yet, - // they make no difference for now. - props: { - numArgs: 1 - }, - handler: alignedHandler, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -},{"../ParseError":84,"../ParseNode":85,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineEnvironment":95,"../mathMLTree":121,"../stretchy":123,"../units":127,"../utils":128}],101:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _unicodeRegexes = require("./unicodeRegexes"); - -var _fontMetricsData = require("./fontMetricsData"); - -var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This file contains metrics regarding fonts and individual symbols. The sigma - * and xi variables, as well as the metricMap map contain data extracted from - * TeX, TeX font metrics, and the TTF files. These data are then exposed via the - * `metrics` variable and the getCharacterMetrics function. - */ - -// In TeX, there are actually three sets of dimensions, one for each of -// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: -// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are -// provided in the the arrays below, in that order. -// -// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. -// This was determined by running the following script: -// -// latex -interaction=nonstopmode \ -// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ -// '$a$ \expandafter\show\the\textfont2' \ -// '\expandafter\show\the\scriptfont2' \ -// '\expandafter\show\the\scriptscriptfont2' \ -// '\stop' -// -// The metrics themselves were retreived using the following commands: -// -// tftopl cmsy10 -// tftopl cmsy7 -// tftopl cmsy5 -// -// The output of each of these commands is quite lengthy. The only part we -// care about is the FONTDIMEN section. Each value is measured in EMs. -var sigmasAndXis = { - slant: [0.250, 0.250, 0.250], // sigma1 - space: [0.000, 0.000, 0.000], // sigma2 - stretch: [0.000, 0.000, 0.000], // sigma3 - shrink: [0.000, 0.000, 0.000], // sigma4 - xHeight: [0.431, 0.431, 0.431], // sigma5 - quad: [1.000, 1.171, 1.472], // sigma6 - extraSpace: [0.000, 0.000, 0.000], // sigma7 - num1: [0.677, 0.732, 0.925], // sigma8 - num2: [0.394, 0.384, 0.387], // sigma9 - num3: [0.444, 0.471, 0.504], // sigma10 - denom1: [0.686, 0.752, 1.025], // sigma11 - denom2: [0.345, 0.344, 0.532], // sigma12 - sup1: [0.413, 0.503, 0.504], // sigma13 - sup2: [0.363, 0.431, 0.404], // sigma14 - sup3: [0.289, 0.286, 0.294], // sigma15 - sub1: [0.150, 0.143, 0.200], // sigma16 - sub2: [0.247, 0.286, 0.400], // sigma17 - supDrop: [0.386, 0.353, 0.494], // sigma18 - subDrop: [0.050, 0.071, 0.100], // sigma19 - delim1: [2.390, 1.700, 1.980], // sigma20 - delim2: [1.010, 1.157, 1.420], // sigma21 - axisHeight: [0.250, 0.250, 0.250], // sigma22 - - // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; - // they correspond to the font parameters of the extension fonts (family 3). - // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to - // match cmex7, we'd use cmex7.tfm values for script and scriptscript - // values. - defaultRuleThickness: [0.04, 0.049, 0.049], // xi8; cmex7: 0.049 - bigOpSpacing1: [0.111, 0.111, 0.111], // xi9 - bigOpSpacing2: [0.166, 0.166, 0.166], // xi10 - bigOpSpacing3: [0.2, 0.2, 0.2], // xi11 - bigOpSpacing4: [0.6, 0.611, 0.611], // xi12; cmex7: 0.611 - bigOpSpacing5: [0.1, 0.143, 0.143], // xi13; cmex7: 0.143 - - // The \sqrt rule width is taken from the height of the surd character. - // Since we use the same font at all sizes, this thickness doesn't scale. - sqrtRuleThickness: [0.04, 0.04, 0.04], - - // This value determines how large a pt is, for metrics which are defined - // in terms of pts. - // This value is also used in katex.less; if you change it make sure the - // values match. - ptPerEm: [10.0, 10.0, 10.0], - - // The space between adjacent `|` columns in an array definition. From - // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. - doubleRuleSep: [0.2, 0.2, 0.2] -}; - -// This map contains a mapping from font name and character code to character -// metrics, including height, depth, italic correction, and skew (kern from the -// character to the corresponding \skewchar) -// This map is generated via `make metrics`. It should not be changed manually. - - -// These are very rough approximations. We default to Times New Roman which -// should have Latin-1 and Cyrillic characters, but may not depending on the -// operating system. The metrics do not account for extra height from the -// accents. In the case of Cyrillic characters which have both ascenders and -// descenders we prefer approximations with ascenders, primarily to prevent -// the fraction bar or root line from intersecting the glyph. -// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. -var extraCharacterMap = { - // Latin-1 - 'À': 'A', - 'Á': 'A', - 'Â': 'A', - 'Ã': 'A', - 'Ä': 'A', - 'Å': 'A', - 'Æ': 'A', - 'Ç': 'C', - 'È': 'E', - 'É': 'E', - 'Ê': 'E', - 'Ë': 'E', - 'Ì': 'I', - 'Í': 'I', - 'Î': 'I', - 'Ï': 'I', - 'Ð': 'D', - 'Ñ': 'N', - 'Ò': 'O', - 'Ó': 'O', - 'Ô': 'O', - 'Õ': 'O', - 'Ö': 'O', - 'Ø': 'O', - 'Ù': 'U', - 'Ú': 'U', - 'Û': 'U', - 'Ü': 'U', - 'Ý': 'Y', - 'Þ': 'o', - 'ß': 'B', - 'à': 'a', - 'á': 'a', - 'â': 'a', - 'ã': 'a', - 'ä': 'a', - 'å': 'a', - 'æ': 'a', - 'ç': 'c', - 'è': 'e', - 'é': 'e', - 'ê': 'e', - 'ë': 'e', - 'ì': 'i', - 'í': 'i', - 'î': 'i', - 'ï': 'i', - 'ð': 'd', - 'ñ': 'n', - 'ò': 'o', - 'ó': 'o', - 'ô': 'o', - 'õ': 'o', - 'ö': 'o', - 'ø': 'o', - 'ù': 'u', - 'ú': 'u', - 'û': 'u', - 'ü': 'u', - 'ý': 'y', - 'þ': 'o', - 'ÿ': 'y', - - // Cyrillic - 'А': 'A', - 'Б': 'B', - 'В': 'B', - 'Г': 'F', - 'Д': 'A', - 'Е': 'E', - 'Ж': 'K', - 'З': '3', - 'И': 'N', - 'Й': 'N', - 'К': 'K', - 'Л': 'N', - 'М': 'M', - 'Н': 'H', - 'О': 'O', - 'П': 'N', - 'Р': 'P', - 'С': 'C', - 'Т': 'T', - 'У': 'y', - 'Ф': 'O', - 'Х': 'X', - 'Ц': 'U', - 'Ч': 'h', - 'Ш': 'W', - 'Щ': 'W', - 'Ъ': 'B', - 'Ы': 'X', - 'Ь': 'B', - 'Э': '3', - 'Ю': 'X', - 'Я': 'R', - 'а': 'a', - 'б': 'b', - 'в': 'a', - 'г': 'r', - 'д': 'y', - 'е': 'e', - 'ж': 'm', - 'з': 'e', - 'и': 'n', - 'й': 'n', - 'к': 'n', - 'л': 'n', - 'м': 'm', - 'н': 'n', - 'о': 'o', - 'п': 'n', - 'р': 'p', - 'с': 'c', - 'т': 'o', - 'у': 'y', - 'ф': 'b', - 'х': 'x', - 'ц': 'n', - 'ч': 'n', - 'ш': 'w', - 'щ': 'w', - 'ъ': 'a', - 'ы': 'm', - 'ь': 'a', - 'э': 'e', - 'ю': 'm', - 'я': 'r' -}; - -/** - * This function is a convenience function for looking up information in the - * metricMap table. It takes a character as a string, and a font. - * - * Note: the `width` property may be undefined if fontMetricsData.js wasn't - * built using `Make extended_metrics`. - */ -var getCharacterMetrics = function getCharacterMetrics(character, font) { - var ch = character.charCodeAt(0); - if (character[0] in extraCharacterMap) { - ch = extraCharacterMap[character[0]].charCodeAt(0); - } else if (_unicodeRegexes.cjkRegex.test(character[0])) { - ch = 'M'.charCodeAt(0); - } - var metrics = _fontMetricsData2.default[font]['' + ch]; - if (metrics) { - return { - depth: metrics[0], - height: metrics[1], - italic: metrics[2], - skew: metrics[3], - width: metrics[4] - }; - } -}; - -var fontMetricsBySizeIndex = {}; - -/** - * Get the font metrics for a given size. - */ -var getFontMetrics = function getFontMetrics(size) { - var sizeIndex = void 0; - if (size >= 5) { - sizeIndex = 0; - } else if (size >= 3) { - sizeIndex = 1; - } else { - sizeIndex = 2; - } - if (!fontMetricsBySizeIndex[sizeIndex]) { - var metrics = fontMetricsBySizeIndex[sizeIndex] = { - cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 - }; - for (var key in sigmasAndXis) { - if (sigmasAndXis.hasOwnProperty(key)) { - metrics[key] = sigmasAndXis[key][sizeIndex]; - } - } - } - return fontMetricsBySizeIndex[sizeIndex]; -}; - -exports.default = { - getFontMetrics: getFontMetrics, - getCharacterMetrics: getCharacterMetrics -}; - -},{"./fontMetricsData":102,"./unicodeRegexes":126}],102:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var fontMetricsData = { - "AMS-Regular": { - "65": [0, 0.68889, 0, 0], - "66": [0, 0.68889, 0, 0], - "67": [0, 0.68889, 0, 0], - "68": [0, 0.68889, 0, 0], - "69": [0, 0.68889, 0, 0], - "70": [0, 0.68889, 0, 0], - "71": [0, 0.68889, 0, 0], - "72": [0, 0.68889, 0, 0], - "73": [0, 0.68889, 0, 0], - "74": [0.16667, 0.68889, 0, 0], - "75": [0, 0.68889, 0, 0], - "76": [0, 0.68889, 0, 0], - "77": [0, 0.68889, 0, 0], - "78": [0, 0.68889, 0, 0], - "79": [0.16667, 0.68889, 0, 0], - "80": [0, 0.68889, 0, 0], - "81": [0.16667, 0.68889, 0, 0], - "82": [0, 0.68889, 0, 0], - "83": [0, 0.68889, 0, 0], - "84": [0, 0.68889, 0, 0], - "85": [0, 0.68889, 0, 0], - "86": [0, 0.68889, 0, 0], - "87": [0, 0.68889, 0, 0], - "88": [0, 0.68889, 0, 0], - "89": [0, 0.68889, 0, 0], - "90": [0, 0.68889, 0, 0], - "107": [0, 0.68889, 0, 0], - "165": [0, 0.675, 0.025, 0], - "174": [0.15559, 0.69224, 0, 0], - "240": [0, 0.68889, 0, 0], - "295": [0, 0.68889, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.9, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.9, 0, 0], - "989": [0.08167, 0.58167, 0, 0], - "1008": [0, 0.43056, 0.04028, 0], - "8245": [0, 0.54986, 0, 0], - "8463": [0, 0.68889, 0, 0], - "8487": [0, 0.68889, 0, 0], - "8498": [0, 0.68889, 0, 0], - "8502": [0, 0.68889, 0, 0], - "8503": [0, 0.68889, 0, 0], - "8504": [0, 0.68889, 0, 0], - "8513": [0, 0.68889, 0, 0], - "8592": [-0.03598, 0.46402, 0, 0], - "8594": [-0.03598, 0.46402, 0, 0], - "8602": [-0.13313, 0.36687, 0, 0], - "8603": [-0.13313, 0.36687, 0, 0], - "8606": [0.01354, 0.52239, 0, 0], - "8608": [0.01354, 0.52239, 0, 0], - "8610": [0.01354, 0.52239, 0, 0], - "8611": [0.01354, 0.52239, 0, 0], - "8619": [0, 0.54986, 0, 0], - "8620": [0, 0.54986, 0, 0], - "8621": [-0.13313, 0.37788, 0, 0], - "8622": [-0.13313, 0.36687, 0, 0], - "8624": [0, 0.69224, 0, 0], - "8625": [0, 0.69224, 0, 0], - "8630": [0, 0.43056, 0, 0], - "8631": [0, 0.43056, 0, 0], - "8634": [0.08198, 0.58198, 0, 0], - "8635": [0.08198, 0.58198, 0, 0], - "8638": [0.19444, 0.69224, 0, 0], - "8639": [0.19444, 0.69224, 0, 0], - "8642": [0.19444, 0.69224, 0, 0], - "8643": [0.19444, 0.69224, 0, 0], - "8644": [0.1808, 0.675, 0, 0], - "8646": [0.1808, 0.675, 0, 0], - "8647": [0.1808, 0.675, 0, 0], - "8648": [0.19444, 0.69224, 0, 0], - "8649": [0.1808, 0.675, 0, 0], - "8650": [0.19444, 0.69224, 0, 0], - "8651": [0.01354, 0.52239, 0, 0], - "8652": [0.01354, 0.52239, 0, 0], - "8653": [-0.13313, 0.36687, 0, 0], - "8654": [-0.13313, 0.36687, 0, 0], - "8655": [-0.13313, 0.36687, 0, 0], - "8666": [0.13667, 0.63667, 0, 0], - "8667": [0.13667, 0.63667, 0, 0], - "8669": [-0.13313, 0.37788, 0, 0], - "8672": [-0.064, 0.437, 0, 0], - "8674": [-0.064, 0.437, 0, 0], - "8705": [0, 0.825, 0, 0], - "8708": [0, 0.68889, 0, 0], - "8709": [0.08167, 0.58167, 0, 0], - "8717": [0, 0.43056, 0, 0], - "8722": [-0.03598, 0.46402, 0, 0], - "8724": [0.08198, 0.69224, 0, 0], - "8726": [0.08167, 0.58167, 0, 0], - "8733": [0, 0.69224, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8737": [0, 0.69224, 0, 0], - "8738": [0.03517, 0.52239, 0, 0], - "8739": [0.08167, 0.58167, 0, 0], - "8740": [0.25142, 0.74111, 0, 0], - "8741": [0.08167, 0.58167, 0, 0], - "8742": [0.25142, 0.74111, 0, 0], - "8756": [0, 0.69224, 0, 0], - "8757": [0, 0.69224, 0, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8765": [-0.13313, 0.37788, 0, 0], - "8769": [-0.13313, 0.36687, 0, 0], - "8770": [-0.03625, 0.46375, 0, 0], - "8774": [0.30274, 0.79383, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8778": [0.08167, 0.58167, 0, 0], - "8782": [0.06062, 0.54986, 0, 0], - "8783": [0.06062, 0.54986, 0, 0], - "8785": [0.08198, 0.58198, 0, 0], - "8786": [0.08198, 0.58198, 0, 0], - "8787": [0.08198, 0.58198, 0, 0], - "8790": [0, 0.69224, 0, 0], - "8791": [0.22958, 0.72958, 0, 0], - "8796": [0.08198, 0.91667, 0, 0], - "8806": [0.25583, 0.75583, 0, 0], - "8807": [0.25583, 0.75583, 0, 0], - "8808": [0.25142, 0.75726, 0, 0], - "8809": [0.25142, 0.75726, 0, 0], - "8812": [0.25583, 0.75583, 0, 0], - "8814": [0.20576, 0.70576, 0, 0], - "8815": [0.20576, 0.70576, 0, 0], - "8816": [0.30274, 0.79383, 0, 0], - "8817": [0.30274, 0.79383, 0, 0], - "8818": [0.22958, 0.72958, 0, 0], - "8819": [0.22958, 0.72958, 0, 0], - "8822": [0.1808, 0.675, 0, 0], - "8823": [0.1808, 0.675, 0, 0], - "8828": [0.13667, 0.63667, 0, 0], - "8829": [0.13667, 0.63667, 0, 0], - "8830": [0.22958, 0.72958, 0, 0], - "8831": [0.22958, 0.72958, 0, 0], - "8832": [0.20576, 0.70576, 0, 0], - "8833": [0.20576, 0.70576, 0, 0], - "8840": [0.30274, 0.79383, 0, 0], - "8841": [0.30274, 0.79383, 0, 0], - "8842": [0.13597, 0.63597, 0, 0], - "8843": [0.13597, 0.63597, 0, 0], - "8847": [0.03517, 0.54986, 0, 0], - "8848": [0.03517, 0.54986, 0, 0], - "8858": [0.08198, 0.58198, 0, 0], - "8859": [0.08198, 0.58198, 0, 0], - "8861": [0.08198, 0.58198, 0, 0], - "8862": [0, 0.675, 0, 0], - "8863": [0, 0.675, 0, 0], - "8864": [0, 0.675, 0, 0], - "8865": [0, 0.675, 0, 0], - "8872": [0, 0.69224, 0, 0], - "8873": [0, 0.69224, 0, 0], - "8874": [0, 0.69224, 0, 0], - "8876": [0, 0.68889, 0, 0], - "8877": [0, 0.68889, 0, 0], - "8878": [0, 0.68889, 0, 0], - "8879": [0, 0.68889, 0, 0], - "8882": [0.03517, 0.54986, 0, 0], - "8883": [0.03517, 0.54986, 0, 0], - "8884": [0.13667, 0.63667, 0, 0], - "8885": [0.13667, 0.63667, 0, 0], - "8888": [0, 0.54986, 0, 0], - "8890": [0.19444, 0.43056, 0, 0], - "8891": [0.19444, 0.69224, 0, 0], - "8892": [0.19444, 0.69224, 0, 0], - "8901": [0, 0.54986, 0, 0], - "8903": [0.08167, 0.58167, 0, 0], - "8905": [0.08167, 0.58167, 0, 0], - "8906": [0.08167, 0.58167, 0, 0], - "8907": [0, 0.69224, 0, 0], - "8908": [0, 0.69224, 0, 0], - "8909": [-0.03598, 0.46402, 0, 0], - "8910": [0, 0.54986, 0, 0], - "8911": [0, 0.54986, 0, 0], - "8912": [0.03517, 0.54986, 0, 0], - "8913": [0.03517, 0.54986, 0, 0], - "8914": [0, 0.54986, 0, 0], - "8915": [0, 0.54986, 0, 0], - "8916": [0, 0.69224, 0, 0], - "8918": [0.0391, 0.5391, 0, 0], - "8919": [0.0391, 0.5391, 0, 0], - "8920": [0.03517, 0.54986, 0, 0], - "8921": [0.03517, 0.54986, 0, 0], - "8922": [0.38569, 0.88569, 0, 0], - "8923": [0.38569, 0.88569, 0, 0], - "8926": [0.13667, 0.63667, 0, 0], - "8927": [0.13667, 0.63667, 0, 0], - "8928": [0.30274, 0.79383, 0, 0], - "8929": [0.30274, 0.79383, 0, 0], - "8934": [0.23222, 0.74111, 0, 0], - "8935": [0.23222, 0.74111, 0, 0], - "8936": [0.23222, 0.74111, 0, 0], - "8937": [0.23222, 0.74111, 0, 0], - "8938": [0.20576, 0.70576, 0, 0], - "8939": [0.20576, 0.70576, 0, 0], - "8940": [0.30274, 0.79383, 0, 0], - "8941": [0.30274, 0.79383, 0, 0], - "8994": [0.19444, 0.69224, 0, 0], - "8995": [0.19444, 0.69224, 0, 0], - "9416": [0.15559, 0.69224, 0, 0], - "9484": [0, 0.69224, 0, 0], - "9488": [0, 0.69224, 0, 0], - "9492": [0, 0.37788, 0, 0], - "9496": [0, 0.37788, 0, 0], - "9585": [0.19444, 0.68889, 0, 0], - "9586": [0.19444, 0.74111, 0, 0], - "9632": [0, 0.675, 0, 0], - "9633": [0, 0.675, 0, 0], - "9650": [0, 0.54986, 0, 0], - "9651": [0, 0.54986, 0, 0], - "9654": [0.03517, 0.54986, 0, 0], - "9660": [0, 0.54986, 0, 0], - "9661": [0, 0.54986, 0, 0], - "9664": [0.03517, 0.54986, 0, 0], - "9674": [0.11111, 0.69224, 0, 0], - "9733": [0.19444, 0.69224, 0, 0], - "10003": [0, 0.69224, 0, 0], - "10016": [0, 0.69224, 0, 0], - "10731": [0.11111, 0.69224, 0, 0], - "10846": [0.19444, 0.75583, 0, 0], - "10877": [0.13667, 0.63667, 0, 0], - "10878": [0.13667, 0.63667, 0, 0], - "10885": [0.25583, 0.75583, 0, 0], - "10886": [0.25583, 0.75583, 0, 0], - "10887": [0.13597, 0.63597, 0, 0], - "10888": [0.13597, 0.63597, 0, 0], - "10889": [0.26167, 0.75726, 0, 0], - "10890": [0.26167, 0.75726, 0, 0], - "10891": [0.48256, 0.98256, 0, 0], - "10892": [0.48256, 0.98256, 0, 0], - "10901": [0.13667, 0.63667, 0, 0], - "10902": [0.13667, 0.63667, 0, 0], - "10933": [0.25142, 0.75726, 0, 0], - "10934": [0.25142, 0.75726, 0, 0], - "10935": [0.26167, 0.75726, 0, 0], - "10936": [0.26167, 0.75726, 0, 0], - "10937": [0.26167, 0.75726, 0, 0], - "10938": [0.26167, 0.75726, 0, 0], - "10949": [0.25583, 0.75583, 0, 0], - "10950": [0.25583, 0.75583, 0, 0], - "10955": [0.28481, 0.79383, 0, 0], - "10956": [0.28481, 0.79383, 0, 0], - "57350": [0.08167, 0.58167, 0, 0], - "57351": [0.08167, 0.58167, 0, 0], - "57352": [0.08167, 0.58167, 0, 0], - "57353": [0, 0.43056, 0.04028, 0], - "57356": [0.25142, 0.75726, 0, 0], - "57357": [0.25142, 0.75726, 0, 0], - "57358": [0.41951, 0.91951, 0, 0], - "57359": [0.30274, 0.79383, 0, 0], - "57360": [0.30274, 0.79383, 0, 0], - "57361": [0.41951, 0.91951, 0, 0], - "57366": [0.25142, 0.75726, 0, 0], - "57367": [0.25142, 0.75726, 0, 0], - "57368": [0.25142, 0.75726, 0, 0], - "57369": [0.25142, 0.75726, 0, 0], - "57370": [0.13597, 0.63597, 0, 0], - "57371": [0.13597, 0.63597, 0, 0] - }, - "Caligraphic-Regular": { - "48": [0, 0.43056, 0, 0], - "49": [0, 0.43056, 0, 0], - "50": [0, 0.43056, 0, 0], - "51": [0.19444, 0.43056, 0, 0], - "52": [0.19444, 0.43056, 0, 0], - "53": [0.19444, 0.43056, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0.19444, 0.43056, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0.19444, 0.43056, 0, 0], - "65": [0, 0.68333, 0, 0.19445], - "66": [0, 0.68333, 0.03041, 0.13889], - "67": [0, 0.68333, 0.05834, 0.13889], - "68": [0, 0.68333, 0.02778, 0.08334], - "69": [0, 0.68333, 0.08944, 0.11111], - "70": [0, 0.68333, 0.09931, 0.11111], - "71": [0.09722, 0.68333, 0.0593, 0.11111], - "72": [0, 0.68333, 0.00965, 0.11111], - "73": [0, 0.68333, 0.07382, 0], - "74": [0.09722, 0.68333, 0.18472, 0.16667], - "75": [0, 0.68333, 0.01445, 0.05556], - "76": [0, 0.68333, 0, 0.13889], - "77": [0, 0.68333, 0, 0.13889], - "78": [0, 0.68333, 0.14736, 0.08334], - "79": [0, 0.68333, 0.02778, 0.11111], - "80": [0, 0.68333, 0.08222, 0.08334], - "81": [0.09722, 0.68333, 0, 0.11111], - "82": [0, 0.68333, 0, 0.08334], - "83": [0, 0.68333, 0.075, 0.13889], - "84": [0, 0.68333, 0.25417, 0], - "85": [0, 0.68333, 0.09931, 0.08334], - "86": [0, 0.68333, 0.08222, 0], - "87": [0, 0.68333, 0.08222, 0.08334], - "88": [0, 0.68333, 0.14643, 0.13889], - "89": [0.09722, 0.68333, 0.08222, 0.08334], - "90": [0, 0.68333, 0.07944, 0.13889] - }, - "Fraktur-Regular": { - "33": [0, 0.69141, 0, 0], - "34": [0, 0.69141, 0, 0], - "38": [0, 0.69141, 0, 0], - "39": [0, 0.69141, 0, 0], - "40": [0.24982, 0.74947, 0, 0], - "41": [0.24982, 0.74947, 0, 0], - "42": [0, 0.62119, 0, 0], - "43": [0.08319, 0.58283, 0, 0], - "44": [0, 0.10803, 0, 0], - "45": [0.08319, 0.58283, 0, 0], - "46": [0, 0.10803, 0, 0], - "47": [0.24982, 0.74947, 0, 0], - "48": [0, 0.47534, 0, 0], - "49": [0, 0.47534, 0, 0], - "50": [0, 0.47534, 0, 0], - "51": [0.18906, 0.47534, 0, 0], - "52": [0.18906, 0.47534, 0, 0], - "53": [0.18906, 0.47534, 0, 0], - "54": [0, 0.69141, 0, 0], - "55": [0.18906, 0.47534, 0, 0], - "56": [0, 0.69141, 0, 0], - "57": [0.18906, 0.47534, 0, 0], - "58": [0, 0.47534, 0, 0], - "59": [0.12604, 0.47534, 0, 0], - "61": [-0.13099, 0.36866, 0, 0], - "63": [0, 0.69141, 0, 0], - "65": [0, 0.69141, 0, 0], - "66": [0, 0.69141, 0, 0], - "67": [0, 0.69141, 0, 0], - "68": [0, 0.69141, 0, 0], - "69": [0, 0.69141, 0, 0], - "70": [0.12604, 0.69141, 0, 0], - "71": [0, 0.69141, 0, 0], - "72": [0.06302, 0.69141, 0, 0], - "73": [0, 0.69141, 0, 0], - "74": [0.12604, 0.69141, 0, 0], - "75": [0, 0.69141, 0, 0], - "76": [0, 0.69141, 0, 0], - "77": [0, 0.69141, 0, 0], - "78": [0, 0.69141, 0, 0], - "79": [0, 0.69141, 0, 0], - "80": [0.18906, 0.69141, 0, 0], - "81": [0.03781, 0.69141, 0, 0], - "82": [0, 0.69141, 0, 0], - "83": [0, 0.69141, 0, 0], - "84": [0, 0.69141, 0, 0], - "85": [0, 0.69141, 0, 0], - "86": [0, 0.69141, 0, 0], - "87": [0, 0.69141, 0, 0], - "88": [0, 0.69141, 0, 0], - "89": [0.18906, 0.69141, 0, 0], - "90": [0.12604, 0.69141, 0, 0], - "91": [0.24982, 0.74947, 0, 0], - "93": [0.24982, 0.74947, 0, 0], - "94": [0, 0.69141, 0, 0], - "97": [0, 0.47534, 0, 0], - "98": [0, 0.69141, 0, 0], - "99": [0, 0.47534, 0, 0], - "100": [0, 0.62119, 0, 0], - "101": [0, 0.47534, 0, 0], - "102": [0.18906, 0.69141, 0, 0], - "103": [0.18906, 0.47534, 0, 0], - "104": [0.18906, 0.69141, 0, 0], - "105": [0, 0.69141, 0, 0], - "106": [0, 0.69141, 0, 0], - "107": [0, 0.69141, 0, 0], - "108": [0, 0.69141, 0, 0], - "109": [0, 0.47534, 0, 0], - "110": [0, 0.47534, 0, 0], - "111": [0, 0.47534, 0, 0], - "112": [0.18906, 0.52396, 0, 0], - "113": [0.18906, 0.47534, 0, 0], - "114": [0, 0.47534, 0, 0], - "115": [0, 0.47534, 0, 0], - "116": [0, 0.62119, 0, 0], - "117": [0, 0.47534, 0, 0], - "118": [0, 0.52396, 0, 0], - "119": [0, 0.52396, 0, 0], - "120": [0.18906, 0.47534, 0, 0], - "121": [0.18906, 0.47534, 0, 0], - "122": [0.18906, 0.47534, 0, 0], - "8216": [0, 0.69141, 0, 0], - "8217": [0, 0.69141, 0, 0], - "58112": [0, 0.62119, 0, 0], - "58113": [0, 0.62119, 0, 0], - "58114": [0.18906, 0.69141, 0, 0], - "58115": [0.18906, 0.69141, 0, 0], - "58116": [0.18906, 0.47534, 0, 0], - "58117": [0, 0.69141, 0, 0], - "58118": [0, 0.62119, 0, 0], - "58119": [0, 0.47534, 0, 0] - }, - "Main-Bold": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.13333, 0.63333, 0, 0], - "44": [0.19444, 0.15556, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.15556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.19444, 0.44444, 0, 0], - "60": [0.08556, 0.58556, 0, 0], - "61": [-0.10889, 0.39111, 0, 0], - "62": [0.08556, 0.58556, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0, 0], - "67": [0, 0.68611, 0, 0], - "68": [0, 0.68611, 0, 0], - "69": [0, 0.68611, 0, 0], - "70": [0, 0.68611, 0, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0, 0], - "73": [0, 0.68611, 0, 0], - "74": [0, 0.68611, 0, 0], - "75": [0, 0.68611, 0, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0, 0], - "78": [0, 0.68611, 0, 0], - "79": [0, 0.68611, 0, 0], - "80": [0, 0.68611, 0, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0, 0], - "83": [0, 0.68611, 0, 0], - "84": [0, 0.68611, 0, 0], - "85": [0, 0.68611, 0, 0], - "86": [0, 0.68611, 0.01597, 0], - "87": [0, 0.68611, 0.01597, 0], - "88": [0, 0.68611, 0, 0], - "89": [0, 0.68611, 0.02875, 0], - "90": [0, 0.68611, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.13444, 0.03194, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.10903, 0], - "103": [0.19444, 0.44444, 0.01597, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69444, 0, 0], - "106": [0.19444, 0.69444, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01597, 0], - "119": [0, 0.44444, 0.01597, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01597, 0], - "122": [0, 0.44444, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.34444, 0, 0], - "168": [0, 0.69444, 0, 0], - "172": [0, 0.44444, 0, 0], - "175": [0, 0.59611, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.13333, 0.63333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.13333, 0.63333, 0, 0], - "247": [0.13333, 0.63333, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.63194, 0, 0], - "713": [0, 0.59611, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.69444, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.69444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.69444, 0, 0], - "772": [0, 0.59611, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.69444, 0, 0], - "776": [0, 0.69444, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68611, 0, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0, 0], - "928": [0, 0.68611, 0, 0], - "931": [0, 0.68611, 0, 0], - "933": [0, 0.68611, 0, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0, 0], - "937": [0, 0.68611, 0, 0], - "8211": [0, 0.44444, 0.03194, 0], - "8212": [0, 0.44444, 0.03194, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.72444, 0.15486, 0], - "8463": [0, 0.69444, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0], - "8472": [0.19444, 0.44444, 0, 0], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.10889, 0.39111, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.10889, 0.39111, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.10889, 0.39111, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8636": [-0.10889, 0.39111, 0, 0], - "8637": [-0.10889, 0.39111, 0, 0], - "8640": [-0.10889, 0.39111, 0, 0], - "8641": [-0.10889, 0.39111, 0, 0], - "8656": [-0.10889, 0.39111, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.10889, 0.39111, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.10889, 0.39111, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.06389, 0], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68611, 0, 0], - "8712": [0.08556, 0.58556, 0, 0], - "8715": [0.08556, 0.58556, 0, 0], - "8722": [0.13333, 0.63333, 0, 0], - "8723": [0.13333, 0.63333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.02778, 0.47222, 0, 0], - "8728": [-0.02639, 0.47361, 0, 0], - "8729": [-0.02639, 0.47361, 0, 0], - "8730": [0.18, 0.82, 0, 0], - "8733": [0, 0.44444, 0, 0], - "8734": [0, 0.44444, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.12778, 0], - "8764": [-0.10889, 0.39111, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [0.00222, 0.50222, 0, 0], - "8776": [0.02444, 0.52444, 0, 0], - "8781": [0.00222, 0.50222, 0, 0], - "8801": [0.00222, 0.50222, 0, 0], - "8804": [0.19667, 0.69667, 0, 0], - "8805": [0.19667, 0.69667, 0, 0], - "8810": [0.08556, 0.58556, 0, 0], - "8811": [0.08556, 0.58556, 0, 0], - "8826": [0.08556, 0.58556, 0, 0], - "8827": [0.08556, 0.58556, 0, 0], - "8834": [0.08556, 0.58556, 0, 0], - "8835": [0.08556, 0.58556, 0, 0], - "8838": [0.19667, 0.69667, 0, 0], - "8839": [0.19667, 0.69667, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.19667, 0.69667, 0, 0], - "8850": [0.19667, 0.69667, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.13333, 0.63333, 0, 0], - "8854": [0.13333, 0.63333, 0, 0], - "8855": [0.13333, 0.63333, 0, 0], - "8856": [0.13333, 0.63333, 0, 0], - "8857": [0.13333, 0.63333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8900": [-0.02639, 0.47361, 0, 0], - "8901": [-0.02639, 0.47361, 0, 0], - "8902": [-0.02778, 0.47222, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.13889, 0.36111, 0, 0], - "8995": [-0.13889, 0.36111, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.02778, 0.47222, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.02778, 0.47222, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10815": [0, 0.68611, 0, 0], - "10927": [0.19667, 0.69667, 0, 0], - "10928": [0.19667, 0.69667, 0, 0] - }, - "Main-Italic": { - "33": [0, 0.69444, 0.12417, 0], - "34": [0, 0.69444, 0.06961, 0], - "35": [0.19444, 0.69444, 0.06616, 0], - "37": [0.05556, 0.75, 0.13639, 0], - "38": [0, 0.69444, 0.09694, 0], - "39": [0, 0.69444, 0.12417, 0], - "40": [0.25, 0.75, 0.16194, 0], - "41": [0.25, 0.75, 0.03694, 0], - "42": [0, 0.75, 0.14917, 0], - "43": [0.05667, 0.56167, 0.03694, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0.02826, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0.16194, 0], - "48": [0, 0.64444, 0.13556, 0], - "49": [0, 0.64444, 0.13556, 0], - "50": [0, 0.64444, 0.13556, 0], - "51": [0, 0.64444, 0.13556, 0], - "52": [0.19444, 0.64444, 0.13556, 0], - "53": [0, 0.64444, 0.13556, 0], - "54": [0, 0.64444, 0.13556, 0], - "55": [0.19444, 0.64444, 0.13556, 0], - "56": [0, 0.64444, 0.13556, 0], - "57": [0, 0.64444, 0.13556, 0], - "58": [0, 0.43056, 0.0582, 0], - "59": [0.19444, 0.43056, 0.0582, 0], - "61": [-0.13313, 0.36687, 0.06616, 0], - "63": [0, 0.69444, 0.1225, 0], - "64": [0, 0.69444, 0.09597, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0.10257, 0], - "67": [0, 0.68333, 0.14528, 0], - "68": [0, 0.68333, 0.09403, 0], - "69": [0, 0.68333, 0.12028, 0], - "70": [0, 0.68333, 0.13305, 0], - "71": [0, 0.68333, 0.08722, 0], - "72": [0, 0.68333, 0.16389, 0], - "73": [0, 0.68333, 0.15806, 0], - "74": [0, 0.68333, 0.14028, 0], - "75": [0, 0.68333, 0.14528, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0.16389, 0], - "78": [0, 0.68333, 0.16389, 0], - "79": [0, 0.68333, 0.09403, 0], - "80": [0, 0.68333, 0.10257, 0], - "81": [0.19444, 0.68333, 0.09403, 0], - "82": [0, 0.68333, 0.03868, 0], - "83": [0, 0.68333, 0.11972, 0], - "84": [0, 0.68333, 0.13305, 0], - "85": [0, 0.68333, 0.16389, 0], - "86": [0, 0.68333, 0.18361, 0], - "87": [0, 0.68333, 0.18361, 0], - "88": [0, 0.68333, 0.15806, 0], - "89": [0, 0.68333, 0.19383, 0], - "90": [0, 0.68333, 0.14528, 0], - "91": [0.25, 0.75, 0.1875, 0], - "93": [0.25, 0.75, 0.10528, 0], - "94": [0, 0.69444, 0.06646, 0], - "95": [0.31, 0.12056, 0.09208, 0], - "97": [0, 0.43056, 0.07671, 0], - "98": [0, 0.69444, 0.06312, 0], - "99": [0, 0.43056, 0.05653, 0], - "100": [0, 0.69444, 0.10333, 0], - "101": [0, 0.43056, 0.07514, 0], - "102": [0.19444, 0.69444, 0.21194, 0], - "103": [0.19444, 0.43056, 0.08847, 0], - "104": [0, 0.69444, 0.07671, 0], - "105": [0, 0.65536, 0.1019, 0], - "106": [0.19444, 0.65536, 0.14467, 0], - "107": [0, 0.69444, 0.10764, 0], - "108": [0, 0.69444, 0.10333, 0], - "109": [0, 0.43056, 0.07671, 0], - "110": [0, 0.43056, 0.07671, 0], - "111": [0, 0.43056, 0.06312, 0], - "112": [0.19444, 0.43056, 0.06312, 0], - "113": [0.19444, 0.43056, 0.08847, 0], - "114": [0, 0.43056, 0.10764, 0], - "115": [0, 0.43056, 0.08208, 0], - "116": [0, 0.61508, 0.09486, 0], - "117": [0, 0.43056, 0.07671, 0], - "118": [0, 0.43056, 0.10764, 0], - "119": [0, 0.43056, 0.10764, 0], - "120": [0, 0.43056, 0.12042, 0], - "121": [0.19444, 0.43056, 0.08847, 0], - "122": [0, 0.43056, 0.12292, 0], - "126": [0.35, 0.31786, 0.11585, 0], - "163": [0, 0.69444, 0, 0], - "305": [0, 0.43056, 0, 0.02778], - "567": [0.19444, 0.43056, 0, 0.08334], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0.09694, 0], - "770": [0, 0.69444, 0.06646, 0], - "771": [0, 0.66786, 0.11585, 0], - "772": [0, 0.56167, 0.10333, 0], - "774": [0, 0.69444, 0.10806, 0], - "775": [0, 0.66786, 0.11752, 0], - "776": [0, 0.66786, 0.10474, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0.1225, 0], - "780": [0, 0.62847, 0.08295, 0], - "915": [0, 0.68333, 0.13305, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0.09403, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0.15294, 0], - "928": [0, 0.68333, 0.16389, 0], - "931": [0, 0.68333, 0.12028, 0], - "933": [0, 0.68333, 0.11111, 0], - "934": [0, 0.68333, 0.05986, 0], - "936": [0, 0.68333, 0.11111, 0], - "937": [0, 0.68333, 0.10257, 0], - "8211": [0, 0.43056, 0.09208, 0], - "8212": [0, 0.43056, 0.09208, 0], - "8216": [0, 0.69444, 0.12417, 0], - "8217": [0, 0.69444, 0.12417, 0], - "8220": [0, 0.69444, 0.1685, 0], - "8221": [0, 0.69444, 0.06961, 0], - "8463": [0, 0.68889, 0, 0] - }, - "Main-Regular": { - "32": [0, 0, 0, 0], - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.19444, 0.43056, 0, 0], - "60": [0.0391, 0.5391, 0, 0], - "61": [-0.13313, 0.36687, 0, 0], - "62": [0.0391, 0.5391, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0, 0], - "67": [0, 0.68333, 0, 0], - "68": [0, 0.68333, 0, 0], - "69": [0, 0.68333, 0, 0], - "70": [0, 0.68333, 0, 0], - "71": [0, 0.68333, 0, 0], - "72": [0, 0.68333, 0, 0], - "73": [0, 0.68333, 0, 0], - "74": [0, 0.68333, 0, 0], - "75": [0, 0.68333, 0, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0, 0], - "78": [0, 0.68333, 0, 0], - "79": [0, 0.68333, 0, 0], - "80": [0, 0.68333, 0, 0], - "81": [0.19444, 0.68333, 0, 0], - "82": [0, 0.68333, 0, 0], - "83": [0, 0.68333, 0, 0], - "84": [0, 0.68333, 0, 0], - "85": [0, 0.68333, 0, 0], - "86": [0, 0.68333, 0.01389, 0], - "87": [0, 0.68333, 0.01389, 0], - "88": [0, 0.68333, 0, 0], - "89": [0, 0.68333, 0.025, 0], - "90": [0, 0.68333, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.12056, 0.02778, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.69444, 0.07778, 0], - "103": [0.19444, 0.43056, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.66786, 0, 0], - "106": [0.19444, 0.66786, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.19444, 0.43056, 0, 0], - "113": [0.19444, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.61508, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0.01389, 0], - "119": [0, 0.43056, 0.01389, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.19444, 0.43056, 0.01389, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.31786, 0, 0], - "160": [0, 0, 0, 0], - "168": [0, 0.66786, 0, 0], - "172": [0, 0.43056, 0, 0], - "175": [0, 0.56778, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.08333, 0.58333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.08333, 0.58333, 0, 0], - "247": [0.08333, 0.58333, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.19444, 0.43056, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.62847, 0, 0], - "713": [0, 0.56778, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.66786, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.66786, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.66786, 0, 0], - "772": [0, 0.56778, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.66786, 0, 0], - "776": [0, 0.66786, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.62847, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68333, 0, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0, 0], - "928": [0, 0.68333, 0, 0], - "931": [0, 0.68333, 0, 0], - "933": [0, 0.68333, 0, 0], - "934": [0, 0.68333, 0, 0], - "936": [0, 0.68333, 0, 0], - "937": [0, 0.68333, 0, 0], - "8211": [0, 0.43056, 0.02778, 0], - "8212": [0, 0.43056, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8230": [0, 0.12, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.71444, 0.15382, 0], - "8463": [0, 0.68889, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0.11111], - "8472": [0.19444, 0.43056, 0, 0.11111], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.13313, 0.36687, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.13313, 0.36687, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.13313, 0.36687, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8614": [0.011, 0.511, 0, 0], - "8617": [0.011, 0.511, 0, 0], - "8618": [0.011, 0.511, 0, 0], - "8636": [-0.13313, 0.36687, 0, 0], - "8637": [-0.13313, 0.36687, 0, 0], - "8640": [-0.13313, 0.36687, 0, 0], - "8641": [-0.13313, 0.36687, 0, 0], - "8652": [0.011, 0.671, 0, 0], - "8656": [-0.13313, 0.36687, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.13313, 0.36687, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.13313, 0.36687, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.05556, 0.08334], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68333, 0, 0], - "8712": [0.0391, 0.5391, 0, 0], - "8715": [0.0391, 0.5391, 0, 0], - "8722": [0.08333, 0.58333, 0, 0], - "8723": [0.08333, 0.58333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.03472, 0.46528, 0, 0], - "8728": [-0.05555, 0.44445, 0, 0], - "8729": [-0.05555, 0.44445, 0, 0], - "8730": [0.2, 0.8, 0, 0], - "8733": [0, 0.43056, 0, 0], - "8734": [0, 0.43056, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.11111, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [-0.03625, 0.46375, 0, 0], - "8773": [-0.022, 0.589, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8781": [-0.03625, 0.46375, 0, 0], - "8784": [-0.133, 0.67, 0, 0], - "8800": [0.215, 0.716, 0, 0], - "8801": [-0.03625, 0.46375, 0, 0], - "8804": [0.13597, 0.63597, 0, 0], - "8805": [0.13597, 0.63597, 0, 0], - "8810": [0.0391, 0.5391, 0, 0], - "8811": [0.0391, 0.5391, 0, 0], - "8826": [0.0391, 0.5391, 0, 0], - "8827": [0.0391, 0.5391, 0, 0], - "8834": [0.0391, 0.5391, 0, 0], - "8835": [0.0391, 0.5391, 0, 0], - "8838": [0.13597, 0.63597, 0, 0], - "8839": [0.13597, 0.63597, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.13597, 0.63597, 0, 0], - "8850": [0.13597, 0.63597, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.08333, 0.58333, 0, 0], - "8854": [0.08333, 0.58333, 0, 0], - "8855": [0.08333, 0.58333, 0, 0], - "8856": [0.08333, 0.58333, 0, 0], - "8857": [0.08333, 0.58333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8872": [0.249, 0.75, 0, 0], - "8900": [-0.05555, 0.44445, 0, 0], - "8901": [-0.05555, 0.44445, 0, 0], - "8902": [-0.03472, 0.46528, 0, 0], - "8904": [0.005, 0.505, 0, 0], - "8942": [0.03, 0.9, 0, 0], - "8943": [-0.19, 0.31, 0, 0], - "8945": [-0.1, 0.82, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.14236, 0.35764, 0, 0], - "8995": [-0.14236, 0.35764, 0, 0], - "9136": [0.244, 0.744, 0, 0], - "9137": [0.244, 0.744, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.03472, 0.46528, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.03472, 0.46528, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10222": [0.244, 0.744, 0, 0], - "10223": [0.244, 0.744, 0, 0], - "10229": [0.011, 0.511, 0, 0], - "10230": [0.011, 0.511, 0, 0], - "10231": [0.011, 0.511, 0, 0], - "10232": [0.024, 0.525, 0, 0], - "10233": [0.024, 0.525, 0, 0], - "10234": [0.024, 0.525, 0, 0], - "10236": [0.011, 0.511, 0, 0], - "10815": [0, 0.68333, 0, 0], - "10927": [0.13597, 0.63597, 0, 0], - "10928": [0.13597, 0.63597, 0, 0] - }, - "Math-BoldItalic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0.04835, 0], - "67": [0, 0.68611, 0.06979, 0], - "68": [0, 0.68611, 0.03194, 0], - "69": [0, 0.68611, 0.05451, 0], - "70": [0, 0.68611, 0.15972, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0.08229, 0], - "73": [0, 0.68611, 0.07778, 0], - "74": [0, 0.68611, 0.10069, 0], - "75": [0, 0.68611, 0.06979, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0.11424, 0], - "78": [0, 0.68611, 0.11424, 0], - "79": [0, 0.68611, 0.03194, 0], - "80": [0, 0.68611, 0.15972, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0.00421, 0], - "83": [0, 0.68611, 0.05382, 0], - "84": [0, 0.68611, 0.15972, 0], - "85": [0, 0.68611, 0.11424, 0], - "86": [0, 0.68611, 0.25555, 0], - "87": [0, 0.68611, 0.15972, 0], - "88": [0, 0.68611, 0.07778, 0], - "89": [0, 0.68611, 0.25555, 0], - "90": [0, 0.68611, 0.06979, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0.19444, 0.69444, 0.11042, 0], - "103": [0.19444, 0.44444, 0.03704, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69326, 0, 0], - "106": [0.19444, 0.69326, 0.0622, 0], - "107": [0, 0.69444, 0.01852, 0], - "108": [0, 0.69444, 0.0088, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0.03704, 0], - "114": [0, 0.44444, 0.03194, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.03704, 0], - "119": [0, 0.44444, 0.02778, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.03704, 0], - "122": [0, 0.44444, 0.04213, 0], - "915": [0, 0.68611, 0.15972, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0.03194, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0.07458, 0], - "928": [0, 0.68611, 0.08229, 0], - "931": [0, 0.68611, 0.05451, 0], - "933": [0, 0.68611, 0.15972, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0.11653, 0], - "937": [0, 0.68611, 0.04835, 0], - "945": [0, 0.44444, 0, 0], - "946": [0.19444, 0.69444, 0.03403, 0], - "947": [0.19444, 0.44444, 0.06389, 0], - "948": [0, 0.69444, 0.03819, 0], - "949": [0, 0.44444, 0, 0], - "950": [0.19444, 0.69444, 0.06215, 0], - "951": [0.19444, 0.44444, 0.03704, 0], - "952": [0, 0.69444, 0.03194, 0], - "953": [0, 0.44444, 0, 0], - "954": [0, 0.44444, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.44444, 0, 0], - "957": [0, 0.44444, 0.06898, 0], - "958": [0.19444, 0.69444, 0.03021, 0], - "959": [0, 0.44444, 0, 0], - "960": [0, 0.44444, 0.03704, 0], - "961": [0.19444, 0.44444, 0, 0], - "962": [0.09722, 0.44444, 0.07917, 0], - "963": [0, 0.44444, 0.03704, 0], - "964": [0, 0.44444, 0.13472, 0], - "965": [0, 0.44444, 0.03704, 0], - "966": [0.19444, 0.44444, 0, 0], - "967": [0.19444, 0.44444, 0, 0], - "968": [0.19444, 0.69444, 0.03704, 0], - "969": [0, 0.44444, 0.03704, 0], - "977": [0, 0.69444, 0, 0], - "981": [0.19444, 0.69444, 0, 0], - "982": [0, 0.44444, 0.03194, 0], - "1009": [0.19444, 0.44444, 0, 0], - "1013": [0, 0.44444, 0, 0] - }, - "Math-Italic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556] - }, - "Math-Regular": { - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556] - }, - "SansSerif-Regular": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.125, 0.08333, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.08333, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.65556, 0, 0], - "49": [0, 0.65556, 0, 0], - "50": [0, 0.65556, 0, 0], - "51": [0, 0.65556, 0, 0], - "52": [0, 0.65556, 0, 0], - "53": [0, 0.65556, 0, 0], - "54": [0, 0.65556, 0, 0], - "55": [0, 0.65556, 0, 0], - "56": [0, 0.65556, 0, 0], - "57": [0, 0.65556, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.125, 0.44444, 0, 0], - "61": [-0.13, 0.37, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.69444, 0, 0], - "66": [0, 0.69444, 0, 0], - "67": [0, 0.69444, 0, 0], - "68": [0, 0.69444, 0, 0], - "69": [0, 0.69444, 0, 0], - "70": [0, 0.69444, 0, 0], - "71": [0, 0.69444, 0, 0], - "72": [0, 0.69444, 0, 0], - "73": [0, 0.69444, 0, 0], - "74": [0, 0.69444, 0, 0], - "75": [0, 0.69444, 0, 0], - "76": [0, 0.69444, 0, 0], - "77": [0, 0.69444, 0, 0], - "78": [0, 0.69444, 0, 0], - "79": [0, 0.69444, 0, 0], - "80": [0, 0.69444, 0, 0], - "81": [0.125, 0.69444, 0, 0], - "82": [0, 0.69444, 0, 0], - "83": [0, 0.69444, 0, 0], - "84": [0, 0.69444, 0, 0], - "85": [0, 0.69444, 0, 0], - "86": [0, 0.69444, 0.01389, 0], - "87": [0, 0.69444, 0.01389, 0], - "88": [0, 0.69444, 0, 0], - "89": [0, 0.69444, 0.025, 0], - "90": [0, 0.69444, 0, 0], - "91": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.35, 0.09444, 0.02778, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.06944, 0], - "103": [0.19444, 0.44444, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.67937, 0, 0], - "106": [0.19444, 0.67937, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0.01389, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.57143, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01389, 0], - "119": [0, 0.44444, 0.01389, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01389, 0], - "122": [0, 0.44444, 0, 0], - "126": [0.35, 0.32659, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.67659, 0, 0], - "772": [0, 0.60889, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.67937, 0, 0], - "776": [0, 0.67937, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "915": [0, 0.69444, 0, 0], - "916": [0, 0.69444, 0, 0], - "920": [0, 0.69444, 0, 0], - "923": [0, 0.69444, 0, 0], - "926": [0, 0.69444, 0, 0], - "928": [0, 0.69444, 0, 0], - "931": [0, 0.69444, 0, 0], - "933": [0, 0.69444, 0, 0], - "934": [0, 0.69444, 0, 0], - "936": [0, 0.69444, 0, 0], - "937": [0, 0.69444, 0, 0], - "8211": [0, 0.44444, 0.02778, 0], - "8212": [0, 0.44444, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0] - }, - "Script-Regular": { - "65": [0, 0.7, 0.22925, 0], - "66": [0, 0.7, 0.04087, 0], - "67": [0, 0.7, 0.1689, 0], - "68": [0, 0.7, 0.09371, 0], - "69": [0, 0.7, 0.18583, 0], - "70": [0, 0.7, 0.13634, 0], - "71": [0, 0.7, 0.17322, 0], - "72": [0, 0.7, 0.29694, 0], - "73": [0, 0.7, 0.19189, 0], - "74": [0.27778, 0.7, 0.19189, 0], - "75": [0, 0.7, 0.31259, 0], - "76": [0, 0.7, 0.19189, 0], - "77": [0, 0.7, 0.15981, 0], - "78": [0, 0.7, 0.3525, 0], - "79": [0, 0.7, 0.08078, 0], - "80": [0, 0.7, 0.08078, 0], - "81": [0, 0.7, 0.03305, 0], - "82": [0, 0.7, 0.06259, 0], - "83": [0, 0.7, 0.19189, 0], - "84": [0, 0.7, 0.29087, 0], - "85": [0, 0.7, 0.25815, 0], - "86": [0, 0.7, 0.27523, 0], - "87": [0, 0.7, 0.27523, 0], - "88": [0, 0.7, 0.26006, 0], - "89": [0, 0.7, 0.2939, 0], - "90": [0, 0.7, 0.24037, 0] - }, - "Size1-Regular": { - "40": [0.35001, 0.85, 0, 0], - "41": [0.35001, 0.85, 0, 0], - "47": [0.35001, 0.85, 0, 0], - "91": [0.35001, 0.85, 0, 0], - "92": [0.35001, 0.85, 0, 0], - "93": [0.35001, 0.85, 0, 0], - "123": [0.35001, 0.85, 0, 0], - "125": [0.35001, 0.85, 0, 0], - "710": [0, 0.72222, 0, 0], - "732": [0, 0.72222, 0, 0], - "770": [0, 0.72222, 0, 0], - "771": [0, 0.72222, 0, 0], - "8214": [-0.00099, 0.601, 0, 0], - "8593": [1e-05, 0.6, 0, 0], - "8595": [1e-05, 0.6, 0, 0], - "8657": [1e-05, 0.6, 0, 0], - "8659": [1e-05, 0.6, 0, 0], - "8719": [0.25001, 0.75, 0, 0], - "8720": [0.25001, 0.75, 0, 0], - "8721": [0.25001, 0.75, 0, 0], - "8730": [0.35001, 0.85, 0, 0], - "8739": [-0.00599, 0.606, 0, 0], - "8741": [-0.00599, 0.606, 0, 0], - "8747": [0.30612, 0.805, 0.19445, 0], - "8748": [0.306, 0.805, 0.19445, 0], - "8749": [0.306, 0.805, 0.19445, 0], - "8750": [0.30612, 0.805, 0.19445, 0], - "8896": [0.25001, 0.75, 0, 0], - "8897": [0.25001, 0.75, 0, 0], - "8898": [0.25001, 0.75, 0, 0], - "8899": [0.25001, 0.75, 0, 0], - "8968": [0.35001, 0.85, 0, 0], - "8969": [0.35001, 0.85, 0, 0], - "8970": [0.35001, 0.85, 0, 0], - "8971": [0.35001, 0.85, 0, 0], - "9168": [-0.00099, 0.601, 0, 0], - "10216": [0.35001, 0.85, 0, 0], - "10217": [0.35001, 0.85, 0, 0], - "10752": [0.25001, 0.75, 0, 0], - "10753": [0.25001, 0.75, 0, 0], - "10754": [0.25001, 0.75, 0, 0], - "10756": [0.25001, 0.75, 0, 0], - "10758": [0.25001, 0.75, 0, 0] - }, - "Size2-Regular": { - "40": [0.65002, 1.15, 0, 0], - "41": [0.65002, 1.15, 0, 0], - "47": [0.65002, 1.15, 0, 0], - "91": [0.65002, 1.15, 0, 0], - "92": [0.65002, 1.15, 0, 0], - "93": [0.65002, 1.15, 0, 0], - "123": [0.65002, 1.15, 0, 0], - "125": [0.65002, 1.15, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8719": [0.55001, 1.05, 0, 0], - "8720": [0.55001, 1.05, 0, 0], - "8721": [0.55001, 1.05, 0, 0], - "8730": [0.65002, 1.15, 0, 0], - "8747": [0.86225, 1.36, 0.44445, 0], - "8748": [0.862, 1.36, 0.44445, 0], - "8749": [0.862, 1.36, 0.44445, 0], - "8750": [0.86225, 1.36, 0.44445, 0], - "8896": [0.55001, 1.05, 0, 0], - "8897": [0.55001, 1.05, 0, 0], - "8898": [0.55001, 1.05, 0, 0], - "8899": [0.55001, 1.05, 0, 0], - "8968": [0.65002, 1.15, 0, 0], - "8969": [0.65002, 1.15, 0, 0], - "8970": [0.65002, 1.15, 0, 0], - "8971": [0.65002, 1.15, 0, 0], - "10216": [0.65002, 1.15, 0, 0], - "10217": [0.65002, 1.15, 0, 0], - "10752": [0.55001, 1.05, 0, 0], - "10753": [0.55001, 1.05, 0, 0], - "10754": [0.55001, 1.05, 0, 0], - "10756": [0.55001, 1.05, 0, 0], - "10758": [0.55001, 1.05, 0, 0] - }, - "Size3-Regular": { - "40": [0.95003, 1.45, 0, 0], - "41": [0.95003, 1.45, 0, 0], - "47": [0.95003, 1.45, 0, 0], - "91": [0.95003, 1.45, 0, 0], - "92": [0.95003, 1.45, 0, 0], - "93": [0.95003, 1.45, 0, 0], - "123": [0.95003, 1.45, 0, 0], - "125": [0.95003, 1.45, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8730": [0.95003, 1.45, 0, 0], - "8968": [0.95003, 1.45, 0, 0], - "8969": [0.95003, 1.45, 0, 0], - "8970": [0.95003, 1.45, 0, 0], - "8971": [0.95003, 1.45, 0, 0], - "10216": [0.95003, 1.45, 0, 0], - "10217": [0.95003, 1.45, 0, 0] - }, - "Size4-Regular": { - "40": [1.25003, 1.75, 0, 0], - "41": [1.25003, 1.75, 0, 0], - "47": [1.25003, 1.75, 0, 0], - "91": [1.25003, 1.75, 0, 0], - "92": [1.25003, 1.75, 0, 0], - "93": [1.25003, 1.75, 0, 0], - "123": [1.25003, 1.75, 0, 0], - "125": [1.25003, 1.75, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.825, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.825, 0, 0], - "8730": [1.25003, 1.75, 0, 0], - "8968": [1.25003, 1.75, 0, 0], - "8969": [1.25003, 1.75, 0, 0], - "8970": [1.25003, 1.75, 0, 0], - "8971": [1.25003, 1.75, 0, 0], - "9115": [0.64502, 1.155, 0, 0], - "9116": [1e-05, 0.6, 0, 0], - "9117": [0.64502, 1.155, 0, 0], - "9118": [0.64502, 1.155, 0, 0], - "9119": [1e-05, 0.6, 0, 0], - "9120": [0.64502, 1.155, 0, 0], - "9121": [0.64502, 1.155, 0, 0], - "9122": [-0.00099, 0.601, 0, 0], - "9123": [0.64502, 1.155, 0, 0], - "9124": [0.64502, 1.155, 0, 0], - "9125": [-0.00099, 0.601, 0, 0], - "9126": [0.64502, 1.155, 0, 0], - "9127": [1e-05, 0.9, 0, 0], - "9128": [0.65002, 1.15, 0, 0], - "9129": [0.90001, 0, 0, 0], - "9130": [0, 0.3, 0, 0], - "9131": [1e-05, 0.9, 0, 0], - "9132": [0.65002, 1.15, 0, 0], - "9133": [0.90001, 0, 0, 0], - "9143": [0.88502, 0.915, 0, 0], - "10216": [1.25003, 1.75, 0, 0], - "10217": [1.25003, 1.75, 0, 0], - "57344": [-0.00499, 0.605, 0, 0], - "57345": [-0.00499, 0.605, 0, 0], - "57680": [0, 0.12, 0, 0], - "57681": [0, 0.12, 0, 0], - "57682": [0, 0.12, 0, 0], - "57683": [0, 0.12, 0, 0] - }, - "Typewriter-Regular": { - "33": [0, 0.61111, 0, 0], - "34": [0, 0.61111, 0, 0], - "35": [0, 0.61111, 0, 0], - "36": [0.08333, 0.69444, 0, 0], - "37": [0.08333, 0.69444, 0, 0], - "38": [0, 0.61111, 0, 0], - "39": [0, 0.61111, 0, 0], - "40": [0.08333, 0.69444, 0, 0], - "41": [0.08333, 0.69444, 0, 0], - "42": [0, 0.52083, 0, 0], - "43": [-0.08056, 0.53055, 0, 0], - "44": [0.13889, 0.125, 0, 0], - "45": [-0.08056, 0.53055, 0, 0], - "46": [0, 0.125, 0, 0], - "47": [0.08333, 0.69444, 0, 0], - "48": [0, 0.61111, 0, 0], - "49": [0, 0.61111, 0, 0], - "50": [0, 0.61111, 0, 0], - "51": [0, 0.61111, 0, 0], - "52": [0, 0.61111, 0, 0], - "53": [0, 0.61111, 0, 0], - "54": [0, 0.61111, 0, 0], - "55": [0, 0.61111, 0, 0], - "56": [0, 0.61111, 0, 0], - "57": [0, 0.61111, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.13889, 0.43056, 0, 0], - "60": [-0.05556, 0.55556, 0, 0], - "61": [-0.19549, 0.41562, 0, 0], - "62": [-0.05556, 0.55556, 0, 0], - "63": [0, 0.61111, 0, 0], - "64": [0, 0.61111, 0, 0], - "65": [0, 0.61111, 0, 0], - "66": [0, 0.61111, 0, 0], - "67": [0, 0.61111, 0, 0], - "68": [0, 0.61111, 0, 0], - "69": [0, 0.61111, 0, 0], - "70": [0, 0.61111, 0, 0], - "71": [0, 0.61111, 0, 0], - "72": [0, 0.61111, 0, 0], - "73": [0, 0.61111, 0, 0], - "74": [0, 0.61111, 0, 0], - "75": [0, 0.61111, 0, 0], - "76": [0, 0.61111, 0, 0], - "77": [0, 0.61111, 0, 0], - "78": [0, 0.61111, 0, 0], - "79": [0, 0.61111, 0, 0], - "80": [0, 0.61111, 0, 0], - "81": [0.13889, 0.61111, 0, 0], - "82": [0, 0.61111, 0, 0], - "83": [0, 0.61111, 0, 0], - "84": [0, 0.61111, 0, 0], - "85": [0, 0.61111, 0, 0], - "86": [0, 0.61111, 0, 0], - "87": [0, 0.61111, 0, 0], - "88": [0, 0.61111, 0, 0], - "89": [0, 0.61111, 0, 0], - "90": [0, 0.61111, 0, 0], - "91": [0.08333, 0.69444, 0, 0], - "92": [0.08333, 0.69444, 0, 0], - "93": [0.08333, 0.69444, 0, 0], - "94": [0, 0.61111, 0, 0], - "95": [0.09514, 0, 0, 0], - "96": [0, 0.61111, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.61111, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.61111, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.61111, 0, 0], - "103": [0.22222, 0.43056, 0, 0], - "104": [0, 0.61111, 0, 0], - "105": [0, 0.61111, 0, 0], - "106": [0.22222, 0.61111, 0, 0], - "107": [0, 0.61111, 0, 0], - "108": [0, 0.61111, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.22222, 0.43056, 0, 0], - "113": [0.22222, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.55358, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0, 0], - "119": [0, 0.43056, 0, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.22222, 0.43056, 0, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.08333, 0.69444, 0, 0], - "124": [0.08333, 0.69444, 0, 0], - "125": [0.08333, 0.69444, 0, 0], - "126": [0, 0.61111, 0, 0], - "127": [0, 0.61111, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.22222, 0.43056, 0, 0], - "768": [0, 0.61111, 0, 0], - "769": [0, 0.61111, 0, 0], - "770": [0, 0.61111, 0, 0], - "771": [0, 0.61111, 0, 0], - "772": [0, 0.56555, 0, 0], - "774": [0, 0.61111, 0, 0], - "776": [0, 0.61111, 0, 0], - "778": [0, 0.61111, 0, 0], - "780": [0, 0.56597, 0, 0], - "915": [0, 0.61111, 0, 0], - "916": [0, 0.61111, 0, 0], - "920": [0, 0.61111, 0, 0], - "923": [0, 0.61111, 0, 0], - "926": [0, 0.61111, 0, 0], - "928": [0, 0.61111, 0, 0], - "931": [0, 0.61111, 0, 0], - "933": [0, 0.61111, 0, 0], - "934": [0, 0.61111, 0, 0], - "936": [0, 0.61111, 0, 0], - "937": [0, 0.61111, 0, 0], - "2018": [0, 0.61111, 0, 0], - "2019": [0, 0.61111, 0, 0], - "8216": [0, 0.61111, 0, 0], - "8217": [0, 0.61111, 0, 0], - "8242": [0, 0.61111, 0, 0], - "9251": [0.11111, 0.21944, 0, 0] - } -}; - -exports.default = fontMetricsData; - -},{}],103:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _ParseNode = require("./ParseNode"); - -var _ParseNode2 = _interopRequireDefault(_ParseNode); - -var _defineFunction2 = require("./defineFunction"); - -var _defineFunction3 = _interopRequireDefault(_defineFunction2); - -require("./functions/color"); - -require("./functions/text"); - -require("./functions/overline"); - -require("./functions/underline"); - -require("./functions/rule"); - -require("./functions/kern"); - -require("./functions/phantom"); - -require("./functions/mod"); - -require("./functions/op"); - -require("./functions/operatorname"); - -require("./functions/genfrac"); - -require("./functions/lap"); - -require("./functions/smash"); - -require("./functions/delimsizing"); - -require("./functions/href"); - -require("./functions/mathchoice"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// WARNING: New functions should be added to src/functions and imported here. - -/** Include this to ensure that all functions are defined. */ -var functions = _defineFunction2._functions; -exports.default = functions; - -// Define a convenience function that mimcs the old semantics of defineFunction -// to support existing code so that we can migrate it a little bit at a time. - -var defineFunction = function defineFunction(names, props, handler) // null only if handled in parser -{ - (0, _defineFunction3.default)({ names: names, props: props, handler: handler }); -}; - -// A normal square root -defineFunction(["\\sqrt"], { - numArgs: 1, - numOptionalArgs: 1 -}, function (context, args, optArgs) { - var index = optArgs[0]; - var body = args[0]; - return { - type: "sqrt", - body: body, - index: index - }; -}); - -// \color is handled in Parser.js's parseImplicitGroup -defineFunction(["\\color"], { - numArgs: 1, - allowedInText: true, - greediness: 3, - argTypes: ["color"] -}, null); - -// colorbox -defineFunction(["\\colorbox"], { - numArgs: 2, - allowedInText: true, - greediness: 3, - argTypes: ["color", "text"] -}, function (context, args) { - var color = args[0]; - var body = args[1]; - return { - type: "enclose", - label: context.funcName, - backgroundColor: color, - body: body - }; -}); - -// fcolorbox -defineFunction(["\\fcolorbox"], { - numArgs: 3, - allowedInText: true, - greediness: 3, - argTypes: ["color", "color", "text"] -}, function (context, args) { - var borderColor = args[0]; - var backgroundColor = args[1]; - var body = args[2]; - return { - type: "enclose", - label: context.funcName, - backgroundColor: backgroundColor, - borderColor: borderColor, - body: body - }; -}); - -// Math class commands except \mathop -defineFunction(["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], { - numArgs: 1 -}, function (context, args) { - var body = args[0]; - return { - type: "mclass", - mclass: "m" + context.funcName.substr(5), - value: (0, _defineFunction2.ordargument)(body) - }; -}); - -// Build a relation by placing one symbol on top of another -defineFunction(["\\stackrel"], { - numArgs: 2 -}, function (context, args) { - var top = args[0]; - var bottom = args[1]; - - var bottomop = new _ParseNode2.default("op", { - type: "op", - limits: true, - alwaysHandleSupSub: true, - symbol: false, - value: (0, _defineFunction2.ordargument)(bottom) - }, bottom.mode); - - var supsub = new _ParseNode2.default("supsub", { - base: bottomop, - sup: top, - sub: null - }, top.mode); - - return { - type: "mclass", - mclass: "mrel", - value: [supsub] - }; -}); - -var fontAliases = { - "\\Bbb": "\\mathbb", - "\\bold": "\\mathbf", - "\\frak": "\\mathfrak" -}; - -var singleCharIntegrals = { - "\u222B": "\\int", - "\u222C": "\\iint", - "\u222D": "\\iiint", - "\u222E": "\\oint" -}; - -// There are 2 flags for operators; whether they produce limits in -// displaystyle, and whether they are symbols and should grow in -// displaystyle. These four groups cover the four possible choices. - -// No limits, not symbols -defineFunction(["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], { - numArgs: 0 -}, function (context) { - return { - type: "op", - limits: false, - symbol: false, - body: context.funcName - }; -}); - -// Limits, not symbols -defineFunction(["\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", "\\min", "\\Pr", "\\sup"], { - numArgs: 0 -}, function (context) { - return { - type: "op", - limits: true, - symbol: false, - body: context.funcName - }; -}); - -// No limits, symbols -defineFunction(["\\int", "\\iint", "\\iiint", "\\oint", "\u222B", "\u222C", "\u222D", "\u222E"], { - numArgs: 0 -}, function (context) { - var fName = context.funcName; - if (fName.length === 1) { - fName = singleCharIntegrals[fName]; - } - return { - type: "op", - limits: false, - symbol: true, - body: fName - }; -}); - -// Sizing functions (handled in Parser.js explicitly, hence no handler) -defineFunction(["\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"], { numArgs: 0 }, null); - -// Style changing functions (handled in Parser.js explicitly, hence no -// handler) -defineFunction(["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], { numArgs: 0 }, null); - -// Old font changing functions -defineFunction(["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], { numArgs: 0 }, null); - -defineFunction([ -// styles -"\\mathrm", "\\mathit", "\\mathbf", - -// families -"\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", - -// aliases -"\\Bbb", "\\bold", "\\frak"], { - numArgs: 1, - greediness: 2 -}, function (context, args) { - var body = args[0]; - var func = context.funcName; - if (func in fontAliases) { - func = fontAliases[func]; - } - return { - type: "font", - font: func.slice(1), - body: body - }; -}); - -// Accents -defineFunction(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], { - numArgs: 1 -}, function (context, args) { - var base = args[0]; - - var isStretchy = !_utils2.default.contains(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot"], context.funcName); - - var isShifty = !isStretchy || _utils2.default.contains(["\\widehat", "\\widetilde"], context.funcName); - - return { - type: "accent", - label: context.funcName, - isStretchy: isStretchy, - isShifty: isShifty, - base: base - }; -}); - -// Text-mode accents -defineFunction(["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v"], { - numArgs: 1, - allowedInText: true, - allowedInMath: false -}, function (context, args) { - var base = args[0]; - - return { - type: "accent", - label: context.funcName, - isStretchy: false, - isShifty: true, - base: base - }; -}); - -// Horizontal stretchy braces -defineFunction(["\\overbrace", "\\underbrace"], { - numArgs: 1 -}, function (context, args) { - var base = args[0]; - return { - type: "horizBrace", - label: context.funcName, - isOver: /^\\over/.test(context.funcName), - base: base - }; -}); - -// Stretchy accents under the body -defineFunction(["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], { - numArgs: 1 -}, function (context, args) { - var base = args[0]; - return { - type: "accentUnder", - label: context.funcName, - base: base - }; -}); - -// Stretchy arrows with an optional argument -defineFunction(["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom"], { - numArgs: 1, - numOptionalArgs: 1 -}, function (context, args, optArgs) { - var below = optArgs[0]; - var body = args[0]; - return { - type: "xArrow", // x for extensible - label: context.funcName, - body: body, - below: below - }; -}); - -// enclose -defineFunction(["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\fbox"], { - numArgs: 1 -}, function (context, args) { - var body = args[0]; - return { - type: "enclose", - label: context.funcName, - body: body - }; -}); - -// Infix generalized fractions -defineFunction(["\\over", "\\choose", "\\atop"], { - numArgs: 0, - infix: true -}, function (context) { - var replaceWith = void 0; - switch (context.funcName) { - case "\\over": - replaceWith = "\\frac"; - break; - case "\\choose": - replaceWith = "\\binom"; - break; - case "\\atop": - replaceWith = "\\\\atopfrac"; - break; - default: - throw new Error("Unrecognized infix genfrac command"); - } - return { - type: "infix", - replaceWith: replaceWith, - token: context.token - }; -}); - -// Row breaks for aligned data -defineFunction(["\\\\", "\\cr"], { - numArgs: 0, - numOptionalArgs: 1, - argTypes: ["size"] -}, function (context, args, optArgs) { - var size = optArgs[0]; - return { - type: "cr", - size: size - }; -}); - -// Environment delimiters -defineFunction(["\\begin", "\\end"], { - numArgs: 1, - argTypes: ["text"] -}, function (context, args) { - var nameGroup = args[0]; - if (nameGroup.type !== "ordgroup") { - throw new _ParseError2.default("Invalid environment name", nameGroup); - } - var name = ""; - for (var i = 0; i < nameGroup.value.length; ++i) { - name += nameGroup.value[i].value; - } - return { - type: "environment", - name: name, - nameGroup: nameGroup - }; -}); - -// Box manipulation -defineFunction(["\\raisebox"], { - numArgs: 2, - argTypes: ["size", "text"], - allowedInText: true -}, function (context, args) { - var amount = args[0]; - var body = args[1]; - return { - type: "raisebox", - dy: amount, - body: body, - value: (0, _defineFunction2.ordargument)(body) - }; -}); - -// \verb and \verb* are dealt with directly in Parser.js. -// If we end up here, it's because of a failure to match the two delimiters -// in the regex in Lexer.js. LaTeX raises the following error when \verb is -// terminated by end of line (or file). -defineFunction(["\\verb"], { - numArgs: 0, - allowedInText: true -}, function (context) { - throw new _ParseError2.default("\\verb ended by end of line instead of matching delimiter"); -}); - -// Hyperlinks - - -// MathChoice - -},{"./ParseError":84,"./ParseNode":85,"./defineFunction":96,"./functions/color":104,"./functions/delimsizing":105,"./functions/genfrac":106,"./functions/href":107,"./functions/kern":108,"./functions/lap":109,"./functions/mathchoice":110,"./functions/mod":111,"./functions/op":112,"./functions/operatorname":113,"./functions/overline":114,"./functions/phantom":115,"./functions/rule":116,"./functions/smash":117,"./functions/text":118,"./functions/underline":119,"./utils":128}],104:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var htmlBuilder = function htmlBuilder(group, options) { - var elements = html.buildExpression(group.value.value, options.withColor(group.value.color), false); - - // \color isn't supposed to affect the type of the elements it contains. - // To accomplish this, we wrap the results in a fragment, so the inner - // elements will be able to directly interact with their neighbors. For - // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` - return new _buildCommon2.default.makeFragment(elements); -}; - - -var mathmlBuilder = function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.value, options); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - node.setAttribute("mathcolor", group.value.color); - - return node; -}; - -(0, _defineFunction2.default)({ - type: "color", - names: ["\\textcolor"], - props: { - numArgs: 2, - allowedInText: true, - greediness: 3, - argTypes: ["color", "original"] - }, - handler: function handler(context, args) { - var color = args[0]; - var body = args[1]; - return { - type: "color", - color: color.value, - value: (0, _defineFunction.ordargument)(body) - }; - }, - - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// TODO(kevinb): define these using macros -(0, _defineFunction2.default)({ - type: "color", - names: ["\\blue", "\\orange", "\\pink", "\\red", "\\green", "\\gray", "\\purple", "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", "\\mintA", "\\mintB", "\\mintC", "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", "\\grayF", "\\grayG", "\\grayH", "\\grayI", "\\kaBlue", "\\kaGreen"], - props: { - numArgs: 1, - allowedInText: true, - greediness: 3 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "color", - color: "katex-" + context.funcName.slice(1), - value: (0, _defineFunction.ordargument)(body) - }; - }, - - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],105:[function(require,module,exports){ -"use strict"; - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _delimiter = require("../delimiter"); - -var _delimiter2 = _interopRequireDefault(_delimiter); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _ParseError = require("../ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _utils = require("../utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Extra data needed for the delimiter handler down below -var delimiterSizes = { - "\\bigl": { mclass: "mopen", size: 1 }, - "\\Bigl": { mclass: "mopen", size: 2 }, - "\\biggl": { mclass: "mopen", size: 3 }, - "\\Biggl": { mclass: "mopen", size: 4 }, - "\\bigr": { mclass: "mclose", size: 1 }, - "\\Bigr": { mclass: "mclose", size: 2 }, - "\\biggr": { mclass: "mclose", size: 3 }, - "\\Biggr": { mclass: "mclose", size: 4 }, - "\\bigm": { mclass: "mrel", size: 1 }, - "\\Bigm": { mclass: "mrel", size: 2 }, - "\\biggm": { mclass: "mrel", size: 3 }, - "\\Biggm": { mclass: "mrel", size: 4 }, - "\\big": { mclass: "mord", size: 1 }, - "\\Big": { mclass: "mord", size: 2 }, - "\\bigg": { mclass: "mord", size: 3 }, - "\\Bigg": { mclass: "mord", size: 4 } -}; - -var delimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; - -// Delimiter functions -function checkDelimiter(delim, context) { - if (_utils2.default.contains(delimiters, delim.value)) { - return delim; - } else { - throw new _ParseError2.default("Invalid delimiter: '" + delim.value + "' after '" + context.funcName + "'", delim); - } -} - -(0, _defineFunction2.default)({ - type: "delimsizing", - names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var delim = checkDelimiter(args[0], context); - - return { - type: "delimsizing", - size: delimiterSizes[context.funcName].size, - mclass: delimiterSizes[context.funcName].mclass, - value: delim.value - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var delim = group.value.value; - - if (delim === ".") { - // Empty delimiters still count as elements, even though they don't - // show anything. - return _buildCommon2.default.makeSpan([group.value.mclass]); - } - - // Use delimiter.sizedDelim to generate the delimiter. - return _delimiter2.default.sizedDelim(delim, group.value.size, options, group.mode, [group.value.mclass]); - }, - mathmlBuilder: function mathmlBuilder(group) { - var children = []; - - if (group.value.value !== ".") { - children.push(mml.makeText(group.value.value, group.mode)); - } - - var node = new _mathMLTree2.default.MathNode("mo", children); - - if (group.value.mclass === "mopen" || group.value.mclass === "mclose") { - // Only some of the delimsizing functions act as fences, and they - // return "mopen" or "mclose" mclass. - node.setAttribute("fence", "true"); - } else { - // Explicitly disable fencing if it's not a fence, to override the - // defaults. - node.setAttribute("fence", "false"); - } - - return node; - } -}); - -(0, _defineFunction2.default)({ - type: "leftright", - names: ["\\left", "\\right"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var delim = checkDelimiter(args[0], context); - - // \left and \right are caught somewhere in Parser.js, which is - // why this data doesn't match what is in buildHTML. - return { - type: "leftright", - value: delim.value - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Build the inner expression - var inner = html.buildExpression(group.value.body, options, true); - - var innerHeight = 0; - var innerDepth = 0; - var hadMiddle = false; - - // Calculate its height and depth - for (var i = 0; i < inner.length; i++) { - if (inner[i].isMiddle) { - hadMiddle = true; - } else { - innerHeight = Math.max(inner[i].height, innerHeight); - innerDepth = Math.max(inner[i].depth, innerDepth); - } - } - - // The size of delimiters is the same, regardless of what style we are - // in. Thus, to correctly calculate the size of delimiter we need around - // a group, we scale down the inner size based on the size. - innerHeight *= options.sizeMultiplier; - innerDepth *= options.sizeMultiplier; - - var leftDelim = void 0; - if (group.value.left === ".") { - // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = html.makeNullDelimiter(options, ["mopen"]); - } else { - // Otherwise, use leftRightDelim to generate the correct sized - // delimiter. - leftDelim = _delimiter2.default.leftRightDelim(group.value.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); - } - // Add it to the beginning of the expression - inner.unshift(leftDelim); - - // Handle middle delimiters - if (hadMiddle) { - for (var _i = 1; _i < inner.length; _i++) { - var middleDelim = inner[_i]; - if (middleDelim.isMiddle) { - // Apply the options that were active when \middle was called - inner[_i] = _delimiter2.default.leftRightDelim(middleDelim.isMiddle.value, innerHeight, innerDepth, middleDelim.isMiddle.options, group.mode, []); - // Add back spaces shifted into the delimiter - var spaces = html.spliceSpaces(middleDelim.children, 0); - if (spaces) { - _buildCommon2.default.prependChildren(inner[_i], spaces); - } - } - } - } - - var rightDelim = void 0; - // Same for the right delimiter - if (group.value.right === ".") { - rightDelim = html.makeNullDelimiter(options, ["mclose"]); - } else { - rightDelim = _delimiter2.default.leftRightDelim(group.value.right, innerHeight, innerDepth, options, group.mode, ["mclose"]); - } - // Add it to the end of the expression. - inner.push(rightDelim); - - return _buildCommon2.default.makeSpan(["minner"], inner, options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.body, options); - - if (group.value.left !== ".") { - var leftNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.left, group.mode)]); - - leftNode.setAttribute("fence", "true"); - - inner.unshift(leftNode); - } - - if (group.value.right !== ".") { - var rightNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.right, group.mode)]); - - rightNode.setAttribute("fence", "true"); - - inner.push(rightNode); - } - - var outerNode = new _mathMLTree2.default.MathNode("mrow", inner); - - return outerNode; - } -}); - -(0, _defineFunction2.default)({ - type: "middle", - names: ["\\middle"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var delim = checkDelimiter(args[0], context); - if (!context.parser.leftrightDepth) { - throw new _ParseError2.default("\\middle without preceding \\left", delim); - } - - return { - type: "middle", - value: delim.value - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var middleDelim = void 0; - if (group.value.value === ".") { - middleDelim = html.makeNullDelimiter(options, []); - } else { - middleDelim = _delimiter2.default.sizedDelim(group.value.value, 1, options, group.mode, []); - middleDelim.isMiddle = { value: group.value.value, options: options }; - } - return middleDelim; - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var middleNode = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.middle, group.mode)]); - middleNode.setAttribute("fence", "true"); - return middleNode; - } -}); - -},{"../ParseError":84,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../delimiter":97,"../mathMLTree":121,"../utils":128}],106:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _delimiter = require("../delimiter"); - -var _delimiter2 = _interopRequireDefault(_delimiter); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _Style = require("../Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "genfrac", - names: ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac"], - props: { - numArgs: 2, - greediness: 2 - }, - handler: function handler(context, args) { - var numer = args[0]; - var denom = args[1]; - var hasBarLine = void 0; - var leftDelim = null; - var rightDelim = null; - var size = "auto"; - - switch (context.funcName) { - case "\\dfrac": - case "\\frac": - case "\\tfrac": - hasBarLine = true; - break; - case "\\\\atopfrac": - hasBarLine = false; - break; - case "\\dbinom": - case "\\binom": - case "\\tbinom": - hasBarLine = false; - leftDelim = "("; - rightDelim = ")"; - break; - default: - throw new Error("Unrecognized genfrac command"); - } - - switch (context.funcName) { - case "\\dfrac": - case "\\dbinom": - size = "display"; - break; - case "\\tfrac": - case "\\tbinom": - size = "text"; - break; - } - - return { - type: "genfrac", - numer: numer, - denom: denom, - hasBarLine: hasBarLine, - leftDelim: leftDelim, - rightDelim: rightDelim, - size: size - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). - // Figure out what style this fraction should be in based on the - // function used - var style = options.style; - if (group.value.size === "display") { - style = _Style2.default.DISPLAY; - } else if (group.value.size === "text") { - style = _Style2.default.TEXT; - } - - var nstyle = style.fracNum(); - var dstyle = style.fracDen(); - var newOptions = void 0; - - newOptions = options.havingStyle(nstyle); - var numerm = html.buildGroup(group.value.numer, newOptions, options); - - newOptions = options.havingStyle(dstyle); - var denomm = html.buildGroup(group.value.denom, newOptions, options); - - var rule = void 0; - var ruleWidth = void 0; - var ruleSpacing = void 0; - if (group.value.hasBarLine) { - rule = _buildCommon2.default.makeLineSpan("frac-line", options); - ruleWidth = rule.height; - ruleSpacing = rule.height; - } else { - rule = null; - ruleWidth = 0; - ruleSpacing = options.fontMetrics().defaultRuleThickness; - } - - // Rule 15b - var numShift = void 0; - var clearance = void 0; - var denomShift = void 0; - if (style.size === _Style2.default.DISPLAY.size) { - numShift = options.fontMetrics().num1; - if (ruleWidth > 0) { - clearance = 3 * ruleSpacing; - } else { - clearance = 7 * ruleSpacing; - } - denomShift = options.fontMetrics().denom1; - } else { - if (ruleWidth > 0) { - numShift = options.fontMetrics().num2; - clearance = ruleSpacing; - } else { - numShift = options.fontMetrics().num3; - clearance = 3 * ruleSpacing; - } - denomShift = options.fontMetrics().denom2; - } - - var frac = void 0; - if (ruleWidth === 0) { - // Rule 15c - var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); - if (candidateClearance < clearance) { - numShift += 0.5 * (clearance - candidateClearance); - denomShift += 0.5 * (clearance - candidateClearance); - } - - frac = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [{ type: "elem", elem: denomm, shift: denomShift }, { type: "elem", elem: numerm, shift: -numShift }] - }, options); - } else { - // Rule 15d - var axisHeight = options.fontMetrics().axisHeight; - - if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { - numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); - } - - if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { - denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); - } - - var midShift = -(axisHeight - 0.5 * ruleWidth); - - frac = _buildCommon2.default.makeVList({ - positionType: "individualShift", - children: [{ type: "elem", elem: denomm, shift: denomShift }, - // $FlowFixMe `rule` cannot be `null` here. - { type: "elem", elem: rule, shift: midShift }, { type: "elem", elem: numerm, shift: -numShift }] - }, options); - } - - // Since we manually change the style sometimes (with \dfrac or \tfrac), - // account for the possible size change here. - newOptions = options.havingStyle(style); - frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; - frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; - - // Rule 15e - var delimSize = void 0; - if (style.size === _Style2.default.DISPLAY.size) { - delimSize = options.fontMetrics().delim1; - } else { - delimSize = options.fontMetrics().delim2; - } - - var leftDelim = void 0; - var rightDelim = void 0; - if (group.value.leftDelim == null) { - leftDelim = html.makeNullDelimiter(options, ["mopen"]); - } else { - leftDelim = _delimiter2.default.customSizedDelim(group.value.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); - } - if (group.value.rightDelim == null) { - rightDelim = html.makeNullDelimiter(options, ["mclose"]); - } else { - rightDelim = _delimiter2.default.customSizedDelim(group.value.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); - } - - return _buildCommon2.default.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, _buildCommon2.default.makeSpan(["mfrac"], [frac]), rightDelim], options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var node = new _mathMLTree2.default.MathNode("mfrac", [mml.buildGroup(group.value.numer, options), mml.buildGroup(group.value.denom, options)]); - - if (!group.value.hasBarLine) { - node.setAttribute("linethickness", "0px"); - } - - if (group.value.leftDelim != null || group.value.rightDelim != null) { - var withDelims = []; - - if (group.value.leftDelim != null) { - var leftOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.leftDelim)]); - - leftOp.setAttribute("fence", "true"); - - withDelims.push(leftOp); - } - - withDelims.push(node); - - if (group.value.rightDelim != null) { - var rightOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.rightDelim)]); - - rightOp.setAttribute("fence", "true"); - - withDelims.push(rightOp); - } - - var outerNode = new _mathMLTree2.default.MathNode("mrow", withDelims); - - return outerNode; - } - - return node; - } -}); - -},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../delimiter":97,"../mathMLTree":121}],107:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "href", - names: ["\\href"], - props: { - numArgs: 2, - argTypes: ["url", "original"] - }, - handler: function handler(context, args) { - var body = args[1]; - var href = args[0].value; - return { - type: "href", - href: href, - body: (0, _defineFunction.ordargument)(body) - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var elements = html.buildExpression(group.value.body, options, false); - - var href = group.value.href; - - /** - * Determining class for anchors. - * 1. if it has the only element, use its class; - * 2. if it has more than two elements, and the classes - * of its first and last elements coincide, then use it; - * 3. otherwise, we will inject an empty s at both ends, - * with the same classes of both ends of elements, with the - * first span having the same class as the first element of body, - * and the second one the same as the last. - */ - - var classes = []; // Default behaviour for Case 3. - var first = void 0; // mathtype of the first child - var last = void 0; // mathtype of the last child - // Invariants: both first and last must be non-null if classes is null. - if (elements.length === 1) { - // Case 1 - classes = elements[0].classes; - } else if (elements.length >= 2) { - first = html.getTypeOfDomTree(elements[0]) || 'mord'; - last = html.getTypeOfDomTree(elements[elements.length - 1]) || 'mord'; - if (first === last) { - // Case 2 : type of both ends coincides - classes = [first]; - } else { - // Case 3: both ends have different types. - var anc = _buildCommon2.default.makeAnchor(href, [], elements, options); - return new _buildCommon2.default.makeFragment([new _buildCommon2.default.makeSpan([first], [], options), anc, new _buildCommon2.default.makeSpan([last], [], options)]); - } - } - return new _buildCommon2.default.makeAnchor(href, classes, elements, options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.body, options); - var math = new _mathMLTree2.default.MathNode("mrow", inner); - math.setAttribute("href", group.value.href); - return math; - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],108:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _units = require("../units"); - -var _ParseError = require("../ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// TODO: \hskip and \mskip should support plus and minus in lengths - -(0, _defineFunction2.default)({ - type: "kern", - names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], - props: { - numArgs: 1, - argTypes: ["size"], - allowedInText: true - }, - handler: function handler(context, args) { - var mathFunction = context.funcName[1] === 'm'; // \mkern, \mskip - var muUnit = args[0].value.unit === 'mu'; - if (mathFunction) { - if (!muUnit) { - typeof console !== "undefined" && console.warn("In LaTeX, " + context.funcName + " supports only mu units, " + ("not " + args[0].value.unit + " units")); - } - if (context.parser.mode !== "math") { - throw new _ParseError2.default("Can't use function '" + context.funcName + "' in text mode"); - } - } else { - // !mathFunction - if (muUnit) { - typeof console !== "undefined" && console.warn("In LaTeX, " + context.funcName + " does not support mu units"); - } - } - return { - type: "kern", - dimension: args[0].value - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Make an empty span for the rule - var rule = _buildCommon2.default.makeSpan(["mord", "rule"], [], options); - - if (group.value.dimension) { - var dimension = (0, _units.calculateSize)(group.value.dimension, options); - rule.style.marginLeft = dimension + "em"; - } - - return rule; - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var node = new _mathMLTree2.default.MathNode("mspace"); - - if (group.value.dimension) { - var dimension = (0, _units.calculateSize)(group.value.dimension, options); - node.setAttribute("width", dimension + "em"); - } - - return node; - } -}); -/* eslint no-console:0 */ -// Horizontal spacing commands - -},{"../ParseError":84,"../buildCommon":91,"../defineFunction":96,"../mathMLTree":121,"../units":127}],109:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "lap", - names: ["\\mathllap", "\\mathrlap", "\\mathclap"], - props: { - numArgs: 1, - allowedInText: true - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "lap", - alignment: context.funcName.slice(5), - body: body - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // mathllap, mathrlap, mathclap - var inner = void 0; - if (group.value.alignment === "clap") { - // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ - inner = _buildCommon2.default.makeSpan([], [html.buildGroup(group.value.body, options)]); - // wrap, since CSS will center a .clap > .inner > span - inner = _buildCommon2.default.makeSpan(["inner"], [inner], options); - } else { - inner = _buildCommon2.default.makeSpan(["inner"], [html.buildGroup(group.value.body, options)]); - } - var fix = _buildCommon2.default.makeSpan(["fix"], []); - return _buildCommon2.default.makeSpan(["mord", group.value.alignment], [inner, fix], options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - // mathllap, mathrlap, mathclap - var node = new _mathMLTree2.default.MathNode("mpadded", [mml.buildGroup(group.value.body, options)]); - - if (group.value.alignment !== "rlap") { - var offset = group.value.alignment === "llap" ? "-1" : "-0.5"; - node.setAttribute("lspace", offset + "width"); - } - node.setAttribute("width", "0px"); - - return node; - } -}); -// Horizontal overlap functions - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],110:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _Style = require("../Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var chooseMathStyle = function chooseMathStyle(group, options) { - var style = options.style; - if (style.size === _Style2.default.DISPLAY.size) { - return group.value.display; - } else if (style.size === _Style2.default.TEXT.size) { - return group.value.text; - } else if (style.size === _Style2.default.SCRIPT.size) { - return group.value.script; - } else if (style.size === _Style2.default.SCRIPTSCRIPT.size) { - return group.value.scriptscript; - } - return group.value.text; -}; - -(0, _defineFunction2.default)({ - type: "mathchoice", - names: ["\\mathchoice"], - props: { - numArgs: 4 - }, - handler: function handler(context, args) { - return { - type: "mathchoice", - display: (0, _defineFunction.ordargument)(args[0]), - text: (0, _defineFunction.ordargument)(args[1]), - script: (0, _defineFunction.ordargument)(args[2]), - scriptscript: (0, _defineFunction.ordargument)(args[3]) - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var body = chooseMathStyle(group, options); - var elements = html.buildExpression(body, options, false); - return new _buildCommon2.default.makeFragment(elements); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var body = chooseMathStyle(group, options); - var elements = mml.buildExpression(body, options, false); - return new _mathMLTree2.default.MathNode("mrow", elements); - } -}); - -},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],111:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _Style = require("../Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// \mod-type functions -var htmlModBuilder = function htmlModBuilder(group, options) { - var inner = []; - - if (group.value.modType === "bmod") { - // “\nonscript\mskip-\medmuskip\mkern5mu”, where \medmuskip is - // 4mu plus 2mu minus 1mu, translates to 1mu space in - // display/textstyle and 5mu space in script/scriptscriptstyle. - if (!options.style.isTight()) { - inner.push(_buildCommon2.default.makeSpan(["mspace", "muspace"], [], options)); - } else { - inner.push(_buildCommon2.default.makeSpan(["mspace", "thickspace"], [], options)); - } - } else if (options.style.size === _Style2.default.DISPLAY.size) { - inner.push(_buildCommon2.default.makeSpan(["mspace", "quad"], [], options)); - } else if (group.value.modType === "mod") { - inner.push(_buildCommon2.default.makeSpan(["mspace", "twelvemuspace"], [], options)); - } else { - inner.push(_buildCommon2.default.makeSpan(["mspace", "eightmuspace"], [], options)); - } - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(_buildCommon2.default.mathsym("(", group.mode)); - } - - if (group.value.modType !== "pod") { - var modInner = [_buildCommon2.default.mathsym("m", group.mode), _buildCommon2.default.mathsym("o", group.mode), _buildCommon2.default.mathsym("d", group.mode)]; - if (group.value.modType === "bmod") { - inner.push(_buildCommon2.default.makeSpan(["mbin"], modInner, options)); - // “\mkern5mu\nonscript\mskip-\medmuskip” as above - if (!options.style.isTight()) { - inner.push(_buildCommon2.default.makeSpan(["mspace", "muspace"], [], options)); - } else { - inner.push(_buildCommon2.default.makeSpan(["mspace", "thickspace"], [], options)); - } - } else { - Array.prototype.push.apply(inner, modInner); - inner.push(_buildCommon2.default.makeSpan(["mspace", "sixmuspace"], [], options)); - } - } - - if (group.value.value) { - Array.prototype.push.apply(inner, html.buildExpression(group.value.value, options, false)); - } - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(_buildCommon2.default.mathsym(")", group.mode)); - } - - return _buildCommon2.default.makeFragment(inner); -}; - -var mmlModBuilder = function mmlModBuilder(group, options) { - var inner = []; - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText("(", group.mode)])); - } - if (group.value.modType !== "pod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText("mod", group.mode)])); - } - if (group.value.value) { - var space = new _mathMLTree2.default.MathNode("mspace"); - space.setAttribute("width", "0.333333em"); - inner.push(space); - inner = inner.concat(mml.buildExpression(group.value.value, options)); - } - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [mml.makeText(")", group.mode)])); - } - - return new _mathMLTree2.default.MathNode("mo", inner); -}; - -(0, _defineFunction2.default)({ - type: "mod", - names: ["\\bmod"], - props: { - numArgs: 0 - }, - handler: function handler(context, args) { - return { - type: "mod", - modType: "bmod", - value: null - }; - }, - htmlBuilder: htmlModBuilder, - mathmlBuilder: mmlModBuilder -}); - -// Note: calling defineFunction with a type that's already been defined only -// works because the same htmlBuilder and mathmlBuilder are being used. -(0, _defineFunction2.default)({ - type: "mod", - names: ["\\pod", "\\pmod", "\\mod"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "mod", - modType: context.funcName.substr(1), - value: (0, _defineFunction.ordargument)(body) - }; - }, - htmlBuilder: htmlModBuilder, - mathmlBuilder: mmlModBuilder -}); - -},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],112:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _domTree = require("../domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _utils = require("../utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _Style = require("../Style"); - -var _Style2 = _interopRequireDefault(_Style); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Limits, symbols -var htmlBuilder = function htmlBuilder(group, options) { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup = void 0; - var subGroup = void 0; - var hasLimits = false; - if (group.type === "supsub") { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = group.value.sup; - subGroup = group.value.sub; - group = group.value.base; - hasLimits = true; - } - - var style = options.style; - - // Most operators have a large successor symbol, but these don't. - var noSuccessor = ["\\smallint"]; - - var large = false; - if (style.size === _Style2.default.DISPLAY.size && group.value.symbol && !_utils2.default.contains(noSuccessor, group.value.body)) { - - // Most symbol operators get larger in displaystyle (rule 13) - large = true; - } - - var base = void 0; - if (group.value.symbol) { - // If this is a symbol, create the symbol. - var fontName = large ? "Size2-Regular" : "Size1-Regular"; - base = _buildCommon2.default.makeSymbol(group.value.body, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); - } else if (group.value.value) { - // If this is a list, compose that list. - var inner = html.buildExpression(group.value.value, options, true); - if (inner.length === 1 && inner[0] instanceof _domTree2.default.symbolNode) { - base = inner[0]; - base.classes[0] = "mop"; // replace old mclass - } else { - base = _buildCommon2.default.makeSpan(["mop"], inner, options); - } - } else { - // Otherwise, this is a text operator. Build the text from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup - var output = []; - for (var i = 1; i < group.value.body.length; i++) { - output.push(_buildCommon2.default.mathsym(group.value.body[i], group.mode)); - } - base = _buildCommon2.default.makeSpan(["mop"], output, options); - } - - // If content of op is a single symbol, shift it vertically. - var baseShift = 0; - var slant = 0; - if (base instanceof _domTree2.default.symbolNode) { - // Shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; - - // The slant of the symbol is just its italic correction. - slant = base.italic; - } - - if (hasLimits) { - // IE 8 clips \int if it is in a display: inline-block. We wrap it - // in a new span so it is an inline, and works. - base = _buildCommon2.default.makeSpan([], [base]); - - var sub = void 0; - var sup = void 0; - // We manually have to handle the superscripts and subscripts. This, - // aside from the kern calculations, is copied from supsub. - if (supGroup) { - var elem = html.buildGroup(supGroup, options.havingStyle(style.sup()), options); - - sup = { - elem: elem, - kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) - }; - } - - if (subGroup) { - var _elem = html.buildGroup(subGroup, options.havingStyle(style.sub()), options); - - sub = { - elem: _elem, - kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) - }; - } - - // Build the final group as a vlist of the possible subscript, base, - // and possible superscript. - var finalGroup = void 0; - if (sup && sub) { - var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; - - finalGroup = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: bottom, - children: [{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: sub.elem, marginLeft: -slant + "em" }, { type: "kern", size: sub.kern }, { type: "elem", elem: base }, { type: "kern", size: sup.kern }, { type: "elem", elem: sup.elem, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }] - }, options); - } else if (sub) { - var top = base.height - baseShift; - - // Shift the limits by the slant of the symbol. Note - // that we are supposed to shift the limits by 1/2 of the slant, - // but since we are centering the limits adding a full slant of - // margin will shift by 1/2 that. - finalGroup = _buildCommon2.default.makeVList({ - positionType: "top", - positionData: top, - children: [{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: sub.elem, marginLeft: -slant + "em" }, { type: "kern", size: sub.kern }, { type: "elem", elem: base }] - }, options); - } else if (sup) { - var _bottom = base.depth + baseShift; - - finalGroup = _buildCommon2.default.makeVList({ - positionType: "bottom", - positionData: _bottom, - children: [{ type: "elem", elem: base }, { type: "kern", size: sup.kern }, { type: "elem", elem: sup.elem, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }] - }, options); - } else { - // This case probably shouldn't occur (this would mean the - // supsub was sending us a group with no superscript or - // subscript) but be safe. - return base; - } - - return _buildCommon2.default.makeSpan(["mop", "op-limits"], [finalGroup], options); - } else { - if (baseShift) { - base.style.position = "relative"; - base.style.top = baseShift + "em"; - } - - return base; - } -}; - -var mathmlBuilder = function mathmlBuilder(group, options) { - var node = void 0; - - // TODO(emily): handle big operators using the `largeop` attribute - - if (group.value.symbol) { - // This is a symbol. Just add the symbol. - node = new _mathMLTree2.default.MathNode("mo", [mml.makeText(group.value.body, group.mode)]); - } else if (group.value.value) { - // This is an operator with children. Add them. - node = new _mathMLTree2.default.MathNode("mo", mml.buildExpression(group.value.value, options)); - } else { - // This is a text operator. Add all of the characters from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup. - node = new _mathMLTree2.default.MathNode("mi", [new _mathMLTree2.default.TextNode(group.value.body.slice(1))]); - - // Append an . - // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 - var operator = new _mathMLTree2.default.MathNode("mo", [mml.makeText("\u2061", "text")]); - - return new _domTree2.default.documentFragment([node, operator]); - } - - return node; -}; - -var singleCharBigOps = { - "\u220F": "\\prod", - "\u2210": "\\coprod", - "\u2211": "\\sum", - "\u22C0": "\\bigwedge", - "\u22C1": "\\bigvee", - "\u22C2": "\\bigcap", - "\u22C3": "\\bigcap", - "\u2A00": "\\bigodot", - "\u2A01": "\\bigoplus", - "\u2A02": "\\bigotimes", - "\u2A04": "\\biguplus", - "\u2A06": "\\bigsqcup" -}; - -(0, _defineFunction2.default)({ - type: "op", - names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"], - props: { - numArgs: 0 - }, - handler: function handler(context, args) { - var fName = context.funcName; - if (fName.length === 1) { - fName = singleCharBigOps[fName]; - } - return { - type: "op", - limits: true, - symbol: true, - body: fName - }; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -// Note: calling defineFunction with a type that's already been defined only -// works because the same htmlBuilder and mathmlBuilder are being used. -(0, _defineFunction2.default)({ - type: "op", - names: ["\\mathop"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "op", - limits: false, - symbol: false, - value: (0, _defineFunction.ordargument)(body) - }; - }, - htmlBuilder: htmlBuilder, - mathmlBuilder: mathmlBuilder -}); - -},{"../Style":89,"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../domTree":98,"../mathMLTree":121,"../utils":128}],113:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _domTree = require("../domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// \operatorname -// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ -(0, _defineFunction2.default)({ - type: "operatorname", - names: ["\\operatorname"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "operatorname", - value: (0, _defineFunction.ordargument)(body) - }; - }, - - htmlBuilder: function htmlBuilder(group, options) { - var output = []; - if (group.value.value.length > 0) { - var letter = ""; - var mode = ""; - - // Consolidate Greek letter function names into symbol characters. - var temp = html.buildExpression(group.value.value, options, true); - - // All we want from temp are the letters. With them, we'll - // create a text operator similar to \tan or \cos. - for (var i = 0; i < temp.length; i++) { - letter = temp[i].value; - - // In the amsopn package, \newmcodes@ changes four - // characters, *-/:’, from math operators back into text. - // Given what is in temp, we have to address two of them. - letter = letter.replace(/\u2212/, "-"); // minus => hyphen - letter = letter.replace(/\u2217/, "*"); - - // Use math mode for Greek letters - mode = /[\u0391-\u03D7]/.test(letter) ? "math" : "text"; - output.push(_buildCommon2.default.mathsym(letter, mode)); - } - } - return _buildCommon2.default.makeSpan(["mop"], output, options); - }, - - mathmlBuilder: function mathmlBuilder(group, options) { - // The steps taken here are similar to the html version. - var output = []; - if (group.value.value.length > 0) { - var temp = mml.buildExpression(group.value.value, options); - - var word = ""; - for (var i = 0; i < temp.length; i++) { - word += temp[i].children[0].text; - } - word = word.replace(/\u2212/g, "-"); - word = word.replace(/\u2217/g, "*"); - output = [new _mathMLTree2.default.TextNode(word)]; - } - var identifier = new _mathMLTree2.default.MathNode("mi", output); - identifier.setAttribute("mathvariant", "normal"); - - // \u2061 is the same as ⁡ - // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp - var operator = new _mathMLTree2.default.MathNode("mo", [mml.makeText("\u2061", "text")]); - - return new _domTree2.default.documentFragment([identifier, operator]); - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../domTree":98,"../mathMLTree":121}],114:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "overline", - names: ["\\overline"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "overline", - body: body - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Overlines are handled in the TeXbook pg 443, Rule 9. - - // Build the inner group in the cramped style. - var innerGroup = html.buildGroup(group.value.body, options.havingCrampedStyle()); - - // Create the line above the body - var line = _buildCommon2.default.makeLineSpan("overline-line", options); - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: innerGroup }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: line }, { type: "kern", size: line.height }] - }, options); - - return _buildCommon2.default.makeSpan(["mord", "overline"], [vlist], options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); - operator.setAttribute("stretchy", "true"); - - var node = new _mathMLTree2.default.MathNode("mover", [mml.buildGroup(group.value.body, options), operator]); - node.setAttribute("accent", "true"); - - return node; - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],115:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "phantom", - names: ["\\phantom"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "phantom", - value: (0, _defineFunction.ordargument)(body) - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var elements = html.buildExpression(group.value.value, options.withPhantom(), false); - - // \phantom isn't supposed to affect the elements it contains. - // See "color" for more details. - return new _buildCommon2.default.makeFragment(elements); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.value, options); - return new _mathMLTree2.default.MathNode("mphantom", inner); - } -}); - - -(0, _defineFunction2.default)({ - type: "hphantom", - names: ["\\hphantom"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "hphantom", - value: (0, _defineFunction.ordargument)(body), - body: body - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var node = _buildCommon2.default.makeSpan([], [html.buildGroup(group.value.body, options.withPhantom())]); - node.height = 0; - node.depth = 0; - if (node.children) { - for (var i = 0; i < node.children.length; i++) { - node.children[i].height = 0; - node.children[i].depth = 0; - } - } - - // See smash for comment re: use of makeVList - node = _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: node }] - }, options); - - return node; - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.value, options); - var node = new _mathMLTree2.default.MathNode("mphantom", inner); - node.setAttribute("height", "0px"); - return node; - } -}); - -(0, _defineFunction2.default)({ - type: "vphantom", - names: ["\\vphantom"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "vphantom", - value: (0, _defineFunction.ordargument)(body), - body: body - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var inner = _buildCommon2.default.makeSpan(["inner"], [html.buildGroup(group.value.body, options.withPhantom())]); - var fix = _buildCommon2.default.makeSpan(["fix"], []); - return _buildCommon2.default.makeSpan(["mord", "rlap"], [inner, fix], options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var inner = mml.buildExpression(group.value.value, options); - var node = new _mathMLTree2.default.MathNode("mphantom", inner); - node.setAttribute("width", "0px"); - return node; - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],116:[function(require,module,exports){ -"use strict"; - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _units = require("../units"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "rule", - names: ["\\rule"], - props: { - numArgs: 2, - numOptionalArgs: 1, - argTypes: ["size", "size", "size"] - }, - handler: function handler(context, args, optArgs) { - var shift = optArgs[0]; - var width = args[0]; - var height = args[1]; - return { - type: "rule", - shift: shift && shift.value, - width: width.value, - height: height.value - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Make an empty span for the rule - var rule = _buildCommon2.default.makeSpan(["mord", "rule"], [], options); - - // Calculate the shift, width, and height of the rule, and account for units - var shift = 0; - if (group.value.shift) { - shift = (0, _units.calculateSize)(group.value.shift, options); - } - - var width = (0, _units.calculateSize)(group.value.width, options); - var height = (0, _units.calculateSize)(group.value.height, options); - - // Style the rule to the right size - rule.style.borderRightWidth = width + "em"; - rule.style.borderTopWidth = height + "em"; - rule.style.bottom = shift + "em"; - - // Record the height and width - rule.width = width; - rule.height = height + shift; - rule.depth = -shift; - // Font size is the number large enough that the browser will - // reserve at least `absHeight` space above the baseline. - // The 1.125 factor was empirically determined - rule.maxFontSize = height * 1.125 * options.sizeMultiplier; - - return rule; - }, - mathmlBuilder: function mathmlBuilder(group, options) { - // TODO(emily): Figure out if there's an actual way to draw black boxes - // in MathML. - var node = new _mathMLTree2.default.MathNode("mrow"); - - return node; - } -}); - -},{"../buildCommon":91,"../defineFunction":96,"../mathMLTree":121,"../units":127}],117:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "smash", - names: ["\\smash"], - props: { - numArgs: 1, - numOptionalArgs: 1, - allowedInText: true - }, - handler: function handler(context, args, optArgs) { - var smashHeight = false; - var smashDepth = false; - var tbArg = optArgs[0]; - if (tbArg) { - // Optional [tb] argument is engaged. - // ref: amsmath: \renewcommand{\smash}[1][tb]{% - // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% - var letter = ""; - for (var i = 0; i < tbArg.value.length; ++i) { - letter = tbArg.value[i].value; - if (letter === "t") { - smashHeight = true; - } else if (letter === "b") { - smashDepth = true; - } else { - smashHeight = false; - smashDepth = false; - break; - } - } - } else { - smashHeight = true; - smashDepth = true; - } - - var body = args[0]; - return { - type: "smash", - body: body, - smashHeight: smashHeight, - smashDepth: smashDepth - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var node = _buildCommon2.default.makeSpan(["mord"], [html.buildGroup(group.value.body, options)]); - - if (!group.value.smashHeight && !group.value.smashDepth) { - return node; - } - - if (group.value.smashHeight) { - node.height = 0; - // In order to influence makeVList, we have to reset the children. - if (node.children) { - for (var i = 0; i < node.children.length; i++) { - node.children[i].height = 0; - } - } - } - - if (group.value.smashDepth) { - node.depth = 0; - if (node.children) { - for (var _i = 0; _i < node.children.length; _i++) { - node.children[_i].depth = 0; - } - } - } - - // At this point, we've reset the TeX-like height and depth values. - // But the span still has an HTML line height. - // makeVList applies "display: table-cell", which prevents the browser - // from acting on that line height. So we'll call makeVList now. - - return _buildCommon2.default.makeVList({ - positionType: "firstBaseline", - children: [{ type: "elem", elem: node }] - }, options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var node = new _mathMLTree2.default.MathNode("mpadded", [mml.buildGroup(group.value.body, options)]); - - if (group.value.smashHeight) { - node.setAttribute("height", "0px"); - } - - if (group.value.smashDepth) { - node.setAttribute("depth", "0px"); - } - - return node; - } -}); -// smash, with optional [tb], as in AMS - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],118:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// Non-mathy text, possibly in a font -var textFunctionFonts = { - "\\text": undefined, "\\textrm": "mathrm", "\\textsf": "mathsf", - "\\texttt": "mathtt", "\\textnormal": "mathrm", "\\textbf": "mathbf", - "\\textit": "textit" -}; - - -(0, _defineFunction2.default)({ - type: "text", - names: ["\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", "\\textbf", "\\textit"], - props: { - numArgs: 1, - argTypes: ["text"], - greediness: 2, - allowedInText: true - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "text", - body: (0, _defineFunction.ordargument)(body), - font: textFunctionFonts[context.funcName] - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - var newOptions = options.withFont(group.value.font); - var inner = html.buildExpression(group.value.body, newOptions, true); - _buildCommon2.default.tryCombineChars(inner); - return _buildCommon2.default.makeSpan(["mord", "text"], inner, newOptions); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var body = group.value.body; - - // Convert each element of the body into MathML, and combine consecutive - // outputs into a single tag. In this way, we don't - // nest non-text items (e.g., $nested-math$) within an . - var inner = []; - var currentText = null; - for (var i = 0; i < body.length; i++) { - var _group = mml.buildGroup(body[i], options); - if (_group.type === 'mtext' && currentText != null) { - Array.prototype.push.apply(currentText.children, _group.children); - } else { - inner.push(_group); - if (_group.type === 'mtext') { - currentText = _group; - } - } - } - - // If there is a single tag in the end (presumably ), - // just return it. Otherwise, wrap them in an . - if (inner.length === 1) { - return inner[0]; - } else { - return new _mathMLTree2.default.MathNode("mrow", inner); - } - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],119:[function(require,module,exports){ -"use strict"; - -var _defineFunction = require("../defineFunction"); - -var _defineFunction2 = _interopRequireDefault(_defineFunction); - -var _buildCommon = require("../buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("../mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _buildHTML = require("../buildHTML"); - -var html = _interopRequireWildcard(_buildHTML); - -var _buildMathML = require("../buildMathML"); - -var mml = _interopRequireWildcard(_buildMathML); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _defineFunction2.default)({ - type: "underline", - names: ["\\underline"], - props: { - numArgs: 1 - }, - handler: function handler(context, args) { - var body = args[0]; - return { - type: "underline", - body: body - }; - }, - htmlBuilder: function htmlBuilder(group, options) { - // Underlines are handled in the TeXbook pg 443, Rule 10. - // Build the inner group. - var innerGroup = html.buildGroup(group.value.body, options); - - // Create the line above the body - var line = _buildCommon2.default.makeLineSpan("underline-line", options); - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList({ - positionType: "top", - positionData: innerGroup.height, - children: [{ type: "kern", size: line.height }, { type: "elem", elem: line }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: innerGroup }] - }, options); - - return _buildCommon2.default.makeSpan(["mord", "underline"], [vlist], options); - }, - mathmlBuilder: function mathmlBuilder(group, options) { - var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); - operator.setAttribute("stretchy", "true"); - - var node = new _mathMLTree2.default.MathNode("munder", [mml.buildGroup(group.value.body, options), operator]); - node.setAttribute("accentunder", "true"); - - return node; - } -}); - -},{"../buildCommon":91,"../buildHTML":92,"../buildMathML":93,"../defineFunction":96,"../mathMLTree":121}],120:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _fontMetricsData = require("./fontMetricsData"); - -var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData); - -var _symbols = require("./symbols"); - -var _symbols2 = _interopRequireDefault(_symbols); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -var _Token = require("./Token"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Provides context to macros defined by functions. Implemented by - * MacroExpander. - */ - - -/** Macro tokens (in reverse order). */ - -/** - * Predefined macros for KaTeX. - * This can be used to define some commands in terms of others. - */ - -var builtinMacros = {}; -exports.default = builtinMacros; - -// This function might one day accept an additional argument and do more things. - -function defineMacro(name, body) { - builtinMacros[name] = body; -} - -////////////////////////////////////////////////////////////////////// -// macro tools - -defineMacro("\\@firstoftwo", function (context) { - var args = context.consumeArgs(2); - return { tokens: args[0], numArgs: 0 }; -}); - -defineMacro("\\@ifnextchar", function (context) { - var args = context.consumeArgs(3); // symbol, if, else - var nextToken = context.future(); - if (args[0].length === 1 && args[0][0].text === nextToken.text) { - return { tokens: args[1], numArgs: 0 }; - } else { - return { tokens: args[2], numArgs: 0 }; - } -}); - -// \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} -defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); - -////////////////////////////////////////////////////////////////////// -// basics -defineMacro("\\bgroup", "{"); -defineMacro("\\egroup", "}"); -defineMacro("\\begingroup", "{"); -defineMacro("\\endgroup", "}"); - -// Unicode double-struck letters -defineMacro("\u2102", "\\mathbb{C}"); -defineMacro("\u210D", "\\mathbb{H}"); -defineMacro("\u2115", "\\mathbb{N}"); -defineMacro("\u2119", "\\mathbb{P}"); -defineMacro("\u211A", "\\mathbb{Q}"); -defineMacro("\u211D", "\\mathbb{R}"); -defineMacro("\u2124", "\\mathbb{Z}"); - -// \llap and \rlap render their contents in text mode -defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); -defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); -defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); - -////////////////////////////////////////////////////////////////////// -// amsmath.sty -// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf - -// \def\overset#1#2{\binrel@{#2}\binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} -defineMacro("\\overset", "\\mathop{#2}\\limits^{#1}"); -defineMacro("\\underset", "\\mathop{#2}\\limits_{#1}"); - -// \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} -defineMacro("\\boxed", "\\fbox{\\displaystyle{#1}}"); - -// \def\iff{\DOTSB\;\Longleftrightarrow\;} -// \def\implies{\DOTSB\;\Longrightarrow\;} -// \def\impliedby{\DOTSB\;\Longleftarrow\;} -defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); -defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); -defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); - -// AMSMath's automatic \dots, based on \mdots@@ macro. -var dotsByToken = { - ',': '\\dotsc', - '\\not': '\\dotsb', - // \keybin@ checks for the following: - '+': '\\dotsb', - '=': '\\dotsb', - '<': '\\dotsb', - '>': '\\dotsb', - '-': '\\dotsb', - '*': '\\dotsb', - ':': '\\dotsb', - // Symbols whose definition starts with \DOTSB: - '\\DOTSB': '\\dotsb', - '\\coprod': '\\dotsb', - '\\bigvee': '\\dotsb', - '\\bigwedge': '\\dotsb', - '\\biguplus': '\\dotsb', - '\\bigcap': '\\dotsb', - '\\bigcup': '\\dotsb', - '\\prod': '\\dotsb', - '\\sum': '\\dotsb', - '\\bigotimes': '\\dotsb', - '\\bigoplus': '\\dotsb', - '\\bigodot': '\\dotsb', - '\\bigsqcup': '\\dotsb', - '\\implies': '\\dotsb', - '\\impliedby': '\\dotsb', - '\\And': '\\dotsb', - '\\longrightarrow': '\\dotsb', - '\\Longrightarrow': '\\dotsb', - '\\longleftarrow': '\\dotsb', - '\\Longleftarrow': '\\dotsb', - '\\longleftrightarrow': '\\dotsb', - '\\Longleftrightarrow': '\\dotsb', - '\\mapsto': '\\dotsb', - '\\longmapsto': '\\dotsb', - '\\hookrightarrow': '\\dotsb', - '\\iff': '\\dotsb', - '\\doteq': '\\dotsb', - // Symbols whose definition starts with \mathbin: - '\\mathbin': '\\dotsb', - '\\bmod': '\\dotsb', - // Symbols whose definition starts with \mathrel: - '\\mathrel': '\\dotsb', - '\\relbar': '\\dotsb', - '\\Relbar': '\\dotsb', - '\\xrightarrow': '\\dotsb', - '\\xleftarrow': '\\dotsb', - // Symbols whose definition starts with \DOTSI: - '\\DOTSI': '\\dotsi', - '\\int': '\\dotsi', - '\\oint': '\\dotsi', - '\\iint': '\\dotsi', - '\\iiint': '\\dotsi', - '\\iiiint': '\\dotsi', - '\\idotsint': '\\dotsi', - // Symbols whose definition starts with \DOTSX: - '\\DOTSX': '\\dotsx' -}; - -defineMacro("\\dots", function (context) { - // TODO: If used in text mode, should expand to \textellipsis. - // However, in KaTeX, \textellipsis and \ldots behave the same - // (in text mode), and it's unlikely we'd see any of the math commands - // that affect the behavior of \dots when in text mode. So fine for now - // (until we support \ifmmode ... \else ... \fi). - var thedots = '\\dotso'; - var next = context.expandAfterFuture().text; - if (next in dotsByToken) { - thedots = dotsByToken[next]; - } else if (next.substr(0, 4) === '\\not') { - thedots = '\\dotsb'; - } else if (next in _symbols2.default.math) { - if (_utils2.default.contains(['bin', 'rel'], _symbols2.default.math[next].group)) { - thedots = '\\dotsb'; - } - } - return thedots; -}); - -var spaceAfterDots = { - // \rightdelim@ checks for the following: - ')': true, - ']': true, - '\\rbrack': true, - '\\}': true, - '\\rbrace': true, - '\\rangle': true, - '\\rceil': true, - '\\rfloor': true, - '\\rgroup': true, - '\\rmoustache': true, - '\\right': true, - '\\bigr': true, - '\\biggr': true, - '\\Bigr': true, - '\\Biggr': true, - // \extra@ also tests for the following: - '$': true, - // \extrap@ checks for the following: - ';': true, - '.': true, - ',': true -}; - -defineMacro("\\dotso", function (context) { - var next = context.future().text; - if (next in spaceAfterDots) { - return "\\ldots\\,"; - } else { - return "\\ldots"; - } -}); - -defineMacro("\\dotsc", function (context) { - var next = context.future().text; - // \dotsc uses \extra@ but not \extrap@, instead specially checking for - // ';' and '.', but doesn't check for ','. - if (next in spaceAfterDots && next !== ',') { - return "\\ldots\\,"; - } else { - return "\\ldots"; - } -}); - -defineMacro("\\cdots", function (context) { - var next = context.future().text; - if (next in spaceAfterDots) { - return "\\@cdots\\,"; - } else { - return "\\@cdots"; - } -}); - -defineMacro("\\dotsb", "\\cdots"); -defineMacro("\\dotsm", "\\cdots"); -defineMacro("\\dotsi", "\\!\\cdots"); -// amsmath doesn't actually define \dotsx, but \dots followed by a macro -// starting with \DOTSX implies \dotso, and then \extra@ detects this case -// and forces the added `\,`. -defineMacro("\\dotsx", "\\ldots\\,"); - -// \let\DOTSI\relax -// \let\DOTSB\relax -// \let\DOTSX\relax -defineMacro("\\DOTSI", "\\relax"); -defineMacro("\\DOTSB", "\\relax"); -defineMacro("\\DOTSX", "\\relax"); - -// http://texdoc.net/texmf-dist/doc/latex/amsmath/amsmath.pdf -defineMacro("\\thinspace", "\\,"); // \let\thinspace\, -defineMacro("\\medspace", "\\:"); // \let\medspace\: -defineMacro("\\thickspace", "\\;"); // \let\thickspace\; - -////////////////////////////////////////////////////////////////////// -// LaTeX source2e - -// \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} -// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't -// support \@ yet, so that's omitted, and we add \text so that the result -// doesn't look funny in math mode. -defineMacro("\\TeX", "\\textrm{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}"); - -// \DeclareRobustCommand{\LaTeX}{L\kern-.36em% -// {\sbox\z@ T% -// \vbox to\ht\z@{\hbox{\check@mathfonts -// \fontsize\sf@size\z@ -// \math@fontsfalse\selectfont -// A}% -// \vss}% -// }% -// \kern-.15em% -// \TeX} -// This code aligns the top of the A with the T (from the perspective of TeX's -// boxes, though visually the A appears to extend above slightly). -// We compute the corresponding \raisebox when A is rendered at \scriptsize, -// which is size3, which has a scale factor of 0.7 (see Options.js). -var latexRaiseA = _fontMetricsData2.default['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * _fontMetricsData2.default['Main-Regular']["A".charCodeAt(0)][1] + "em"; -defineMacro("\\LaTeX", "\\textrm{L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptsize A}" + "\\kern-.15em\\TeX}"); - -// New KaTeX logo based on tweaking LaTeX logo -defineMacro("\\KaTeX", "\\textrm{K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptsize A}" + "\\kern-.15em\\TeX}"); - -// \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} -// \def\@hspace#1{\hskip #1\relax} -// KaTeX doesn't do line breaks, so \hspace and \hspace* are the same as \kern -defineMacro("\\hspace", "\\@ifstar\\kern\\kern"); - -////////////////////////////////////////////////////////////////////// -// mathtools.sty - -//\providecommand\ordinarycolon{:} -defineMacro("\\ordinarycolon", ":"); -//\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} -//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 -defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); -// \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} -defineMacro("\\dblcolon", "\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon"); -// \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} -defineMacro("\\coloneqq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}="); -// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} -defineMacro("\\Coloneqq", "\\dblcolon\\mathrel{\\mkern-1.2mu}="); -// \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} -defineMacro("\\coloneq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); -// \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} -defineMacro("\\Coloneq", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); -// \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} -defineMacro("\\eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\vcentcolon"); -// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} -defineMacro("\\Eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\dblcolon"); -// \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} -defineMacro("\\eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon"); -// \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} -defineMacro("\\Eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon"); -// \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} -defineMacro("\\colonapprox", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx"); -// \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} -defineMacro("\\Colonapprox", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx"); -// \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} -defineMacro("\\colonsim", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim"); -// \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} -defineMacro("\\Colonsim", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim"); - -////////////////////////////////////////////////////////////////////// -// colonequals.sty - -// Alternate names for mathtools's macros: -defineMacro("\\ratio", "\\vcentcolon"); -defineMacro("\\coloncolon", "\\dblcolon"); -defineMacro("\\colonequals", "\\coloneqq"); -defineMacro("\\coloncolonequals", "\\Coloneqq"); -defineMacro("\\equalscolon", "\\eqqcolon"); -defineMacro("\\equalscoloncolon", "\\Eqqcolon"); -defineMacro("\\colonminus", "\\coloneq"); -defineMacro("\\coloncolonminus", "\\Coloneq"); -defineMacro("\\minuscolon", "\\eqcolon"); -defineMacro("\\minuscoloncolon", "\\Eqcolon"); -// \colonapprox name is same in mathtools and colonequals. -defineMacro("\\coloncolonapprox", "\\Colonapprox"); -// \colonsim name is same in mathtools and colonequals. -defineMacro("\\coloncolonsim", "\\Colonsim"); - -// Additional macros, implemented by analogy with mathtools definitions: -defineMacro("\\simcolon", "\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon"); -defineMacro("\\simcoloncolon", "\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon"); -defineMacro("\\approxcolon", "\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon"); -defineMacro("\\approxcoloncolon", "\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon"); - -// Present in newtxmath, pxfonts and txfonts -// TODO: The unicode character U+220C ∌ should be added to the font, and this -// macro turned into a propper defineSymbol in symbols.js. That way, the -// MathML result will be much cleaner. -defineMacro("\\notni", "\\not\\ni"); - -},{"./Token":90,"./fontMetricsData":102,"./symbols":125,"./utils":128}],121:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This node represents a general purpose MathML node of any type. The - * constructor requires the type of node to create (for example, `"mo"` or - * `"mspace"`, corresponding to `` and `` tags). - */ - - -/** - * MathML node types used in KaTeX. For a complete list of MathML nodes, see - * https://developer.mozilla.org/en-US/docs/Web/MathML/Element. - */ -var MathNode = function () { - function MathNode(type, children) { - (0, _classCallCheck3.default)(this, MathNode); - - this.type = type; - this.attributes = {}; - this.children = children || []; - } - - /** - * Sets an attribute on a MathML node. MathML depends on attributes to convey a - * semantic content, so this is used heavily. - */ - - - (0, _createClass3.default)(MathNode, [{ - key: "setAttribute", - value: function setAttribute(name, value) { - this.attributes[name] = value; - } - - /** - * Converts the math node into a MathML-namespaced DOM element. - */ - - }, { - key: "toNode", - value: function toNode() { - var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(this.children), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var child = _step.value; - - node.appendChild(child.toNode()); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return node; - } - - /** - * Converts the math node into an HTML markup string. - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = "<" + this.type; - - // Add the attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += _utils2.default.escape(this.attributes[attr]); - markup += "\""; - } - } - - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += ""; - - return markup; - } - }]); - return MathNode; -}(); - -/** - * This node represents a piece of text. - */ - -/** - * These objects store data about MathML nodes. This is the MathML equivalent - * of the types in domTree.js. Since MathML handles its own rendering, and - * since we're mainly using MathML to improve accessibility, we don't manage - * any of the styling state that the plain DOM nodes do. - * - * The `toNode` and `toMarkup` functions work simlarly to how they do in - * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. - */ - -var TextNode = function () { - function TextNode(text) { - (0, _classCallCheck3.default)(this, TextNode); - - this.text = text; - } - - /** - * Converts the text node into a DOM text node. - */ - - - (0, _createClass3.default)(TextNode, [{ - key: "toNode", - value: function toNode() { - return document.createTextNode(this.text); - } - - /** - * Converts the text node into HTML markup (which is just the text itself). - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - return _utils2.default.escape(this.text); - } - }]); - return TextNode; -}(); - -exports.default = { - MathNode: MathNode, - TextNode: TextNode -}; - -},{"./utils":128,"babel-runtime/core-js/get-iterator":3,"babel-runtime/helpers/classCallCheck":8,"babel-runtime/helpers/createClass":9}],122:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _Parser = require("./Parser"); - -var _Parser2 = _interopRequireDefault(_Parser); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Parses an expression using a Parser, then returns the parsed result. - */ -var parseTree = function parseTree(toParse, settings) { - if (!(typeof toParse === 'string' || toParse instanceof String)) { - throw new TypeError('KaTeX can only parse string typed expression'); - } - var parser = new _Parser2.default(toParse, settings); - - return parser.parse(); -}; -/** - * Provides a single function for parsing an expression using a Parser - * TODO(emily): Remove this - */ - -exports.default = parseTree; - -},{"./Parser":86}],123:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray"); - -var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); - -var _domTree = require("./domTree"); - -var _domTree2 = _interopRequireDefault(_domTree); - -var _buildCommon = require("./buildCommon"); - -var _buildCommon2 = _interopRequireDefault(_buildCommon); - -var _mathMLTree = require("./mathMLTree"); - -var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - -var _utils = require("./utils"); - -var _utils2 = _interopRequireDefault(_utils); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * This file provides support to buildMathML.js and buildHTML.js - * for stretchy wide elements rendered from SVG files - * and other CSS trickery. - */ - -var stretchyCodePoint = { - widehat: "^", - widetilde: "~", - utilde: "~", - overleftarrow: "\u2190", - underleftarrow: "\u2190", - xleftarrow: "\u2190", - overrightarrow: "\u2192", - underrightarrow: "\u2192", - xrightarrow: "\u2192", - underbrace: "\u23B5", - overbrace: "\u23DE", - overleftrightarrow: "\u2194", - underleftrightarrow: "\u2194", - xleftrightarrow: "\u2194", - Overrightarrow: "\u21D2", - xRightarrow: "\u21D2", - overleftharpoon: "\u21BC", - xleftharpoonup: "\u21BC", - overrightharpoon: "\u21C0", - xrightharpoonup: "\u21C0", - xLeftarrow: "\u21D0", - xLeftrightarrow: "\u21D4", - xhookleftarrow: "\u21A9", - xhookrightarrow: "\u21AA", - xmapsto: "\u21A6", - xrightharpoondown: "\u21C1", - xleftharpoondown: "\u21BD", - xrightleftharpoons: "\u21CC", - xleftrightharpoons: "\u21CB", - xtwoheadleftarrow: "\u219E", - xtwoheadrightarrow: "\u21A0", - xlongequal: "=", - xtofrom: "\u21C4" -}; - -var mathMLnode = function mathMLnode(label) { - var node = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(stretchyCodePoint[label.substr(1)])]); - node.setAttribute("stretchy", "true"); - return node; -}; - -// Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. -// Copyright (c) 2009-2010, Design Science, Inc. () -// Copyright (c) 2014-2017 Khan Academy () -// Licensed under the SIL Open Font License, Version 1.1. -// See \nhttp://scripts.sil.org/OFL - -// Very Long SVGs -// Many of the KaTeX stretchy wide elements use a long SVG image and an -// overflow: hidden tactic to achieve a stretchy image while avoiding -// distortion of arrowheads or brace corners. - -// The SVG typically contains a very long (400 em) arrow. - -// The SVG is in a container span that has overflow: hidden, so the span -// acts like a window that exposes only part of the SVG. - -// The SVG always has a longer, thinner aspect ratio than the container span. -// After the SVG fills 100% of the height of the container span, -// there is a long arrow shaft left over. That left-over shaft is not shown. -// Instead, it is sliced off because the span's CSS has overflow: hidden. - -// Thus, the reader sees an arrow that matches the subject matter width -// without distortion. - -// Some functions, such as \cancel, need to vary their aspect ratio. These -// functions do not get the overflow SVG treatment. - -// Second Brush Stroke -// Low resolution monitors struggle to display images in fine detail. -// So browsers apply anti-aliasing. A long straight arrow shaft therefore -// will sometimes appear as if it has a blurred edge. - -// To mitigate this, these SVG files contain a second "brush-stroke" on the -// arrow shafts. That is, a second long thin rectangular SVG path has been -// written directly on top of each arrow shaft. This reinforcement causes -// some of the screen pixels to display as black instead of the anti-aliased -// gray pixel that a single path would generate. So we get arrow shafts -// whose edges appear to be sharper. - -// In the katexImagesData object just below, the dimensions all -// correspond to path geometry inside the relevant SVG. -// For example, \overrightarrow uses the same arrowhead as glyph U+2192 -// from the KaTeX Main font. The scaling factor is 1000. -// That is, inside the font, that arrowhead is 522 units tall, which -// corresponds to 0.522 em inside the document. - -var katexImagesData = { - // path(s), minWidth, height, align - overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], - overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], - underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], - underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], - xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], - xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], - Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], - xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], - xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], - overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], - xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], - xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], - overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], - xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], - xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], - xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], - xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], - xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], - - overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], - overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], - underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], - underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], - xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], - xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], - xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], - xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], - xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], - xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], - overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], - underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], - overgroup: [["leftgroup", "rightgroup"], 0.888, 342], - undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], - xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], - xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528] -}; - -var groupLength = function groupLength(arg) { - if (arg.type === "ordgroup") { - return arg.value.length; - } else { - return 1; - } -}; - -var svgSpan = function svgSpan(group, options) { - // Create a span with inline SVG for the element. - function buildSvgSpan_() { - var viewBoxWidth = 400000; // default - var label = group.value.label.substr(1); - if (_utils2.default.contains(["widehat", "widetilde", "utilde"], label)) { - // There are four SVG images available for each function. - // Choose a taller image when there are more characters. - var numChars = groupLength(group.value.base); - var viewBoxHeight = void 0; - var pathName = void 0; - var _height = void 0; - - if (numChars > 5) { - viewBoxHeight = label === "widehat" ? 420 : 312; - viewBoxWidth = label === "widehat" ? 2364 : 2340; - // Next get the span height, in 1000 ems - _height = label === "widehat" ? 0.42 : 0.34; - pathName = (label === "widehat" ? "widehat" : "tilde") + "4"; - } else { - var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; - if (label === "widehat") { - viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; - viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; - _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; - pathName = "widehat" + imgIndex; - } else { - viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; - viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; - _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; - pathName = "tilde" + imgIndex; - } - } - var path = new _domTree2.default.pathNode(pathName); - var svgNode = new _domTree2.default.svgNode([path], { - "width": "100%", - "height": _height + "em", - "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, - "preserveAspectRatio": "none" - }); - return { - span: _buildCommon2.default.makeSpan([], [svgNode], options), - minWidth: 0, - height: _height - }; - } else { - var spans = []; - - var _katexImagesData$labe = (0, _slicedToArray3.default)(katexImagesData[label], 4), - paths = _katexImagesData$labe[0], - _minWidth = _katexImagesData$labe[1], - _viewBoxHeight = _katexImagesData$labe[2], - align1 = _katexImagesData$labe[3]; - - var _height2 = _viewBoxHeight / 1000; - - var numSvgChildren = paths.length; - var widthClasses = void 0; - var aligns = void 0; - if (numSvgChildren === 1) { - widthClasses = ["hide-tail"]; - aligns = [align1]; - } else if (numSvgChildren === 2) { - widthClasses = ["halfarrow-left", "halfarrow-right"]; - aligns = ["xMinYMin", "xMaxYMin"]; - } else if (numSvgChildren === 3) { - widthClasses = ["brace-left", "brace-center", "brace-right"]; - aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; - } else { - throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); - } - - for (var i = 0; i < numSvgChildren; i++) { - var _path = new _domTree2.default.pathNode(paths[i]); - - var _svgNode = new _domTree2.default.svgNode([_path], { - "width": "400em", - "height": _height2 + "em", - "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, - "preserveAspectRatio": aligns[i] + " slice" - }); - - var _span = _buildCommon2.default.makeSpan([widthClasses[i]], [_svgNode], options); - if (numSvgChildren === 1) { - return { span: _span, minWidth: _minWidth, height: _height2 }; - } else { - _span.style.height = _height2 + "em"; - spans.push(_span); - } - } - - return { - span: _buildCommon2.default.makeSpan(["stretchy"], spans, options), - minWidth: _minWidth, - height: _height2 - }; - } - } // buildSvgSpan_() - - var _buildSvgSpan_ = buildSvgSpan_(), - span = _buildSvgSpan_.span, - minWidth = _buildSvgSpan_.minWidth, - height = _buildSvgSpan_.height; - - // Note that we are returning span.depth = 0. - // Any adjustments relative to the baseline must be done in buildHTML. - - - span.height = height; - span.style.height = height + "em"; - if (minWidth > 0) { - span.style.minWidth = minWidth + "em"; - } - - return span; -}; - -var encloseSpan = function encloseSpan(inner, label, pad, options) { - // Return an image span for \cancel, \bcancel, \xcancel, or \fbox - var img = void 0; - var totalHeight = inner.height + inner.depth + 2 * pad; - - if (/fbox|color/.test(label)) { - img = _buildCommon2.default.makeSpan(["stretchy", label], [], options); - - if (label === "fbox") { - var color = options.color && options.getColor(); - if (color) { - img.style.borderColor = color; - } - } - } else { - // \cancel, \bcancel, or \xcancel - // Since \cancel's SVG is inline and it omits the viewBox attribute, - // its stroke-width will not vary with span area. - - var lines = []; - if (/^[bx]cancel$/.test(label)) { - lines.push(new _domTree2.default.lineNode({ - "x1": "0", - "y1": "0", - "x2": "100%", - "y2": "100%", - "stroke-width": "0.046em" - })); - } - - if (/^x?cancel$/.test(label)) { - lines.push(new _domTree2.default.lineNode({ - "x1": "0", - "y1": "100%", - "x2": "100%", - "y2": "0", - "stroke-width": "0.046em" - })); - } - - var svgNode = new _domTree2.default.svgNode(lines, { - "width": "100%", - "height": totalHeight + "em" - }); - - img = _buildCommon2.default.makeSpan([], [svgNode], options); - } - - img.height = totalHeight; - img.style.height = totalHeight + "em"; - - return img; -}; - -var ruleSpan = function ruleSpan(className, options) { - // Get a big square image. The parent span will hide the overflow. - var pathNode = new _domTree2.default.pathNode('bigRule'); - var svg = new _domTree2.default.svgNode([pathNode], { - "width": "400em", - "height": "400em", - "viewBox": "0 0 400000 400000", - "preserveAspectRatio": "xMinYMin slice" - }); - return _buildCommon2.default.makeSpan([className, "hide-tail"], [svg], options); -}; - -exports.default = { - encloseSpan: encloseSpan, - mathMLnode: mathMLnode, - ruleSpan: ruleSpan, - svgSpan: svgSpan -}; - -},{"./buildCommon":91,"./domTree":98,"./mathMLTree":121,"./utils":128,"babel-runtime/helpers/slicedToArray":10}],124:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var path = { - // bigRule provides a big square image for frac-lines, etc. - // The actual rendered rule is smaller, controlled by overflow:hidden. - bigRule: 'M0 0 h400000 v400000 h-400000z M0 0 h400000 v400000 h-400000z', - - // sqrtMain path geometry is from glyph U221A in the font KaTeX Main - sqrtMain: 'M95 622c-2.667 0-7.167-2.667-13.5\n-8S72 604 72 600c0-2 .333-3.333 1-4 1.333-2.667 23.833-20.667 67.5-54s\n65.833-50.333 66.5-51c1.333-1.333 3-2 5-2 4.667 0 8.667 3.333 12 10l173\n378c.667 0 35.333-71 104-213s137.5-285 206.5-429S812 17.333 812 14c5.333\n-9.333 12-14 20-14h399166v40H845.272L620 507 385 993c-2.667 4.667-9 7-19\n7-6 0-10-1-12-3L160 575l-65 47zM834 0h399166v40H845z', - - // size1 is from glyph U221A in the font KaTeX_Size1-Regular - sqrtSize1: 'M263 601c.667 0 18 39.667 52 119s68.167\n 158.667 102.5 238 51.833 119.333 52.5 120C810 373.333 980.667 17.667 982 11\nc4.667-7.333 11-11 19-11h398999v40H1012.333L741 607c-38.667 80.667-84 175-136\n 283s-89.167 185.333-111.5 232-33.833 70.333-34.5 71c-4.667 4.667-12.333 7-23\n 7l-12-1-109-253c-72.667-168-109.333-252-110-252-10.667 8-22 16.667-34 26-22\n 17.333-33.333 26-34 26l-26-26 76-59 76-60zM1001 0h398999v40H1012z', - - // size2 is from glyph U221A in the font KaTeX_Size2-Regular - sqrtSize2: 'M1001 0h398999v40H1013.084S929.667 308 749\n 880s-277 876.333-289 913c-4.667 4.667-12.667 7-24 7h-12c-1.333-3.333-3.667\n-11.667-7-25-35.333-125.333-106.667-373.333-214-744-10 12-21 25-33 39l-32 39\nc-6-5.333-15-14-27-26l25-30c26.667-32.667 52-63 76-91l52-60 208 722c56-175.333\n 126.333-397.333 211-666s153.833-488.167 207.5-658.5C944.167 129.167 975 32.667\n 983 10c4-6.667 10-10 18-10zm0 0h398999v40H1013z', - - // size3 is from glyph U221A in the font KaTeX_Size3-Regular - sqrtSize3: 'M424 2398c-1.333-.667-38.5-172-111.5-514 S202.667 1370.667 202\n 1370c0-2-10.667 14.333-32 49-4.667 7.333-9.833 15.667-15.5 25s-9.833 16-12.5\n 20l-5 7c-4-3.333-8.333-7.667-13-13l-13-13 76-122 77-121 209 968c0-2 84.667\n-361.667 254-1079C896.333 373.667 981.667 13.333 983 10c4-6.667 10-10 18-10\nh398999v40H1014.622S927.332 418.667 742 1206c-185.333 787.333-279.333 1182.333\n-282 1185-2 6-10 9-24 9-8 0-12-.667-12-2zM1001 0h398999v40H1014z', - - // size4 is from glyph U221A in the font KaTeX_Size4-Regular - sqrtSize4: 'M473 2713C812.333 913.667 982.333 13 983 11c3.333-7.333 9.333\n-11 18-11h399110v40H1017.698S927.168 518 741.5 1506C555.833 2494 462 2989 460\n 2991c-2 6-10 9-24 9-8 0-12-.667-12-2s-5.333-32-16-92c-50.667-293.333-119.667\n-693.333-207-1200 0-1.333-5.333 8.667-16 30l-32 64-16 33-26-26 76-153 77-151\nc.667.667 35.667 202 105 604 67.333 400.667 102 602.667 104 606z\nM1001 0h398999v40H1017z', - - // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main - doubleleftarrow: 'M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z', - - // doublerightarrow is from glyph U+21D2 in font KaTeX Main - doublerightarrow: 'M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z', - - // leftarrow is from glyph U+2190 in font KaTeX Main - leftarrow: 'M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z', - - // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular - leftbrace: 'M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z', - - leftbraceunder: 'M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z', - - // overgroup is from the MnSymbol package (public domain) - leftgroup: 'M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z', - - leftgroupunder: 'M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z', - - // Harpoons are from glyph U+21BD in font KaTeX Main - leftharpoon: 'M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z', - - leftharpoonplus: 'M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z', - - leftharpoondown: 'M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z', - - leftharpoondownplus: 'M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z', - - // hook is from glyph U+21A9 in font KaTeX Main - lefthook: 'M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z', - - leftlinesegment: 'M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z', - - leftmapsto: 'M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z', - - // tofrom is from glyph U+21C4 in font KaTeX AMS Regular - leftToFrom: 'M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z', - - longequal: 'M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z', - - midbrace: 'M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z', - - midbraceunder: 'M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z', - - rightarrow: 'M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z', - - rightbrace: 'M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z', - - rightbraceunder: 'M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z', - - rightgroup: 'M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z', - - rightgroupunder: 'M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z', - - rightharpoon: 'M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z', - - rightharpoonplus: 'M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z', - - rightharpoondown: 'M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z', - - rightharpoondownplus: 'M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z', - - righthook: 'M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z', - - rightlinesegment: 'M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z', - - rightToFrom: 'M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z', - - // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular - twoheadleftarrow: 'M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z', - - twoheadrightarrow: 'M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z', - - // tilde1 is a modified version of a glyph from the MnSymbol package - tilde1: 'M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z', - - // ditto tilde2, tilde3, & tilde4 - tilde2: 'M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z', - - tilde3: 'M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z', - - tilde4: 'M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z', - - // widehat1 is a modified version of a glyph from the MnSymbol package - widehat1: 'M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z', - - // ditto widehat2, widehat3, & widehat4 - widehat2: 'M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z', - - widehat3: 'M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z', - - widehat4: 'M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z' -}; - -exports.default = { path: path }; - -},{}],125:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/** - * This file holds a list of all no-argument functions and single-character - * symbols (like 'a' or ';'). - * - * For each of the symbols, there are three properties they can have: - * - font (required): the font to be used for this symbol. Either "main" (the - normal font), or "ams" (the ams fonts). - * - group (required): the ParseNode group type the symbol should have (i.e. - "textord", "mathord", etc). - See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types - * - replace: the character that this symbol or function should be - * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi - * character in the main font). - * - * The outermost map in the table indicates what mode the symbols should be - * accepted in (e.g. "math" or "text"). - */ - -var symbols = { - "math": {}, - "text": {} -}; -exports.default = symbols; - -/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ - -function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { - symbols[mode][name] = { font: font, group: group, replace: replace }; - - if (acceptUnicodeChar && replace) { - symbols[mode][replace] = symbols[mode][name]; - } -} - -// Some abbreviations for commonly used strings. -// This helps minify the code, and also spotting typos using jshint. - -// modes: -var math = "math"; -var text = "text"; - -// fonts: -var main = "main"; -var ams = "ams"; - -// groups: -var accent = "accent"; -var bin = "bin"; -var close = "close"; -var inner = "inner"; -var mathord = "mathord"; -var op = "op"; -var open = "open"; -var punct = "punct"; -var rel = "rel"; -var spacing = "spacing"; -var textord = "textord"; - -// Now comes the symbol table - -// Relation Symbols -defineSymbol(math, main, rel, "\u2261", "\\equiv", true); -defineSymbol(math, main, rel, "\u227A", "\\prec", true); -defineSymbol(math, main, rel, "\u227B", "\\succ", true); -defineSymbol(math, main, rel, "\u223C", "\\sim", true); -defineSymbol(math, main, rel, "\u22A5", "\\perp"); -defineSymbol(math, main, rel, "\u2AAF", "\\preceq", true); -defineSymbol(math, main, rel, "\u2AB0", "\\succeq", true); -defineSymbol(math, main, rel, "\u2243", "\\simeq", true); -defineSymbol(math, main, rel, "\u2223", "\\mid", true); -defineSymbol(math, main, rel, "\u226A", "\\ll"); -defineSymbol(math, main, rel, "\u226B", "\\gg", true); -defineSymbol(math, main, rel, "\u224D", "\\asymp", true); -defineSymbol(math, main, rel, "\u2225", "\\parallel"); -defineSymbol(math, main, rel, "\u22C8", "\\bowtie", true); -defineSymbol(math, main, rel, "\u2323", "\\smile", true); -defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); -defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); -defineSymbol(math, main, rel, "\u2250", "\\doteq", true); -defineSymbol(math, main, rel, "\u2322", "\\frown", true); -defineSymbol(math, main, rel, "\u220B", "\\ni", true); -defineSymbol(math, main, rel, "\u221D", "\\propto", true); -defineSymbol(math, main, rel, "\u22A2", "\\vdash", true); -defineSymbol(math, main, rel, "\u22A3", "\\dashv", true); -defineSymbol(math, main, rel, "\u220B", "\\owns"); - -// Punctuation -defineSymbol(math, main, punct, ".", "\\ldotp"); -defineSymbol(math, main, punct, "\u22C5", "\\cdotp"); - -// Misc Symbols -defineSymbol(math, main, textord, "#", "\\#"); -defineSymbol(text, main, textord, "#", "\\#"); -defineSymbol(math, main, textord, "&", "\\&"); -defineSymbol(text, main, textord, "&", "\\&"); -defineSymbol(math, main, textord, "\u2135", "\\aleph", true); -defineSymbol(math, main, textord, "\u2200", "\\forall", true); -defineSymbol(math, main, textord, "\u210F", "\\hbar"); -defineSymbol(math, main, textord, "\u2203", "\\exists", true); -defineSymbol(math, main, textord, "\u2207", "\\nabla", true); -defineSymbol(math, main, textord, "\u266D", "\\flat", true); -defineSymbol(math, main, textord, "\u2113", "\\ell", true); -defineSymbol(math, main, textord, "\u266E", "\\natural", true); -defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); -defineSymbol(math, main, textord, "\u2118", "\\wp", true); -defineSymbol(math, main, textord, "\u266F", "\\sharp", true); -defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); -defineSymbol(math, main, textord, "\u211C", "\\Re", true); -defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); -defineSymbol(math, main, textord, "\u2111", "\\Im", true); -defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); - -// Math and Text -defineSymbol(math, main, textord, "\u2020", "\\dag"); -defineSymbol(text, main, textord, "\u2020", "\\dag"); -defineSymbol(text, main, textord, "\u2020", "\\textdagger"); -defineSymbol(math, main, textord, "\u2021", "\\ddag"); -defineSymbol(text, main, textord, "\u2021", "\\ddag"); -defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl"); - -// Large Delimiters -defineSymbol(math, main, close, "\u23B1", "\\rmoustache"); -defineSymbol(math, main, open, "\u23B0", "\\lmoustache"); -defineSymbol(math, main, close, "\u27EF", "\\rgroup"); -defineSymbol(math, main, open, "\u27EE", "\\lgroup"); - -// Binary Operators -defineSymbol(math, main, bin, "\u2213", "\\mp", true); -defineSymbol(math, main, bin, "\u2296", "\\ominus", true); -defineSymbol(math, main, bin, "\u228E", "\\uplus", true); -defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); -defineSymbol(math, main, bin, "\u2217", "\\ast"); -defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); -defineSymbol(math, main, bin, "\u25EF", "\\bigcirc"); -defineSymbol(math, main, bin, "\u2219", "\\bullet"); -defineSymbol(math, main, bin, "\u2021", "\\ddagger"); -defineSymbol(math, main, bin, "\u2240", "\\wr", true); -defineSymbol(math, main, bin, "\u2A3F", "\\amalg"); -defineSymbol(math, main, bin, "&", "\\And"); // from amsmath - -// Arrow Symbols -defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow", true); -defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow", true); -defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow", true); -defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow", true); -defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow", true); -defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow", true); -defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); -defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow", true); -defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow", true); -defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow", true); -defineSymbol(math, main, rel, "\u21A6", "\\mapsto", true); -defineSymbol(math, main, rel, "\u27FC", "\\longmapsto", true); -defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); -defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow", true); -defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow", true); -defineSymbol(math, main, rel, "\u2198", "\\searrow", true); -defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup", true); -defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup", true); -defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); -defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown", true); -defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown", true); -defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); -defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons", true); - -// AMS Negated Binary Relations -defineSymbol(math, ams, rel, "\u226E", "\\nless", true); -defineSymbol(math, ams, rel, "\uE010", "\\nleqslant"); -defineSymbol(math, ams, rel, "\uE011", "\\nleqq"); -defineSymbol(math, ams, rel, "\u2A87", "\\lneq", true); -defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); -defineSymbol(math, ams, rel, "\uE00C", "\\lvertneqq"); -defineSymbol(math, ams, rel, "\u22E6", "\\lnsim", true); -defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox", true); -defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); -// unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u22E0", "\\npreceq", true); -defineSymbol(math, ams, rel, "\u22E8", "\\precnsim", true); -defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox", true); -defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); -defineSymbol(math, ams, rel, "\uE006", "\\nshortmid"); -defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); -defineSymbol(math, ams, rel, "\u22AC", "\\nvdash", true); -defineSymbol(math, ams, rel, "\u22AD", "\\nvDash", true); -defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft"); -defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq", true); -defineSymbol(math, ams, rel, "\u228A", "\\subsetneq", true); -defineSymbol(math, ams, rel, "\uE01A", "\\varsubsetneq"); -defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq", true); -defineSymbol(math, ams, rel, "\uE017", "\\varsubsetneqq"); -defineSymbol(math, ams, rel, "\u226F", "\\ngtr", true); -defineSymbol(math, ams, rel, "\uE00F", "\\ngeqslant"); -defineSymbol(math, ams, rel, "\uE00E", "\\ngeqq"); -defineSymbol(math, ams, rel, "\u2A88", "\\gneq", true); -defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); -defineSymbol(math, ams, rel, "\uE00D", "\\gvertneqq"); -defineSymbol(math, ams, rel, "\u22E7", "\\gnsim", true); -defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox", true); -defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); -// unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq", true); -defineSymbol(math, ams, rel, "\u22E9", "\\succnsim", true); -defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox", true); -// unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); -defineSymbol(math, ams, rel, "\uE007", "\\nshortparallel"); -defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); -defineSymbol(math, ams, rel, "\u22AF", "\\nVDash", true); -defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright"); -defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq", true); -defineSymbol(math, ams, rel, "\uE018", "\\nsupseteqq"); -defineSymbol(math, ams, rel, "\u228B", "\\supsetneq", true); -defineSymbol(math, ams, rel, "\uE01B", "\\varsupsetneq"); -defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq", true); -defineSymbol(math, ams, rel, "\uE019", "\\varsupsetneqq"); -defineSymbol(math, ams, rel, "\u22AE", "\\nVdash", true); -defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq", true); -defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq", true); -defineSymbol(math, ams, rel, "\uE016", "\\nsubseteqq"); -defineSymbol(math, ams, bin, "\u22B4", "\\unlhd"); -defineSymbol(math, ams, bin, "\u22B5", "\\unrhd"); - -// AMS Negated Arrows -defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow", true); -defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow", true); -defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow", true); -defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow", true); -defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow", true); -defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); - -// AMS Misc -defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle"); -defineSymbol(math, ams, textord, "\u210F", "\\hslash"); -defineSymbol(math, ams, textord, "\u25BD", "\\triangledown"); -defineSymbol(math, ams, textord, "\u25CA", "\\lozenge"); -defineSymbol(math, ams, textord, "\u24C8", "\\circledS"); -defineSymbol(math, ams, textord, "\xAE", "\\circledR"); -defineSymbol(text, ams, textord, "\xAE", "\\circledR"); -defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); -defineSymbol(math, ams, textord, "\u2204", "\\nexists"); -defineSymbol(math, ams, textord, "\u2127", "\\mho"); -defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); -defineSymbol(math, ams, textord, "\u2141", "\\Game", true); -defineSymbol(math, ams, textord, "k", "\\Bbbk"); -defineSymbol(math, ams, textord, "\u2035", "\\backprime"); -defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle"); -defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown"); -defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare"); -defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge"); -defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); -defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); -defineSymbol(math, ams, textord, "\u2201", "\\complement", true); -// unicode-math maps U+F0 to \matheth. We map to AMS function \eth -defineSymbol(math, ams, textord, "\xF0", "\\eth", true); -defineSymbol(math, ams, textord, "\u2571", "\\diagup"); -defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); -defineSymbol(math, ams, textord, "\u25A1", "\\square"); -defineSymbol(math, ams, textord, "\u25A1", "\\Box"); -defineSymbol(math, ams, textord, "\u25CA", "\\Diamond"); -// unicode-math maps U+A5 to \mathyen. We map to AMS function \yen -defineSymbol(math, ams, textord, "\xA5", "\\yen", true); -defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); -defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); - -// AMS Hebrew -defineSymbol(math, ams, textord, "\u2136", "\\beth", true); -defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); -defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); - -// AMS Greek -defineSymbol(math, ams, textord, "\u03DD", "\\digamma"); -defineSymbol(math, ams, textord, "\u03F0", "\\varkappa"); - -// AMS Delimiters -defineSymbol(math, ams, open, "\u250C", "\\ulcorner"); -defineSymbol(math, ams, close, "\u2510", "\\urcorner"); -defineSymbol(math, ams, open, "\u2514", "\\llcorner"); -defineSymbol(math, ams, close, "\u2518", "\\lrcorner"); - -// AMS Binary Relations -defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); -defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant"); -defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless", true); -defineSymbol(math, ams, rel, "\u2272", "\\lesssim"); -defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox"); -defineSymbol(math, ams, rel, "\u224A", "\\approxeq", true); -defineSymbol(math, ams, bin, "\u22D6", "\\lessdot"); -defineSymbol(math, ams, rel, "\u22D8", "\\lll"); -defineSymbol(math, ams, rel, "\u2276", "\\lessgtr"); -defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr"); -defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr"); -defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); -defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); -defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); -defineSymbol(math, ams, rel, "\u223D", "\\backsim", true); -defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq", true); -defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq", true); -defineSymbol(math, ams, rel, "\u22D0", "\\Subset", true); -defineSymbol(math, ams, rel, "\u228F", "\\sqsubset", true); -defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq", true); -defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec", true); -defineSymbol(math, ams, rel, "\u227E", "\\precsim", true); -defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox", true); -defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft"); -defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq"); -defineSymbol(math, ams, rel, "\u22A8", "\\vDash"); -defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash", true); -defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); -defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); -defineSymbol(math, ams, rel, "\u224F", "\\bumpeq", true); -defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq", true); -defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); -defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant", true); -defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr", true); -defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); -defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox", true); -defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot"); -defineSymbol(math, ams, rel, "\u22D9", "\\ggg", true); -defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); -defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless", true); -defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless", true); -defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); -defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); -defineSymbol(math, ams, rel, "\u225C", "\\triangleq", true); -defineSymbol(math, ams, rel, "\u223C", "\\thicksim"); -defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); -defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq", true); -defineSymbol(math, ams, rel, "\u22D1", "\\Supset", true); -defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); -defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq", true); -defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc", true); -defineSymbol(math, ams, rel, "\u227F", "\\succsim", true); -defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox", true); -defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright"); -defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq"); -defineSymbol(math, ams, rel, "\u22A9", "\\Vdash", true); -defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); -defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); -defineSymbol(math, ams, rel, "\u226C", "\\between", true); -defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork", true); -defineSymbol(math, ams, rel, "\u221D", "\\varpropto"); -defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft"); -// unicode-math says that \therefore is a mathord atom. -// We kept the amssymb atom type, which is rel. -defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); -defineSymbol(math, ams, rel, "\u220D", "\\backepsilon"); -defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright"); -// unicode-math says that \because is a mathord atom. -// We kept the amssymb atom type, which is rel. -defineSymbol(math, ams, rel, "\u2235", "\\because", true); -defineSymbol(math, ams, rel, "\u22D8", "\\llless"); -defineSymbol(math, ams, rel, "\u22D9", "\\gggtr"); -defineSymbol(math, ams, bin, "\u22B2", "\\lhd"); -defineSymbol(math, ams, bin, "\u22B3", "\\rhd"); -defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); -defineSymbol(math, main, rel, "\u22C8", "\\Join"); -defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); - -// AMS Binary Operators -defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); -defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); -defineSymbol(math, ams, bin, "\u22D2", "\\Cap", true); -defineSymbol(math, ams, bin, "\u22D3", "\\Cup", true); -defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge", true); -defineSymbol(math, ams, bin, "\u229F", "\\boxminus", true); -defineSymbol(math, ams, bin, "\u229E", "\\boxplus", true); -defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes", true); -defineSymbol(math, ams, bin, "\u22C9", "\\ltimes", true); -defineSymbol(math, ams, bin, "\u22CA", "\\rtimes", true); -defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes", true); -defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes", true); -defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge", true); -defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee", true); -defineSymbol(math, ams, bin, "\u229D", "\\circleddash", true); -defineSymbol(math, ams, bin, "\u229B", "\\circledast", true); -defineSymbol(math, ams, bin, "\u22C5", "\\centerdot"); -defineSymbol(math, ams, bin, "\u22BA", "\\intercal", true); -defineSymbol(math, ams, bin, "\u22D2", "\\doublecap"); -defineSymbol(math, ams, bin, "\u22D3", "\\doublecup"); -defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes", true); - -// AMS Arrows -// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. -// We'll map it to AMS function \dashrightarrow. It produces the same atom. -defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow", true); -// unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow", true); -defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows", true); -defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows", true); -defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow", true); -defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow", true); -defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail", true); -defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft", true); -defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons", true); -defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft", true); -// unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft", true); -defineSymbol(math, ams, rel, "\u21B0", "\\Lsh", true); -defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows", true); -defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft", true); -defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft", true); -defineSymbol(math, ams, rel, "\u22B8", "\\multimap", true); -defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true); -defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows", true); -defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows", true); -defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow", true); -defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail", true); -defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright", true); -defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright", true); -// unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. -defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright", true); -defineSymbol(math, ams, rel, "\u21B1", "\\Rsh", true); -defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows", true); -defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright", true); -defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright", true); -defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow", true); -defineSymbol(math, ams, rel, "\u21DD", "\\leadsto"); -defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow", true); -defineSymbol(math, ams, rel, "\u21BE", "\\restriction"); - -defineSymbol(math, main, textord, "\u2018", "`"); -defineSymbol(math, main, textord, "$", "\\$"); -defineSymbol(text, main, textord, "$", "\\$"); -defineSymbol(text, main, textord, "$", "\\textdollar"); -defineSymbol(math, main, textord, "%", "\\%"); -defineSymbol(text, main, textord, "%", "\\%"); -defineSymbol(math, main, textord, "_", "\\_"); -defineSymbol(text, main, textord, "_", "\\_"); -defineSymbol(text, main, textord, "_", "\\textunderscore"); -defineSymbol(math, main, textord, "\u2220", "\\angle", true); -defineSymbol(math, main, textord, "\u221E", "\\infty", true); -defineSymbol(math, main, textord, "\u2032", "\\prime"); -defineSymbol(math, main, textord, "\u25B3", "\\triangle"); -defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); -defineSymbol(math, main, textord, "\u0394", "\\Delta", true); -defineSymbol(math, main, textord, "\u0398", "\\Theta", true); -defineSymbol(math, main, textord, "\u039B", "\\Lambda", true); -defineSymbol(math, main, textord, "\u039E", "\\Xi", true); -defineSymbol(math, main, textord, "\u03A0", "\\Pi", true); -defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true); -defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true); -defineSymbol(math, main, textord, "\u03A6", "\\Phi", true); -defineSymbol(math, main, textord, "\u03A8", "\\Psi", true); -defineSymbol(math, main, textord, "\u03A9", "\\Omega", true); -defineSymbol(math, main, textord, "\xAC", "\\neg"); -defineSymbol(math, main, textord, "\xAC", "\\lnot"); -defineSymbol(math, main, textord, "\u22A4", "\\top"); -defineSymbol(math, main, textord, "\u22A5", "\\bot"); -defineSymbol(math, main, textord, "\u2205", "\\emptyset"); -defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); -defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true); -defineSymbol(math, main, mathord, "\u03B2", "\\beta", true); -defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true); -defineSymbol(math, main, mathord, "\u03B4", "\\delta", true); -defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true); -defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true); -defineSymbol(math, main, mathord, "\u03B7", "\\eta", true); -defineSymbol(math, main, mathord, "\u03B8", "\\theta", true); -defineSymbol(math, main, mathord, "\u03B9", "\\iota", true); -defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true); -defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true); -defineSymbol(math, main, mathord, "\u03BC", "\\mu", true); -defineSymbol(math, main, mathord, "\u03BD", "\\nu", true); -defineSymbol(math, main, mathord, "\u03BE", "\\xi", true); -defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true); -defineSymbol(math, main, mathord, "\u03C0", "\\pi", true); -defineSymbol(math, main, mathord, "\u03C1", "\\rho", true); -defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true); -defineSymbol(math, main, mathord, "\u03C4", "\\tau", true); -defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true); -defineSymbol(math, main, mathord, "\u03D5", "\\phi", true); -defineSymbol(math, main, mathord, "\u03C7", "\\chi", true); -defineSymbol(math, main, mathord, "\u03C8", "\\psi", true); -defineSymbol(math, main, mathord, "\u03C9", "\\omega", true); -defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true); -defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true); -defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); -defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); -defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); -defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); -defineSymbol(math, main, bin, "\u2217", "*"); -defineSymbol(math, main, bin, "+", "+"); -defineSymbol(math, main, bin, "\u2212", "-"); -defineSymbol(math, main, bin, "\u22C5", "\\cdot"); -defineSymbol(math, main, bin, "\u2218", "\\circ"); -defineSymbol(math, main, bin, "\xF7", "\\div", true); -defineSymbol(math, main, bin, "\xB1", "\\pm", true); -defineSymbol(math, main, bin, "\xD7", "\\times", true); -defineSymbol(math, main, bin, "\u2229", "\\cap", true); -defineSymbol(math, main, bin, "\u222A", "\\cup", true); -defineSymbol(math, main, bin, "\u2216", "\\setminus"); -defineSymbol(math, main, bin, "\u2227", "\\land"); -defineSymbol(math, main, bin, "\u2228", "\\lor"); -defineSymbol(math, main, bin, "\u2227", "\\wedge", true); -defineSymbol(math, main, bin, "\u2228", "\\vee", true); -defineSymbol(math, main, textord, "\u221A", "\\surd"); -defineSymbol(math, main, open, "(", "("); -defineSymbol(math, main, open, "[", "["); -defineSymbol(math, main, open, "\u27E8", "\\langle"); -defineSymbol(math, main, open, "\u2223", "\\lvert"); -defineSymbol(math, main, open, "\u2225", "\\lVert"); -defineSymbol(math, main, close, ")", ")"); -defineSymbol(math, main, close, "]", "]"); -defineSymbol(math, main, close, "?", "?"); -defineSymbol(math, main, close, "!", "!"); -defineSymbol(math, main, close, "\u27E9", "\\rangle"); -defineSymbol(math, main, close, "\u2223", "\\rvert"); -defineSymbol(math, main, close, "\u2225", "\\rVert"); -defineSymbol(math, main, rel, "=", "="); -defineSymbol(math, main, rel, "<", "<"); -defineSymbol(math, main, rel, ">", ">"); -defineSymbol(math, main, rel, ":", ":"); -defineSymbol(math, main, rel, "\u2248", "\\approx", true); -defineSymbol(math, main, rel, "\u2245", "\\cong", true); -defineSymbol(math, main, rel, "\u2265", "\\ge"); -defineSymbol(math, main, rel, "\u2265", "\\geq", true); -defineSymbol(math, main, rel, "\u2190", "\\gets"); -defineSymbol(math, main, rel, ">", "\\gt"); -defineSymbol(math, main, rel, "\u2208", "\\in", true); -defineSymbol(math, main, rel, "\u2209", "\\notin", true); -defineSymbol(math, main, rel, "\u0338", "\\not"); -defineSymbol(math, main, rel, "\u2282", "\\subset", true); -defineSymbol(math, main, rel, "\u2283", "\\supset", true); -defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); -defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); -defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); -defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); -defineSymbol(math, main, rel, "\u22A8", "\\models"); -defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); -defineSymbol(math, main, rel, "\u2264", "\\le"); -defineSymbol(math, main, rel, "\u2264", "\\leq", true); -defineSymbol(math, main, rel, "<", "\\lt"); -defineSymbol(math, main, rel, "\u2260", "\\ne", true); -defineSymbol(math, main, rel, "\u2260", "\\neq"); -defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); -defineSymbol(math, main, rel, "\u2192", "\\to"); -defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); -defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); -defineSymbol(math, main, spacing, null, "\\!"); -defineSymbol(math, main, spacing, "\xA0", "\\ "); -defineSymbol(math, main, spacing, "\xA0", "~"); -defineSymbol(math, main, spacing, null, "\\,"); -defineSymbol(math, main, spacing, null, "\\:"); -defineSymbol(math, main, spacing, null, "\\;"); -defineSymbol(math, main, spacing, null, "\\enspace"); -defineSymbol(math, main, spacing, null, "\\qquad"); -defineSymbol(math, main, spacing, null, "\\quad"); -defineSymbol(math, main, spacing, "\xA0", "\\space"); -defineSymbol(math, main, punct, ",", ","); -defineSymbol(math, main, punct, ";", ";"); -defineSymbol(math, main, punct, ":", "\\colon"); -defineSymbol(math, ams, bin, "\u22BC", "\\barwedge", true); -defineSymbol(math, ams, bin, "\u22BB", "\\veebar", true); -defineSymbol(math, main, bin, "\u2299", "\\odot", true); -defineSymbol(math, main, bin, "\u2295", "\\oplus", true); -defineSymbol(math, main, bin, "\u2297", "\\otimes", true); -defineSymbol(math, main, textord, "\u2202", "\\partial", true); -defineSymbol(math, main, bin, "\u2298", "\\oslash", true); -defineSymbol(math, ams, bin, "\u229A", "\\circledcirc", true); -defineSymbol(math, ams, bin, "\u22A1", "\\boxdot", true); -defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup"); -defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown"); -defineSymbol(math, main, bin, "\u2020", "\\dagger"); -defineSymbol(math, main, bin, "\u22C4", "\\diamond"); -defineSymbol(math, main, bin, "\u22C6", "\\star"); -defineSymbol(math, main, bin, "\u25C3", "\\triangleleft"); -defineSymbol(math, main, bin, "\u25B9", "\\triangleright"); -defineSymbol(math, main, open, "{", "\\{"); -defineSymbol(text, main, textord, "{", "\\{"); -defineSymbol(text, main, textord, "{", "\\textbraceleft"); -defineSymbol(math, main, close, "}", "\\}"); -defineSymbol(text, main, textord, "}", "\\}"); -defineSymbol(text, main, textord, "}", "\\textbraceright"); -defineSymbol(math, main, open, "{", "\\lbrace"); -defineSymbol(math, main, close, "}", "\\rbrace"); -defineSymbol(math, main, open, "[", "\\lbrack"); -defineSymbol(math, main, close, "]", "\\rbrack"); -defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc -defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc -defineSymbol(math, main, open, "\u230A", "\\lfloor"); -defineSymbol(math, main, close, "\u230B", "\\rfloor"); -defineSymbol(math, main, open, "\u2308", "\\lceil"); -defineSymbol(math, main, close, "\u2309", "\\rceil"); -defineSymbol(math, main, textord, "\\", "\\backslash"); -defineSymbol(math, main, textord, "\u2223", "|"); -defineSymbol(math, main, textord, "\u2223", "\\vert"); -defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc -defineSymbol(math, main, textord, "\u2225", "\\|"); -defineSymbol(math, main, textord, "\u2225", "\\Vert"); -defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); -defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); -defineSymbol(math, main, rel, "\u21D1", "\\Uparrow", true); -defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); -defineSymbol(math, main, rel, "\u21D3", "\\Downarrow", true); -defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); -defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow", true); -defineSymbol(math, main, op, "\u2210", "\\coprod"); -defineSymbol(math, main, op, "\u22C1", "\\bigvee"); -defineSymbol(math, main, op, "\u22C0", "\\bigwedge"); -defineSymbol(math, main, op, "\u2A04", "\\biguplus"); -defineSymbol(math, main, op, "\u22C2", "\\bigcap"); -defineSymbol(math, main, op, "\u22C3", "\\bigcup"); -defineSymbol(math, main, op, "\u222B", "\\int"); -defineSymbol(math, main, op, "\u222B", "\\intop"); -defineSymbol(math, main, op, "\u222C", "\\iint"); -defineSymbol(math, main, op, "\u222D", "\\iiint"); -defineSymbol(math, main, op, "\u220F", "\\prod"); -defineSymbol(math, main, op, "\u2211", "\\sum"); -defineSymbol(math, main, op, "\u2A02", "\\bigotimes"); -defineSymbol(math, main, op, "\u2A01", "\\bigoplus"); -defineSymbol(math, main, op, "\u2A00", "\\bigodot"); -defineSymbol(math, main, op, "\u222E", "\\oint"); -defineSymbol(math, main, op, "\u2A06", "\\bigsqcup"); -defineSymbol(math, main, op, "\u222B", "\\smallint"); -defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); -defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); -defineSymbol(text, main, inner, "\u2026", "\\ldots", true); -defineSymbol(math, main, inner, "\u2026", "\\ldots", true); -defineSymbol(math, main, inner, "\u22EF", "\\@cdots", true); -defineSymbol(math, main, inner, "\u22F1", "\\ddots", true); -defineSymbol(math, main, textord, "\u22EE", "\\vdots", true); -defineSymbol(math, main, accent, "\xB4", "\\acute"); -defineSymbol(math, main, accent, "`", "\\grave"); -defineSymbol(math, main, accent, "\xA8", "\\ddot"); -defineSymbol(math, main, accent, "~", "\\tilde"); -defineSymbol(math, main, accent, "\xAF", "\\bar"); -defineSymbol(math, main, accent, "\u02D8", "\\breve"); -defineSymbol(math, main, accent, "\u02C7", "\\check"); -defineSymbol(math, main, accent, "^", "\\hat"); -defineSymbol(math, main, accent, "\u20D7", "\\vec"); -defineSymbol(math, main, accent, "\u02D9", "\\dot"); -defineSymbol(math, main, mathord, "\u0131", "\\imath"); -defineSymbol(math, main, mathord, "\u0237", "\\jmath"); -defineSymbol(text, main, accent, "\u02CA", "\\'"); // acute -defineSymbol(text, main, accent, "\u02CB", "\\`"); // grave -defineSymbol(text, main, accent, "\u02C6", "\\^"); // circumflex -defineSymbol(text, main, accent, "\u02DC", "\\~"); // tilde -defineSymbol(text, main, accent, "\u02C9", "\\="); // macron -defineSymbol(text, main, accent, "\u02D8", "\\u"); // breve -defineSymbol(text, main, accent, "\u02D9", "\\."); // dot above -defineSymbol(text, main, accent, "\u02DA", "\\r"); // ring above -defineSymbol(text, main, accent, "\u02C7", "\\v"); // caron -defineSymbol(text, main, accent, "\xA8", '\\"'); // diaresis -defineSymbol(text, main, accent, "\u030B", "\\H"); // double acute - -defineSymbol(text, main, textord, "\u2013", "--"); -defineSymbol(text, main, textord, "\u2013", "\\textendash"); -defineSymbol(text, main, textord, "\u2014", "---"); -defineSymbol(text, main, textord, "\u2014", "\\textemdash"); -defineSymbol(text, main, textord, "\u2018", "`"); -defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); -defineSymbol(text, main, textord, "\u2019", "'"); -defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); -defineSymbol(text, main, textord, "\u201C", "``"); -defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft"); -defineSymbol(text, main, textord, "\u201D", "''"); -defineSymbol(text, main, textord, "\u201D", "\\textquotedblright"); -defineSymbol(math, main, textord, "\xB0", "\\degree"); -defineSymbol(text, main, textord, "\xB0", "\\degree"); -// TODO: In LaTeX, \pounds can generate a different character in text and math -// mode, but among our fonts, only Main-Italic defines this character "163". -defineSymbol(math, main, mathord, "\xA3", "\\pounds"); -defineSymbol(math, main, mathord, "\xA3", "\\mathsterling", true); -defineSymbol(text, main, mathord, "\xA3", "\\pounds"); -defineSymbol(text, main, mathord, "\xA3", "\\textsterling"); -defineSymbol(math, ams, textord, "\u2720", "\\maltese"); -defineSymbol(text, ams, textord, "\u2720", "\\maltese"); - -defineSymbol(text, main, spacing, "\xA0", "\\ "); -defineSymbol(text, main, spacing, "\xA0", " "); -defineSymbol(text, main, spacing, "\xA0", "~"); - -// There are lots of symbols which are the same, so we add them in afterwards. - -// All of these are textords in math mode -var mathTextSymbols = "0123456789/@.\""; -for (var i = 0; i < mathTextSymbols.length; i++) { - var ch = mathTextSymbols.charAt(i); - defineSymbol(math, main, textord, ch, ch); -} - -// All of these are textords in text mode -var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; -for (var _i = 0; _i < textSymbols.length; _i++) { - var _ch = textSymbols.charAt(_i); - defineSymbol(text, main, textord, _ch, _ch); -} - -// All of these are textords in text mode, and mathords in math mode -var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -for (var _i2 = 0; _i2 < letters.length; _i2++) { - var _ch2 = letters.charAt(_i2); - defineSymbol(math, main, mathord, _ch2, _ch2); - defineSymbol(text, main, textord, _ch2, _ch2); -} - -// Latin-1 letters -for (var _i3 = 0x00C0; _i3 <= 0x00D6; _i3++) { - var _ch3 = String.fromCharCode(_i3); - defineSymbol(math, main, mathord, _ch3, _ch3); - defineSymbol(text, main, textord, _ch3, _ch3); -} - -for (var _i4 = 0x00D8; _i4 <= 0x00F6; _i4++) { - var _ch4 = String.fromCharCode(_i4); - defineSymbol(math, main, mathord, _ch4, _ch4); - defineSymbol(text, main, textord, _ch4, _ch4); -} - -for (var _i5 = 0x00F8; _i5 <= 0x00FF; _i5++) { - var _ch5 = String.fromCharCode(_i5); - defineSymbol(math, main, mathord, _ch5, _ch5); - defineSymbol(text, main, textord, _ch5, _ch5); -} - -// Cyrillic -for (var _i6 = 0x0410; _i6 <= 0x044F; _i6++) { - var _ch6 = String.fromCharCode(_i6); - defineSymbol(text, main, textord, _ch6, _ch6); -} - -// Unicode versions of existing characters -defineSymbol(text, main, textord, "\u2013", "–"); -defineSymbol(text, main, textord, "\u2014", "—"); -defineSymbol(text, main, textord, "\u2018", "‘"); -defineSymbol(text, main, textord, "\u2019", "’"); -defineSymbol(text, main, textord, "\u201C", "“"); -defineSymbol(text, main, textord, "\u201D", "”"); - -},{}],126:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var hangulRegex = exports.hangulRegex = /[\uAC00-\uD7AF]/; - -// This regex combines -// - CJK symbols and punctuation: [\u3000-\u303F] -// - Hiragana: [\u3040-\u309F] -// - Katakana: [\u30A0-\u30FF] -// - CJK ideograms: [\u4E00-\u9FAF] -// - Hangul syllables: [\uAC00-\uD7AF] -// - Fullwidth punctuation: [\uFF00-\uFF60] -// Notably missing are halfwidth Katakana and Romanji glyphs. -var cjkRegex = exports.cjkRegex = /[\u3000-\u30FF\u4E00-\u9FAF\uAC00-\uD7AF\uFF00-\uFF60]/; - -},{}],127:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.calculateSize = exports.validUnit = undefined; - -var _ParseError = require("./ParseError"); - -var _ParseError2 = _interopRequireDefault(_ParseError); - -var _Options = require("./Options"); - -var _Options2 = _interopRequireDefault(_Options); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -// This table gives the number of TeX pts in one of each *absolute* TeX unit. -// Thus, multiplying a length by this number converts the length from units -// into pts. Dividing the result by ptPerEm gives the number of ems -// *assuming* a font size of ptPerEm (normal size, normal style). - - -/** - * This file does conversion between units. In particular, it provides - * calculateSize to convert other units into ems. - */ - -var ptPerUnit = { - // https://en.wikibooks.org/wiki/LaTeX/Lengths and - // https://tex.stackexchange.com/a/8263 - "pt": 1, // TeX point - "mm": 7227 / 2540, // millimeter - "cm": 7227 / 254, // centimeter - "in": 72.27, // inch - "bp": 803 / 800, // big (PostScript) points - "pc": 12, // pica - "dd": 1238 / 1157, // didot - "cc": 14856 / 1157, // cicero (12 didot) - "nd": 685 / 642, // new didot - "nc": 1370 / 107, // new cicero (12 new didot) - "sp": 1 / 65536, // scaled point (TeX's internal smallest unit) - // https://tex.stackexchange.com/a/41371 - "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX -}; - -// Dictionary of relative units, for fast validity testing. -var relativeUnit = { - "ex": true, - "em": true, - "mu": true -}; - -/** - * Determine whether the specified unit (either a string defining the unit - * or a "size" parse node containing a unit field) is valid. - */ -var validUnit = exports.validUnit = function validUnit(unit) { - if (typeof unit !== "string") { - unit = unit.unit; - } - return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; -}; - -/* - * Convert a "size" parse node (with numeric "number" and string "unit" fields, - * as parsed by functions.js argType "size") into a CSS em value for the - * current style/scale. `options` gives the current options. - */ -var calculateSize = exports.calculateSize = function calculateSize(sizeValue, options) { - var scale = void 0; - if (sizeValue.unit in ptPerUnit) { - // Absolute units - scale = ptPerUnit[sizeValue.unit] // Convert unit to pt - / options.fontMetrics().ptPerEm // Convert pt to CSS em - / options.sizeMultiplier; // Unscale to make absolute units - } else if (sizeValue.unit === "mu") { - // `mu` units scale with scriptstyle/scriptscriptstyle. - scale = options.fontMetrics().cssEmPerMu; - } else { - // Other relative units always refer to the *textstyle* font - // in the current size. - var unitOptions = void 0; - if (options.style.isTight()) { - // isTight() means current style is script/scriptscript. - unitOptions = options.havingStyle(options.style.text()); - } else { - unitOptions = options; - } - // TODO: In TeX these units are relative to the quad of the current - // *text* font, e.g. cmr10. KaTeX instead uses values from the - // comparably-sized *Computer Modern symbol* font. At 10pt, these - // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; - // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. - // TeX \showlists shows a kern of 1.13889 * fontsize; - // KaTeX shows a kern of 1.171 * fontsize. - if (sizeValue.unit === "ex") { - scale = unitOptions.fontMetrics().xHeight; - } else if (sizeValue.unit === "em") { - scale = unitOptions.fontMetrics().quad; - } else { - throw new _ParseError2.default("Invalid unit: '" + sizeValue.unit + "'"); - } - if (unitOptions !== options) { - scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; - } - } - return Math.min(sizeValue.number * scale, options.maxSize); -}; - -},{"./Options":83,"./ParseError":84}],128:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -/** - * This file contains a list of utility functions which are useful in other - * files. - */ - -/** - * Provide an `indexOf` function which works in IE8, but defers to native if - * possible. - */ -var nativeIndexOf = Array.prototype.indexOf; -var indexOf = function indexOf(list, elem) { - if (list == null) { - return -1; - } - if (nativeIndexOf && list.indexOf === nativeIndexOf) { - return list.indexOf(elem); - } - var l = list.length; - for (var i = 0; i < l; i++) { - if (list[i] === elem) { - return i; - } - } - return -1; -}; - -/** - * Return whether an element is contained in a list - */ -var contains = function contains(list, elem) { - return indexOf(list, elem) !== -1; -}; - -/** - * Provide a default value if a setting is undefined - * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. - */ -var deflt = function deflt(setting, defaultIfUndefined) { - return setting === undefined ? defaultIfUndefined : setting; -}; - -// hyphenate and escape adapted from Facebook's React under Apache 2 license - -var uppercase = /([A-Z])/g; -var hyphenate = function hyphenate(str) { - return str.replace(uppercase, "-$1").toLowerCase(); -}; - -var ESCAPE_LOOKUP = { - "&": "&", - ">": ">", - "<": "<", - "\"": """, - "'": "'" -}; - -var ESCAPE_REGEX = /[&><"']/g; - -/** - * Escapes text to prevent scripting attacks. - */ -function escape(text) { - return String(text).replace(ESCAPE_REGEX, function (match) { - return ESCAPE_LOOKUP[match]; - }); -} - -/** - * A function to set the text content of a DOM element in all supported - * browsers. Note that we don't define this if there is no document. - */ -var setTextContent = void 0; -if (typeof document !== "undefined") { - var testNode = document.createElement("span"); - if ("textContent" in testNode) { - setTextContent = function setTextContent(node, text) { - node.textContent = text; - }; - } else { - setTextContent = function setTextContent(node, text) { - node.innerText = text; - }; - } -} - -/** - * A function to clear a node. - */ -function clearNode(node) { - setTextContent(node, ""); -} - -exports.default = { - contains: contains, - deflt: deflt, - escape: escape, - hyphenate: hyphenate, - indexOf: indexOf, - setTextContent: setTextContent, - clearNode: clearNode -}; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 26e2b790f98..26d1e703390 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3872,6 +3872,12 @@ karma@^1.7.0: tmp "0.0.31" useragent "^2.1.12" +katex@^0.9.0-alpha2: + version "0.9.0-alpha2" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.9.0-alpha2.tgz#f559e8bb32969082d735d949960b7df133fd5831" + dependencies: + match-at "^0.1.1" + kind-of@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" @@ -4166,6 +4172,10 @@ marked@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" +match-at@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" + math-expression-evaluator@^1.2.14: version "1.2.16" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" From 2f0335e1978799eb44eec715d37a16b116a31140 Mon Sep 17 00:00:00 2001 From: Jose Ivan Vargas Date: Wed, 20 Dec 2017 17:55:53 -0600 Subject: [PATCH 03/25] Removed the remains of katex from vendor assets and load everything via webpack --- app/assets/javascripts/render_math.js | 14 +- config/webpack.config.js | 23 + package.json | 1 + vendor/assets/fonts/KaTeX_AMS-Regular.eot | Bin 71656 -> 0 bytes vendor/assets/fonts/KaTeX_AMS-Regular.ttf | Bin 71428 -> 0 bytes vendor/assets/fonts/KaTeX_AMS-Regular.woff | Bin 40200 -> 0 bytes vendor/assets/fonts/KaTeX_AMS-Regular.woff2 | Bin 33212 -> 0 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.eot | Bin 19836 -> 0 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 19588 -> 0 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.woff | Bin 12136 -> 0 bytes .../assets/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 10584 -> 0 bytes .../fonts/KaTeX_Caligraphic-Regular.eot | Bin 19220 -> 0 bytes .../fonts/KaTeX_Caligraphic-Regular.ttf | Bin 18960 -> 0 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 11868 -> 0 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 10396 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.eot | Bin 36200 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf | Bin 35968 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.woff | Bin 23388 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 20472 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Regular.eot | Bin 34896 -> 0 bytes vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf | Bin 34652 -> 0 bytes .../assets/fonts/KaTeX_Fraktur-Regular.woff | Bin 22844 -> 0 bytes .../assets/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 19872 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Bold.eot | Bin 63248 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Bold.ttf | Bin 63028 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Bold.woff | Bin 37160 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Bold.woff2 | Bin 31000 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Italic.eot | Bin 47864 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Italic.ttf | Bin 47636 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Italic.woff | Bin 27092 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Italic.woff2 | Bin 22972 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Regular.eot | Bin 71548 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Regular.ttf | Bin 71316 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Regular.woff | Bin 39576 -> 0 bytes vendor/assets/fonts/KaTeX_Main-Regular.woff2 | Bin 32948 -> 0 bytes vendor/assets/fonts/KaTeX_Math-BoldItalic.eot | Bin 39990 -> 0 bytes vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf | Bin 39744 -> 0 bytes .../assets/fonts/KaTeX_Math-BoldItalic.woff | Bin 23192 -> 0 bytes .../assets/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 20028 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Italic.eot | Bin 41676 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Italic.ttf | Bin 41448 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Italic.woff | Bin 23820 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Italic.woff2 | Bin 20420 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Regular.eot | Bin 41536 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Regular.ttf | Bin 41304 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Regular.woff | Bin 23712 -> 0 bytes vendor/assets/fonts/KaTeX_Math-Regular.woff2 | Bin 20384 -> 0 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.eot | Bin 34204 -> 0 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf | Bin 33964 -> 0 bytes vendor/assets/fonts/KaTeX_SansSerif-Bold.woff | Bin 19196 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 16000 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Italic.eot | Bin 31320 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Italic.ttf | Bin 31072 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Italic.woff | Bin 18080 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 15144 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Regular.eot | Bin 30212 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Regular.ttf | Bin 29960 -> 0 bytes .../assets/fonts/KaTeX_SansSerif-Regular.woff | Bin 16744 -> 0 bytes .../fonts/KaTeX_SansSerif-Regular.woff2 | Bin 13900 -> 0 bytes vendor/assets/fonts/KaTeX_Script-Regular.eot | Bin 25104 -> 0 bytes vendor/assets/fonts/KaTeX_Script-Regular.ttf | Bin 24864 -> 0 bytes vendor/assets/fonts/KaTeX_Script-Regular.woff | Bin 13856 -> 0 bytes .../assets/fonts/KaTeX_Script-Regular.woff2 | Bin 12284 -> 0 bytes vendor/assets/fonts/KaTeX_Size1-Regular.eot | Bin 13408 -> 0 bytes vendor/assets/fonts/KaTeX_Size1-Regular.ttf | Bin 13172 -> 0 bytes vendor/assets/fonts/KaTeX_Size1-Regular.woff | Bin 6980 -> 0 bytes vendor/assets/fonts/KaTeX_Size1-Regular.woff2 | Bin 5812 -> 0 bytes vendor/assets/fonts/KaTeX_Size2-Regular.eot | Bin 12648 -> 0 bytes vendor/assets/fonts/KaTeX_Size2-Regular.ttf | Bin 12412 -> 0 bytes vendor/assets/fonts/KaTeX_Size2-Regular.woff | Bin 6684 -> 0 bytes vendor/assets/fonts/KaTeX_Size2-Regular.woff2 | Bin 5556 -> 0 bytes vendor/assets/fonts/KaTeX_Size3-Regular.eot | Bin 8596 -> 0 bytes vendor/assets/fonts/KaTeX_Size3-Regular.ttf | Bin 8360 -> 0 bytes vendor/assets/fonts/KaTeX_Size3-Regular.woff | Bin 4776 -> 0 bytes vendor/assets/fonts/KaTeX_Size3-Regular.woff2 | Bin 3852 -> 0 bytes vendor/assets/fonts/KaTeX_Size4-Regular.eot | Bin 11520 -> 0 bytes vendor/assets/fonts/KaTeX_Size4-Regular.ttf | Bin 11284 -> 0 bytes vendor/assets/fonts/KaTeX_Size4-Regular.woff | Bin 6456 -> 0 bytes vendor/assets/fonts/KaTeX_Size4-Regular.woff2 | Bin 5168 -> 0 bytes .../assets/fonts/KaTeX_Typewriter-Regular.eot | Bin 35984 -> 0 bytes .../assets/fonts/KaTeX_Typewriter-Regular.ttf | Bin 35728 -> 0 bytes .../fonts/KaTeX_Typewriter-Regular.woff | Bin 20812 -> 0 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 17360 -> 0 bytes vendor/assets/stylesheets/katex.scss | 1189 ----------------- yarn.lock | 7 + 85 files changed, 37 insertions(+), 1197 deletions(-) delete mode 100755 vendor/assets/fonts/KaTeX_AMS-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_AMS-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_AMS-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_AMS-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.eot delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.eot delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.woff delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Main-Bold.eot delete mode 100755 vendor/assets/fonts/KaTeX_Main-Bold.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Main-Bold.woff delete mode 100755 vendor/assets/fonts/KaTeX_Main-Bold.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Main-Italic.eot delete mode 100755 vendor/assets/fonts/KaTeX_Main-Italic.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Main-Italic.woff delete mode 100755 vendor/assets/fonts/KaTeX_Main-Italic.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Main-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Main-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Main-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Main-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.eot delete mode 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.woff delete mode 100755 vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Math-Italic.eot delete mode 100755 vendor/assets/fonts/KaTeX_Math-Italic.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Math-Italic.woff delete mode 100755 vendor/assets/fonts/KaTeX_Math-Italic.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Math-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Math-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Math-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Math-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.eot delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.woff delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.eot delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.woff delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Script-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Script-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Script-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Script-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Size1-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Size1-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Size1-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Size1-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Size2-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Size2-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Size2-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Size2-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Size3-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Size3-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Size3-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Size3-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Size4-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Size4-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Size4-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Size4-Regular.woff2 delete mode 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.eot delete mode 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf delete mode 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.woff delete mode 100755 vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 delete mode 100644 vendor/assets/stylesheets/katex.scss diff --git a/app/assets/javascripts/render_math.js b/app/assets/javascripts/render_math.js index 2e68a9642e7..341fb842cbe 100644 --- a/app/assets/javascripts/render_math.js +++ b/app/assets/javascripts/render_math.js @@ -1,4 +1,5 @@ // import katex from 'katex'; +// import katexCSS from 'katex/dist/katex.css'; import Flash from './flash'; // Renders math using KaTeX in any element with the @@ -28,16 +29,13 @@ function renderWithKaTeX(elements, katex) { export default function renderMath($els) { if (!$els.length) return; - import(/* webpackChunkName: 'katex' */ 'katex').then((katex) => { - $.get(gon.katex_css_url, () => { - const css = $('', { - rel: 'stylesheet', - type: 'text/css', - href: gon.katex_css_url, - }); - css.appendTo('head'); + import(/* webpackChunkName: 'katex' */ 'katex/dist/katex.css') + .then(() => { renderWithKaTeX($els, katex); + }) + .catch((err) => { + Flash(`Can't load katex css ${err}`); }); }).catch((err) => { Flash(`Can't load katex module: ${err}`); diff --git a/config/webpack.config.js b/config/webpack.config.js index f7063442618..fad09886fef 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -128,6 +128,29 @@ var config = { name: '[name].[hash].[ext]', } }, + { + test: /katex.css$/, + include: /node_modules\/katex\/dist/, + exclude: /(vendor\/assets)/, + use: [ + { loader: 'style-loader' }, + { + loader: 'css-loader', + options: { + name: '[name].[hash].[ext]' + } + }, + ], + }, + { + test: /\.(eot|ttf|woff|woff2)$/, + include: /node_modules\/katex\/dist\/fonts/, + exclude: /(vendor\/assets)/, + loader: 'file-loader', + options: { + name: '[name].[hash].[ext]', + } + }, { test: /monaco-editor\/\w+\/vs\/loader\.js$/, use: [ diff --git a/package.json b/package.json index a50364d0929..a7b86b8935c 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "react-dev-utils": "^0.5.2", "select2": "3.5.2-browserify", "sql.js": "^0.4.0", + "style-loader": "^0.19.1", "svg4everybody": "2.1.9", "three": "^0.84.0", "three-orbit-controls": "^82.1.0", diff --git a/vendor/assets/fonts/KaTeX_AMS-Regular.eot b/vendor/assets/fonts/KaTeX_AMS-Regular.eot deleted file mode 100755 index 97fd899ab05991ad76b96ce6ae36c91d36551e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71656 zcmdqKcYGY>oj*R$Gks=fwijttwrF>y-Bp)%Wl5ISlI0@VvfM3K$#MhSz{a6hn-C{~ zkU}8j63AVWOGsH`AdqmRb4f0h1X2hJ$>nk!ka9V~ z&9gI~nR%Y))64Vtc|YLoTGgGc8&{i9KZd~kGaz2 zb7zk(ZiJiU)^WSJP23J{5x0_Ci;E_=250timvj4Z^)j64<2K;TW!w?&BJL1(5RYu- zn(*mC>nMKr0Pb=e4{`edaS*K#SI-@@pxU_xJRx$PH#NTQJpd&5*tr`xo;$o`$-0#n z1t&hw5#RGTTeWI!bK8>ZHfsR70^cX54on{Y$&(B3;5hMRjuS4PI(9T9e_j4C$N7%q zdeff6dk_4?^UNPOPMhF3{r!6_KsSMD)}%xR7be2wFNdwAdO$z9rC zHnS;s4WGoFx`!93ExR>M9{==8;K79Mze)+E) z=lwI_Pg-Ng_|vY({=CE9`zNlJXXECc`t{pCQ9i!%RH0Q(@-O1MGD`-yhkvoq%57Gw zUwLZgU(}@aBz8;bhsf*<{(hX3tW%V0;d0zt(7uykzVJio%j8|0h{j3!7{0%wcqGqp ztz;g#-N13bcW^KLmfggD#`X;D!m~oZpW#C@UEF5=Me@B6$KAf2XIJU{_!Gk0U*+1^ zcd`n|Gz z`82l&-`AnN0G}=FeHc%+{Nbj#EyOqT66QEdUY>agV+-KpXZJGL(vh_@rFMJiyw!KK z?f97IoLh_U?6Zb_@c!X)d(N?Ze;Vh?@a$MVZ{1tE#@cKQ?8snp_^|PmKh{|B-8zCM ztnu+z;y5+)P3!X{j`#p(?z`3kPg%^>0_z^!M|{O+0PfwTPx;wh^v~Q{_Q849m$jHD zMknmU`fT-A?Bu%eVfV~?Px(5I<>!@;)_t$Leha5CTABO7csT1*9_N$XI^eO`m$_}$ zpFG#fFT%A&Tnp2E$??NL;+$bc;X6_R1UhbpZXShF*1bu@3oagyx z`9Fj@!}f3@+!pQ%FABda{O<5Q;SYuH4gX{KGvQO=&xOAb{$luR;qQf?2|pWtF8r$q ziHH#+;)-}8zDRW>9_frMj0{AUM3zN{Bda27BO4=IBNs*XM~+0^61g$*_Q<;;_eAcC zd@}Oc$U~7wB9BGB9{JbEk0Q@Rei`{~G+OtKm@Vdrd18UsWwHBWr(+Mt{w4OM*tg)z$Ji?sugd!c0-pHcTct#_uBO5TDJs8iy$g#*Zky|6TM?Mhw zhsZxiJ{5TY6OGIn&!w?@V-H|FkDW7~Ym+CE?@Kt7nePv=v@Ev;EBSGj*?xytd#MfBHq$FU0A;O#gZM57Qr+ zzHj;i(|1k3fBMep+ox}vJ~@5s^exlJr*EFVa{7wtW7C&UZ=7B~Jvu!+y?lDv^uTm( zx_!EFIys$~j!(y?Bh%sO+Uel5YuYhwpEjn|X?~h}_J5y!<=HrcP% z^nX8n{nL|AZ+Uv{)16PJo=${*7kVl5ywlQ`z|a3fKLncJVlIry(&+QFIy+fp!8aVT zAWE{LYP!uZ?GC5Q?eY5jfr`ptRrR^I)tr0cZ}}dc100&uwwedo-`crnVU4}fPhITn z)jXFD<+=5nhQ>pokw-Xl^+;Y?yLnT-BbcurpV$*Rxqefg#wH(CU|vm4MRx|n;XF5< z=LVyTAHWO^P7E~WNje{z*wdJ&>CmoF{!3$dA-?&6dZG;uO%1KtvMC%52TyJa<;TW0 zh4Z=bU?|_kT3zGgp;JYm$zAz+oGN__Xc>y)^2AjGZ|U(WvG`p{IKPlj=RFmy6>63;%>BE~SR)te^9f|F~;H$}&BHMe#X zE(O`3N^fq=i|M>Pn0f$)lr=RHzD5V4nBwTbWS;KalP6PneqKyA=H+yVby6RkdPLxM z0tDU6O^h>;iN#hYmGlF$&J7L?B*U|lt)}NszE*q+Nudja81Y1C=wx(~A;Ov|F34sx z9}1$AC4UZ?ojd>$|iqfI{ zuF1uXc{7axghF}S;4m8(8qtCAyurS$!8Zfn8uNBM#$ioK2s1E+Zs*OxiO|W3P~OC( zHRc`Zk#(C+3A+}L*X51f(JLDB&h*IYO(ScICxc;}cU$LO=~JA2aQ&uJc02GlIgq!f z7?FZ>2Ts}89|M2##0O09v9V3380BKJ22KLK?6t{o6t|Vz!Qypx3uvER9mhzPqW?=L zfW&#Ix&Q)CahyAfDIUyoeGd>qENXD4xldLKArXLk

otZQOL3VaVHe~rRlaqP1JlefN6-!Yg91NOrB&eyyb()$QP&m8XmdpgZRUsqU zGExLPV#gBbKfz3r4RVMBW;qLEP88aIIl#J#XCz*b4OJCZnfU;`)Y_7Y2FrJh2aQ;; zGa@O8-4Qkum*S!FZRLJT?um-mH?L}C4b}?#yy}1BW5BCw%uS4R?7F!U#(lmNbWZ{s zpy4fxUdj3?hxNn4JfbTWNX=%~gX1fWVgKN3qNEq;9MdxyBIOh&dbn$MyN!;2po)uj zXsz}~TV|)L%Pm7q_XFMpo)zP}yV^PiD^1~8GSsn5LPls?Sq2(e|3?;w_kuRro6)&U zP%LCs0qL!~p)U}tGdK+Cf`;SRZZM6VL!;J@hmpS<54-=l(520O;Z-a zd{ewz>|h1eCgD)&SgO5Qk$W>%(3HZkz-&XB$l8@ol?R-Q3$LR)X#I~F!1>g0mIs`- zP^F0?xZ;);t&lSzD^*V)FD)t`)cxHOm?80^CjLNBvF2_z5Nb|qlB5(f zBt~}Gjt8y;ORZaqCya-`B8Rcr6*MBP*`k=n$$*9Am6KnZe_xznr;=E&mNXIO~7(A5l)G_Z>^M@BRjTr zm*dTCy|@r_7VN0PhqF9dg}I=NF9~bm=Jw)_u}o`^XzrVB!;+YP)M`pRvFu_Aoi}^H zZXMkDB@Iiu#1+H!Ys`2v${!s>8F*Vr?Z;pLwHv2EcO_<8&S z^HJtc0XO&EwK@;Dsnxf=%Va;ivS|3z3duep1l;VfXo%p;EgDKWmR}CN$0Z$N5a#_w z2vWk{`L@3aYoAISs}(^yp2UhH4|wDk;z_yWV=7t);VS(PEsX1#7Xca z)&%ob)U&e^j|Dc`m1@Z}B?ZLYY~zg^^IdV2Ng5eR(#Ga?4~;A)Vi07V~RCcz;V3EWWKp%;rs&=gqJ^yAF0Mi3~5iZMtcH~Z{SMyq^pTpqqdXUso z-0R=0SHkw1S)WUZVlXCXeJZm0G9uzsQ|4MEq;PB+$#EeFH$=>~fv{i=KByQRYw{wf zfT~J%Uy>MGL#A#^g2c73m)(-!Q8Niu1+^Aj%il&y#nCE5}SwJQ3sq{yt!SxPz-i0Dx)s3AKb%Gwv~5R$CXWIWj$ zmEoK0;Xh9D+_Hlf7j4P6SwHtbyW<1N){-HZZj>Kmy-kp2I@w0v5l6gqXz69geUnXe`Rw zE0O}QbIB{#vKl9`SY;z0+)QDx7sk*lFuxUmq1&cDsDWWLieQQQ!Ll%kp%nGEr4TUj z6bcdeNJ@e&kmR&jJ0ttV|Z7UOh|~PX&N6r2>pqqC*kX0Cl*@ zTMcJg65&E=lSD1fPZi@53IV2ADRTa5Szdj9MC7ojg@yFR^XxAZ;=nY>3=XNh915?0 zx**D0Z1jRv;h@3;j;`ClxHuZ6II2Pay+PuODut7v$AUUfDH)7}u)pz9BnK~5dQgQx zMjUvyMH8xRDz*N}!_)M|AV#sIA*tHhS8K!*7IY0THP^STj;P?3v!H$<#p*x1sbDNY z6uJ~$%Bjeh&$-B2q^XqvYo6$$$g2T=Mo5P)r&A#8#I#oh$tY+pT|ID-OLr&2=6NR~ zO7v@mbE$2^b%YpCh~*Ozs#j0lcHTsHhUby05JWaI8!DhXP9}ACrlE*VMCrT(DkKykzgMg#Oq}jL-xexkkt~!cR1*yh%9Y^b3QQh)1GdAP(|xQf-!gY#E^n{5oK64 zFNZ*D?*zN@V~%r(!<+;H6Wu<4^GbKOnzHuqu)VV$M%d>(cng$9D^&PLT$?!>a>alP z9nqS}tTAlDyQWJ_*@aKjPn7G#BBm!yxqA2MO&@V z<_R1BH4L#uVG|%J)S-#9=L{iaZ@(ZB6T7=#fv;e!lVE%FQD)%|FoipRRSItl!21-l z9N_IB@Ot(GN^t{qK^O6$4ts$i4Nf%jGH4h~u~1WGz#qE3bobnrRsgJ~iY~^n#H*tt zS#x5Lz(Y{p8bxtub|fia;bz$3N@cLo9(GlyJ`sEH;z&2Vp8(x6IvLLPtf4SmYdX z?!eI&ir5g#>4U57%!(mS;DLgg`aT9D*|9$aHYaM?GWYQkx{Y;_>m2fMO9r1;*#seV zk}*f-qk)GJe%nH2Qa#xDG`K!h9b5%*NYEsKNBF0wlmbb_3l_Y8hQ6Q)d}w6))DmHO zB*Y5>U%2fNkCuPO^#H5`0Bc5}GF-^Nw-9$N1D73hJzIuOL!u8S%;g=4#1Oh;@2dBb z?0hB=$+fXK5Nd?63^0PONpb ztue3C`Hlj73Pa$317PaATR@l;WdPAAsLaaIVPK8|Z(&yGJHWEKX}&5*k|1vUV+$dH zvv1tMf&#xN3k}+?N!M-Fji7c7vBf0X8WPw&ruoiq`LwvcMPRW7lrVNg;Sd8VV@%?k z#MyIgPT-7BY!KailR*#W2(+!!*Z~iB1bbdAKACy^Lqg)2t&23^OXad9g4bRFL;rqvIDkU+Cx_lWB4!@QsoJVZB@-}w#b zGNNd3TkkdiPBGf78j(hCe|^r#B4F zx%5PsB;$R54dB!1T5poweZD2jhX7FVM19!{G^7aOvw#!2N19EsL@B;sDd+i+Dst=Y z?C4PhK{@~a9>7I_&zBXv$26QTJ6~4XW;mf%QSe$kE7W4ye=exR%KdMznIDV*4bH41+m5b+o5}&b@ zUfrdC?l1H)V6wzVS#wjlyiZivuC@$8*zjN`Y1@EWPS8RGwe$BI7QVwr?EICMf%lM^ zz`%=?&rBF1Z}Ewn&Xie+b8%|&K1z9$PJq&YQ^H4sga^R7w}T!Q-6OJGt`7f4kQWZ& zCBFq>5H$PDuA+}?GSVvJE=G5JBnh1-KeEGrMdw&mLyD{@NNy+iEXX2$Qg^=Vyr}kP zTzq!je?A#omy6AGNk#prq!Y^dYrQ%Q`0Us49j05K`RDAnu)$0-XTiGKI@3niRn=$k zArdji+IbVN z0)2gwIRo&rX>EZcco}8AQwF01Jupyz(IzuS;^Mrx1v0sQ?G0Lb!`H-#21s!d^;V5t zpKX*Qt`JrdQ%5#wSmf=|6$p)u+q{Uiky<=mii(yPEhUr zq`G;02H&0X-ih^YTM=Kwan-y$zf<*VI&TD=cUV5ev(7xa-+A-sVf7dUdVNBlGtC%Qqd{G~L>s$;(Zd*#6ajqdF%>SF4+= zSLW50q?m1LeeMDa^+W=>?Q62|jTZn_DKHYxMs=Ec>s<36i^ zn)JPw3{^#hkCrY{T#=xNh*RttfP z);3*wKsV35BzD&A0sid|KA<5{S7hiqc9o5UhXlg1Z%~!JEPA*Au;6chqya|C#K^qU%HYs|KcWL6 zJ~O>7%me(*z0vI?(0F#t)VHadW6zo9%fVH8OSeCQYVA^%+i$H9{!)m1p*FrfMg~ek zlE**3VqY{*#`dtRN$kCJgyGNi!r)qNh(~2_Y*OZjm__0Ahg2By%zYPM<0HYv}VP+0|;W3h1tP&5y1knFVxpEtXH}MTN~is`=oj_loDAOD80g2}dU)g0mWy z-P1y3A{x#o$)GSWGS2wW_Sj@}*9{U(j4C5uGE}R&37~@22ykwyTB<1spqo)TVP3^g zf}Sh_j6z*c2BO$v;0e>5|H?0EvZJT_?8M(kZ!u|qcsEez4fV9y`l*ZFFbI>t*ZG;V z@S7JTO~B6o@KR`hKwEZx1z`R0Rjs_Ba-aO9n?l=gc8>{tiA0Z~e1aI;DI}8BF)eE7 zESA^7es&(@#kVz4VV?oXs)_tN6N<9*{2z~(y|3eb5Hrr?(G%z;W-YP(X$&cuF26*5 z*k@9IR8eU#`n_#VvadpS;PNyY5!V{BYJaB35G<3R&JQ;=34$J0@byB^PB~yo9D7I) z8fL>I)H>0;vM1&~M5&vtAgne^vp+0woxu!9&tr~AY6KA$3O)=eQ0*eP_;U=8Gc_>9Oy2r zT-nyw+qUxe8!sOo+%Q)i9vLty^ug~9bFMw=_XGB*8+*8NCn2)vA$NZbY(=2!zhU}-H%Z6F$~l4$FN!Pb#*wa>oE z=U^*`{atQvAFbwZRW@vW5ANNxZ;KfdJ1<@?|$NF~zgm z$IaLkQ)@55*16=#Rt*%*bKQJu*Jl44rX3{uH1ON;q27)NVm%*FB)w=@H6x>b;Gn+= zk4Tk7RI2(>(KN0z*H8@69pll;%58In7DJra)LG1?maS*Ia^;C_GfQvbd&XyfH>|An zFR!ID(yTMEV*Rr2NTgC(Mm|ptYv^NLBkA6tvL|b)(W};r)m=@;-*CRRZ^gO`Gld;( z?aFSncJIpJJ%*H}AGauYF-HAKCJyu>5q?p2eVmM+YD206QG0jF!U~F_l*URbizaVf z;rs?ENYzOU1}x-Jw3bt4fkzvE9$4o*Px<`PIwHaoJZb-wHA66S6Y!o(;eCtA0Zlar zBx2XNxVPL|ojvZB2537eWC^Bg+ge9>Qxz~K4mZT1Z<6{0B!8Jhly~Bv09CwG2#t!8%Ap%? z!~tI5G5gD3B1sEi_&g_y$oXgIM?wHBd=ZD{Uk9cGYCt>6AKyoq@>a4=z(i|uqcfr* zg&LX#1=Wx$Eo~fu_D%X+EvlsP`PXrXHtzh$`DXOnm}{CVI2E;=0xz{`qH@;F9bu>YhCv4iPQ1el{0j>n<}&BQMkfBzYCj zf$$|Tv|cwkdvh+qgTz(f7B+6#N?{Q3HnR>zXa7j4&?CO^9bJEa@w>{Z85abT@#8xG z5p*Zw=dTjKW7Lb_GD*;Wq+W=p9`ZmP=EO3lJNfm0xk4@3mWs(yScgXkt}!S?wSA1 z&SDcg?B|Re0iJq)DO2*-V=cGHzFkY+3&p5XQb%Y{K*|91ALpX_tj6G{( zcJItgdqUsX5kgoq_D{y_p4sUR?*^5-Er65nF&$t9Nykdv5t2v7(6F+_v3mzD6DJa> znCZEez`m^3kmth87VwkFl>?!ml1mpR#&hWuSLlce6k0X`e{*18iHvX zEjKk~Tho(yqq|KEmWur>OdBT;b%t!Lah)Z6U01sR_j`o-J5PK+$!Xiik81+Gk{;S< z$%fh!R^l>>rz_1VEz&ivODKkB$ere@bNRb&HD@eqa9!iKJpIrD-24>Q#|pqrUop`b z>*pzdIW(r1tsfB7!v`0)zH*Br_STRp$?7#nwRqIHXW5vV+P=hucPaGK2@=2N;EkGI^kX<4hu~OEl;2gj9(dVq^zTOmucVO!iD& zq+abhUBPGc!^IfcL9lnf4?LULelgd6A(#l}sT-K=JIK!RdT~=GhYbxco?FY^DkD6AxKrCu$Kt*+R&(@WlEZiWzJEW{cW(fRs9i zd73OWUF5$;?Yb}e90h|Nd=-8YUkiP-0zKtZCRuB4LNo_PJxBdJ`PLSYqg9$M+`#BQ zCuySd${#K}iZUDv8p2PUmw^H_33u^--277}UIl%B#lY7Zq9h#s;J}KbplJl~(OWUE zsRD?7jOPti_IcYPEKw#){D%p>PTLwa%LSe0WY?;#HB?x{!)8U0P%DUcQN+&6&QF8@ z%c0DF&c7z2It&K{0eGCtR-ZTLHcQ#vpq<_w} zi@FeXTr*=R;_lEOCVGlT_`{mS%d+zyj)Pg2#VtI?vWCFUFJM?uwNpH7vs8}1=VRoU z5*~G8gm^;|Sm)=?&yaBPN8UadfxpIVWgY?e_n%=m@CL?p)N#JeTOt;6xmKpXPV0|% zF@~9<8?ydi-6(J(K{l`roC7<5zdCx0B8Z?tue@Q@tpr4m5PR3p32(YjzBRvqMAW~e z)mx7Km$ZuWqRxxXzW^Z#Ja^C9wY+8tty4Ml9zO?Bloh1L?|y3Sy7%*4&wuzMSSL+X zM~V_1i4S?wEJrEPb6SBG?#6C=dJ29rWbxKLhySg}DGFCyHS^}yqJ(9CEg<#IKD{Cr zDPEls?O5!{a6d5eh=`FG+uu84YHWCJa96=pMSJ*?nCm-p`zN}8QbRt!@WPitB3E6f zp|>|w&-9Fzs)T2#T=A2;e;?tkklS%0cXd_@aDsxR;?`eJuT~<+P!$!pU8wR%EarAD zo68U8%m~W|M|$_i$iZKKt{?SD-;XMIe$-{Cx(wAlslsB6ySwLqydO1~E|y|{V(Opy zyp6<-2X%y$^|fqssO7fL=;pomi~H^kHab#a@rEwhAT=eVv2&9q38)}OC{nK967LTv?Fje3S1N}w8rhK^4XL`Q(_kl+r+|$J;^1#IhP8YB9X%AxDV24fuyvsUtSB9RZEz0|@9_mUb z>xjB($&OBWpz_{-ma6l6l0(Cx&so;zFqh;oy?Af)^+HwP!z(t*5qaZAPSd!J^m3C& zFV6w~iRK|4i-%k}T&??)snjj1i<-dMoQ7ureb3_xh}*|`87UUt2A2;T_+pJCo@9;4 zS*)U@jB7OP$TB56n*;%&U)wqFwXGKX8=N|{ zM`x0Xo%26bSfXa3x8|!2vK@i7#Nb^pM*(8)yPTfFPf^8HO&yILa6@iQ7n9Z#SmCq%3|3!Fw8(#`pQ#c4p* zvplIT#e>d&@hIq`Q=s!?fS;C_<%~J5RV$qxZLRT`j(FcO zYmAmVZ?eePa~JyAdFSoFDPkPjyew|E#0uvhX%-KE-2}rAq>gNqqzmuVvGb<$EVAe& zk|gI%tl#O@P4UOm!t{gQ+EvIW^+n(235G$S_i7(x$-(#aY91#79-j+zJYkh2Z~+n4LqZwE(ikFpUy&1{{q^aKlhLjHf4BQwR&frlS<^Le&Te!j z{H^TX{h@;!xEsdDub(>MFg6eIcK_dyrTk_vy@i)!J1W`8mSdd1Kz~~JEcYc59?OG@@s|^ zP6#|DoCB-I2 z^<4ZmG`cV2@+P`zM_R(2lr^okEc7&Kin6F0ux?bdygH1ejUV9q7WdW~+8|({dubCt z1oN3}0sapP$6jc{k10I<`z?OqU3Vyd_y=H9LjN6fD4m&@1mDGbq5Jti@%-^@Cw>F0 zxOe&EJ<~o{$%jjovS&}%z4X3aPZe$7viDv0&Rx`2M)x7#R=x}5hsJ2=HS`+LP&3Gn zWL&HJ@>4jpSP72S9Elb|6|Vk<W%)x&w@GSph5{3Tb=bw3I*Y4fuRk(hCS(2oe zF}W$Q3OxV!XP();YZs~6z)(kHs8c&p%GDNj1$I7e5=tFOiG@qc>VIIkanL3za&7XTt1vwJsz<>I%0IgNc5ILHVo!z}#!EZnlRi1>%&`mt{G0W$}*RYSFnoTbE$9s2GiZcW!!y9&k_lyBYeshUV9+q(7$QpU@~SCh`m{arClx2QWd#Bp$0Hp>55I(!4D+qGDds%#A&rojn_=A5=s8 z@N3k54$=Lys3&vDVW__Rbq_zFiQTkPSY^P^!AIw@(iuU2>MP;0Ju@=!RdJ_HKl5A0 zMf@5o>)h}miDyTzFzzajxVL8xwXjSBJS670i{wPqBA_zk zh!6>d>1Lvs_xNHJU>L@QYJr}8F@h`0F?|8xeuH#x?ULBg8Qn3~b)8tdL|&3-y9;O@ zClACr6A?{+=I}?xI9+DDcl4EneZ?!VbZxA|eQ^Ca%S*gen4VgFC|^raJ7qa6(qa4p z*hEo~GogU$#$~t`id#i78fiks3d~@b9X95hEtW+WU``V`?ytW*;5><)Cqud@tDHd2 z3W08%zi=J_(`wKBeaN+ifG?we0=^t$(nOXeY~HnhyL{H$5NZdA=th(SCwxBp0srgU4&pzf-pQK@p1*D;=V&_E$b{g>fykv%}~uZ(QMkNNra@C5yc+V!C$tYzV{{ z+hctBZ&=RYxGz2>@fLo1{z9}4qjl&lQ5Rr1e}P#Rqm^i@u3=SfL-Y6Hy$$0EFmZyr zph;wZbSur#az%5sg^mzY@e@V=M1%=?{y9#Td2|;~L`Rz|W)u@&b%^C7Jo|GNo6Z_n zj<~+tc3>#agBCDI_C<20AFI4rPpz&Ccts@W7Hne`1b_deRz(-D9N98_?L#(>6&}8< zcd#?L{oe9Q5Y_ol;*WgqUb(%u{R0n$c`bH-{h3p<5$nN=W=xEaMIs$9-5F_`UU%hZ zlNxXCnLhVAwJqpEu(0qTu zkHc}#nRBbL&}kqw9bgwYy{ROK3deJ#XkTg58HH{Uy|Dk9_MF6V()9WOFN+w93U9BUmbg?jCm6|P7v~eJ z53XE)gCS!O;|jWA{mjtH)q-Dp;$Hy%7l4OsBeA!GO@w}eB@({upXEv7v3&0mnFAW% zUi7nZNYt~R5go1Xl@C-FH~74*S26d0^5C{OW`lFRoHp1xjg*72H7$jZByhYab8M*4 zvL<#=LH*t7!2XWb%ZsfEppmHEv7uu!*D_S?Y?C=tm06|OJ|cro^}<*m%eM^*C^`5s zA&4(OoS1AG>WN?^N=naA%Vgs4`9F%72GeJJP4mAXSd;8W=H`3dycu3>luh0ZlJp5ONaqJo{ z!Cm#Brpt13?#Q`%jA!w|djf%b4*C}u7KieG9?}E)7v7TPU*50kVn|H1-0_vzu*~t_ z{e*3Q;=BF@m1jwyvp4V$nXN#7XVY1?PNZ*G`O!uI2{B+BV!2$b)+{1G1hCmqLRuLxk@V5-X96il>1ik z4KzDe>?yQwvFyq7O%d8aNYx@)t-K;3k8YQd-FCj(r>^VeL9sy4h!NU*Qq7zpTdlfGU z)%a!Lel2ug%c$EZHbpCc@feY$8ZZBY)Q1?T|GZj zyq6sINy;da9d#N}CWv854*?z*ulcp8?XJ>KyZb4vcW~)ben*y zvF6;^mUH+m7)-d;s|8MAv0Wa|n76SC!ggg$#h?_N+pexnI8F#U_En=R>q?rh&lN_~NIKl8M|m;G8uKQ=(?@c~=okkY6tm+LO3DS7sBr^> zo|1+=byCFA4x9BgIQ+jnm8^9z$y%4W+9W4y+{l&TTW?&dy)k~?D*rpL_C%J{R0z6f z%bYTCReX?NVVZCMf9RFS>GtZfHnt7GEqMutCMFH;D z)YtTf;ZtN+a^LWLQ`q@oJ;(A<&lUCF8J5V;vGic?0obeWe>+dHn9K8v$%@?9PnfLu zhqPhw>SD4Y^zHn22j1oW^)z!9$(cM})}pIhza}aG?-2jPD`=3&^%;sH5v{h`6=h2n(lQ zi=(XfoY>vuk$d6;4a4AU90t+_!%LcqwivrC-*^v z*Q~88w_2KjKOtx^4Cm+0tE?)pMu3D@2MksK-71PAe*(E@le32n@}A)QoAVQtK`BAy zH9-QU4DpTo-EAO=q+`9E32JZF3GzL{B>W@D@RK1`A|VNH&a65`#KiocddWB&qKf6l zCY(Ha;urNjV?WlZ1I%jaSbsMd42y9ToKG+(52RpxDBXYx=hefzO)RM=4XK#_D-TR` zDUGcVJEoT%u$1UYf-4-u1=LNJ>SFdXEF%J(pwkfDx!*g_V6Xeboc4Rv(E)Ff_k<@9 z@j3Oo&zb)Vc4D{ev)__P1Ao$PLJK5xNCGJkAP_hQ4xGaq{h2R8f8Z0qHvrjlH}HTS z^qZNhJ99N7p$)C;?;FtYKNpubZ)ih1CLn?iMA3;Dy3mat^r8#+eF5l13iJAa83(#Rl-9P-$N z&Desi*oN)c0UZSt(T@_!*oj@(jXl_leb|o!IEVop!eJc2Q5?f@oWMz(!fBkrS)9Xp zT);&bY{M;lf?se0cX1Pc;d}hZcKn1tIDrv%;8*;H-|;h}>|~5x>}C&p*~f{T#L1k( zsra1JIGr;%le0LRbALD&k2sI>xqu6~h>N)dU*ao#i|_C?zQJ|;fG@a|%eb5?xRR^5 znrpb0>$sj9xRG%ts4>YD)66i-9P`}7&D_GR+{W$PL7fE_@qqm-vCN&^#ohRmd$^bT zxSt1j5T9}YcX)`0d4xxKjK_Hb4|$TOc$#PM8PD<@Zu30u;eS3a@FEQkvcf7&4snP+Yo*T?(1vQQNJmBqN25Q{x(^+CH? zUDtRgsP~RHTQxp@s#)gaPP0-qPk%ZVIvT#dVRxHXtcGtozGc{*X07gDZJ2&%_)S!; za4>4xW`8ZT%W-{ab~b{_h(BWZt+}*BQcR1P9wVI3vl^FbhAgNha$>%x?zwf>^DWmg z?111P3FFZC(zn(eR9&imaN^#ey;`{eNtsRcN?kFc|Jf-*~5aGyNXV9J0+T z5*zQRn99$Ul=+0HiSm~DR9D6FD&f~=2Mrm@^r@j*VEb0xzAD4Ab@J_Ky3C}@OnRy} zT)1vJRjU#_-VI%{im7PT_5VGHVn&pBN$M<>m1R}0{LrC!Q5V%dB{fY{RU`{>QRSx# zNlh^?sxwFzWxQ05H0nlGokAv)5VZ*vI~bHszgQAgiP=(4%!?&a;^nlM5woJ?l_jsN ni|VJ-lPX`=MfFOha=BkDiRFI)9M%pm0001!bebRp(YJh?N;^zU diff --git a/vendor/assets/fonts/KaTeX_Main-Regular.woff2 b/vendor/assets/fonts/KaTeX_Main-Regular.woff2 old mode 100644 new mode 100755 index 4882042489387f004bbfd83fa1aaa68d3655cc48..89b01e44c46cfe936f00a678b56c2dd20cfa561e GIT binary patch literal 32948 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 z zEj*#aq+co$j4SmS){yFZI)8n!MmEYr#O1mIV~Q51w#bqf3E@ocMnLc2w{T^#rE*lK zus&6-=kcKGDvX6Ca$Q_Ka?#xX!!tPCW&4Du{OMO-Mr#bCc_v%o^|5!mQ)UJ!i}l

Xd`w07^^K$-2lt&?aBB`3 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 literal 20476 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 V0D`Mex>v&J%_2+|Z7e{Mxd6vJ8rA>+ delta 73 zcmcaGf$72orU^DIuak_qCpsKqNqHBzc`^rM4h!3I8~w=@j14l}#!0W^`E9;3$TPoS V0D_C#YZk-k%_2+|Z7e{MDFE1x8h`)* diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf b/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf old mode 100644 new mode 100755 index 063bc0263eba6fff6ab62d728b5ef666b134f5e1..a2b86fcf0f0bb4b9871b111e39f2de53c1891c64 GIT binary patch delta 77 zcmcc9$8@KUNrZusfq{Xap@D&!p}@^8#5YqqVb4U792S1YDC>zW4KklpIS$72+k9n^ ZXMO=x$#C^a_evPOS%J}_jRhz&7XVTv83F(R delta 77 zcmcc9$8@KUNrZusfq{Xap@D&!p}@^8#5d(#;O2=UIV^0;ZS*I$G{|rpC%um6xB1E- Z&-?@eQ1_ivg`y1ktyAl#jL~RR910 diff --git a/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 b/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 old mode 100644 new mode 100755 index 4318d938e26c1dd40212772f4c9984b7fbce6adf..748ed0e06881ebc6ad993cac76b6793d8cafb36c GIT binary patch delta 19128 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