diff --git a/index.html b/index.html index 1c7f19785..b7e49b077 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,41 @@ - Hello, world! + KaTeX - Fast online math rendering + + + + + + - Github pages testing. +
+

+ What is KaTeX?
+ KaTeX is a math typesetting library for the web.

+ + Advantages:
+ + + Interactive demo:
+
+

+ + Examples:
+

+ + Performance comparison +
+ + diff --git a/lib/katex/fonts/KaTeX_AMS-Regular.eot b/lib/katex/fonts/KaTeX_AMS-Regular.eot new file mode 100644 index 000000000..601c36f0d Binary files /dev/null and b/lib/katex/fonts/KaTeX_AMS-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_AMS-Regular.ttf b/lib/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 000000000..9d4082d4f Binary files /dev/null and b/lib/katex/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_AMS-Regular.woff b/lib/katex/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 000000000..530d42c05 Binary files /dev/null and b/lib/katex/fonts/KaTeX_AMS-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Bold.eot b/lib/katex/fonts/KaTeX_Caligraphic-Bold.eot new file mode 100644 index 000000000..e28f5c964 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Bold.eot differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 000000000..cb9b16393 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff b/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 000000000..948d96bc7 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Regular.eot b/lib/katex/fonts/KaTeX_Caligraphic-Regular.eot new file mode 100644 index 000000000..7d1ca3f63 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 000000000..f300d7851 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff b/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 000000000..9f2c0cce3 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Bold.eot b/lib/katex/fonts/KaTeX_Fraktur-Bold.eot new file mode 100644 index 000000000..48b25e4a2 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Bold.eot differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf b/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 000000000..78c954e7f Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Bold.woff b/lib/katex/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 000000000..0433ab1a4 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Regular.eot b/lib/katex/fonts/KaTeX_Fraktur-Regular.eot new file mode 100644 index 000000000..43d3e608b Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf b/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 000000000..9874bdf81 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Fraktur-Regular.woff b/lib/katex/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 000000000..6c493aa9e Binary files /dev/null and b/lib/katex/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Greek-Bold.ttf b/lib/katex/fonts/KaTeX_Greek-Bold.ttf new file mode 100644 index 000000000..708e56f33 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Greek-Bold.ttf differ diff --git a/lib/katex/fonts/KaTeX_Greek-BoldItalic.ttf b/lib/katex/fonts/KaTeX_Greek-BoldItalic.ttf new file mode 100644 index 000000000..1e195dafa Binary files /dev/null and b/lib/katex/fonts/KaTeX_Greek-BoldItalic.ttf differ diff --git a/lib/katex/fonts/KaTeX_Greek-Italic.ttf b/lib/katex/fonts/KaTeX_Greek-Italic.ttf new file mode 100644 index 000000000..50d477c51 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Greek-Italic.ttf differ diff --git a/lib/katex/fonts/KaTeX_Greek-Regular.ttf b/lib/katex/fonts/KaTeX_Greek-Regular.ttf new file mode 100644 index 000000000..d79147c6a Binary files /dev/null and b/lib/katex/fonts/KaTeX_Greek-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Main-Bold.eot b/lib/katex/fonts/KaTeX_Main-Bold.eot new file mode 100644 index 000000000..e059f5c9a Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Bold.eot differ diff --git a/lib/katex/fonts/KaTeX_Main-Bold.ttf b/lib/katex/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 000000000..f7023b33b Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Bold.ttf differ diff --git a/lib/katex/fonts/KaTeX_Main-Bold.woff b/lib/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 000000000..b866d2f07 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Bold.woff differ diff --git a/lib/katex/fonts/KaTeX_Main-Italic.eot b/lib/katex/fonts/KaTeX_Main-Italic.eot new file mode 100644 index 000000000..7e8ccaf8f Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Italic.eot differ diff --git a/lib/katex/fonts/KaTeX_Main-Italic.ttf b/lib/katex/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 000000000..c58fc52da Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Italic.ttf differ diff --git a/lib/katex/fonts/KaTeX_Main-Italic.woff b/lib/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 000000000..94c64de2e Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Italic.woff differ diff --git a/lib/katex/fonts/KaTeX_Main-Regular.eot b/lib/katex/fonts/KaTeX_Main-Regular.eot new file mode 100644 index 000000000..2f78844a6 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Main-Regular.ttf b/lib/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 000000000..928112482 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Main-Regular.woff b/lib/katex/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 000000000..664952f9a Binary files /dev/null and b/lib/katex/fonts/KaTeX_Main-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Math-BoldItalic.eot b/lib/katex/fonts/KaTeX_Math-BoldItalic.eot new file mode 100644 index 000000000..ae9977280 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-BoldItalic.eot differ diff --git a/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf b/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 000000000..b9c054674 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/lib/katex/fonts/KaTeX_Math-BoldItalic.woff b/lib/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 000000000..30511d961 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/lib/katex/fonts/KaTeX_Math-Italic.eot b/lib/katex/fonts/KaTeX_Math-Italic.eot new file mode 100644 index 000000000..1f08bb3f8 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Italic.eot differ diff --git a/lib/katex/fonts/KaTeX_Math-Italic.ttf b/lib/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 000000000..b18b4891c Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Italic.ttf differ diff --git a/lib/katex/fonts/KaTeX_Math-Italic.woff b/lib/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 000000000..51bcf45fb Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Italic.woff differ diff --git a/lib/katex/fonts/KaTeX_Math-Regular.eot b/lib/katex/fonts/KaTeX_Math-Regular.eot new file mode 100644 index 000000000..444b5851c Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Math-Regular.ttf b/lib/katex/fonts/KaTeX_Math-Regular.ttf new file mode 100644 index 000000000..bb20d24a3 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Math-Regular.woff b/lib/katex/fonts/KaTeX_Math-Regular.woff new file mode 100644 index 000000000..3e4a018cd Binary files /dev/null and b/lib/katex/fonts/KaTeX_Math-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Bold.eot b/lib/katex/fonts/KaTeX_SansSerif-Bold.eot new file mode 100644 index 000000000..810c3247e Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Bold.eot differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf b/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 000000000..5ad4220b8 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Bold.woff b/lib/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 000000000..c0ba37738 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Italic.eot b/lib/katex/fonts/KaTeX_SansSerif-Italic.eot new file mode 100644 index 000000000..3686accba Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Italic.eot differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf b/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 000000000..2dfc064b4 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Italic.woff b/lib/katex/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 000000000..89dcced97 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Regular.eot b/lib/katex/fonts/KaTeX_SansSerif-Regular.eot new file mode 100644 index 000000000..5c430a6f2 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf b/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 000000000..ecac87cb1 Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_SansSerif-Regular.woff b/lib/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 000000000..13d453a8a Binary files /dev/null and b/lib/katex/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Script-Regular.eot b/lib/katex/fonts/KaTeX_Script-Regular.eot new file mode 100644 index 000000000..da729a5bb Binary files /dev/null and b/lib/katex/fonts/KaTeX_Script-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Script-Regular.ttf b/lib/katex/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 000000000..0d2ff967b Binary files /dev/null and b/lib/katex/fonts/KaTeX_Script-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Script-Regular.woff b/lib/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 000000000..6e102d76f Binary files /dev/null and b/lib/katex/fonts/KaTeX_Script-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Size1-Regular.eot b/lib/katex/fonts/KaTeX_Size1-Regular.eot new file mode 100644 index 000000000..d533adbc0 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size1-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Size1-Regular.ttf b/lib/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 000000000..dab5d7feb Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Size1-Regular.woff b/lib/katex/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 000000000..5da9c2092 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size1-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Size2-Regular.eot b/lib/katex/fonts/KaTeX_Size2-Regular.eot new file mode 100644 index 000000000..0bd3149f4 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size2-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Size2-Regular.ttf b/lib/katex/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 000000000..662da3cc2 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Size2-Regular.woff b/lib/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 000000000..cb8883ee8 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size2-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Size3-Regular.eot b/lib/katex/fonts/KaTeX_Size3-Regular.eot new file mode 100644 index 000000000..fcec1eeac Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size3-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Size3-Regular.ttf b/lib/katex/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 000000000..6862b2f8e Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Size3-Regular.woff b/lib/katex/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 000000000..360df05b5 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size3-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Size4-Regular.eot b/lib/katex/fonts/KaTeX_Size4-Regular.eot new file mode 100644 index 000000000..ed540e78d Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size4-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Size4-Regular.ttf b/lib/katex/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 000000000..5ec679bc5 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Size4-Regular.woff b/lib/katex/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 000000000..34f271784 Binary files /dev/null and b/lib/katex/fonts/KaTeX_Size4-Regular.woff differ diff --git a/lib/katex/fonts/KaTeX_Typewriter-Regular.eot b/lib/katex/fonts/KaTeX_Typewriter-Regular.eot new file mode 100644 index 000000000..3d6e6a29d Binary files /dev/null and b/lib/katex/fonts/KaTeX_Typewriter-Regular.eot differ diff --git a/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf b/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 000000000..5b356564c Binary files /dev/null and b/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/lib/katex/fonts/KaTeX_Typewriter-Regular.woff b/lib/katex/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 000000000..c7325050a Binary files /dev/null and b/lib/katex/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/lib/katex/fonts/fonts.css b/lib/katex/fonts/fonts.css new file mode 100644 index 000000000..873b0a58c --- /dev/null +++ b/lib/katex/fonts/fonts.css @@ -0,0 +1,239 @@ +@font-face { + font-family: 'KaTeX_AMS'; + src: url('KaTeX_AMS-Regular.eot'); + src: url('KaTeX_AMS-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_AMS-Regular.woff') format('woff'), + url('KaTeX_AMS-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('KaTeX_Caligraphic-Bold.eot'); + src: url('KaTeX_Caligraphic-Bold.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Caligraphic-Bold.woff') format('woff'), + url('KaTeX_Caligraphic-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('KaTeX_Caligraphic-Regular.eot'); + src: url('KaTeX_Caligraphic-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Caligraphic-Regular.woff') format('woff'), + url('KaTeX_Caligraphic-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('KaTeX_Fraktur-Bold.eot'); + src: url('KaTeX_Fraktur-Bold.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Fraktur-Bold.woff') format('woff'), + url('KaTeX_Fraktur-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('KaTeX_Fraktur-Regular.eot'); + src: url('KaTeX_Fraktur-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Fraktur-Regular.woff') format('woff'), + url('KaTeX_Fraktur-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Greek'; + src: url('KaTeX_Greek-Bold.eot'); + src: url('KaTeX_Greek-Bold.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Greek-Bold.woff') format('woff'), + url('KaTeX_Greek-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Greek'; + src: url('KaTeX_Greek-BoldItalic.eot'); + src: url('KaTeX_Greek-BoldItalic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Greek-BoldItalic.woff') format('woff'), + url('KaTeX_Greek-BoldItalic.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_Greek'; + src: url('KaTeX_Greek-Italic.eot'); + src: url('KaTeX_Greek-Italic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Greek-Italic.woff') format('woff'), + url('KaTeX_Greek-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_Greek'; + src: url('KaTeX_Greek-Regular.eot'); + src: url('KaTeX_Greek-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Greek-Regular.woff') format('woff'), + url('KaTeX_Greek-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Main'; + src: url('KaTeX_Main-Bold.eot'); + src: url('KaTeX_Main-Bold.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Main-Bold.woff') format('woff'), + url('KaTeX_Main-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Main'; + src: url('KaTeX_Main-Italic.eot'); + src: url('KaTeX_Main-Italic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Main-Italic.woff') format('woff'), + url('KaTeX_Main-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_Main'; + src: url('KaTeX_Main-Regular.eot'); + src: url('KaTeX_Main-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Main-Regular.woff') format('woff'), + url('KaTeX_Main-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Math'; + src: url('KaTeX_Math-BoldItalic.eot'); + src: url('KaTeX_Math-BoldItalic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Math-BoldItalic.woff') format('woff'), + url('KaTeX_Math-BoldItalic.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_Math'; + src: url('KaTeX_Math-Italic.eot'); + src: url('KaTeX_Math-Italic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Math-Italic.woff') format('woff'), + url('KaTeX_Math-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_Math'; + src: url('KaTeX_Math-Regular.eot'); + src: url('KaTeX_Math-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Math-Regular.woff') format('woff'), + url('KaTeX_Math-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('KaTeX_SansSerif-Bold.eot'); + src: url('KaTeX_SansSerif-Bold.eot?#iefix') format('embedded-opentype'), + url('KaTeX_SansSerif-Bold.woff') format('woff'), + url('KaTeX_SansSerif-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('KaTeX_SansSerif-Italic.eot'); + src: url('KaTeX_SansSerif-Italic.eot?#iefix') format('embedded-opentype'), + url('KaTeX_SansSerif-Italic.woff') format('woff'), + url('KaTeX_SansSerif-Italic.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('KaTeX_SansSerif-Regular.eot'); + src: url('KaTeX_SansSerif-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_SansSerif-Regular.woff') format('woff'), + url('KaTeX_SansSerif-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Script'; + src: url('KaTeX_Script-Regular.eot'); + src: url('KaTeX_Script-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Script-Regular.woff') format('woff'), + url('KaTeX_Script-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Size1'; + src: url('KaTeX_Size1-Regular.eot'); + src: url('KaTeX_Size1-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Size1-Regular.woff') format('woff'), + url('KaTeX_Size1-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Size2'; + src: url('KaTeX_Size2-Regular.eot'); + src: url('KaTeX_Size2-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Size2-Regular.woff') format('woff'), + url('KaTeX_Size2-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Size3'; + src: url('KaTeX_Size3-Regular.eot'); + src: url('KaTeX_Size3-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Size3-Regular.woff') format('woff'), + url('KaTeX_Size3-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Size4'; + src: url('KaTeX_Size4-Regular.eot'); + src: url('KaTeX_Size4-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Size4-Regular.woff') format('woff'), + url('KaTeX_Size4-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'KaTeX_Typewriter'; + src: url('KaTeX_Typewriter-Regular.eot'); + src: url('KaTeX_Typewriter-Regular.eot?#iefix') format('embedded-opentype'), + url('KaTeX_Typewriter-Regular.woff') format('woff'), + url('KaTeX_Typewriter-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} diff --git a/lib/katex/katex.min.css b/lib/katex/katex.min.css new file mode 100644 index 000000000..11c9cd17b --- /dev/null +++ b/lib/katex/katex.min.css @@ -0,0 +1 @@ +.katex{font:400 1.21em katex_main;line-height:1.2;white-space:nowrap}.katex .base,.katex .katex-inner,.katex .strut{display:inline-block}.katex .mathit{font-family:KaTeX_Math;font-style:italic}.katex .amsrm{font-family:KaTeX_AMS}.katex .fix-ie{display:inline-table;table-layout:fixed}.katex .textstyle>.mord+.mop{margin-left:.16667em}.katex .textstyle>.mord+.mbin{margin-left:.22222em}.katex .textstyle>.mord+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.mop,.katex .textstyle>.mop+.mord,.katex .textstyle>.mord+.minner{margin-left:.16667em}.katex .textstyle>.mop+.mrel{margin-left:.27778em}.katex .textstyle>.mop+.minner{margin-left:.16667em}.katex .textstyle>.mbin+.minner,.katex .textstyle>.mbin+.mop,.katex .textstyle>.mbin+.mopen,.katex .textstyle>.mbin+.mord{margin-left:.22222em}.katex .textstyle>.mrel+.minner,.katex .textstyle>.mrel+.mop,.katex .textstyle>.mrel+.mopen,.katex .textstyle>.mrel+.mord{margin-left:.27778em}.katex .textstyle>.mclose+.mop{margin-left:.16667em}.katex .textstyle>.mclose+.mbin{margin-left:.22222em}.katex .textstyle>.mclose+.mrel{margin-left:.27778em}.katex .textstyle>.mclose+.minner,.katex .textstyle>.minner+.mop,.katex .textstyle>.minner+.mord,.katex .textstyle>.mpunct+.mclose,.katex .textstyle>.mpunct+.minner,.katex .textstyle>.mpunct+.mop,.katex .textstyle>.mpunct+.mopen,.katex .textstyle>.mpunct+.mord,.katex .textstyle>.mpunct+.mpunct,.katex .textstyle>.mpunct+.mrel{margin-left:.16667em}.katex .textstyle>.minner+.mbin{margin-left:.22222em}.katex .textstyle>.minner+.mrel{margin-left:.27778em}.katex .mclose+.mop,.katex .minner+.mop,.katex .mop+.mop,.katex .mop+.mord,.katex .mord+.mop,.katex .textstyle>.minner+.minner,.katex .textstyle>.minner+.mopen,.katex .textstyle>.minner+.mpunct{margin-left:.16667em}.katex .reset-textstyle.textstyle{font-size:1em}.katex .reset-textstyle.scriptstyle{font-size:.7em}.katex .reset-textstyle.scriptscriptstyle{font-size:.5em}.katex .reset-scriptstyle.textstyle{font-size:1.42857em}.katex .reset-scriptstyle.scriptstyle{font-size:1em}.katex .reset-scriptstyle.scriptscriptstyle{font-size:.71429em}.katex .reset-scriptscriptstyle.textstyle{font-size:2em}.katex .reset-scriptscriptstyle.scriptstyle{font-size:1.4em}.katex .reset-scriptscriptstyle.scriptscriptstyle{font-size:1em}.katex .style-wrap{position:relative}.katex .msupsub{display:inline-block;text-align:left}.katex .msupsub .fix-ie,.katex .msupsub .msub,.katex .msupsub .msup{display:block;height:0;position:relative}.katex .mfrac,.katex .msupsub .fix-ie>span,.katex .msupsub .msub>span,.katex .msupsub .msup>span{display:inline-block}.katex .mfrac .fix-ie,.katex .mfrac .mfracden,.katex .mfrac .mfracmid,.katex .mfrac .mfracnum{display:block;height:0;position:relative;text-align:center}.katex .mfrac .fix-ie>span,.katex .mfrac .mfracden>span,.katex .mfrac .mfracmid>span,.katex .mfrac .mfracnum>span{display:inline-block}.katex .mfrac .mfracmid>.line{width:100%}.katex .mfrac .mfracmid>.line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .mfrac .mfracmid>.line:after{border-bottom-style:solid;border-bottom-width:.05em;content:"";display:block;margin-top:-1px}.katex .mspace{display:inline-block}.katex .mspace.negativethinspace{margin-left:-.16667em}.katex .mspace.thinspace{width:.16667em}.katex .mspace.mediumspace{width:.22222em}.katex .mspace.thickspace{width:.27778em}.katex .mspace.enspace{width:.5em}.katex .mspace.quad{width:1em}.katex .mspace.qquad{width:2em}.katex .llap,.katex .rlap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner{left:0}.katex .katex-logo .a{font-size:.75em;margin-left:-.32em;position:relative;top:-.2em}.katex .katex-logo .t{margin-left:-.23em}.katex .katex-logo .e{margin-left:-.1667em;position:relative;top:.2155em}.katex .katex-logo .x{margin-left:-.125em}.katex .rule{display:inline-block;border-style:solid}.katex .overline{display:inline-block}.katex .overline>.fix-ie,.katex .overline>.overline-inner,.katex .overline>.overline-line{display:block;height:0;position:relative;text-align:center}.katex .overline>.fix-ie>span,.katex .overline>.overline-inner>span,.katex .overline>.overline-line>span{display:inline-block}.katex .overline>.overline-line>.line{width:100%}.katex .overline>.overline-line>.line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .overline>.overline-line>.line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .sqrt>.sqrt-sign{position:relative}.katex .sqrt>.sqrt-body{display:inline-block}.katex .sqrt>.sqrt-body>.fix-ie,.katex .sqrt>.sqrt-body>.sqrt-inner,.katex .sqrt>.sqrt-body>.sqrt-line{display:block;height:0;position:relative}.katex .sqrt>.sqrt-body>.fix-ie>span,.katex .sqrt>.sqrt-body>.sqrt-inner>span,.katex .sqrt>.sqrt-body>.sqrt-line>span{display:inline-block}.katex .sqrt>.sqrt-body>.sqrt-line>.line{width:100%}.katex .sqrt>.sqrt-body>.sqrt-line>.line:before{border-bottom-style:solid;border-bottom-width:1px;content:"";display:block}.katex .sqrt>.sqrt-body>.sqrt-line>.line:after{border-bottom-style:solid;border-bottom-width:.04em;content:"";display:block;margin-top:-1px}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:2em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:3.46em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:4.14em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.98em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.7142857142857143em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.142857142857143em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.2857142857142858em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.4285714285714286em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.7142857142857144em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2.0571428571428574em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4714285714285715em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.9571428571428573em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.557142857142858em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8749999999999999em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.125em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.25em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4999999999999998em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7999999999999998em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.1624999999999996em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.5874999999999995em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:3.1125000000000003em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.5555555555555556em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.7777777777777777em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.888888888888889em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.1111111111111112em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.3333333333333333em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5999999999999999em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.922222222222222em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.3em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.766666666666667em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.7em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.8em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.9em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.2em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.44em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.73em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:2.07em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.49em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.4166666666666667em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.5833333333333334em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.6666666666666667em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.75em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.8333333333333334em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.4416666666666667em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.7249999999999999em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.075em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.3472222222222222em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.4861111111111111em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5555555555555556em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.625em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.6944444444444444em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333333334em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2013888888888888em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.4375em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.729166666666667em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.28901734104046245em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.40462427745664736em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.46242774566473993em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5202312138728324em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.5780346820809249em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6936416184971098em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8323699421965318em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.1965317919075145em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4393063583815031em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.24154589371980678em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.33816425120772947em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.38647342995169087em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.4347826086956522em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.48309178743961356em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5797101449275363em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6956521739130435em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8357487922705314em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.202898550724638em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2008032128514056em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2811244979919678em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.321285140562249em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3614457831325301em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4016064257028112em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48192771084337344em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5783132530120482em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6947791164658634em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8313253012048192em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult{display:inline-block}.katex .delimsizing.mult>.delimsizinginner,.katex .delimsizing.mult>.fix-ie{display:block;height:0;position:relative}.katex .delimsizing.mult>.delimsizinginner.size1>span,.katex .delimsizing.mult>.fix-ie.size1>span{font-family:Katex_Size1}.katex .delimsizing.mult>.delimsizinginner.size4>span,.katex .delimsizing.mult>.fix-ie.size4>span{font-family:Katex_Size4}.katex .nulldelimiter{display:inline-block;width:.12em} \ No newline at end of file diff --git a/lib/katex/katex.min.js b/lib/katex/katex.min.js new file mode 100644 index 000000000..b8c819ac3 --- /dev/null +++ b/lib/katex/katex.min.js @@ -0,0 +1,3403 @@ +(function(e){if("function"==typeof bootstrap)bootstrap("katex",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeKatex=e}else"undefined"!=typeof window?window.katex=e():global.katex=e()})(function(){var define,ses,bootstrap,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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o:]/, "rel"], + [/^[,;]/, "punct"], + [/^'/, "'"], + [/^\^/, "^"], + [/^_/, "_"], + [/^{/, "{"], + [/^}/, "}"], + [/^[(\[]/, "open"], + [/^[)\]?!]/, "close"], + [/^~/, "spacing"] +]; + +var textNormals = [ + [/^[a-zA-Z0-9`!@*()-=+\[\]'";:?\/.,]/, "textord"], + [/^{/, "{"], + [/^}/, "}"], + [/^~/, "spacing"] +]; + +var whitespaceRegex = /^\s*/; +var whitespaceConcatRegex = /^( +|\\ +)/; + +// Build a regex to easily parse the functions +var anyFunc = /^\\(?:[a-zA-Z]+|.)/; + +Lexer.prototype._innerLex = function(pos, normals, ignoreWhitespace) { + var input = this._input.slice(pos); + + // Get rid of whitespace + if (ignoreWhitespace) { + var whitespace = input.match(whitespaceRegex)[0]; + pos += whitespace.length; + input = input.slice(whitespace.length); + } else { + // Do the funky concatenation of whitespace + var whitespace = input.match(whitespaceConcatRegex); + if (whitespace !== null) { + return new LexResult(" ", " ", pos + whitespace[0].length); + } + } + + // If there's no more input to parse, return an EOF token + if (input.length === 0) { + return new LexResult("EOF", null, pos); + } + + var match; + if ((match = input.match(anyFunc))) { + // If we match one of the tokens, extract the type + return new LexResult(match[0], match[0], pos + match[0].length); + } else { + // Otherwise, we look through the normal token regexes and see if it's + // one of them. + for (var i = 0; i < normals.length; i++) { + var normal = normals[i]; + + if ((match = input.match(normal[0]))) { + // If it is, return it + return new LexResult( + normal[1], match[0], pos + match[0].length); + } + } + } + + // We didn't match any of the tokens, so throw an error. + throw new ParseError("Unexpected character: '" + input[0] + + "'", this, pos); +} + +// A regex to match a CSS color (like #ffffff or BlueViolet) +var cssColor = /^(#[a-z0-9]+|[a-z]+)/i; + +Lexer.prototype._innerLexColor = function(pos) { + var input = this._input.slice(pos); + + // Ignore whitespace + var whitespace = input.match(whitespaceRegex)[0]; + pos += whitespace.length; + input = input.slice(whitespace.length); + + var match; + if ((match = input.match(cssColor))) { + // If we look like a color, return a color + return new LexResult("color", match[0], pos + match[0].length); + } + + // We didn't match a color, so throw an error. + throw new ParseError("Invalid color", this, pos); +}; + +var sizeRegex = /^(\d+(?:\.\d*)?|\.\d+)\s*([a-z]{2})/; + +Lexer.prototype._innerLexSize = function(pos) { + var input = this._input.slice(pos); + + // Ignore whitespace + var whitespace = input.match(whitespaceRegex)[0]; + pos += whitespace.length; + input = input.slice(whitespace.length); + + var match; + if ((match = input.match(sizeRegex))) { + var unit = match[2]; + if (unit !== "em" && unit !== "ex") { + throw new ParseError("Invalid unit: '" + unit + "'", this, pos); + } + return new LexResult("size", { + number: +match[1], + unit: unit + }, pos + match[0].length); + } + + throw new ParseError("Invalid size", this, pos); +}; + +Lexer.prototype._innerLexWhitespace = function(pos) { + var input = this._input.slice(pos); + + var whitespace = input.match(whitespaceRegex)[0]; + pos += whitespace.length; + + return new LexResult("whitespace", whitespace, pos); +}; + +// Lex a single token +Lexer.prototype.lex = function(pos, mode) { + if (mode === "math") { + return this._innerLex(pos, mathNormals, true); + } else if (mode === "text") { + return this._innerLex(pos, textNormals, false); + } else if (mode === "color") { + return this._innerLexColor(pos); + } else if (mode === "size") { + return this._innerLexSize(pos); + } else if (mode === "whitespace") { + return this._innerLexWhitespace(pos); + } +}; + +module.exports = Lexer; + +},{"./ParseError":3}],2:[function(require,module,exports){ +function Options(style, size, color, parentStyle, parentSize) { + this.style = style; + this.color = color; + this.size = size; + + if (parentStyle === undefined) { + parentStyle = style; + } + this.parentStyle = parentStyle; + + if (parentSize === undefined) { + parentSize = size; + } + this.parentSize = parentSize; +} + +Options.prototype.withStyle = function(style) { + return new Options(style, this.size, this.color, this.style, this.size); +}; + +Options.prototype.withSize = function(size) { + return new Options(this.style, size, this.color, this.style, this.size); +}; + +Options.prototype.withColor = function(color) { + return new Options(this.style, this.size, color, this.style, this.size); +}; + +Options.prototype.reset = function() { + return new Options( + this.style, this.size, this.color, this.style, this.size); +}; + +var colorMap = { + "katex-blue": "#6495ed", + "katex-orange": "#ffa500", + "katex-pink": "#ff00af", + "katex-red": "#df0030", + "katex-green": "#28ae7b", + "katex-gray": "gray", + "katex-purple": "#9d38bd" +}; + +Options.prototype.getColor = function() { + return colorMap[this.color] || this.color; +}; + +module.exports = Options; + +},{}],3:[function(require,module,exports){ +function ParseError(message, lexer, position) { + var error = "KaTeX parse error: " + message; + + if (lexer !== undefined && position !== undefined) { + // If we have the input and a position, make the error a bit fancier + // Prepend some information + error += " at position " + position + ": "; + + // Get the input + var input = lexer._input; + // Insert a combining underscore at the correct position + input = input.slice(0, position) + "\u0332" + + input.slice(position); + + // Extract some context from the input and add it to the error + var begin = Math.max(0, position - 15); + var end = position + 15; + error += input.slice(begin, end); + } + + var self = new Error(error); + self.name = "ParseError"; + self.__proto__ = ParseError.prototype; + return self; +} + +ParseError.prototype.__proto__ = Error.prototype; + +module.exports = ParseError; + +},{}],4:[function(require,module,exports){ +var functions = require("./functions"); +var Lexer = require("./Lexer"); +var symbols = require("./symbols"); +var utils = require("./utils"); + +var ParseError = require("./ParseError"); + +// 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 main functions also take a mode that the parser is currently in +// (currently "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 `ParseResult`s, which contain a ParseNode and a +// new position. +// +// The later functions (which are called deeper in the parse) sometimes return +// ParseFuncOrArgument, which contain a ParseResult 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) { + // Make a new lexer + this.lexer = new Lexer(input); +}; + +// The resulting parse tree nodes of the parse tree. +function ParseNode(type, value, mode) { + this.type = type; + this.value = value; + this.mode = mode; +} + +// A result and final position returned by the `.parse...` functions. +function ParseResult(result, newPosition) { + this.result = result; + this.position = newPosition; +} + +// An initial function (without its arguments), or an argument to a function. +// The `result` argument should be a ParseResult. +function ParseFuncOrArgument(result, isFunction, allowedInText, numArgs, argTypes) { + this.result = result; + // Is this a function (i.e. is it something defined in functions.js)? + this.isFunction = isFunction; + // Is it allowed in text mode? + this.allowedInText = allowedInText; + // How many arguments? + this.numArgs = numArgs; + // What types of arguments? + this.argTypes = argTypes; +} + +// Checks a result to make sure it has the right type, and throws an +// appropriate error otherwise. +Parser.prototype.expect = function(result, type) { + if (result.type !== type) { + throw new ParseError( + "Expected '" + type + "', got '" + result.type + "'", + this.lexer, result.position + ); + } +}; + +// Main parsing function, which parses an entire input. Returns either a list +// of parseNodes or null if the parse fails. +Parser.prototype.parse = function(input) { + // Try to parse the input + var parse = this.parseInput(0, "math"); + return parse.result; +}; + +// Parses an entire input tree +Parser.prototype.parseInput = function(pos, mode) { + // Parse an expression + var expression = this.parseExpression(pos, mode); + // If we succeeded, make sure there's an EOF at the end + var EOF = this.lexer.lex(expression.position, mode); + this.expect(EOF, "EOF"); + return expression; +}; + +// Handles a body of an expression +Parser.prototype.handleExpressionBody = function(pos, mode) { + var body = []; + var atom; + // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + while ((atom = this.parseAtom(pos, mode))) { + body.push(atom.result); + pos = atom.position; + } + return { + body: body, + position: pos + }; +}; + +// Parses an "expression", which is a list of atoms +// +// Returns ParseResult +Parser.prototype.parseExpression = function(pos, mode) { + var body = this.handleExpressionBody(pos, mode); + return new ParseResult(body.body, body.position); +}; + +// The greediness of a superscript or subscript +var SUPSUB_GREEDINESS = 1; + +// Handle a subscript or superscript with nice errors +Parser.prototype.handleSupSubscript = function(pos, mode, symbol, name) { + var group = this.parseGroup(pos, mode); + + if (!group) { + throw new ParseError( + "Expected group after '" + symbol + "'", this.lexer, pos); + } else if (group.numArgs > 0) { + // ^ and _ have a greediness, so handle interactions with functions' + // greediness + var funcGreediness = functions.getGreediness(group.result.result); + if (funcGreediness > SUPSUB_GREEDINESS) { + return this.parseFunction(pos, mode); + } else { + throw new ParseError( + "Got function '" + group.result.result + "' with no arguments " + + "as " + name, + this.lexer, pos); + } + } else { + return group.result; + } +}; + +// Parses a group with optional super/subscripts +// +// Returns ParseResult or null +Parser.prototype.parseAtom = function(pos, mode) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseImplicitGroup(pos, mode); + + // In text mode, we don't have superscripts or subscripts + if (mode === "text") { + return base; + } + + // Handle an empty base + var currPos; + if (!base) { + currPos = pos; + base = undefined; + } else { + currPos = base.position; + } + + var superscript; + var subscript; + while (true) { + // Lex the first token + var lex = this.lexer.lex(currPos, mode); + + var group; + if (lex.type === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError( + "Double superscript", this.lexer, currPos); + } + var result = this.handleSupSubscript( + lex.position, mode, lex.type, "superscript"); + currPos = result.position; + superscript = result.result; + } else if (lex.type === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError( + "Double subscript", this.lexer, currPos); + } + var result = this.handleSupSubscript( + lex.position, mode, lex.type, "subscript"); + currPos = result.position; + subscript = result.result; + } else if (lex.type === "'") { + // We got a prime + var prime = new ParseNode("textord", "\\prime", mode); + + // Many primes can be grouped together, so we handle this here + var primes = [prime]; + currPos = lex.position; + // Keep lexing tokens until we get something that's not a prime + while ((lex = this.lexer.lex(currPos, mode)).type === "'") { + // For each one, add another prime to the list + primes.push(prime); + currPos = lex.position; + } + // Put them into an ordgroup as the superscript + superscript = new ParseNode("ordgroup", primes, 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 ParseResult( + new ParseNode("supsub", { + base: base && base.result, + sup: superscript, + sub: subscript + }, mode), + currPos); + } else { + // Otherwise return the original body + return base; + } +}; + +// A list of the size-changing functions, for use in parseImplicitGroup +var sizeFuncs = [ + "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", + "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge" +]; + +// 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. +// +// Returns ParseResult or null +Parser.prototype.parseImplicitGroup = function(pos, mode) { + var start = this.parseSymbol(pos, mode); + + if (!start || !start.result) { + // If we didn't get anything we handle, fall back to parseFunction + return this.parseFunction(pos, mode); + } + + if (start.result.result === "\\left") { + // If we see a left: + // Parse the entire left function (including the delimiter) + var left = this.parseFunction(pos, mode); + // Parse out the implicit body + var body = this.handleExpressionBody(left.position, mode); + // Check the next token + var rightLex = this.parseSymbol(body.position, mode); + + if (rightLex && rightLex.result.result === "\\right") { + // If it's a \right, parse the entire right function (including the delimiter) + var right = this.parseFunction(body.position, mode); + + return new ParseResult( + new ParseNode("leftright", { + body: body.body, + left: left.result.value.value, + right: right.result.value.value + }, mode), + right.position); + } else { + throw new ParseError("Missing \\right", this.lexer, body.position); + } + } else if (start.result.result === "\\right") { + // If we see a right, explicitly fail the parsing here so the \left + // handling ends the group + return null; + } else if (utils.contains(sizeFuncs, start.result.result)) { + // If we see a sizing function, parse out the implict body + var body = this.handleExpressionBody(start.result.position, mode); + return new ParseResult( + new ParseNode("sizing", { + // Figure out what size to use based on the list of functions above + size: "size" + (utils.indexOf(sizeFuncs, start.result.result) + 1), + value: body.body + }, mode), + body.position); + } else { + // Defer to parseFunction if it's not a function we handle + return this.parseFunction(pos, mode); + } +}; + +// Parses an entire function, including its base and all of its arguments +// +// Returns ParseResult or null +Parser.prototype.parseFunction = function(pos, mode) { + var baseGroup = this.parseGroup(pos, mode); + + if (baseGroup) { + if (baseGroup.isFunction) { + var func = baseGroup.result.result; + if (mode === "text" && !baseGroup.allowedInText) { + throw new ParseError( + "Can't use function '" + func + "' in text mode", + this.lexer, baseGroup.position); + } + + var newPos = baseGroup.result.position; + var result; + if (baseGroup.numArgs > 0) { + var baseGreediness = functions.getGreediness(func); + var args = [func]; + var positions = [newPos]; + for (var i = 0; i < baseGroup.numArgs; i++) { + var argType = baseGroup.argTypes && baseGroup.argTypes[i]; + if (argType) { + var arg = this.parseSpecialGroup(newPos, argType, mode); + } else { + var arg = this.parseGroup(newPos, mode); + } + if (!arg) { + throw new ParseError( + "Expected group after '" + baseGroup.result.result + + "'", + this.lexer, newPos); + } + var argNode; + if (arg.numArgs > 0) { + var argGreediness = functions.getGreediness(arg.result.result); + if (argGreediness > baseGreediness) { + argNode = this.parseFunction(newPos, mode); + } else { + throw new ParseError( + "Got function '" + arg.result.result + "' as " + + "argument to function '" + + baseGroup.result.result + "'", + this.lexer, arg.result.position - 1); + } + } else { + argNode = arg.result; + } + args.push(argNode.result); + positions.push(argNode.position); + newPos = argNode.position; + } + + args.push(positions); + + result = functions.funcs[func].handler.apply(this, args); + } else { + result = functions.funcs[func].handler.apply(this, [func]); + } + + return new ParseResult( + new ParseNode(result.type, result, mode), + newPos); + } else { + return baseGroup.result; + } + } else { + return null; + } +}; + +// Parses a group when the mode is changing. Takes a position, a new mode, and +// an outer mode that is used to parse the outside. +// +// Returns a ParseFuncOrArgument or null +Parser.prototype.parseSpecialGroup = function(pos, mode, outerMode) { + if (mode === "color" || mode === "size") { + // color and size modes are special because they should have braces and + // should only lex a single symbol inside + var openBrace = this.lexer.lex(pos, outerMode); + this.expect(openBrace, "{"); + var inner = this.lexer.lex(openBrace.position, mode); + var closeBrace = this.lexer.lex(inner.position, outerMode); + this.expect(closeBrace, "}"); + return new ParseFuncOrArgument( + new ParseResult( + new ParseNode("color", inner.text, outerMode), + closeBrace.position), + false); + } else if (mode === "text") { + // text mode is special because it should ignore the whitespace before + // it + var whitespace = this.lexer.lex(pos, "whitespace"); + return this.parseGroup(whitespace.position, mode); + } else { + return this.parseGroup(pos, mode); + } +}; + +// Parses a group, which is either a single nucleus (like "x") or an expression +// in braces (like "{x+y}") +// +// Returns a ParseFuncOrArgument or null +Parser.prototype.parseGroup = function(pos, mode) { + var start = this.lexer.lex(pos, mode); + // Try to parse an open brace + if (start.type === "{") { + // If we get a brace, parse an expression + var expression = this.parseExpression(start.position, mode); + // Make sure we get a close brace + var closeBrace = this.lexer.lex(expression.position, mode); + this.expect(closeBrace, "}"); + return new ParseFuncOrArgument( + new ParseResult( + new ParseNode("ordgroup", expression.result, mode), + closeBrace.position), + false); + } else { + // Otherwise, just return a nucleus + return this.parseSymbol(pos, mode); + } +}; + +// Parse a single symbol out of the string. Here, we handle both the functions +// we have defined, as well as the single character symbols +// +// Returns a ParseFuncOrArgument or null +Parser.prototype.parseSymbol = function(pos, mode) { + var nucleus = this.lexer.lex(pos, mode); + + if (functions.funcs[nucleus.type]) { + // If there is a function with this name, we use its data + var func = functions.funcs[nucleus.type]; + + // Here, we replace "original" argTypes with the current mode + var argTypes = func.argTypes; + if (argTypes) { + argTypes = argTypes.slice(); + for (var i = 0; i < argTypes.length; i++) { + if (argTypes[i] === "original") { + argTypes[i] = mode; + } + } + } + + return new ParseFuncOrArgument( + new ParseResult(nucleus.type, nucleus.position), + true, func.allowedInText, func.numArgs, argTypes); + } else if (symbols[mode][nucleus.text]) { + // Otherwise if this is a no-argument function, find the type it + // corresponds to in the symbols map + return new ParseFuncOrArgument( + new ParseResult( + new ParseNode(symbols[mode][nucleus.text].group, + nucleus.text, mode), + nucleus.position), + false); + } else { + return null; + } +}; + +module.exports = Parser; + +},{"./Lexer":1,"./ParseError":3,"./functions":11,"./symbols":14,"./utils":15}],5:[function(require,module,exports){ +function Style(id, size, multiplier, cramped) { + this.id = id; + this.size = size; + this.cramped = cramped; + this.sizeMultiplier = multiplier; +} + +Style.prototype.sup = function() { + return styles[sup[this.id]]; +}; + +Style.prototype.sub = function() { + return styles[sub[this.id]]; +}; + +Style.prototype.fracNum = function() { + return styles[fracNum[this.id]]; +}; + +Style.prototype.fracDen = function() { + return styles[fracDen[this.id]]; +}; + +Style.prototype.cramp = function() { + return styles[cramp[this.id]]; +}; + +// HTML class name, like "displaystyle cramped" +Style.prototype.cls = function() { + return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped"); +}; + +// HTML Reset class name, like "reset-textstyle" +Style.prototype.reset = function() { + return resetNames[this.size]; +}; + +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; + +var sizeNames = [ + "displaystyle textstyle", + "textstyle", + "scriptstyle", + "scriptscriptstyle" +]; + +var resetNames = [ + "reset-textstyle", + "reset-textstyle", + "reset-scriptstyle", + "reset-scriptscriptstyle", +]; + +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 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]; + +module.exports = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +},{}],6:[function(require,module,exports){ +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); +var symbols = require("./symbols"); + +var makeText = function(value, style, mode) { + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + var metrics = fontMetrics.getCharacterMetrics(value, style); + + if (metrics) { + var textNode = new domTree.textNode(value, metrics.height, + metrics.depth); + if (metrics.italic > 0) { + var span = makeSpan([], [textNode]); + span.style.marginRight = metrics.italic + "em"; + + return span; + } else { + return textNode; + } + } else { + console && console.warn("No character metrics for '" + value + + "' in style '" + style + "'"); + return new domTree.textNode(value, 0, 0); + } +}; + +var mathit = function(value, mode) { + return makeSpan(["mathit"], [makeText(value, "Math-Italic", mode)]); +}; + +var mathrm = function(value, mode) { + if (symbols[mode][value].font === "main") { + return makeText(value, "Main-Regular", mode); + } else { + return makeSpan(["amsrm"], [makeText(value, "AMS-Regular", mode)]); + } +}; + +var sizeElementFromChildren = function(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; + } + if (elem.children[i].depth > depth) { + depth = elem.children[i].depth; + } + if (elem.children[i].maxFontSize > maxFontSize) { + maxFontSize = elem.children[i].maxFontSize; + } + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; + +var makeSpan = function(classes, children, color) { + var span = new domTree.span(classes, children); + + sizeElementFromChildren(span); + + if (color) { + span.style.color = color; + } + + return span; +}; + +var makeFragment = function(children) { + var fragment = new domTree.documentFragment(children); + + sizeElementFromChildren(fragment); + + return fragment; +}; + +var makeFontSizer = function(options, fontSize) { + var fontSizeInner = makeSpan([], [new domTree.textNode("\u200b")]); + fontSizeInner.style.fontSize = (fontSize / options.style.sizeMultiplier) + "em"; + + var fontSizer = makeSpan( + ["fontsize-ensurer", "reset-" + options.size, "size5"], + [fontSizeInner]); + + return fontSizer; +}; + +module.exports = { + makeText: makeText, + mathit: mathit, + mathrm: mathrm, + makeSpan: makeSpan, + makeFragment: makeFragment, + makeFontSizer: makeFontSizer +}; + +},{"./domTree":9,"./fontMetrics":10,"./symbols":14}],7:[function(require,module,exports){ +var Options = require("./Options"); +var ParseError = require("./ParseError"); +var Style = require("./Style"); + +var buildCommon = require("./buildCommon"); +var delimiter = require("./delimiter"); +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); +var parseTree = require("./parseTree"); +var symbols = require("./symbols"); +var utils = require("./utils"); + +var makeSpan = buildCommon.makeSpan; + +var buildExpression = function(expression, options, prev) { + var groups = []; + for (var i = 0; i < expression.length; i++) { + var group = expression[i]; + groups.push(buildGroup(group, options, prev)); + prev = group; + } + return groups; +}; + +var groupToType = { + mathord: "mord", + textord: "mord", + bin: "mbin", + rel: "mrel", + text: "mord", + open: "mopen", + close: "mclose", + frac: "minner", + spacing: "mord", + punct: "mpunct", + ordgroup: "mord", + namedfn: "mop", + katex: "mord", + overline: "mord", + rule: "mord", + leftright: "minner", + sqrt: "mord" +}; + +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 === "delimsizing") { + return groupToType[group.value.delimType]; + } else { + return groupToType[group.type]; + } +}; + +var isCharacterBox = function(group) { + if (group == null) { + return false; + } else if (group.type === "mathord" || + group.type === "textord" || + group.type === "bin" || + group.type === "rel" || + group.type === "open" || + group.type === "close" || + group.type === "punct") { + return true; + } else if (group.type === "ordgroup") { + return group.value.length === 1 && isCharacterBox(group.value[0]); + } else { + return false; + } +}; + +var groupTypes = { + mathord: function(group, options, prev) { + return makeSpan( + ["mord"], + [buildCommon.mathit(group.value, group.mode)], + options.getColor() + ); + }, + + textord: function(group, options, prev) { + return makeSpan( + ["mord"], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + bin: function(group, options, prev) { + var className = "mbin"; + var prevAtom = prev; + while (prevAtom && prevAtom.type == "color") { + var atoms = prevAtom.value.value; + prevAtom = atoms[atoms.length - 1]; + } + if (!prev || utils.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], + getTypeOfGroup(prevAtom))) { + group.type = "ord"; + className = "mord"; + } + return makeSpan( + [className], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + rel: function(group, options, prev) { + return makeSpan( + ["mrel"], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + text: function(group, options, prev) { + return makeSpan(["text mord", options.style.cls()], + buildExpression(group.value.body, options.reset())); + }, + + supsub: function(group, options, prev) { + var base = buildGroup(group.value.base, options.reset()); + + if (group.value.sup) { + var sup = buildGroup(group.value.sup, + options.withStyle(options.style.sup())); + var supmid = makeSpan( + [options.style.reset(), options.style.sup().cls()], [sup]); + } + + if (group.value.sub) { + var sub = buildGroup(group.value.sub, + options.withStyle(options.style.sub())); + var submid = makeSpan( + [options.style.reset(), options.style.sub().cls()], [sub]); + } + + if (isCharacterBox(group.value.base)) { + var u = 0; + var v = 0; + } else { + var u = base.height - fontMetrics.metrics.supDrop; + var v = base.depth + fontMetrics.metrics.subDrop; + } + + var p; + if (options.style === Style.DISPLAY) { + p = fontMetrics.metrics.sup1; + } else if (options.style.cramped) { + p = fontMetrics.metrics.sup3; + } else { + p = fontMetrics.metrics.sup2; + } + + var multiplier = Style.TEXT.sizeMultiplier * + options.style.sizeMultiplier; + var scriptspace = + (0.5 / fontMetrics.metrics.ptPerEm) / multiplier + "em"; + + var supsub; + + if (!group.value.sup) { + var fontSizer = buildCommon.makeFontSizer(options, submid.maxFontSize); + var subwrap = makeSpan(["msub"], [fontSizer, submid]); + + v = Math.max(v, fontMetrics.metrics.sub1, + sub.height - 0.8 * fontMetrics.metrics.xHeight); + + subwrap.style.top = v + "em"; + subwrap.style.marginRight = scriptspace; + + subwrap.depth = subwrap.depth + v; + subwrap.height = 0; + + var fixIE = makeSpan(["fix-ie"], [fontSizer, new domTree.textNode("\u00a0")]); + + supsub = makeSpan(["msupsub"], [subwrap, fixIE]); + } else if (!group.value.sub) { + var fontSizer = buildCommon.makeFontSizer(options, supmid.maxFontSize); + var supwrap = makeSpan(["msup"], [fontSizer, supmid]); + + u = Math.max(u, p, + sup.depth + 0.25 * fontMetrics.metrics.xHeight); + + supwrap.style.top = -u + "em"; + supwrap.style.marginRight = scriptspace; + + supwrap.height = supwrap.height + u; + supwrap.depth = 0; + + var fixIE = makeSpan(["fix-ie"], [fontSizer, new domTree.textNode("\u00a0")]); + + supsub = makeSpan(["msupsub"], [supwrap, fixIE]); + } else { + var fontSizer = buildCommon.makeFontSizer(options, + Math.max(submid.maxFontSize, supmid.maxFontSize)); + var subwrap = makeSpan(["msub"], [fontSizer, submid]); + var supwrap = makeSpan(["msup"], [fontSizer, supmid]); + + u = Math.max(u, p, + sup.depth + 0.25 * fontMetrics.metrics.xHeight); + v = Math.max(v, fontMetrics.metrics.sub2); + + var theta = fontMetrics.metrics.defaultRuleThickness; + + if ((u - sup.depth) - (sub.height - v) < 4 * theta) { + v = 4 * theta - (u - sup.depth) + sub.height; + var psi = 0.8 * fontMetrics.metrics.xHeight - (u - sup.depth); + if (psi > 0) { + u += psi; + v -= psi; + } + } + + supwrap.style.top = -u + "em"; + subwrap.style.top = v + "em"; + + supwrap.style.marginRight = scriptspace; + subwrap.style.marginRight = scriptspace; + + supwrap.height = supwrap.height + u; + supwrap.depth = 0; + + subwrap.height = 0; + subwrap.depth = subwrap.depth + v; + + var fixIE = makeSpan(["fix-ie"], [fontSizer, new domTree.textNode("\u00a0")]); + + supsub = makeSpan(["msupsub"], [supwrap, subwrap, fixIE]); + } + + return makeSpan([getTypeOfGroup(group.value.base)], + [base, supsub]); + }, + + open: function(group, options, prev) { + return makeSpan( + ["mopen"], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + close: function(group, options, prev) { + return makeSpan( + ["mclose"], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + frac: function(group, options, prev) { + var fstyle = options.style; + if (group.value.size === "dfrac") { + fstyle = Style.DISPLAY; + } else if (group.value.size === "tfrac") { + fstyle = Style.TEXT; + } + + var nstyle = fstyle.fracNum(); + var dstyle = fstyle.fracDen(); + + var numer = buildGroup(group.value.numer, options.withStyle(nstyle)); + var numernumer = makeSpan([fstyle.reset(), nstyle.cls()], [numer]); + + var denom = buildGroup(group.value.denom, options.withStyle(dstyle)); + var denomdenom = makeSpan([fstyle.reset(), dstyle.cls()], [denom]) + + var fontSizer = buildCommon.makeFontSizer(options, + Math.max(numer.maxFontSize, denom.maxFontSize)); + + var numerrow = makeSpan(["mfracnum"], [fontSizer, numernumer]); + var mid = makeSpan(["mfracmid"], [fontSizer, makeSpan(["line"])]); + var denomrow = makeSpan(["mfracden"], [fontSizer, denomdenom]); + + var theta = fontMetrics.metrics.defaultRuleThickness; + + var u, v, phi; + if (fstyle.size === Style.DISPLAY.size) { + u = fontMetrics.metrics.num1; + v = fontMetrics.metrics.denom1; + phi = 3 * theta; + } else { + u = fontMetrics.metrics.num2; + v = fontMetrics.metrics.denom2; + phi = theta; + } + + var a = fontMetrics.metrics.axisHeight; + + if ((u - numer.depth) - (a + 0.5 * theta) < phi) { + u += phi - ((u - numer.depth) - (a + 0.5 * theta)); + } + + if ((a - 0.5 * theta) - (denom.height - v) < phi) { + v += phi - ((a - 0.5 * theta) - (denom.height - v)); + } + + numerrow.style.top = -u + "em"; + mid.style.top = -(a - 0.5 * theta) + "em"; + denomrow.style.top = v + "em"; + + numerrow.height = numerrow.height + u; + numerrow.depth = 0; + + denomrow.height = 0; + denomrow.depth = denomrow.depth + v; + + var fixIE = makeSpan(["fix-ie"], [ + fontSizer, new domTree.textNode("\u00a0")]); + + var frac = makeSpan([], [numerrow, mid, denomrow, fixIE]); + + frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier; + frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier; + + var wrap = makeSpan( + [options.style.reset(), fstyle.cls()], [frac]); + + return makeSpan(["minner"], [ + makeSpan(["mfrac"], [wrap]) + ], options.getColor()); + }, + + color: function(group, options, prev) { + var elements = buildExpression( + group.value.value, + options.withColor(group.value.color), + prev + ); + + return new buildCommon.makeFragment(elements); + }, + + spacing: function(group, options, prev) { + if (group.value === "\\ " || group.value === "\\space" || + group.value === " " || group.value === "~") { + return makeSpan( + ["mord", "mspace"], + [buildCommon.mathrm(group.value, group.mode)] + ); + } else { + var spacingClassMap = { + "\\qquad": "qquad", + "\\quad": "quad", + "\\enspace": "enspace", + "\\;": "thickspace", + "\\:": "mediumspace", + "\\,": "thinspace", + "\\!": "negativethinspace" + }; + + return makeSpan( + ["mord", "mspace", spacingClassMap[group.value]]); + } + }, + + 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]); + }, + + 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]); + }, + + punct: function(group, options, prev) { + return makeSpan( + ["mpunct"], + [buildCommon.mathrm(group.value, group.mode)], + options.getColor() + ); + }, + + ordgroup: function(group, options, prev) { + return makeSpan( + ["mord", options.style.cls()], + buildExpression(group.value, options.reset()) + ); + }, + + namedfn: function(group, options, prev) { + var chars = []; + for (var i = 1; i < group.value.body.length; i++) { + chars.push(buildCommon.mathrm(group.value.body[i], group.mode)); + } + + return makeSpan(["mop"], chars, options.getColor()); + }, + + katex: function(group, options, prev) { + var k = makeSpan( + ["k"], [buildCommon.mathrm("K", group.mode)]); + var a = makeSpan( + ["a"], [buildCommon.mathrm("A", group.mode)]); + + a.height = (a.height + 0.2) * 0.75; + a.depth = (a.height - 0.2) * 0.75; + + var t = makeSpan( + ["t"], [buildCommon.mathrm("T", group.mode)]); + var e = makeSpan( + ["e"], [buildCommon.mathrm("E", group.mode)]); + + e.height = (e.height - 0.2155); + e.depth = (e.depth + 0.2155); + + var x = makeSpan( + ["x"], [buildCommon.mathrm("X", group.mode)]); + + return makeSpan( + ["katex-logo"], [k, a, t, e, x], options.getColor()); + }, + + sqrt: function(group, options, prev) { + var innerGroup = buildGroup(group.value.body, + options.withStyle(options.style.cramp())); + + var fontSizer = buildCommon.makeFontSizer( + options, Math.max(innerGroup.maxFontSize, 1.0)); + + // The theta variable in the TeXbook + var lineWidth = fontMetrics.metrics.defaultRuleThickness; + + var lineInner = + makeSpan([options.style.reset(), Style.TEXT.cls(), "line"]); + lineInner.maxFontSize = 1.0; + var line = makeSpan(["sqrt-line"], [fontSizer, lineInner]); + + var inner = makeSpan(["sqrt-inner"], [fontSizer, innerGroup]); + var fixIE = makeSpan( + ["fix-ie"], [fontSizer, new domTree.textNode("\u00a0")]); + + var theta = fontMetrics.metrics.defaultRuleThickness / + options.style.sizeMultiplier; + var phi = theta; + if (options.style.id < Style.TEXT.id) { + phi = fontMetrics.metrics.xHeight; + } + + var psi = theta + phi / 4; + + var innerHeight = + (inner.height + inner.depth) * options.style.sizeMultiplier; + var minDelimiterHeight = innerHeight + psi + theta; + + var delim = makeSpan(["sqrt-sign"], [ + delimiter.customSizedDelim("\\surd", minDelimiterHeight, + false, options, group.mode)]); + + var delimDepth = delim.height + delim.depth; + + if (delimDepth > inner.height + inner.depth + psi) { + psi = (psi + delimDepth - inner.height - inner.depth) / 2; + } + + delim.style.top = (-inner.height - psi + delim.height - theta) + "em"; + + line.style.top = (-inner.height - psi) + "em"; + line.height = inner.height + psi + 2 * theta; + + // 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 = makeSpan(["sqrt-body"], [line, inner, fixIE]); + } + + return makeSpan(["sqrt", "mord"], [delim, body]); + }, + + overline: function(group, options, prev) { + var innerGroup = buildGroup(group.value.body, + options.withStyle(options.style.cramp())); + + var fontSizer = buildCommon.makeFontSizer(options, innerGroup.maxFontSize); + + // The theta variable in the TeXbook + var lineWidth = fontMetrics.metrics.defaultRuleThickness; + + var line = makeSpan( + ["overline-line"], [fontSizer, makeSpan(["line"])]); + var inner = makeSpan(["overline-inner"], [fontSizer, innerGroup]); + var fixIE = makeSpan( + ["fix-ie"], [fontSizer, new domTree.textNode("\u00a0")]); + + line.style.top = (-inner.height - 3 * lineWidth) + "em"; + // The line is supposed to have 1 extra line width above it in height + // (TeXbook pg. 443, nr. 9) + line.height = inner.height + 5 * lineWidth; + + return makeSpan(["overline", "mord"], [ + line, inner, fixIE + ], options.getColor()); + }, + + sizing: function(group, options, prev) { + 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)]); + + var sizeToFontSize = { + "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 + }; + + var fontSize = sizeToFontSize[group.value.size]; + span.maxFontSize = fontSize * options.style.sizeMultiplier; + + return span; + }, + + delimsizing: function(group, options, prev) { + var delim = group.value.value; + + if (delim === ".") { + return makeSpan([groupToType[group.value.delimType]]); + } + + return makeSpan( + [groupToType[group.value.delimType]], + [delimiter.sizedDelim( + delim, group.value.size, options, group.mode)]); + }, + + leftright: function(group, options, prev) { + var inner = buildExpression(group.value.body, options.reset()); + + var innerHeight = 0; + var innerDepth = 0; + + for (var i = 0; i < inner.length; i++) { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + + innerHeight *= options.style.sizeMultiplier; + innerDepth *= options.style.sizeMultiplier; + + var leftDelim; + if (group.value.left === ".") { + leftDelim = makeSpan(["nulldelimiter"]); + } else { + leftDelim = delimiter.leftRightDelim( + group.value.left, innerHeight, innerDepth, options, + group.mode); + } + inner.unshift(leftDelim); + + var rightDelim; + if (group.value.right === ".") { + rightDelim = makeSpan(["nulldelimiter"]); + } else { + rightDelim = delimiter.leftRightDelim( + group.value.right, innerHeight, innerDepth, options, + group.mode); + } + inner.push(rightDelim); + + return makeSpan(["minner"], inner, options.getColor()); + }, + + rule: function(group, options, prev) { + // Make an empty span for the rule + var rule = makeSpan(["mord", "rule"], [], options.getColor()); + + 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; + } + + 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"; + + // Record the height and width + rule.width = width; + rule.height = height; + + return rule; + } +}; + +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 +}; + +var buildGroup = function(group, options, prev) { + if (!group) { + return makeSpan(); + } + + if (groupTypes[group.type]) { + var groupNode = groupTypes[group.type](group, options, prev); + + if (options.style !== options.parentStyle) { + var multiplier = options.style.sizeMultiplier / + options.parentStyle.sizeMultiplier; + + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + if (options.size !== options.parentSize) { + var multiplier = sizingMultiplier[options.size] / + sizingMultiplier[options.parentSize]; + + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError( + "Got group of unknown type: '" + group.type + "'"); + } +}; + +var buildTree = function(tree) { + // Setup the default options + var options = new Options(Style.TEXT, "size5", ""); + + var expression = buildExpression(tree, options); + var span = makeSpan(["base", options.style.cls()], expression); + var topStrut = makeSpan(["strut"]); + var bottomStrut = makeSpan(["strut", "bottom"]); + + topStrut.style.height = span.height + "em"; + bottomStrut.style.height = (span.height + span.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 = -span.depth + "em"; + + var katexNode = makeSpan(["katex"], [ + makeSpan(["katex-inner"], [topStrut, bottomStrut, span]) + ]); + + return katexNode.toDOM(); +}; + +module.exports = buildTree; + +},{"./Options":2,"./ParseError":3,"./Style":5,"./buildCommon":6,"./delimiter":8,"./domTree":9,"./fontMetrics":10,"./parseTree":13,"./symbols":14,"./utils":15}],8:[function(require,module,exports){ +var Options = require("./Options"); +var ParseError = require("./ParseError"); +var Style = require("./Style"); + +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); +var parseTree = require("./parseTree"); +var utils = require("./utils"); +var symbols = require("./symbols"); +var buildCommon = require("./buildCommon"); +var makeSpan = require("./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); + } +}; + +var mathrmSize = function(value, size, mode) { + return buildCommon.makeText(value, "Size" + size + "-Regular", mode); +}; + +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; + + return span; +}; + +var makeSmallDelim = function(delim, style, center, options, mode) { + var text = buildCommon.makeText(delim, "Main-Regular", mode); + + var span = styleWrap(text, style, options); + + if (center) { + var shift = + (1 - options.style.sizeMultiplier / style.sizeMultiplier) * + fontMetrics.metrics.axisHeight; + + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; + } + + return span; +}; + +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); + + if (center) { + var shift = (1 - options.style.sizeMultiplier) * + fontMetrics.metrics.axisHeight; + + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; + } + + return span; +}; + +// Make an inner span with the given offset and in the given font +var makeInner = function(symbol, offset, font, mode) { + var sizeClass; + if (font === "Size1-Regular") { + sizeClass = "size1"; + } else if (font === "Size4-Regular") { + sizeClass = "size4"; + } + + var inner = makeSpan( + ["delimsizinginner", sizeClass], + [makeSpan([], [buildCommon.makeText(symbol, font, mode)])]); + + inner.style.top = offset + "em"; + inner.height -= offset; + inner.depth += offset; + + return inner; +}; + +var makeStackedDelim = function(delim, heightTotal, center, options, mode) { + // There are four parts, the top, a middle, a repeated part, and a bottom. + var top, middle, repeat, bottom; + top = repeat = bottom = delim; + middle = null; + var font = "Size1-Regular"; + var overlap = false; + + // 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"; + + // For some reason, the sizes of this one delimiter don't work out + // right, so we shrink it a bit to make it now add an extraneous + // repeating part + if (height + depth <= 1.21) { + height -= 0.01; + depth -= 0.01; + } + } else if (delim === "|" || delim === "\\vert") { + overlap = true; + } else if (delim === "\\|" || delim === "\\Vert") { + overlap = true; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "\\lfloor") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "\\lceil") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "\\rfloor") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "\\rceil") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === "(") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + overlap = true; + } else if (delim === ")") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + overlap = true; + } 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 === "\\surd") { + top = "\ue001"; + bottom = "\u23b7"; + repeat = "\ue000"; + font = "Size4-Regular"; + overlap = true; + } + + // Get the metrics of the three 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 middleMetrics, middleHeightTotal; + if (middle !== null) { + middleMetrics = getMetrics(middle, font); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + } + + var realHeightTotal = topHeightTotal + bottomHeightTotal; + if (middle !== null) { + realHeightTotal += middleHeightTotal; + } + + while (realHeightTotal < heightTotal) { + realHeightTotal += repeatHeightTotal; + if (middle !== null) { + realHeightTotal += repeatHeightTotal; + } + } + + var axisHeight = fontMetrics.metrics.axisHeight; + if (center) { + axisHeight *= options.style.sizeMultiplier; + } + var height = realHeightTotal / 2 + axisHeight; + var depth = realHeightTotal / 2 - axisHeight; + + // Keep a list of the inner spans + var inners = []; + + // Add the top symbol + inners.push( + makeInner(top, topMetrics.height - height, font, mode)); + + if (middle === null) { + var repeatHeight = realHeightTotal - topHeightTotal - bottomHeightTotal; + var symbolCount = Math.ceil(repeatHeight / repeatHeightTotal); + + var overlapAmount; + if (overlap) { + // 2 * overlapAmount + repeatHeight = + // (symbolCount - 1) * (repeatHeightTotal - overlapAmount) + + // repeatHeightTotal + overlapAmount = (symbolCount * repeatHeightTotal - + repeatHeight) / (symbolCount + 1); + } else { + overlapAmount = 0; + } + + // Add repeat symbols until there's only space for the bottom symbol + var currHeight = height - topHeightTotal + overlapAmount; + for (var i = 0; i < symbolCount; i++) { + inners.push( + makeInner(repeat, + repeatMetrics.height - currHeight, font, mode)); + currHeight -= repeatHeightTotal - overlapAmount; + } + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + + // Calculate the number of symbols needed for the top and bottom + // repeated parts + var topRepeatHeight = + realHeightTotal / 2 - topHeightTotal - middleHeightTotal / 2; + var topSymbolCount = Math.ceil(topRepeatHeight / repeatHeightTotal); + + var bottomRepeatHeight = + realHeightTotal / 2 - topHeightTotal - middleHeightTotal / 2; + var bottomSymbolCount = + Math.ceil(bottomRepeatHeight / repeatHeightTotal); + + // Add the top repeated part + var currHeight = height - topHeightTotal; + for (var i = 0; i < topSymbolCount; i++) { + inners.push( + makeInner(repeat, + repeatMetrics.height - currHeight, font, mode)); + currHeight -= repeatHeightTotal; + } + + // Add the middle piece + var midPoint = realHeightTotal / 2 - depth; + inners.push( + makeInner(middle, + middleMetrics.height - midPoint - middleHeightTotal / 2, + font, mode)); + + // Add the bottom repeated part + currHeight = midPoint - middleHeightTotal / 2; + for (var i = 0; i < bottomSymbolCount; i++) { + inners.push( + makeInner(repeat, + repeatMetrics.height - currHeight, font, mode)); + currHeight -= repeatHeightTotal; + } + } + + // Add the bottom symbol + inners.push( + makeInner(bottom, depth - bottomMetrics.depth, font, mode)); + + var fixIE = makeSpan(["fix-ie"], [new domTree.textNode("\u00a0")]); + inners.push(fixIE); + + return styleWrap( + makeSpan(["delimsizing", "mult"], inners, options.getColor()), + Style.TEXT, options); +}; + +var normalDelimiters = [ + "(", ")", "[", "\\lbrack", "]", "\\rbrack", + "\\{", "\\lbrace", "\\}", "\\rbrace", + "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", + "<", ">", "\\langle", "\\rangle", "/", "\\backslash", + "\\surd" +]; + +var stackDelimiters = [ + "\\uparrow", "\\downarrow", "\\updownarrow", + "\\Uparrow", "\\Downarrow", "\\Updownarrow", + "|", "\\|", "\\vert", "\\Vert" +]; + +var onlyNormalDelimiters = [ + "<", ">", "\\langle", "\\rangle", "/", "\\backslash" +]; + +// Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| \Bigl| \biggl| \Biggl| \showlists$ +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; + +var makeSizedDelim = function(delim, size, options, mode) { + if (delim === "<") { + delim = "\\langle"; + } else if (delim === ">") { + delim = "\\rangle"; + } + + var retDelim; + + if (utils.contains(normalDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode); + } else if (utils.contains(stackDelimiters, delim)) { + return makeStackedDelim( + delim, sizeToMaxHeight[size], false, options, mode); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; + +var normalDelimiterSequence = [ + {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 stackAlwaysDelimiterSequence = [ + {type: "small", style: Style.SCRIPTSCRIPT}, + {type: "small", style: Style.SCRIPT}, + {type: "small", style: Style.TEXT}, + {type: "stack"} +]; + +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 delimTypeToFont = function(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"; + } +}; + +var traverseSequence = function(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; + + if (sequence[i].type === "small") { + heightDepth *= sequence[i].style.sizeMultiplier; + } + + if (heightDepth > height) { + return sequence[i]; + } + } + + return sequence[sequence.length - 1]; +}; + +var makeCustomSizedDelim = function(delim, height, center, options, mode) { + if (delim === "<") { + delim = "\\langle"; + } else if (delim === ">") { + delim = "\\rangle"; + } + + var sequence; + if (utils.contains(onlyNormalDelimiters, delim)) { + sequence = normalDelimiterSequence; + } else if (utils.contains(normalDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } + + var delimType = traverseSequence(delim, height, sequence, options); + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode); + } 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); + } +}; + +var makeLeftRightDelim = function(delim, height, depth, options, mode) { + var axisHeight = + fontMetrics.metrics.axisHeight * options.style.sizeMultiplier; + + // Taken from TeX source, tex.web, function make_left_right + var delimiterFactor = 901; + var delimiterExtend = 5.0 / fontMetrics.metrics.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); + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode); +}; + +module.exports = { + sizedDelim: makeSizedDelim, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +},{"./Options":2,"./ParseError":3,"./Style":5,"./buildCommon":6,"./domTree":9,"./fontMetrics":10,"./parseTree":13,"./symbols":14,"./utils":15}],9:[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 toDOM +// function. They are useful for both storing extra properties on the nodes, as +// well as providing a way to easily work with the DOM. + +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 || {}; +} + +span.prototype.toDOM = function() { + var span = document.createElement("span"); + + var classes = this.classes.slice(); + for (var i = classes.length - 1; i >= 0; i--) { + if (!classes[i]) { + classes.splice(i, 1); + } + } + + span.className = classes.join(" "); + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span.style[style] = this.style[style]; + } + } + + for (var i = 0; i < this.children.length; i++) { + span.appendChild(this.children[i].toDOM()); + } + + return span; +}; + +function documentFragment(children, height, depth, maxFontSize) { + this.children = children || []; + this.height = height || 0; + this.depth = depth || 0; + this.maxFontSize = maxFontSize || 0; +} + +documentFragment.prototype.toDOM = function() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toDOM()); + } + + return frag; +}; + +function textNode(value, height, depth) { + this.value = value || ""; + this.height = height || 0; + this.depth = depth || 0; +} + +textNode.prototype.toDOM = function() { + return document.createTextNode(this.value); +}; + +module.exports = { + span: span, + documentFragment: documentFragment, + textNode: textNode +}; + +},{}],10:[function(require,module,exports){ +// These font metrics are extracted from TeX +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 = 0.101; +var sigma22 = 0.250; + +var xi1 = 0; +var xi2 = 0; +var xi3 = 0; +var xi4 = 0; +var xi5 = .431; +var xi6 = 1; +var xi7 = 0; +var xi8 = .04; +var xi9 = .111; +var xi10 = .166; +var xi11 = .2; +var xi12 = .6; +var xi13 = .1; + +// This value is also used in katex.less, if you change it make sure the values +// match. +var ptPerEm = 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, + delim1: sigma20, + delim2: sigma21, + axisHeight: sigma22, + defaultRuleThickness: xi8, + bigOpSpacing1: xi9, + bigOpSpacing2: xi10, + bigOpSpacing3: xi11, + bigOpSpacing4: xi12, + bigOpSpacing5: xi13, + ptPerEm: ptPerEm +}; + +// This map is generated by metric_parse.rb +var metricMap = {"AMS-Regular":{"65":{"depth":0.0,"height":0.68889,"italic":0.0},"66":{"depth":0.0,"height":0.68889,"italic":0.0},"67":{"depth":0.0,"height":0.68889,"italic":0.0},"68":{"depth":0.0,"height":0.68889,"italic":0.0},"69":{"depth":0.0,"height":0.68889,"italic":0.0},"70":{"depth":0.0,"height":0.68889,"italic":0.0},"71":{"depth":0.0,"height":0.68889,"italic":0.0},"72":{"depth":0.0,"height":0.68889,"italic":0.0},"73":{"depth":0.0,"height":0.68889,"italic":0.0},"74":{"depth":0.16667,"height":0.68889,"italic":0.0},"75":{"depth":0.0,"height":0.68889,"italic":0.0},"76":{"depth":0.0,"height":0.68889,"italic":0.0},"77":{"depth":0.0,"height":0.68889,"italic":0.0},"78":{"depth":0.0,"height":0.68889,"italic":0.0},"79":{"depth":0.16667,"height":0.68889,"italic":0.0},"80":{"depth":0.0,"height":0.68889,"italic":0.0},"81":{"depth":0.16667,"height":0.68889,"italic":0.0},"82":{"depth":0.0,"height":0.68889,"italic":0.0},"83":{"depth":0.0,"height":0.68889,"italic":0.0},"84":{"depth":0.0,"height":0.68889,"italic":0.0},"85":{"depth":0.0,"height":0.68889,"italic":0.0},"86":{"depth":0.0,"height":0.68889,"italic":0.0},"87":{"depth":0.0,"height":0.68889,"italic":0.0},"88":{"depth":0.0,"height":0.68889,"italic":0.0},"89":{"depth":0.0,"height":0.68889,"italic":0.0},"90":{"depth":0.0,"height":0.68889,"italic":0.0},"107":{"depth":0.0,"height":0.68889,"italic":0.0},"165":{"depth":0.0,"height":0.675,"italic":0.025},"174":{"depth":0.15559,"height":0.69224,"italic":0.0},"240":{"depth":0.0,"height":0.68889,"italic":0.0},"295":{"depth":0.0,"height":0.68889,"italic":0.0},"710":{"depth":0.0,"height":0.825,"italic":0.0},"732":{"depth":0.0,"height":0.9,"italic":0.0},"770":{"depth":0.0,"height":0.825,"italic":0.0},"771":{"depth":0.0,"height":0.9,"italic":0.0},"989":{"depth":0.08167,"height":0.58167,"italic":0.0},"1008":{"depth":0.0,"height":0.43056,"italic":0.04028},"8245":{"depth":0.0,"height":0.54986,"italic":0.0},"8463":{"depth":0.0,"height":0.68889,"italic":0.0},"8487":{"depth":0.0,"height":0.68889,"italic":0.0},"8498":{"depth":0.0,"height":0.68889,"italic":0.0},"8502":{"depth":0.0,"height":0.68889,"italic":0.0},"8503":{"depth":0.0,"height":0.68889,"italic":0.0},"8504":{"depth":0.0,"height":0.68889,"italic":0.0},"8513":{"depth":0.0,"height":0.68889,"italic":0.0},"8592":{"depth":-0.03598,"height":0.46402,"italic":0.0},"8594":{"depth":-0.03598,"height":0.46402,"italic":0.0},"8602":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8603":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8606":{"depth":0.01354,"height":0.52239,"italic":0.0},"8608":{"depth":0.01354,"height":0.52239,"italic":0.0},"8610":{"depth":0.01354,"height":0.52239,"italic":0.0},"8611":{"depth":0.01354,"height":0.52239,"italic":0.0},"8619":{"depth":0.0,"height":0.54986,"italic":0.0},"8620":{"depth":0.0,"height":0.54986,"italic":0.0},"8621":{"depth":-0.13313,"height":0.37788,"italic":0.0},"8622":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8624":{"depth":0.0,"height":0.69224,"italic":0.0},"8625":{"depth":0.0,"height":0.69224,"italic":0.0},"8630":{"depth":0.0,"height":0.43056,"italic":0.0},"8631":{"depth":0.0,"height":0.43056,"italic":0.0},"8634":{"depth":0.08198,"height":0.58198,"italic":0.0},"8635":{"depth":0.08198,"height":0.58198,"italic":0.0},"8638":{"depth":0.19444,"height":0.69224,"italic":0.0},"8639":{"depth":0.19444,"height":0.69224,"italic":0.0},"8642":{"depth":0.19444,"height":0.69224,"italic":0.0},"8643":{"depth":0.19444,"height":0.69224,"italic":0.0},"8644":{"depth":0.1808,"height":0.675,"italic":0.0},"8646":{"depth":0.1808,"height":0.675,"italic":0.0},"8647":{"depth":0.1808,"height":0.675,"italic":0.0},"8648":{"depth":0.19444,"height":0.69224,"italic":0.0},"8649":{"depth":0.1808,"height":0.675,"italic":0.0},"8650":{"depth":0.19444,"height":0.69224,"italic":0.0},"8651":{"depth":0.01354,"height":0.52239,"italic":0.0},"8652":{"depth":0.01354,"height":0.52239,"italic":0.0},"8653":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8654":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8655":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8666":{"depth":0.13667,"height":0.63667,"italic":0.0},"8667":{"depth":0.13667,"height":0.63667,"italic":0.0},"8669":{"depth":-0.13313,"height":0.37788,"italic":0.0},"8705":{"depth":0.0,"height":0.825,"italic":0.0},"8708":{"depth":0.0,"height":0.68889,"italic":0.0},"8709":{"depth":0.08167,"height":0.58167,"italic":0.0},"8717":{"depth":0.0,"height":0.43056,"italic":0.0},"8722":{"depth":-0.03598,"height":0.46402,"italic":0.0},"8724":{"depth":0.08198,"height":0.69224,"italic":0.0},"8726":{"depth":0.08167,"height":0.58167,"italic":0.0},"8733":{"depth":0.0,"height":0.69224,"italic":0.0},"8736":{"depth":0.0,"height":0.69224,"italic":0.0},"8737":{"depth":0.0,"height":0.69224,"italic":0.0},"8738":{"depth":0.03517,"height":0.52239,"italic":0.0},"8739":{"depth":0.08167,"height":0.58167,"italic":0.0},"8740":{"depth":0.25142,"height":0.74111,"italic":0.0},"8741":{"depth":0.08167,"height":0.58167,"italic":0.0},"8742":{"depth":0.25142,"height":0.74111,"italic":0.0},"8756":{"depth":0.0,"height":0.69224,"italic":0.0},"8757":{"depth":0.0,"height":0.69224,"italic":0.0},"8764":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8765":{"depth":-0.13313,"height":0.37788,"italic":0.0},"8769":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8770":{"depth":-0.03625,"height":0.46375,"italic":0.0},"8774":{"depth":0.30274,"height":0.79383,"italic":0.0},"8776":{"depth":-0.01688,"height":0.48312,"italic":0.0},"8778":{"depth":0.08167,"height":0.58167,"italic":0.0},"8782":{"depth":0.06062,"height":0.54986,"italic":0.0},"8783":{"depth":0.06062,"height":0.54986,"italic":0.0},"8785":{"depth":0.08198,"height":0.58198,"italic":0.0},"8786":{"depth":0.08198,"height":0.58198,"italic":0.0},"8787":{"depth":0.08198,"height":0.58198,"italic":0.0},"8790":{"depth":0.0,"height":0.69224,"italic":0.0},"8791":{"depth":0.22958,"height":0.72958,"italic":0.0},"8796":{"depth":0.08198,"height":0.91667,"italic":0.0},"8806":{"depth":0.25583,"height":0.75583,"italic":0.0},"8807":{"depth":0.25583,"height":0.75583,"italic":0.0},"8808":{"depth":0.25142,"height":0.75726,"italic":0.0},"8809":{"depth":0.25142,"height":0.75726,"italic":0.0},"8812":{"depth":0.25583,"height":0.75583,"italic":0.0},"8814":{"depth":0.20576,"height":0.70576,"italic":0.0},"8815":{"depth":0.20576,"height":0.70576,"italic":0.0},"8816":{"depth":0.30274,"height":0.79383,"italic":0.0},"8817":{"depth":0.30274,"height":0.79383,"italic":0.0},"8818":{"depth":0.22958,"height":0.72958,"italic":0.0},"8819":{"depth":0.22958,"height":0.72958,"italic":0.0},"8822":{"depth":0.1808,"height":0.675,"italic":0.0},"8823":{"depth":0.1808,"height":0.675,"italic":0.0},"8828":{"depth":0.13667,"height":0.63667,"italic":0.0},"8829":{"depth":0.13667,"height":0.63667,"italic":0.0},"8830":{"depth":0.22958,"height":0.72958,"italic":0.0},"8831":{"depth":0.22958,"height":0.72958,"italic":0.0},"8832":{"depth":0.20576,"height":0.70576,"italic":0.0},"8833":{"depth":0.20576,"height":0.70576,"italic":0.0},"8840":{"depth":0.30274,"height":0.79383,"italic":0.0},"8841":{"depth":0.30274,"height":0.79383,"italic":0.0},"8842":{"depth":0.13597,"height":0.63597,"italic":0.0},"8843":{"depth":0.13597,"height":0.63597,"italic":0.0},"8847":{"depth":0.03517,"height":0.54986,"italic":0.0},"8848":{"depth":0.03517,"height":0.54986,"italic":0.0},"8858":{"depth":0.08198,"height":0.58198,"italic":0.0},"8859":{"depth":0.08198,"height":0.58198,"italic":0.0},"8861":{"depth":0.08198,"height":0.58198,"italic":0.0},"8862":{"depth":0.0,"height":0.675,"italic":0.0},"8863":{"depth":0.0,"height":0.675,"italic":0.0},"8864":{"depth":0.0,"height":0.675,"italic":0.0},"8865":{"depth":0.0,"height":0.675,"italic":0.0},"8872":{"depth":0.0,"height":0.69224,"italic":0.0},"8873":{"depth":0.0,"height":0.69224,"italic":0.0},"8874":{"depth":0.0,"height":0.69224,"italic":0.0},"8876":{"depth":0.0,"height":0.68889,"italic":0.0},"8877":{"depth":0.0,"height":0.68889,"italic":0.0},"8878":{"depth":0.0,"height":0.68889,"italic":0.0},"8879":{"depth":0.0,"height":0.68889,"italic":0.0},"8882":{"depth":0.03517,"height":0.54986,"italic":0.0},"8883":{"depth":0.03517,"height":0.54986,"italic":0.0},"8884":{"depth":0.13667,"height":0.63667,"italic":0.0},"8885":{"depth":0.13667,"height":0.63667,"italic":0.0},"8888":{"depth":0.0,"height":0.54986,"italic":0.0},"8890":{"depth":0.19444,"height":0.43056,"italic":0.0},"8891":{"depth":0.19444,"height":0.69224,"italic":0.0},"8892":{"depth":0.19444,"height":0.69224,"italic":0.0},"8901":{"depth":0.0,"height":0.54986,"italic":0.0},"8903":{"depth":0.08167,"height":0.58167,"italic":0.0},"8905":{"depth":0.08167,"height":0.58167,"italic":0.0},"8906":{"depth":0.08167,"height":0.58167,"italic":0.0},"8907":{"depth":0.0,"height":0.69224,"italic":0.0},"8908":{"depth":0.0,"height":0.69224,"italic":0.0},"8909":{"depth":-0.03598,"height":0.46402,"italic":0.0},"8910":{"depth":0.0,"height":0.54986,"italic":0.0},"8911":{"depth":0.0,"height":0.54986,"italic":0.0},"8912":{"depth":0.03517,"height":0.54986,"italic":0.0},"8913":{"depth":0.03517,"height":0.54986,"italic":0.0},"8914":{"depth":0.0,"height":0.54986,"italic":0.0},"8915":{"depth":0.0,"height":0.54986,"italic":0.0},"8916":{"depth":0.0,"height":0.69224,"italic":0.0},"8918":{"depth":0.0391,"height":0.5391,"italic":0.0},"8919":{"depth":0.0391,"height":0.5391,"italic":0.0},"8920":{"depth":0.03517,"height":0.54986,"italic":0.0},"8921":{"depth":0.03517,"height":0.54986,"italic":0.0},"8922":{"depth":0.38569,"height":0.88569,"italic":0.0},"8923":{"depth":0.38569,"height":0.88569,"italic":0.0},"8926":{"depth":0.13667,"height":0.63667,"italic":0.0},"8927":{"depth":0.13667,"height":0.63667,"italic":0.0},"8928":{"depth":0.30274,"height":0.79383,"italic":0.0},"8929":{"depth":0.30274,"height":0.79383,"italic":0.0},"8934":{"depth":0.23222,"height":0.74111,"italic":0.0},"8935":{"depth":0.23222,"height":0.74111,"italic":0.0},"8936":{"depth":0.23222,"height":0.74111,"italic":0.0},"8937":{"depth":0.23222,"height":0.74111,"italic":0.0},"8938":{"depth":0.20576,"height":0.70576,"italic":0.0},"8939":{"depth":0.20576,"height":0.70576,"italic":0.0},"8940":{"depth":0.30274,"height":0.79383,"italic":0.0},"8941":{"depth":0.30274,"height":0.79383,"italic":0.0},"8994":{"depth":0.19444,"height":0.69224,"italic":0.0},"8995":{"depth":0.19444,"height":0.69224,"italic":0.0},"9416":{"depth":0.15559,"height":0.69224,"italic":0.0},"9484":{"depth":0.0,"height":0.69224,"italic":0.0},"9488":{"depth":0.0,"height":0.69224,"italic":0.0},"9492":{"depth":0.0,"height":0.37788,"italic":0.0},"9496":{"depth":0.0,"height":0.37788,"italic":0.0},"9585":{"depth":0.19444,"height":0.68889,"italic":0.0},"9586":{"depth":0.19444,"height":0.74111,"italic":0.0},"9632":{"depth":0.0,"height":0.675,"italic":0.0},"9633":{"depth":0.0,"height":0.675,"italic":0.0},"9650":{"depth":0.0,"height":0.54986,"italic":0.0},"9651":{"depth":0.0,"height":0.54986,"italic":0.0},"9654":{"depth":0.03517,"height":0.54986,"italic":0.0},"9660":{"depth":0.0,"height":0.54986,"italic":0.0},"9661":{"depth":0.0,"height":0.54986,"italic":0.0},"9664":{"depth":0.03517,"height":0.54986,"italic":0.0},"9674":{"depth":0.11111,"height":0.69224,"italic":0.0},"9733":{"depth":0.19444,"height":0.69224,"italic":0.0},"10003":{"depth":0.0,"height":0.69224,"italic":0.0},"10016":{"depth":0.0,"height":0.69224,"italic":0.0},"10731":{"depth":0.11111,"height":0.69224,"italic":0.0},"10846":{"depth":0.19444,"height":0.75583,"italic":0.0},"10877":{"depth":0.13667,"height":0.63667,"italic":0.0},"10878":{"depth":0.13667,"height":0.63667,"italic":0.0},"10885":{"depth":0.25583,"height":0.75583,"italic":0.0},"10886":{"depth":0.25583,"height":0.75583,"italic":0.0},"10887":{"depth":0.13597,"height":0.63597,"italic":0.0},"10888":{"depth":0.13597,"height":0.63597,"italic":0.0},"10889":{"depth":0.26167,"height":0.75726,"italic":0.0},"10890":{"depth":0.26167,"height":0.75726,"italic":0.0},"10891":{"depth":0.48256,"height":0.98256,"italic":0.0},"10892":{"depth":0.48256,"height":0.98256,"italic":0.0},"10901":{"depth":0.13667,"height":0.63667,"italic":0.0},"10902":{"depth":0.13667,"height":0.63667,"italic":0.0},"10933":{"depth":0.25142,"height":0.75726,"italic":0.0},"10934":{"depth":0.25142,"height":0.75726,"italic":0.0},"10935":{"depth":0.26167,"height":0.75726,"italic":0.0},"10936":{"depth":0.26167,"height":0.75726,"italic":0.0},"10937":{"depth":0.26167,"height":0.75726,"italic":0.0},"10938":{"depth":0.26167,"height":0.75726,"italic":0.0},"10949":{"depth":0.25583,"height":0.75583,"italic":0.0},"10950":{"depth":0.25583,"height":0.75583,"italic":0.0},"10955":{"depth":0.28481,"height":0.79383,"italic":0.0},"10956":{"depth":0.28481,"height":0.79383,"italic":0.0},"57350":{"depth":0.08167,"height":0.58167,"italic":0.0},"57351":{"depth":0.08167,"height":0.58167,"italic":0.0},"57352":{"depth":0.08167,"height":0.58167,"italic":0.0},"57353":{"depth":0.0,"height":0.43056,"italic":0.04028},"57356":{"depth":0.25142,"height":0.75726,"italic":0.0},"57357":{"depth":0.25142,"height":0.75726,"italic":0.0},"57358":{"depth":0.41951,"height":0.91951,"italic":0.0},"57359":{"depth":0.30274,"height":0.79383,"italic":0.0},"57360":{"depth":0.30274,"height":0.79383,"italic":0.0},"57361":{"depth":0.41951,"height":0.91951,"italic":0.0},"57366":{"depth":0.25142,"height":0.75726,"italic":0.0},"57367":{"depth":0.25142,"height":0.75726,"italic":0.0},"57368":{"depth":0.25142,"height":0.75726,"italic":0.0},"57369":{"depth":0.25142,"height":0.75726,"italic":0.0},"57370":{"depth":0.13597,"height":0.63597,"italic":0.0},"57371":{"depth":0.13597,"height":0.63597,"italic":0.0}},"Main-Bold":{"33":{"depth":0.0,"height":0.69444,"italic":0.0},"34":{"depth":0.0,"height":0.69444,"italic":0.0},"35":{"depth":0.19444,"height":0.69444,"italic":0.0},"36":{"depth":0.05556,"height":0.75,"italic":0.0},"37":{"depth":0.05556,"height":0.75,"italic":0.0},"38":{"depth":0.0,"height":0.69444,"italic":0.0},"39":{"depth":0.0,"height":0.69444,"italic":0.0},"40":{"depth":0.25,"height":0.75,"italic":0.0},"41":{"depth":0.25,"height":0.75,"italic":0.0},"42":{"depth":0.0,"height":0.75,"italic":0.0},"43":{"depth":0.13333,"height":0.63333,"italic":0.0},"44":{"depth":0.19444,"height":0.15556,"italic":0.0},"45":{"depth":0.0,"height":0.44444,"italic":0.0},"46":{"depth":0.0,"height":0.15556,"italic":0.0},"47":{"depth":0.25,"height":0.75,"italic":0.0},"48":{"depth":0.0,"height":0.64444,"italic":0.0},"49":{"depth":0.0,"height":0.64444,"italic":0.0},"50":{"depth":0.0,"height":0.64444,"italic":0.0},"51":{"depth":0.0,"height":0.64444,"italic":0.0},"52":{"depth":0.0,"height":0.64444,"italic":0.0},"53":{"depth":0.0,"height":0.64444,"italic":0.0},"54":{"depth":0.0,"height":0.64444,"italic":0.0},"55":{"depth":0.0,"height":0.64444,"italic":0.0},"56":{"depth":0.0,"height":0.64444,"italic":0.0},"57":{"depth":0.0,"height":0.64444,"italic":0.0},"58":{"depth":0.0,"height":0.44444,"italic":0.0},"59":{"depth":0.19444,"height":0.44444,"italic":0.0},"60":{"depth":0.08556,"height":0.58556,"italic":0.0},"61":{"depth":-0.10889,"height":0.39111,"italic":0.0},"62":{"depth":0.08556,"height":0.58556,"italic":0.0},"63":{"depth":0.0,"height":0.69444,"italic":0.0},"64":{"depth":0.0,"height":0.69444,"italic":0.0},"65":{"depth":0.0,"height":0.68611,"italic":0.0},"66":{"depth":0.0,"height":0.68611,"italic":0.0},"67":{"depth":0.0,"height":0.68611,"italic":0.0},"68":{"depth":0.0,"height":0.68611,"italic":0.0},"69":{"depth":0.0,"height":0.68611,"italic":0.0},"70":{"depth":0.0,"height":0.68611,"italic":0.0},"71":{"depth":0.0,"height":0.68611,"italic":0.0},"72":{"depth":0.0,"height":0.68611,"italic":0.0},"73":{"depth":0.0,"height":0.68611,"italic":0.0},"74":{"depth":0.0,"height":0.68611,"italic":0.0},"75":{"depth":0.0,"height":0.68611,"italic":0.0},"76":{"depth":0.0,"height":0.68611,"italic":0.0},"77":{"depth":0.0,"height":0.68611,"italic":0.0},"78":{"depth":0.0,"height":0.68611,"italic":0.0},"79":{"depth":0.0,"height":0.68611,"italic":0.0},"80":{"depth":0.0,"height":0.68611,"italic":0.0},"81":{"depth":0.19444,"height":0.68611,"italic":0.0},"82":{"depth":0.0,"height":0.68611,"italic":0.0},"83":{"depth":0.0,"height":0.68611,"italic":0.0},"84":{"depth":0.0,"height":0.68611,"italic":0.0},"85":{"depth":0.0,"height":0.68611,"italic":0.0},"86":{"depth":0.0,"height":0.68611,"italic":0.01597},"87":{"depth":0.0,"height":0.68611,"italic":0.01597},"88":{"depth":0.0,"height":0.68611,"italic":0.0},"89":{"depth":0.0,"height":0.68611,"italic":0.02875},"90":{"depth":0.0,"height":0.68611,"italic":0.0},"91":{"depth":0.25,"height":0.75,"italic":0.0},"92":{"depth":0.25,"height":0.75,"italic":0.0},"93":{"depth":0.25,"height":0.75,"italic":0.0},"94":{"depth":0.0,"height":0.69444,"italic":0.0},"95":{"depth":0.31,"height":0.13444,"italic":0.03194},"96":{"depth":0.0,"height":0.69444,"italic":0.0},"97":{"depth":0.0,"height":0.44444,"italic":0.0},"98":{"depth":0.0,"height":0.69444,"italic":0.0},"99":{"depth":0.0,"height":0.44444,"italic":0.0},"100":{"depth":0.0,"height":0.69444,"italic":0.0},"101":{"depth":0.0,"height":0.44444,"italic":0.0},"102":{"depth":0.0,"height":0.69444,"italic":0.10903},"103":{"depth":0.19444,"height":0.44444,"italic":0.01597},"104":{"depth":0.0,"height":0.69444,"italic":0.0},"105":{"depth":0.0,"height":0.69444,"italic":0.0},"106":{"depth":0.19444,"height":0.69444,"italic":0.0},"107":{"depth":0.0,"height":0.69444,"italic":0.0},"108":{"depth":0.0,"height":0.69444,"italic":0.0},"109":{"depth":0.0,"height":0.44444,"italic":0.0},"110":{"depth":0.0,"height":0.44444,"italic":0.0},"111":{"depth":0.0,"height":0.44444,"italic":0.0},"112":{"depth":0.19444,"height":0.44444,"italic":0.0},"113":{"depth":0.19444,"height":0.44444,"italic":0.0},"114":{"depth":0.0,"height":0.44444,"italic":0.0},"115":{"depth":0.0,"height":0.44444,"italic":0.0},"116":{"depth":0.0,"height":0.63492,"italic":0.0},"117":{"depth":0.0,"height":0.44444,"italic":0.0},"118":{"depth":0.0,"height":0.44444,"italic":0.01597},"119":{"depth":0.0,"height":0.44444,"italic":0.01597},"120":{"depth":0.0,"height":0.44444,"italic":0.0},"121":{"depth":0.19444,"height":0.44444,"italic":0.01597},"122":{"depth":0.0,"height":0.44444,"italic":0.0},"123":{"depth":0.25,"height":0.75,"italic":0.0},"124":{"depth":0.25,"height":0.75,"italic":0.0},"125":{"depth":0.25,"height":0.75,"italic":0.0},"126":{"depth":0.35,"height":0.34444,"italic":0.0},"168":{"depth":0.0,"height":0.69444,"italic":0.0},"172":{"depth":0.0,"height":0.44444,"italic":0.0},"175":{"depth":0.0,"height":0.59611,"italic":0.0},"176":{"depth":0.0,"height":0.69444,"italic":0.0},"177":{"depth":0.13333,"height":0.63333,"italic":0.0},"180":{"depth":0.0,"height":0.69444,"italic":0.0},"215":{"depth":0.13333,"height":0.63333,"italic":0.0},"247":{"depth":0.13333,"height":0.63333,"italic":0.0},"305":{"depth":0.0,"height":0.44444,"italic":0.0},"567":{"depth":0.19444,"height":0.44444,"italic":0.0},"710":{"depth":0.0,"height":0.69444,"italic":0.0},"711":{"depth":0.0,"height":0.63194,"italic":0.0},"713":{"depth":0.0,"height":0.59611,"italic":0.0},"714":{"depth":0.0,"height":0.69444,"italic":0.0},"715":{"depth":0.0,"height":0.69444,"italic":0.0},"728":{"depth":0.0,"height":0.69444,"italic":0.0},"729":{"depth":0.0,"height":0.69444,"italic":0.0},"730":{"depth":0.0,"height":0.69444,"italic":0.0},"732":{"depth":0.0,"height":0.69444,"italic":0.0},"768":{"depth":0.0,"height":0.69444,"italic":0.0},"769":{"depth":0.0,"height":0.69444,"italic":0.0},"770":{"depth":0.0,"height":0.69444,"italic":0.0},"771":{"depth":0.0,"height":0.69444,"italic":0.0},"772":{"depth":0.0,"height":0.59611,"italic":0.0},"774":{"depth":0.0,"height":0.69444,"italic":0.0},"775":{"depth":0.0,"height":0.69444,"italic":0.0},"776":{"depth":0.0,"height":0.69444,"italic":0.0},"778":{"depth":0.0,"height":0.69444,"italic":0.0},"779":{"depth":0.0,"height":0.69444,"italic":0.0},"780":{"depth":0.0,"height":0.63194,"italic":0.0},"824":{"depth":0.19444,"height":0.69444,"italic":0.0},"915":{"depth":0.0,"height":0.68611,"italic":0.0},"916":{"depth":0.0,"height":0.68611,"italic":0.0},"920":{"depth":0.0,"height":0.68611,"italic":0.0},"923":{"depth":0.0,"height":0.68611,"italic":0.0},"926":{"depth":0.0,"height":0.68611,"italic":0.0},"928":{"depth":0.0,"height":0.68611,"italic":0.0},"931":{"depth":0.0,"height":0.68611,"italic":0.0},"933":{"depth":0.0,"height":0.68611,"italic":0.0},"934":{"depth":0.0,"height":0.68611,"italic":0.0},"936":{"depth":0.0,"height":0.68611,"italic":0.0},"937":{"depth":0.0,"height":0.68611,"italic":0.0},"8211":{"depth":0.0,"height":0.44444,"italic":0.03194},"8212":{"depth":0.0,"height":0.44444,"italic":0.03194},"8216":{"depth":0.0,"height":0.69444,"italic":0.0},"8217":{"depth":0.0,"height":0.69444,"italic":0.0},"8220":{"depth":0.0,"height":0.69444,"italic":0.0},"8221":{"depth":0.0,"height":0.69444,"italic":0.0},"8224":{"depth":0.19444,"height":0.69444,"italic":0.0},"8225":{"depth":0.19444,"height":0.69444,"italic":0.0},"8242":{"depth":0.0,"height":0.55556,"italic":0.0},"8407":{"depth":0.0,"height":0.72444,"italic":0.15486},"8463":{"depth":0.0,"height":0.69444,"italic":0.0},"8465":{"depth":0.0,"height":0.69444,"italic":0.0},"8467":{"depth":0.0,"height":0.69444,"italic":0.0},"8472":{"depth":0.19444,"height":0.44444,"italic":0.0},"8476":{"depth":0.0,"height":0.69444,"italic":0.0},"8501":{"depth":0.0,"height":0.69444,"italic":0.0},"8592":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8593":{"depth":0.19444,"height":0.69444,"italic":0.0},"8594":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8595":{"depth":0.19444,"height":0.69444,"italic":0.0},"8596":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8597":{"depth":0.25,"height":0.75,"italic":0.0},"8598":{"depth":0.19444,"height":0.69444,"italic":0.0},"8599":{"depth":0.19444,"height":0.69444,"italic":0.0},"8600":{"depth":0.19444,"height":0.69444,"italic":0.0},"8601":{"depth":0.19444,"height":0.69444,"italic":0.0},"8636":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8637":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8640":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8641":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8656":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8657":{"depth":0.19444,"height":0.69444,"italic":0.0},"8658":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8659":{"depth":0.19444,"height":0.69444,"italic":0.0},"8660":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8661":{"depth":0.25,"height":0.75,"italic":0.0},"8704":{"depth":0.0,"height":0.69444,"italic":0.0},"8706":{"depth":0.0,"height":0.69444,"italic":0.06389},"8707":{"depth":0.0,"height":0.69444,"italic":0.0},"8709":{"depth":0.05556,"height":0.75,"italic":0.0},"8711":{"depth":0.0,"height":0.68611,"italic":0.0},"8712":{"depth":0.08556,"height":0.58556,"italic":0.0},"8715":{"depth":0.08556,"height":0.58556,"italic":0.0},"8722":{"depth":0.13333,"height":0.63333,"italic":0.0},"8723":{"depth":0.13333,"height":0.63333,"italic":0.0},"8725":{"depth":0.25,"height":0.75,"italic":0.0},"8726":{"depth":0.25,"height":0.75,"italic":0.0},"8727":{"depth":-0.02778,"height":0.47222,"italic":0.0},"8728":{"depth":-0.02639,"height":0.47361,"italic":0.0},"8729":{"depth":-0.02639,"height":0.47361,"italic":0.0},"8730":{"depth":0.18,"height":0.82,"italic":0.0},"8733":{"depth":0.0,"height":0.44444,"italic":0.0},"8734":{"depth":0.0,"height":0.44444,"italic":0.0},"8736":{"depth":0.0,"height":0.69224,"italic":0.0},"8739":{"depth":0.25,"height":0.75,"italic":0.0},"8741":{"depth":0.25,"height":0.75,"italic":0.0},"8743":{"depth":0.0,"height":0.55556,"italic":0.0},"8744":{"depth":0.0,"height":0.55556,"italic":0.0},"8745":{"depth":0.0,"height":0.55556,"italic":0.0},"8746":{"depth":0.0,"height":0.55556,"italic":0.0},"8747":{"depth":0.19444,"height":0.69444,"italic":0.12778},"8764":{"depth":-0.10889,"height":0.39111,"italic":0.0},"8768":{"depth":0.19444,"height":0.69444,"italic":0.0},"8771":{"depth":0.00222,"height":0.50222,"italic":0.0},"8776":{"depth":0.02444,"height":0.52444,"italic":0.0},"8781":{"depth":0.00222,"height":0.50222,"italic":0.0},"8801":{"depth":0.00222,"height":0.50222,"italic":0.0},"8804":{"depth":0.19667,"height":0.69667,"italic":0.0},"8805":{"depth":0.19667,"height":0.69667,"italic":0.0},"8810":{"depth":0.08556,"height":0.58556,"italic":0.0},"8811":{"depth":0.08556,"height":0.58556,"italic":0.0},"8826":{"depth":0.08556,"height":0.58556,"italic":0.0},"8827":{"depth":0.08556,"height":0.58556,"italic":0.0},"8834":{"depth":0.08556,"height":0.58556,"italic":0.0},"8835":{"depth":0.08556,"height":0.58556,"italic":0.0},"8838":{"depth":0.19667,"height":0.69667,"italic":0.0},"8839":{"depth":0.19667,"height":0.69667,"italic":0.0},"8846":{"depth":0.0,"height":0.55556,"italic":0.0},"8849":{"depth":0.19667,"height":0.69667,"italic":0.0},"8850":{"depth":0.19667,"height":0.69667,"italic":0.0},"8851":{"depth":0.0,"height":0.55556,"italic":0.0},"8852":{"depth":0.0,"height":0.55556,"italic":0.0},"8853":{"depth":0.13333,"height":0.63333,"italic":0.0},"8854":{"depth":0.13333,"height":0.63333,"italic":0.0},"8855":{"depth":0.13333,"height":0.63333,"italic":0.0},"8856":{"depth":0.13333,"height":0.63333,"italic":0.0},"8857":{"depth":0.13333,"height":0.63333,"italic":0.0},"8866":{"depth":0.0,"height":0.69444,"italic":0.0},"8867":{"depth":0.0,"height":0.69444,"italic":0.0},"8868":{"depth":0.0,"height":0.69444,"italic":0.0},"8869":{"depth":0.0,"height":0.69444,"italic":0.0},"8900":{"depth":-0.02639,"height":0.47361,"italic":0.0},"8901":{"depth":-0.02639,"height":0.47361,"italic":0.0},"8902":{"depth":-0.02778,"height":0.47222,"italic":0.0},"8968":{"depth":0.25,"height":0.75,"italic":0.0},"8969":{"depth":0.25,"height":0.75,"italic":0.0},"8970":{"depth":0.25,"height":0.75,"italic":0.0},"8971":{"depth":0.25,"height":0.75,"italic":0.0},"8994":{"depth":-0.13889,"height":0.36111,"italic":0.0},"8995":{"depth":-0.13889,"height":0.36111,"italic":0.0},"9651":{"depth":0.19444,"height":0.69444,"italic":0.0},"9657":{"depth":-0.02778,"height":0.47222,"italic":0.0},"9661":{"depth":0.19444,"height":0.69444,"italic":0.0},"9667":{"depth":-0.02778,"height":0.47222,"italic":0.0},"9711":{"depth":0.19444,"height":0.69444,"italic":0.0},"9824":{"depth":0.12963,"height":0.69444,"italic":0.0},"9825":{"depth":0.12963,"height":0.69444,"italic":0.0},"9826":{"depth":0.12963,"height":0.69444,"italic":0.0},"9827":{"depth":0.12963,"height":0.69444,"italic":0.0},"9837":{"depth":0.0,"height":0.75,"italic":0.0},"9838":{"depth":0.19444,"height":0.69444,"italic":0.0},"9839":{"depth":0.19444,"height":0.69444,"italic":0.0},"10216":{"depth":0.25,"height":0.75,"italic":0.0},"10217":{"depth":0.25,"height":0.75,"italic":0.0},"10815":{"depth":0.0,"height":0.68611,"italic":0.0},"10927":{"depth":0.19667,"height":0.69667,"italic":0.0},"10928":{"depth":0.19667,"height":0.69667,"italic":0.0}},"Main-Italic":{"33":{"depth":0.0,"height":0.69444,"italic":0.12417},"34":{"depth":0.0,"height":0.69444,"italic":0.06961},"35":{"depth":0.19444,"height":0.69444,"italic":0.06616},"37":{"depth":0.05556,"height":0.75,"italic":0.13639},"38":{"depth":0.0,"height":0.69444,"italic":0.09694},"39":{"depth":0.0,"height":0.69444,"italic":0.12417},"40":{"depth":0.25,"height":0.75,"italic":0.16194},"41":{"depth":0.25,"height":0.75,"italic":0.03694},"42":{"depth":0.0,"height":0.75,"italic":0.14917},"43":{"depth":0.05667,"height":0.56167,"italic":0.03694},"44":{"depth":0.19444,"height":0.10556,"italic":0.0},"45":{"depth":0.0,"height":0.43056,"italic":0.02826},"46":{"depth":0.0,"height":0.10556,"italic":0.0},"47":{"depth":0.25,"height":0.75,"italic":0.16194},"48":{"depth":0.0,"height":0.64444,"italic":0.13556},"49":{"depth":0.0,"height":0.64444,"italic":0.13556},"50":{"depth":0.0,"height":0.64444,"italic":0.13556},"51":{"depth":0.0,"height":0.64444,"italic":0.13556},"52":{"depth":0.19444,"height":0.64444,"italic":0.13556},"53":{"depth":0.0,"height":0.64444,"italic":0.13556},"54":{"depth":0.0,"height":0.64444,"italic":0.13556},"55":{"depth":0.19444,"height":0.64444,"italic":0.13556},"56":{"depth":0.0,"height":0.64444,"italic":0.13556},"57":{"depth":0.0,"height":0.64444,"italic":0.13556},"58":{"depth":0.0,"height":0.43056,"italic":0.0582},"59":{"depth":0.19444,"height":0.43056,"italic":0.0582},"61":{"depth":-0.13313,"height":0.36687,"italic":0.06616},"63":{"depth":0.0,"height":0.69444,"italic":0.1225},"64":{"depth":0.0,"height":0.69444,"italic":0.09597},"65":{"depth":0.0,"height":0.68333,"italic":0.0},"66":{"depth":0.0,"height":0.68333,"italic":0.10257},"67":{"depth":0.0,"height":0.68333,"italic":0.14528},"68":{"depth":0.0,"height":0.68333,"italic":0.09403},"69":{"depth":0.0,"height":0.68333,"italic":0.12028},"70":{"depth":0.0,"height":0.68333,"italic":0.13305},"71":{"depth":0.0,"height":0.68333,"italic":0.08722},"72":{"depth":0.0,"height":0.68333,"italic":0.16389},"73":{"depth":0.0,"height":0.68333,"italic":0.15806},"74":{"depth":0.0,"height":0.68333,"italic":0.14028},"75":{"depth":0.0,"height":0.68333,"italic":0.14528},"76":{"depth":0.0,"height":0.68333,"italic":0.0},"77":{"depth":0.0,"height":0.68333,"italic":0.16389},"78":{"depth":0.0,"height":0.68333,"italic":0.16389},"79":{"depth":0.0,"height":0.68333,"italic":0.09403},"80":{"depth":0.0,"height":0.68333,"italic":0.10257},"81":{"depth":0.19444,"height":0.68333,"italic":0.09403},"82":{"depth":0.0,"height":0.68333,"italic":0.03868},"83":{"depth":0.0,"height":0.68333,"italic":0.11972},"84":{"depth":0.0,"height":0.68333,"italic":0.13305},"85":{"depth":0.0,"height":0.68333,"italic":0.16389},"86":{"depth":0.0,"height":0.68333,"italic":0.18361},"87":{"depth":0.0,"height":0.68333,"italic":0.18361},"88":{"depth":0.0,"height":0.68333,"italic":0.15806},"89":{"depth":0.0,"height":0.68333,"italic":0.19383},"90":{"depth":0.0,"height":0.68333,"italic":0.14528},"91":{"depth":0.25,"height":0.75,"italic":0.1875},"93":{"depth":0.25,"height":0.75,"italic":0.10528},"94":{"depth":0.0,"height":0.69444,"italic":0.06646},"95":{"depth":0.31,"height":0.12056,"italic":0.09208},"97":{"depth":0.0,"height":0.43056,"italic":0.07671},"98":{"depth":0.0,"height":0.69444,"italic":0.06312},"99":{"depth":0.0,"height":0.43056,"italic":0.05653},"100":{"depth":0.0,"height":0.69444,"italic":0.10333},"101":{"depth":0.0,"height":0.43056,"italic":0.07514},"102":{"depth":0.19444,"height":0.69444,"italic":0.21194},"103":{"depth":0.19444,"height":0.43056,"italic":0.08847},"104":{"depth":0.0,"height":0.69444,"italic":0.07671},"105":{"depth":0.0,"height":0.65536,"italic":0.1019},"106":{"depth":0.19444,"height":0.65536,"italic":0.14467},"107":{"depth":0.0,"height":0.69444,"italic":0.10764},"108":{"depth":0.0,"height":0.69444,"italic":0.10333},"109":{"depth":0.0,"height":0.43056,"italic":0.07671},"110":{"depth":0.0,"height":0.43056,"italic":0.07671},"111":{"depth":0.0,"height":0.43056,"italic":0.06312},"112":{"depth":0.19444,"height":0.43056,"italic":0.06312},"113":{"depth":0.19444,"height":0.43056,"italic":0.08847},"114":{"depth":0.0,"height":0.43056,"italic":0.10764},"115":{"depth":0.0,"height":0.43056,"italic":0.08208},"116":{"depth":0.0,"height":0.61508,"italic":0.09486},"117":{"depth":0.0,"height":0.43056,"italic":0.07671},"118":{"depth":0.0,"height":0.43056,"italic":0.10764},"119":{"depth":0.0,"height":0.43056,"italic":0.10764},"120":{"depth":0.0,"height":0.43056,"italic":0.12042},"121":{"depth":0.19444,"height":0.43056,"italic":0.08847},"122":{"depth":0.0,"height":0.43056,"italic":0.12292},"126":{"depth":0.35,"height":0.31786,"italic":0.11585},"163":{"depth":0.0,"height":0.69444,"italic":0.0},"305":{"depth":0.0,"height":0.43056,"italic":0.07671},"567":{"depth":0.19444,"height":0.43056,"italic":0.03736},"768":{"depth":0.0,"height":0.69444,"italic":0.0},"769":{"depth":0.0,"height":0.69444,"italic":0.09694},"770":{"depth":0.0,"height":0.69444,"italic":0.06646},"771":{"depth":0.0,"height":0.66786,"italic":0.11585},"772":{"depth":0.0,"height":0.56167,"italic":0.10333},"774":{"depth":0.0,"height":0.69444,"italic":0.10806},"775":{"depth":0.0,"height":0.66786,"italic":0.11752},"776":{"depth":0.0,"height":0.66786,"italic":0.10474},"778":{"depth":0.0,"height":0.69444,"italic":0.0},"779":{"depth":0.0,"height":0.69444,"italic":0.1225},"780":{"depth":0.0,"height":0.62847,"italic":0.08295},"915":{"depth":0.0,"height":0.68333,"italic":0.13305},"916":{"depth":0.0,"height":0.68333,"italic":0.0},"920":{"depth":0.0,"height":0.68333,"italic":0.09403},"923":{"depth":0.0,"height":0.68333,"italic":0.0},"926":{"depth":0.0,"height":0.68333,"italic":0.15294},"928":{"depth":0.0,"height":0.68333,"italic":0.16389},"931":{"depth":0.0,"height":0.68333,"italic":0.12028},"933":{"depth":0.0,"height":0.68333,"italic":0.11111},"934":{"depth":0.0,"height":0.68333,"italic":0.05986},"936":{"depth":0.0,"height":0.68333,"italic":0.11111},"937":{"depth":0.0,"height":0.68333,"italic":0.10257},"8211":{"depth":0.0,"height":0.43056,"italic":0.09208},"8212":{"depth":0.0,"height":0.43056,"italic":0.09208},"8216":{"depth":0.0,"height":0.69444,"italic":0.12417},"8217":{"depth":0.0,"height":0.69444,"italic":0.12417},"8220":{"depth":0.0,"height":0.69444,"italic":0.1685},"8221":{"depth":0.0,"height":0.69444,"italic":0.06961},"8463":{"depth":0.0,"height":0.68889,"italic":0.0}},"Main-Regular":{"33":{"depth":0.0,"height":0.69444,"italic":0.0},"34":{"depth":0.0,"height":0.69444,"italic":0.0},"35":{"depth":0.19444,"height":0.69444,"italic":0.0},"36":{"depth":0.05556,"height":0.75,"italic":0.0},"37":{"depth":0.05556,"height":0.75,"italic":0.0},"38":{"depth":0.0,"height":0.69444,"italic":0.0},"39":{"depth":0.0,"height":0.69444,"italic":0.0},"40":{"depth":0.25,"height":0.75,"italic":0.0},"41":{"depth":0.25,"height":0.75,"italic":0.0},"42":{"depth":0.0,"height":0.75,"italic":0.0},"43":{"depth":0.08333,"height":0.58333,"italic":0.0},"44":{"depth":0.19444,"height":0.10556,"italic":0.0},"45":{"depth":0.0,"height":0.43056,"italic":0.0},"46":{"depth":0.0,"height":0.10556,"italic":0.0},"47":{"depth":0.25,"height":0.75,"italic":0.0},"48":{"depth":0.0,"height":0.64444,"italic":0.0},"49":{"depth":0.0,"height":0.64444,"italic":0.0},"50":{"depth":0.0,"height":0.64444,"italic":0.0},"51":{"depth":0.0,"height":0.64444,"italic":0.0},"52":{"depth":0.0,"height":0.64444,"italic":0.0},"53":{"depth":0.0,"height":0.64444,"italic":0.0},"54":{"depth":0.0,"height":0.64444,"italic":0.0},"55":{"depth":0.0,"height":0.64444,"italic":0.0},"56":{"depth":0.0,"height":0.64444,"italic":0.0},"57":{"depth":0.0,"height":0.64444,"italic":0.0},"58":{"depth":0.0,"height":0.43056,"italic":0.0},"59":{"depth":0.19444,"height":0.43056,"italic":0.0},"60":{"depth":0.0391,"height":0.5391,"italic":0.0},"61":{"depth":-0.13313,"height":0.36687,"italic":0.0},"62":{"depth":0.0391,"height":0.5391,"italic":0.0},"63":{"depth":0.0,"height":0.69444,"italic":0.0},"64":{"depth":0.0,"height":0.69444,"italic":0.0},"65":{"depth":0.0,"height":0.68333,"italic":0.0},"66":{"depth":0.0,"height":0.68333,"italic":0.0},"67":{"depth":0.0,"height":0.68333,"italic":0.0},"68":{"depth":0.0,"height":0.68333,"italic":0.0},"69":{"depth":0.0,"height":0.68333,"italic":0.0},"70":{"depth":0.0,"height":0.68333,"italic":0.0},"71":{"depth":0.0,"height":0.68333,"italic":0.0},"72":{"depth":0.0,"height":0.68333,"italic":0.0},"73":{"depth":0.0,"height":0.68333,"italic":0.0},"74":{"depth":0.0,"height":0.68333,"italic":0.0},"75":{"depth":0.0,"height":0.68333,"italic":0.0},"76":{"depth":0.0,"height":0.68333,"italic":0.0},"77":{"depth":0.0,"height":0.68333,"italic":0.0},"78":{"depth":0.0,"height":0.68333,"italic":0.0},"79":{"depth":0.0,"height":0.68333,"italic":0.0},"80":{"depth":0.0,"height":0.68333,"italic":0.0},"81":{"depth":0.19444,"height":0.68333,"italic":0.0},"82":{"depth":0.0,"height":0.68333,"italic":0.0},"83":{"depth":0.0,"height":0.68333,"italic":0.0},"84":{"depth":0.0,"height":0.68333,"italic":0.0},"85":{"depth":0.0,"height":0.68333,"italic":0.0},"86":{"depth":0.0,"height":0.68333,"italic":0.01389},"87":{"depth":0.0,"height":0.68333,"italic":0.01389},"88":{"depth":0.0,"height":0.68333,"italic":0.0},"89":{"depth":0.0,"height":0.68333,"italic":0.025},"90":{"depth":0.0,"height":0.68333,"italic":0.0},"91":{"depth":0.25,"height":0.75,"italic":0.0},"92":{"depth":0.25,"height":0.75,"italic":0.0},"93":{"depth":0.25,"height":0.75,"italic":0.0},"94":{"depth":0.0,"height":0.69444,"italic":0.0},"95":{"depth":0.31,"height":0.12056,"italic":0.02778},"96":{"depth":0.0,"height":0.69444,"italic":0.0},"97":{"depth":0.0,"height":0.43056,"italic":0.0},"98":{"depth":0.0,"height":0.69444,"italic":0.0},"99":{"depth":0.0,"height":0.43056,"italic":0.0},"100":{"depth":0.0,"height":0.69444,"italic":0.0},"101":{"depth":0.0,"height":0.43056,"italic":0.0},"102":{"depth":0.0,"height":0.69444,"italic":0.07778},"103":{"depth":0.19444,"height":0.43056,"italic":0.01389},"104":{"depth":0.0,"height":0.69444,"italic":0.0},"105":{"depth":0.0,"height":0.66786,"italic":0.0},"106":{"depth":0.19444,"height":0.66786,"italic":0.0},"107":{"depth":0.0,"height":0.69444,"italic":0.0},"108":{"depth":0.0,"height":0.69444,"italic":0.0},"109":{"depth":0.0,"height":0.43056,"italic":0.0},"110":{"depth":0.0,"height":0.43056,"italic":0.0},"111":{"depth":0.0,"height":0.43056,"italic":0.0},"112":{"depth":0.19444,"height":0.43056,"italic":0.0},"113":{"depth":0.19444,"height":0.43056,"italic":0.0},"114":{"depth":0.0,"height":0.43056,"italic":0.0},"115":{"depth":0.0,"height":0.43056,"italic":0.0},"116":{"depth":0.0,"height":0.61508,"italic":0.0},"117":{"depth":0.0,"height":0.43056,"italic":0.0},"118":{"depth":0.0,"height":0.43056,"italic":0.01389},"119":{"depth":0.0,"height":0.43056,"italic":0.01389},"120":{"depth":0.0,"height":0.43056,"italic":0.0},"121":{"depth":0.19444,"height":0.43056,"italic":0.01389},"122":{"depth":0.0,"height":0.43056,"italic":0.0},"123":{"depth":0.25,"height":0.75,"italic":0.0},"124":{"depth":0.25,"height":0.75,"italic":0.0},"125":{"depth":0.25,"height":0.75,"italic":0.0},"126":{"depth":0.35,"height":0.31786,"italic":0.0},"168":{"depth":0.0,"height":0.66786,"italic":0.0},"172":{"depth":0.0,"height":0.43056,"italic":0.0},"175":{"depth":0.0,"height":0.56778,"italic":0.0},"176":{"depth":0.0,"height":0.69444,"italic":0.0},"177":{"depth":0.08333,"height":0.58333,"italic":0.0},"180":{"depth":0.0,"height":0.69444,"italic":0.0},"215":{"depth":0.08333,"height":0.58333,"italic":0.0},"247":{"depth":0.08333,"height":0.58333,"italic":0.0},"305":{"depth":0.0,"height":0.43056,"italic":0.0},"567":{"depth":0.19444,"height":0.43056,"italic":0.0},"710":{"depth":0.0,"height":0.69444,"italic":0.0},"711":{"depth":0.0,"height":0.62847,"italic":0.0},"713":{"depth":0.0,"height":0.56778,"italic":0.0},"714":{"depth":0.0,"height":0.69444,"italic":0.0},"715":{"depth":0.0,"height":0.69444,"italic":0.0},"728":{"depth":0.0,"height":0.69444,"italic":0.0},"729":{"depth":0.0,"height":0.66786,"italic":0.0},"730":{"depth":0.0,"height":0.69444,"italic":0.0},"732":{"depth":0.0,"height":0.66786,"italic":0.0},"768":{"depth":0.0,"height":0.69444,"italic":0.0},"769":{"depth":0.0,"height":0.69444,"italic":0.0},"770":{"depth":0.0,"height":0.69444,"italic":0.0},"771":{"depth":0.0,"height":0.66786,"italic":0.0},"772":{"depth":0.0,"height":0.56778,"italic":0.0},"774":{"depth":0.0,"height":0.69444,"italic":0.0},"775":{"depth":0.0,"height":0.66786,"italic":0.0},"776":{"depth":0.0,"height":0.66786,"italic":0.0},"778":{"depth":0.0,"height":0.69444,"italic":0.0},"779":{"depth":0.0,"height":0.69444,"italic":0.0},"780":{"depth":0.0,"height":0.62847,"italic":0.0},"824":{"depth":0.19444,"height":0.69444,"italic":0.0},"915":{"depth":0.0,"height":0.68333,"italic":0.0},"916":{"depth":0.0,"height":0.68333,"italic":0.0},"920":{"depth":0.0,"height":0.68333,"italic":0.0},"923":{"depth":0.0,"height":0.68333,"italic":0.0},"926":{"depth":0.0,"height":0.68333,"italic":0.0},"928":{"depth":0.0,"height":0.68333,"italic":0.0},"931":{"depth":0.0,"height":0.68333,"italic":0.0},"933":{"depth":0.0,"height":0.68333,"italic":0.0},"934":{"depth":0.0,"height":0.68333,"italic":0.0},"936":{"depth":0.0,"height":0.68333,"italic":0.0},"937":{"depth":0.0,"height":0.68333,"italic":0.0},"8211":{"depth":0.0,"height":0.43056,"italic":0.02778},"8212":{"depth":0.0,"height":0.43056,"italic":0.02778},"8216":{"depth":0.0,"height":0.69444,"italic":0.0},"8217":{"depth":0.0,"height":0.69444,"italic":0.0},"8220":{"depth":0.0,"height":0.69444,"italic":0.0},"8221":{"depth":0.0,"height":0.69444,"italic":0.0},"8224":{"depth":0.19444,"height":0.69444,"italic":0.0},"8225":{"depth":0.19444,"height":0.69444,"italic":0.0},"8242":{"depth":0.0,"height":0.55556,"italic":0.0},"8407":{"depth":0.0,"height":0.71444,"italic":0.15382},"8463":{"depth":0.0,"height":0.68889,"italic":0.0},"8465":{"depth":0.0,"height":0.69444,"italic":0.0},"8467":{"depth":0.0,"height":0.69444,"italic":0.0},"8472":{"depth":0.19444,"height":0.43056,"italic":0.0},"8476":{"depth":0.0,"height":0.69444,"italic":0.0},"8501":{"depth":0.0,"height":0.69444,"italic":0.0},"8592":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8593":{"depth":0.19444,"height":0.69444,"italic":0.0},"8594":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8595":{"depth":0.19444,"height":0.69444,"italic":0.0},"8596":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8597":{"depth":0.25,"height":0.75,"italic":0.0},"8598":{"depth":0.19444,"height":0.69444,"italic":0.0},"8599":{"depth":0.19444,"height":0.69444,"italic":0.0},"8600":{"depth":0.19444,"height":0.69444,"italic":0.0},"8601":{"depth":0.19444,"height":0.69444,"italic":0.0},"8636":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8637":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8640":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8641":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8656":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8657":{"depth":0.19444,"height":0.69444,"italic":0.0},"8658":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8659":{"depth":0.19444,"height":0.69444,"italic":0.0},"8660":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8661":{"depth":0.25,"height":0.75,"italic":0.0},"8704":{"depth":0.0,"height":0.69444,"italic":0.0},"8706":{"depth":0.0,"height":0.69444,"italic":0.05556},"8707":{"depth":0.0,"height":0.69444,"italic":0.0},"8709":{"depth":0.05556,"height":0.75,"italic":0.0},"8711":{"depth":0.0,"height":0.68333,"italic":0.0},"8712":{"depth":0.0391,"height":0.5391,"italic":0.0},"8715":{"depth":0.0391,"height":0.5391,"italic":0.0},"8722":{"depth":0.08333,"height":0.58333,"italic":0.0},"8723":{"depth":0.08333,"height":0.58333,"italic":0.0},"8725":{"depth":0.25,"height":0.75,"italic":0.0},"8726":{"depth":0.25,"height":0.75,"italic":0.0},"8727":{"depth":-0.03472,"height":0.46528,"italic":0.0},"8728":{"depth":-0.05555,"height":0.44445,"italic":0.0},"8729":{"depth":-0.05555,"height":0.44445,"italic":0.0},"8730":{"depth":0.2,"height":0.8,"italic":0.0},"8733":{"depth":0.0,"height":0.43056,"italic":0.0},"8734":{"depth":0.0,"height":0.43056,"italic":0.0},"8736":{"depth":0.0,"height":0.69224,"italic":0.0},"8739":{"depth":0.25,"height":0.75,"italic":0.0},"8741":{"depth":0.25,"height":0.75,"italic":0.0},"8743":{"depth":0.0,"height":0.55556,"italic":0.0},"8744":{"depth":0.0,"height":0.55556,"italic":0.0},"8745":{"depth":0.0,"height":0.55556,"italic":0.0},"8746":{"depth":0.0,"height":0.55556,"italic":0.0},"8747":{"depth":0.19444,"height":0.69444,"italic":0.11111},"8764":{"depth":-0.13313,"height":0.36687,"italic":0.0},"8768":{"depth":0.19444,"height":0.69444,"italic":0.0},"8771":{"depth":-0.03625,"height":0.46375,"italic":0.0},"8776":{"depth":-0.01688,"height":0.48312,"italic":0.0},"8781":{"depth":-0.03625,"height":0.46375,"italic":0.0},"8801":{"depth":-0.03625,"height":0.46375,"italic":0.0},"8804":{"depth":0.13597,"height":0.63597,"italic":0.0},"8805":{"depth":0.13597,"height":0.63597,"italic":0.0},"8810":{"depth":0.0391,"height":0.5391,"italic":0.0},"8811":{"depth":0.0391,"height":0.5391,"italic":0.0},"8826":{"depth":0.0391,"height":0.5391,"italic":0.0},"8827":{"depth":0.0391,"height":0.5391,"italic":0.0},"8834":{"depth":0.0391,"height":0.5391,"italic":0.0},"8835":{"depth":0.0391,"height":0.5391,"italic":0.0},"8838":{"depth":0.13597,"height":0.63597,"italic":0.0},"8839":{"depth":0.13597,"height":0.63597,"italic":0.0},"8846":{"depth":0.0,"height":0.55556,"italic":0.0},"8849":{"depth":0.13597,"height":0.63597,"italic":0.0},"8850":{"depth":0.13597,"height":0.63597,"italic":0.0},"8851":{"depth":0.0,"height":0.55556,"italic":0.0},"8852":{"depth":0.0,"height":0.55556,"italic":0.0},"8853":{"depth":0.08333,"height":0.58333,"italic":0.0},"8854":{"depth":0.08333,"height":0.58333,"italic":0.0},"8855":{"depth":0.08333,"height":0.58333,"italic":0.0},"8856":{"depth":0.08333,"height":0.58333,"italic":0.0},"8857":{"depth":0.08333,"height":0.58333,"italic":0.0},"8866":{"depth":0.0,"height":0.69444,"italic":0.0},"8867":{"depth":0.0,"height":0.69444,"italic":0.0},"8868":{"depth":0.0,"height":0.69444,"italic":0.0},"8869":{"depth":0.0,"height":0.69444,"italic":0.0},"8900":{"depth":-0.05555,"height":0.44445,"italic":0.0},"8901":{"depth":-0.05555,"height":0.44445,"italic":0.0},"8902":{"depth":-0.03472,"height":0.46528,"italic":0.0},"8968":{"depth":0.25,"height":0.75,"italic":0.0},"8969":{"depth":0.25,"height":0.75,"italic":0.0},"8970":{"depth":0.25,"height":0.75,"italic":0.0},"8971":{"depth":0.25,"height":0.75,"italic":0.0},"8994":{"depth":-0.14236,"height":0.35764,"italic":0.0},"8995":{"depth":-0.14236,"height":0.35764,"italic":0.0},"9651":{"depth":0.19444,"height":0.69444,"italic":0.0},"9657":{"depth":-0.03472,"height":0.46528,"italic":0.0},"9661":{"depth":0.19444,"height":0.69444,"italic":0.0},"9667":{"depth":-0.03472,"height":0.46528,"italic":0.0},"9711":{"depth":0.19444,"height":0.69444,"italic":0.0},"9824":{"depth":0.12963,"height":0.69444,"italic":0.0},"9825":{"depth":0.12963,"height":0.69444,"italic":0.0},"9826":{"depth":0.12963,"height":0.69444,"italic":0.0},"9827":{"depth":0.12963,"height":0.69444,"italic":0.0},"9837":{"depth":0.0,"height":0.75,"italic":0.0},"9838":{"depth":0.19444,"height":0.69444,"italic":0.0},"9839":{"depth":0.19444,"height":0.69444,"italic":0.0},"10216":{"depth":0.25,"height":0.75,"italic":0.0},"10217":{"depth":0.25,"height":0.75,"italic":0.0},"10815":{"depth":0.0,"height":0.68333,"italic":0.0},"10927":{"depth":0.13597,"height":0.63597,"italic":0.0},"10928":{"depth":0.13597,"height":0.63597,"italic":0.0}},"Math-BoldItalic":{"47":{"depth":0.19444,"height":0.69444,"italic":0.0},"65":{"depth":0.0,"height":0.68611,"italic":0.0},"66":{"depth":0.0,"height":0.68611,"italic":0.04835},"67":{"depth":0.0,"height":0.68611,"italic":0.06979},"68":{"depth":0.0,"height":0.68611,"italic":0.03194},"69":{"depth":0.0,"height":0.68611,"italic":0.05451},"70":{"depth":0.0,"height":0.68611,"italic":0.15972},"71":{"depth":0.0,"height":0.68611,"italic":0.0},"72":{"depth":0.0,"height":0.68611,"italic":0.08229},"73":{"depth":0.0,"height":0.68611,"italic":0.07778},"74":{"depth":0.0,"height":0.68611,"italic":0.10069},"75":{"depth":0.0,"height":0.68611,"italic":0.06979},"76":{"depth":0.0,"height":0.68611,"italic":0.0},"77":{"depth":0.0,"height":0.68611,"italic":0.11424},"78":{"depth":0.0,"height":0.68611,"italic":0.11424},"79":{"depth":0.0,"height":0.68611,"italic":0.03194},"80":{"depth":0.0,"height":0.68611,"italic":0.15972},"81":{"depth":0.19444,"height":0.68611,"italic":0.0},"82":{"depth":0.0,"height":0.68611,"italic":0.00421},"83":{"depth":0.0,"height":0.68611,"italic":0.05382},"84":{"depth":0.0,"height":0.68611,"italic":0.15972},"85":{"depth":0.0,"height":0.68611,"italic":0.11424},"86":{"depth":0.0,"height":0.68611,"italic":0.25555},"87":{"depth":0.0,"height":0.68611,"italic":0.15972},"88":{"depth":0.0,"height":0.68611,"italic":0.07778},"89":{"depth":0.0,"height":0.68611,"italic":0.25555},"90":{"depth":0.0,"height":0.68611,"italic":0.06979},"97":{"depth":0.0,"height":0.44444,"italic":0.0},"98":{"depth":0.0,"height":0.69444,"italic":0.0},"99":{"depth":0.0,"height":0.44444,"italic":0.0},"100":{"depth":0.0,"height":0.69444,"italic":0.0},"101":{"depth":0.0,"height":0.44444,"italic":0.0},"102":{"depth":0.19444,"height":0.69444,"italic":0.11042},"103":{"depth":0.19444,"height":0.44444,"italic":0.03704},"104":{"depth":0.0,"height":0.69444,"italic":0.0},"105":{"depth":0.0,"height":0.69326,"italic":0.0},"106":{"depth":0.19444,"height":0.69326,"italic":0.0622},"107":{"depth":0.0,"height":0.69444,"italic":0.01852},"108":{"depth":0.0,"height":0.69444,"italic":0.0088},"109":{"depth":0.0,"height":0.44444,"italic":0.0},"110":{"depth":0.0,"height":0.44444,"italic":0.0},"111":{"depth":0.0,"height":0.44444,"italic":0.0},"112":{"depth":0.19444,"height":0.44444,"italic":0.0},"113":{"depth":0.19444,"height":0.44444,"italic":0.03704},"114":{"depth":0.0,"height":0.44444,"italic":0.03194},"115":{"depth":0.0,"height":0.44444,"italic":0.0},"116":{"depth":0.0,"height":0.63492,"italic":0.0},"117":{"depth":0.0,"height":0.44444,"italic":0.0},"118":{"depth":0.0,"height":0.44444,"italic":0.03704},"119":{"depth":0.0,"height":0.44444,"italic":0.02778},"120":{"depth":0.0,"height":0.44444,"italic":0.0},"121":{"depth":0.19444,"height":0.44444,"italic":0.03704},"122":{"depth":0.0,"height":0.44444,"italic":0.04213},"915":{"depth":0.0,"height":0.68611,"italic":0.15972},"916":{"depth":0.0,"height":0.68611,"italic":0.0},"920":{"depth":0.0,"height":0.68611,"italic":0.03194},"923":{"depth":0.0,"height":0.68611,"italic":0.0},"926":{"depth":0.0,"height":0.68611,"italic":0.07458},"928":{"depth":0.0,"height":0.68611,"italic":0.08229},"931":{"depth":0.0,"height":0.68611,"italic":0.05451},"933":{"depth":0.0,"height":0.68611,"italic":0.15972},"934":{"depth":0.0,"height":0.68611,"italic":0.0},"936":{"depth":0.0,"height":0.68611,"italic":0.11653},"937":{"depth":0.0,"height":0.68611,"italic":0.04835},"945":{"depth":0.0,"height":0.44444,"italic":0.0},"946":{"depth":0.19444,"height":0.69444,"italic":0.03403},"947":{"depth":0.19444,"height":0.44444,"italic":0.06389},"948":{"depth":0.0,"height":0.69444,"italic":0.03819},"949":{"depth":0.0,"height":0.44444,"italic":0.0},"950":{"depth":0.19444,"height":0.69444,"italic":0.06215},"951":{"depth":0.19444,"height":0.44444,"italic":0.03704},"952":{"depth":0.0,"height":0.69444,"italic":0.03194},"953":{"depth":0.0,"height":0.44444,"italic":0.0},"954":{"depth":0.0,"height":0.44444,"italic":0.0},"955":{"depth":0.0,"height":0.69444,"italic":0.0},"956":{"depth":0.19444,"height":0.44444,"italic":0.0},"957":{"depth":0.0,"height":0.44444,"italic":0.06898},"958":{"depth":0.19444,"height":0.69444,"italic":0.03021},"959":{"depth":0.0,"height":0.44444,"italic":0.0},"960":{"depth":0.0,"height":0.44444,"italic":0.03704},"961":{"depth":0.19444,"height":0.44444,"italic":0.0},"962":{"depth":0.09722,"height":0.44444,"italic":0.07917},"963":{"depth":0.0,"height":0.44444,"italic":0.03704},"964":{"depth":0.0,"height":0.44444,"italic":0.13472},"965":{"depth":0.0,"height":0.44444,"italic":0.03704},"966":{"depth":0.19444,"height":0.44444,"italic":0.0},"967":{"depth":0.19444,"height":0.44444,"italic":0.0},"968":{"depth":0.19444,"height":0.69444,"italic":0.03704},"969":{"depth":0.0,"height":0.44444,"italic":0.03704},"977":{"depth":0.0,"height":0.69444,"italic":0.0},"981":{"depth":0.19444,"height":0.69444,"italic":0.0},"982":{"depth":0.0,"height":0.44444,"italic":0.03194},"1009":{"depth":0.19444,"height":0.44444,"italic":0.0},"1013":{"depth":0.0,"height":0.44444,"italic":0.0}},"Math-Italic":{"47":{"depth":0.19444,"height":0.69444,"italic":0.0},"65":{"depth":0.0,"height":0.68333,"italic":0.0},"66":{"depth":0.0,"height":0.68333,"italic":0.05017},"67":{"depth":0.0,"height":0.68333,"italic":0.07153},"68":{"depth":0.0,"height":0.68333,"italic":0.02778},"69":{"depth":0.0,"height":0.68333,"italic":0.05764},"70":{"depth":0.0,"height":0.68333,"italic":0.13889},"71":{"depth":0.0,"height":0.68333,"italic":0.0},"72":{"depth":0.0,"height":0.68333,"italic":0.08125},"73":{"depth":0.0,"height":0.68333,"italic":0.07847},"74":{"depth":0.0,"height":0.68333,"italic":0.09618},"75":{"depth":0.0,"height":0.68333,"italic":0.07153},"76":{"depth":0.0,"height":0.68333,"italic":0.0},"77":{"depth":0.0,"height":0.68333,"italic":0.10903},"78":{"depth":0.0,"height":0.68333,"italic":0.10903},"79":{"depth":0.0,"height":0.68333,"italic":0.02778},"80":{"depth":0.0,"height":0.68333,"italic":0.13889},"81":{"depth":0.19444,"height":0.68333,"italic":0.0},"82":{"depth":0.0,"height":0.68333,"italic":0.00773},"83":{"depth":0.0,"height":0.68333,"italic":0.05764},"84":{"depth":0.0,"height":0.68333,"italic":0.13889},"85":{"depth":0.0,"height":0.68333,"italic":0.10903},"86":{"depth":0.0,"height":0.68333,"italic":0.22222},"87":{"depth":0.0,"height":0.68333,"italic":0.13889},"88":{"depth":0.0,"height":0.68333,"italic":0.07847},"89":{"depth":0.0,"height":0.68333,"italic":0.22222},"90":{"depth":0.0,"height":0.68333,"italic":0.07153},"97":{"depth":0.0,"height":0.43056,"italic":0.0},"98":{"depth":0.0,"height":0.69444,"italic":0.0},"99":{"depth":0.0,"height":0.43056,"italic":0.0},"100":{"depth":0.0,"height":0.69444,"italic":0.0},"101":{"depth":0.0,"height":0.43056,"italic":0.0},"102":{"depth":0.19444,"height":0.69444,"italic":0.10764},"103":{"depth":0.19444,"height":0.43056,"italic":0.03588},"104":{"depth":0.0,"height":0.69444,"italic":0.0},"105":{"depth":0.0,"height":0.65952,"italic":0.0},"106":{"depth":0.19444,"height":0.65952,"italic":0.05724},"107":{"depth":0.0,"height":0.69444,"italic":0.03148},"108":{"depth":0.0,"height":0.69444,"italic":0.01968},"109":{"depth":0.0,"height":0.43056,"italic":0.0},"110":{"depth":0.0,"height":0.43056,"italic":0.0},"111":{"depth":0.0,"height":0.43056,"italic":0.0},"112":{"depth":0.19444,"height":0.43056,"italic":0.0},"113":{"depth":0.19444,"height":0.43056,"italic":0.03588},"114":{"depth":0.0,"height":0.43056,"italic":0.02778},"115":{"depth":0.0,"height":0.43056,"italic":0.0},"116":{"depth":0.0,"height":0.61508,"italic":0.0},"117":{"depth":0.0,"height":0.43056,"italic":0.0},"118":{"depth":0.0,"height":0.43056,"italic":0.03588},"119":{"depth":0.0,"height":0.43056,"italic":0.02691},"120":{"depth":0.0,"height":0.43056,"italic":0.0},"121":{"depth":0.19444,"height":0.43056,"italic":0.03588},"122":{"depth":0.0,"height":0.43056,"italic":0.04398},"915":{"depth":0.0,"height":0.68333,"italic":0.13889},"916":{"depth":0.0,"height":0.68333,"italic":0.0},"920":{"depth":0.0,"height":0.68333,"italic":0.02778},"923":{"depth":0.0,"height":0.68333,"italic":0.0},"926":{"depth":0.0,"height":0.68333,"italic":0.07569},"928":{"depth":0.0,"height":0.68333,"italic":0.08125},"931":{"depth":0.0,"height":0.68333,"italic":0.05764},"933":{"depth":0.0,"height":0.68333,"italic":0.13889},"934":{"depth":0.0,"height":0.68333,"italic":0.0},"936":{"depth":0.0,"height":0.68333,"italic":0.11},"937":{"depth":0.0,"height":0.68333,"italic":0.05017},"945":{"depth":0.0,"height":0.43056,"italic":0.0037},"946":{"depth":0.19444,"height":0.69444,"italic":0.05278},"947":{"depth":0.19444,"height":0.43056,"italic":0.05556},"948":{"depth":0.0,"height":0.69444,"italic":0.03785},"949":{"depth":0.0,"height":0.43056,"italic":0.0},"950":{"depth":0.19444,"height":0.69444,"italic":0.07378},"951":{"depth":0.19444,"height":0.43056,"italic":0.03588},"952":{"depth":0.0,"height":0.69444,"italic":0.02778},"953":{"depth":0.0,"height":0.43056,"italic":0.0},"954":{"depth":0.0,"height":0.43056,"italic":0.0},"955":{"depth":0.0,"height":0.69444,"italic":0.0},"956":{"depth":0.19444,"height":0.43056,"italic":0.0},"957":{"depth":0.0,"height":0.43056,"italic":0.06366},"958":{"depth":0.19444,"height":0.69444,"italic":0.04601},"959":{"depth":0.0,"height":0.43056,"italic":0.0},"960":{"depth":0.0,"height":0.43056,"italic":0.03588},"961":{"depth":0.19444,"height":0.43056,"italic":0.0},"962":{"depth":0.09722,"height":0.43056,"italic":0.07986},"963":{"depth":0.0,"height":0.43056,"italic":0.03588},"964":{"depth":0.0,"height":0.43056,"italic":0.1132},"965":{"depth":0.0,"height":0.43056,"italic":0.03588},"966":{"depth":0.19444,"height":0.43056,"italic":0.0},"967":{"depth":0.19444,"height":0.43056,"italic":0.0},"968":{"depth":0.19444,"height":0.69444,"italic":0.03588},"969":{"depth":0.0,"height":0.43056,"italic":0.03588},"977":{"depth":0.0,"height":0.69444,"italic":0.0},"981":{"depth":0.19444,"height":0.69444,"italic":0.0},"982":{"depth":0.0,"height":0.43056,"italic":0.02778},"1009":{"depth":0.19444,"height":0.43056,"italic":0.0},"1013":{"depth":0.0,"height":0.43056,"italic":0.0}},"Math-Regular":{"65":{"depth":0.0,"height":0.68333,"italic":0.0},"66":{"depth":0.0,"height":0.68333,"italic":0.05017},"67":{"depth":0.0,"height":0.68333,"italic":0.07153},"68":{"depth":0.0,"height":0.68333,"italic":0.02778},"69":{"depth":0.0,"height":0.68333,"italic":0.05764},"70":{"depth":0.0,"height":0.68333,"italic":0.13889},"71":{"depth":0.0,"height":0.68333,"italic":0.0},"72":{"depth":0.0,"height":0.68333,"italic":0.08125},"73":{"depth":0.0,"height":0.68333,"italic":0.07847},"74":{"depth":0.0,"height":0.68333,"italic":0.09618},"75":{"depth":0.0,"height":0.68333,"italic":0.07153},"76":{"depth":0.0,"height":0.68333,"italic":0.0},"77":{"depth":0.0,"height":0.68333,"italic":0.10903},"78":{"depth":0.0,"height":0.68333,"italic":0.10903},"79":{"depth":0.0,"height":0.68333,"italic":0.02778},"80":{"depth":0.0,"height":0.68333,"italic":0.13889},"81":{"depth":0.19444,"height":0.68333,"italic":0.0},"82":{"depth":0.0,"height":0.68333,"italic":0.00773},"83":{"depth":0.0,"height":0.68333,"italic":0.05764},"84":{"depth":0.0,"height":0.68333,"italic":0.13889},"85":{"depth":0.0,"height":0.68333,"italic":0.10903},"86":{"depth":0.0,"height":0.68333,"italic":0.22222},"87":{"depth":0.0,"height":0.68333,"italic":0.13889},"88":{"depth":0.0,"height":0.68333,"italic":0.07847},"89":{"depth":0.0,"height":0.68333,"italic":0.22222},"90":{"depth":0.0,"height":0.68333,"italic":0.07153},"97":{"depth":0.0,"height":0.43056,"italic":0.0},"98":{"depth":0.0,"height":0.69444,"italic":0.0},"99":{"depth":0.0,"height":0.43056,"italic":0.0},"100":{"depth":0.0,"height":0.69444,"italic":0.0},"101":{"depth":0.0,"height":0.43056,"italic":0.0},"102":{"depth":0.19444,"height":0.69444,"italic":0.10764},"103":{"depth":0.19444,"height":0.43056,"italic":0.03588},"104":{"depth":0.0,"height":0.69444,"italic":0.0},"105":{"depth":0.0,"height":0.65952,"italic":0.0},"106":{"depth":0.19444,"height":0.65952,"italic":0.05724},"107":{"depth":0.0,"height":0.69444,"italic":0.03148},"108":{"depth":0.0,"height":0.69444,"italic":0.01968},"109":{"depth":0.0,"height":0.43056,"italic":0.0},"110":{"depth":0.0,"height":0.43056,"italic":0.0},"111":{"depth":0.0,"height":0.43056,"italic":0.0},"112":{"depth":0.19444,"height":0.43056,"italic":0.0},"113":{"depth":0.19444,"height":0.43056,"italic":0.03588},"114":{"depth":0.0,"height":0.43056,"italic":0.02778},"115":{"depth":0.0,"height":0.43056,"italic":0.0},"116":{"depth":0.0,"height":0.61508,"italic":0.0},"117":{"depth":0.0,"height":0.43056,"italic":0.0},"118":{"depth":0.0,"height":0.43056,"italic":0.03588},"119":{"depth":0.0,"height":0.43056,"italic":0.02691},"120":{"depth":0.0,"height":0.43056,"italic":0.0},"121":{"depth":0.19444,"height":0.43056,"italic":0.03588},"122":{"depth":0.0,"height":0.43056,"italic":0.04398},"915":{"depth":0.0,"height":0.68333,"italic":0.13889},"916":{"depth":0.0,"height":0.68333,"italic":0.0},"920":{"depth":0.0,"height":0.68333,"italic":0.02778},"923":{"depth":0.0,"height":0.68333,"italic":0.0},"926":{"depth":0.0,"height":0.68333,"italic":0.07569},"928":{"depth":0.0,"height":0.68333,"italic":0.08125},"931":{"depth":0.0,"height":0.68333,"italic":0.05764},"933":{"depth":0.0,"height":0.68333,"italic":0.13889},"934":{"depth":0.0,"height":0.68333,"italic":0.0},"936":{"depth":0.0,"height":0.68333,"italic":0.11},"937":{"depth":0.0,"height":0.68333,"italic":0.05017},"945":{"depth":0.0,"height":0.43056,"italic":0.0037},"946":{"depth":0.19444,"height":0.69444,"italic":0.05278},"947":{"depth":0.19444,"height":0.43056,"italic":0.05556},"948":{"depth":0.0,"height":0.69444,"italic":0.03785},"949":{"depth":0.0,"height":0.43056,"italic":0.0},"950":{"depth":0.19444,"height":0.69444,"italic":0.07378},"951":{"depth":0.19444,"height":0.43056,"italic":0.03588},"952":{"depth":0.0,"height":0.69444,"italic":0.02778},"953":{"depth":0.0,"height":0.43056,"italic":0.0},"954":{"depth":0.0,"height":0.43056,"italic":0.0},"955":{"depth":0.0,"height":0.69444,"italic":0.0},"956":{"depth":0.19444,"height":0.43056,"italic":0.0},"957":{"depth":0.0,"height":0.43056,"italic":0.06366},"958":{"depth":0.19444,"height":0.69444,"italic":0.04601},"959":{"depth":0.0,"height":0.43056,"italic":0.0},"960":{"depth":0.0,"height":0.43056,"italic":0.03588},"961":{"depth":0.19444,"height":0.43056,"italic":0.0},"962":{"depth":0.09722,"height":0.43056,"italic":0.07986},"963":{"depth":0.0,"height":0.43056,"italic":0.03588},"964":{"depth":0.0,"height":0.43056,"italic":0.1132},"965":{"depth":0.0,"height":0.43056,"italic":0.03588},"966":{"depth":0.19444,"height":0.43056,"italic":0.0},"967":{"depth":0.19444,"height":0.43056,"italic":0.0},"968":{"depth":0.19444,"height":0.69444,"italic":0.03588},"969":{"depth":0.0,"height":0.43056,"italic":0.03588},"977":{"depth":0.0,"height":0.69444,"italic":0.0},"981":{"depth":0.19444,"height":0.69444,"italic":0.0},"982":{"depth":0.0,"height":0.43056,"italic":0.02778},"1009":{"depth":0.19444,"height":0.43056,"italic":0.0},"1013":{"depth":0.0,"height":0.43056,"italic":0.0}},"Size1-Regular":{"40":{"depth":0.35001,"height":0.85,"italic":0.0},"41":{"depth":0.35001,"height":0.85,"italic":0.0},"47":{"depth":0.35001,"height":0.85,"italic":0.0},"91":{"depth":0.35001,"height":0.85,"italic":0.0},"92":{"depth":0.35001,"height":0.85,"italic":0.0},"93":{"depth":0.35001,"height":0.85,"italic":0.0},"123":{"depth":0.35001,"height":0.85,"italic":0.0},"125":{"depth":0.35001,"height":0.85,"italic":0.0},"710":{"depth":0.0,"height":0.72222,"italic":0.0},"732":{"depth":0.0,"height":0.72222,"italic":0.0},"770":{"depth":0.0,"height":0.72222,"italic":0.0},"771":{"depth":0.0,"height":0.72222,"italic":0.0},"8214":{"depth":-0.00099,"height":0.601,"italic":0.0},"8593":{"depth":1e-05,"height":0.6,"italic":0.0},"8595":{"depth":1e-05,"height":0.6,"italic":0.0},"8657":{"depth":1e-05,"height":0.6,"italic":0.0},"8659":{"depth":1e-05,"height":0.6,"italic":0.0},"8719":{"depth":0.25001,"height":0.75,"italic":0.0},"8720":{"depth":0.25001,"height":0.75,"italic":0.0},"8721":{"depth":0.25001,"height":0.75,"italic":0.0},"8730":{"depth":0.35001,"height":0.85,"italic":0.0},"8739":{"depth":-0.00599,"height":0.606,"italic":0.0},"8741":{"depth":-0.00599,"height":0.606,"italic":0.0},"8747":{"depth":0.30612,"height":0.805,"italic":0.19445},"8750":{"depth":0.30612,"height":0.805,"italic":0.19445},"8896":{"depth":0.25001,"height":0.75,"italic":0.0},"8897":{"depth":0.25001,"height":0.75,"italic":0.0},"8898":{"depth":0.25001,"height":0.75,"italic":0.0},"8899":{"depth":0.25001,"height":0.75,"italic":0.0},"8968":{"depth":0.35001,"height":0.85,"italic":0.0},"8969":{"depth":0.35001,"height":0.85,"italic":0.0},"8970":{"depth":0.35001,"height":0.85,"italic":0.0},"8971":{"depth":0.35001,"height":0.85,"italic":0.0},"9168":{"depth":-0.00099,"height":0.601,"italic":0.0},"10216":{"depth":0.35001,"height":0.85,"italic":0.0},"10217":{"depth":0.35001,"height":0.85,"italic":0.0},"10752":{"depth":0.25001,"height":0.75,"italic":0.0},"10753":{"depth":0.25001,"height":0.75,"italic":0.0},"10754":{"depth":0.25001,"height":0.75,"italic":0.0},"10756":{"depth":0.25001,"height":0.75,"italic":0.0},"10758":{"depth":0.25001,"height":0.75,"italic":0.0}},"Size2-Regular":{"40":{"depth":0.65002,"height":1.15,"italic":0.0},"41":{"depth":0.65002,"height":1.15,"italic":0.0},"47":{"depth":0.65002,"height":1.15,"italic":0.0},"91":{"depth":0.65002,"height":1.15,"italic":0.0},"92":{"depth":0.65002,"height":1.15,"italic":0.0},"93":{"depth":0.65002,"height":1.15,"italic":0.0},"123":{"depth":0.65002,"height":1.15,"italic":0.0},"125":{"depth":0.65002,"height":1.15,"italic":0.0},"710":{"depth":0.0,"height":0.75,"italic":0.0},"732":{"depth":0.0,"height":0.75,"italic":0.0},"770":{"depth":0.0,"height":0.75,"italic":0.0},"771":{"depth":0.0,"height":0.75,"italic":0.0},"8719":{"depth":0.55001,"height":1.05,"italic":0.0},"8720":{"depth":0.55001,"height":1.05,"italic":0.0},"8721":{"depth":0.55001,"height":1.05,"italic":0.0},"8730":{"depth":0.65002,"height":1.15,"italic":0.0},"8747":{"depth":0.86225,"height":1.36,"italic":0.44445},"8750":{"depth":0.86225,"height":1.36,"italic":0.44445},"8896":{"depth":0.55001,"height":1.05,"italic":0.0},"8897":{"depth":0.55001,"height":1.05,"italic":0.0},"8898":{"depth":0.55001,"height":1.05,"italic":0.0},"8899":{"depth":0.55001,"height":1.05,"italic":0.0},"8968":{"depth":0.65002,"height":1.15,"italic":0.0},"8969":{"depth":0.65002,"height":1.15,"italic":0.0},"8970":{"depth":0.65002,"height":1.15,"italic":0.0},"8971":{"depth":0.65002,"height":1.15,"italic":0.0},"10216":{"depth":0.65002,"height":1.15,"italic":0.0},"10217":{"depth":0.65002,"height":1.15,"italic":0.0},"10752":{"depth":0.55001,"height":1.05,"italic":0.0},"10753":{"depth":0.55001,"height":1.05,"italic":0.0},"10754":{"depth":0.55001,"height":1.05,"italic":0.0},"10756":{"depth":0.55001,"height":1.05,"italic":0.0},"10758":{"depth":0.55001,"height":1.05,"italic":0.0}},"Size3-Regular":{"40":{"depth":0.95003,"height":1.45,"italic":0.0},"41":{"depth":0.95003,"height":1.45,"italic":0.0},"47":{"depth":0.95003,"height":1.45,"italic":0.0},"91":{"depth":0.95003,"height":1.45,"italic":0.0},"92":{"depth":0.95003,"height":1.45,"italic":0.0},"93":{"depth":0.95003,"height":1.45,"italic":0.0},"123":{"depth":0.95003,"height":1.45,"italic":0.0},"125":{"depth":0.95003,"height":1.45,"italic":0.0},"710":{"depth":0.0,"height":0.75,"italic":0.0},"732":{"depth":0.0,"height":0.75,"italic":0.0},"770":{"depth":0.0,"height":0.75,"italic":0.0},"771":{"depth":0.0,"height":0.75,"italic":0.0},"8730":{"depth":0.95003,"height":1.45,"italic":0.0},"8968":{"depth":0.95003,"height":1.45,"italic":0.0},"8969":{"depth":0.95003,"height":1.45,"italic":0.0},"8970":{"depth":0.95003,"height":1.45,"italic":0.0},"8971":{"depth":0.95003,"height":1.45,"italic":0.0},"10216":{"depth":0.95003,"height":1.45,"italic":0.0},"10217":{"depth":0.95003,"height":1.45,"italic":0.0}},"Size4-Regular":{"40":{"depth":1.25003,"height":1.75,"italic":0.0},"41":{"depth":1.25003,"height":1.75,"italic":0.0},"47":{"depth":1.25003,"height":1.75,"italic":0.0},"91":{"depth":1.25003,"height":1.75,"italic":0.0},"92":{"depth":1.25003,"height":1.75,"italic":0.0},"93":{"depth":1.25003,"height":1.75,"italic":0.0},"123":{"depth":1.25003,"height":1.75,"italic":0.0},"125":{"depth":1.25003,"height":1.75,"italic":0.0},"710":{"depth":0.0,"height":0.825,"italic":0.0},"732":{"depth":0.0,"height":0.825,"italic":0.0},"770":{"depth":0.0,"height":0.825,"italic":0.0},"771":{"depth":0.0,"height":0.825,"italic":0.0},"8730":{"depth":1.25003,"height":1.75,"italic":0.0},"8968":{"depth":1.25003,"height":1.75,"italic":0.0},"8969":{"depth":1.25003,"height":1.75,"italic":0.0},"8970":{"depth":1.25003,"height":1.75,"italic":0.0},"8971":{"depth":1.25003,"height":1.75,"italic":0.0},"9115":{"depth":0.64502,"height":1.155,"italic":0.0},"9116":{"depth":1e-05,"height":0.6,"italic":0.0},"9117":{"depth":0.64502,"height":1.155,"italic":0.0},"9118":{"depth":0.64502,"height":1.155,"italic":0.0},"9119":{"depth":1e-05,"height":0.6,"italic":0.0},"9120":{"depth":0.64502,"height":1.155,"italic":0.0},"9121":{"depth":0.64502,"height":1.155,"italic":0.0},"9122":{"depth":-0.00099,"height":0.601,"italic":0.0},"9123":{"depth":0.64502,"height":1.155,"italic":0.0},"9124":{"depth":0.64502,"height":1.155,"italic":0.0},"9125":{"depth":-0.00099,"height":0.601,"italic":0.0},"9126":{"depth":0.64502,"height":1.155,"italic":0.0},"9127":{"depth":1e-05,"height":0.9,"italic":0.0},"9128":{"depth":0.65002,"height":1.15,"italic":0.0},"9129":{"depth":0.90001,"height":0.0,"italic":0.0},"9130":{"depth":0.0,"height":0.3,"italic":0.0},"9131":{"depth":1e-05,"height":0.9,"italic":0.0},"9132":{"depth":0.65002,"height":1.15,"italic":0.0},"9133":{"depth":0.90001,"height":0.0,"italic":0.0},"9143":{"depth":0.88502,"height":0.915,"italic":0.0},"10216":{"depth":1.25003,"height":1.75,"italic":0.0},"10217":{"depth":1.25003,"height":1.75,"italic":0.0},"57344":{"depth":-0.00499,"height":0.605,"italic":0.0},"57345":{"depth":-0.00499,"height":0.605,"italic":0.0},"57680":{"depth":0.0,"height":0.12,"italic":0.0},"57681":{"depth":0.0,"height":0.12,"italic":0.0},"57682":{"depth":0.0,"height":0.12,"italic":0.0},"57683":{"depth":0.0,"height":0.12,"italic":0.0}}}; + +var getCharacterMetrics = function(character, style) { + return metricMap[style][character.charCodeAt(0)]; +}; + +module.exports = { + metrics: metrics, + getCharacterMetrics: getCharacterMetrics +}; + +},{}],11:[function(require,module,exports){ +var utils = require("./utils"); +var ParseError = require("./ParseError"); + +// This file contains a list of functions that we parse. The functions map +// contains the following data: + +/* + * Keys are the name of the functions to parse + * The data contains the following keys: + * - numArgs: The number of arguments the function takes. + * - argTypes: (optional) An array corresponding to each argument of the + * function, giving the type of argument that should be parsed. + * 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) + * - handler: The function that is called to handle this function and its + * arguments. The arguments are: + * - func: the text of the function + * - [args]: the next arguments are the arguments to the function, + * of which there are numArgs of them + * - positions: the positions in the overall string of the function + * and the arguments. 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 + * buildTree 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 buildTree as `group.value`. + */ + +var functions = { + // A normal square root + "\\sqrt": { + numArgs: 1, + handler: function(func, body) { + return { + type: "sqrt", + body: body + }; + } + }, + + // Some non-mathy text + "\\text": { + numArgs: 1, + argTypes: ["text"], + greediness: 2, + handler: function(func, body) { + // Since the corresponding buildTree 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]; + } + + return { + type: "text", + body: inner + }; + } + }, + + // A two-argument custom color + "\\color": { + numArgs: 2, + allowedInText: true, + argTypes: ["color", "original"], + handler: function(func, color, body) { + // 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 + }; + } + }, + + // An overline + "\\overline": { + numArgs: 1, + handler: function(func, body) { + return { + type: "overline", + body: body + }; + } + }, + + // A box of the width and height + "\\rule": { + numArgs: 2, + argTypes: ["size", "size"], + handler: function(func, width, height) { + return { + type: "rule", + width: width.value, + height: height.value + }; + } + }, + + // A KaTeX logo + "\\KaTeX": { + numArgs: 0, + handler: function(func) { + return { + type: "katex" + }; + } + } +}; + +// 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", + "/", "\\backslash", + "|", "\\vert", "\\|", "\\Vert", + "\\uparrow", "\\Uparrow", + "\\downarrow", "\\Downarrow", + "\\updownarrow", "\\Updownarrow", + "." +]; + +/* + * This is a list of functions which each have the same function but have + * different names so that we don't have to duplicate the data a bunch of times. + * Each element in the list is an object with the following keys: + * - funcs: A list of function names to be associated with the data + * - data: An objecty with the same data as in each value of the `function` + * table above + */ +var duplicatedFunctions = [ + // Single-argument color functions + { + funcs: [ + "\\blue", "\\orange", "\\pink", "\\red", + "\\green", "\\gray", "\\purple" + ], + data: { + numArgs: 1, + allowedInText: true, + handler: function(func, body) { + var atoms; + if (body.type === "ordgroup") { + atoms = body.value; + } else { + atoms = [body]; + } + + return { + type: "color", + color: "katex-" + func.slice(1), + value: atoms + }; + } + } + }, + + // No-argument mathy operators + { + funcs: [ + "\\arcsin", "\\arccos", "\\arctan", "\\arg", "\\cos", "\\cosh", + "\\cot", "\\coth", "\\csc", "\\deg", "\\dim", "\\exp", "\\hom", + "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", + "\\tan","\\tanh" + ], + data: { + numArgs: 0, + handler: function(func) { + return { + type: "namedfn", + body: func + }; + } + } + }, + + // Fractions + { + funcs: ["\\dfrac", "\\frac", "\\tfrac"], + data: { + numArgs: 2, + greediness: 2, + handler: function(func, numer, denom) { + return { + type: "frac", + numer: numer, + denom: denom, + size: func.slice(1) + }; + } + } + }, + + // Left and right overlap functions + { + funcs: ["\\llap", "\\rlap"], + data: { + numArgs: 1, + allowedInText: true, + handler: function(func, body) { + return { + type: func.slice(1), + body: body + }; + } + } + }, + + // Delimiter functions + { + funcs: [ + "\\bigl", "\\Bigl", "\\biggl", "\\Biggl", + "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", + "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", + "\\big", "\\Big", "\\bigg", "\\Bigg", + "\\left", "\\right" + ], + data: { + numArgs: 1, + handler: function(func, delim, positions) { + if (!utils.contains(delimiters, delim.value)) { + throw new ParseError( + "Invalid delimiter: '" + delim.value + "' after '" + + func + "'", + this.lexer, positions[1]); + } + + // left and right are caught somewhere in Parser.js, which is + // why this data doesn't match what is in buildTree + if (func === "\\left" || func === "\\right") { + return { + type: "leftright", + value: delim.value + }; + } else { + return { + type: "delimsizing", + size: delimiterSizes[func].size, + delimType: delimiterSizes[func].type, + value: delim.value + }; + } + } + } + }, + + // Sizing functions + { + funcs: [ + "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", + "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge" + ], + data: { + numArgs: 0 + } + } +]; + +var addFuncsWithData = function(funcs, data) { + for (var i = 0; i < funcs.length; i++) { + functions[funcs[i]] = data; + } +}; + +// Add all of the functions in duplicatedFunctions to the functions map +for (var i = 0; i < duplicatedFunctions.length; i++) { + addFuncsWithData(duplicatedFunctions[i].funcs, duplicatedFunctions[i].data); +} + +// Returns the greediness of a given function. Since greediness is optional, we +// use this function to put in the default value if it is undefined. +var getGreediness = function(func) { + if (functions[func].greediness === undefined) { + return 1; + } else { + return functions[func].greediness; + } +}; + +module.exports = { + funcs: functions, + getGreediness: getGreediness +}; + +},{"./ParseError":3,"./utils":15}],12:[function(require,module,exports){ +var ParseError = require("./ParseError"); + +var buildTree = require("./buildTree"); +var parseTree = require("./parseTree"); +var utils = require("./utils"); + +var process = function(toParse, baseNode) { + utils.clearNode(baseNode); + + var tree = parseTree(toParse); + var node = buildTree(tree); + + baseNode.appendChild(node); +}; + +module.exports = { + process: process, + ParseError: ParseError +}; + +},{"./ParseError":3,"./buildTree":7,"./parseTree":13,"./utils":15}],13:[function(require,module,exports){ +var Parser = require("./Parser"); + +// Parses the expression using the parser +var parseTree = function(toParse) { + var parser = new Parser(toParse); + + return parser.parse(); +} + +module.exports = parseTree; + +},{"./Parser":4}],14:[function(require,module,exports){ +/* 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" or "mathord" or + * - replace (optiona): 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) + * There outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text") + */ + +var symbols = { + "math": { + "`": { + font: "main", + group: "textord", + replace: "\u2018" + }, + "\\$": { + font: "main", + group: "textord", + replace: "$" + }, + "\\%": { + font: "main", + group: "textord", + replace: "%" + }, + "\\_": { + font: "main", + group: "textord", + replace: "_" + }, + "\\angle": { + font: "main", + group: "textord", + replace: "\u2220" + }, + "\\infty": { + font: "main", + group: "textord", + replace: "\u221e" + }, + "\\prime": { + font: "main", + group: "textord", + replace: "\u2032" + }, + "\\triangle": { + font: "main", + group: "textord", + replace: "\u25b3" + }, + "\\Gamma": { + font: "main", + group: "textord", + replace: "\u0393" + }, + "\\Delta": { + font: "main", + group: "textord", + replace: "\u0394" + }, + "\\Theta": { + font: "main", + group: "textord", + replace: "\u0398" + }, + "\\Lambda": { + font: "main", + group: "textord", + replace: "\u039b" + }, + "\\Xi": { + font: "main", + group: "textord", + replace: "\u039e" + }, + "\\Pi": { + font: "main", + group: "textord", + replace: "\u03a0" + }, + "\\Sigma": { + font: "main", + group: "textord", + replace: "\u03a3" + }, + "\\Upsilon": { + font: "main", + group: "textord", + replace: "\u03a5" + }, + "\\Phi": { + font: "main", + group: "textord", + replace: "\u03a6" + }, + "\\Psi": { + font: "main", + group: "textord", + replace: "\u03a8" + }, + "\\Omega": { + font: "main", + group: "textord", + replace: "\u03a9" + }, + "\\alpha": { + font: "main", + group: "mathord", + replace: "\u03b1" + }, + "\\beta": { + font: "main", + group: "mathord", + replace: "\u03b2" + }, + "\\gamma": { + font: "main", + group: "mathord", + replace: "\u03b3" + }, + "\\delta": { + font: "main", + group: "mathord", + replace: "\u03b4" + }, + "\\epsilon": { + font: "main", + group: "mathord", + replace: "\u03f5" + }, + "\\zeta": { + font: "main", + group: "mathord", + replace: "\u03b6" + }, + "\\eta": { + font: "main", + group: "mathord", + replace: "\u03b7" + }, + "\\theta": { + font: "main", + group: "mathord", + replace: "\u03b8" + }, + "\\iota": { + font: "main", + group: "mathord", + replace: "\u03b9" + }, + "\\kappa": { + font: "main", + group: "mathord", + replace: "\u03ba" + }, + "\\lambda": { + font: "main", + group: "mathord", + replace: "\u03bb" + }, + "\\mu": { + font: "main", + group: "mathord", + replace: "\u03bc" + }, + "\\nu": { + font: "main", + group: "mathord", + replace: "\u03bd" + }, + "\\xi": { + font: "main", + group: "mathord", + replace: "\u03be" + }, + "\\omicron": { + font: "main", + group: "mathord", + replace: "o" + }, + "\\pi": { + font: "main", + group: "mathord", + replace: "\u03c0" + }, + "\\rho": { + font: "main", + group: "mathord", + replace: "\u03c1" + }, + "\\sigma": { + font: "main", + group: "mathord", + replace: "\u03c3" + }, + "\\tau": { + font: "main", + group: "mathord", + replace: "\u03c4" + }, + "\\upsilon": { + font: "main", + group: "mathord", + replace: "\u03c5" + }, + "\\phi": { + font: "main", + group: "mathord", + replace: "\u03d5" + }, + "\\chi": { + font: "main", + group: "mathord", + replace: "\u03c7" + }, + "\\psi": { + font: "main", + group: "mathord", + replace: "\u03c8" + }, + "\\omega": { + font: "main", + group: "mathord", + replace: "\u03c9" + }, + "\\varepsilon": { + font: "main", + group: "mathord", + replace: "\u03b5" + }, + "\\vartheta": { + font: "main", + group: "mathord", + replace: "\u03d1" + }, + "\\varpi": { + font: "main", + group: "mathord", + replace: "\u03d6" + }, + "\\varrho": { + font: "main", + group: "mathord", + replace: "\u03f1" + }, + "\\varsigma": { + font: "main", + group: "mathord", + replace: "\u03c2" + }, + "\\varphi": { + font: "main", + group: "mathord", + replace: "\u03c6" + }, + "*": { + font: "main", + group: "bin", + replace: "\u2217" + }, + "+": { + font: "main", + group: "bin" + }, + "-": { + font: "main", + group: "bin", + replace: "\u2212" + }, + "\\cdot": { + font: "main", + group: "bin", + replace: "\u22c5" + }, + "\\circ": { + font: "main", + group: "bin", + replace: "\u2218" + }, + "\\div": { + font: "main", + group: "bin", + replace: "\u00f7" + }, + "\\pm": { + font: "main", + group: "bin", + replace: "\u00b1" + }, + "\\times": { + font: "main", + group: "bin", + replace: "\u00d7" + }, + "\\surd": { + font: "main", + group: "textord", + replace: "\u221a" + }, + "(": { + font: "main", + group: "open" + }, + "[": { + font: "main", + group: "open" + }, + "\\langle": { + font: "main", + group: "open", + replace: "\u27e8" + }, + "\\lvert": { + font: "main", + group: "open", + replace: "\u2223" + }, + ")": { + font: "main", + group: "close" + }, + "]": { + font: "main", + group: "close" + }, + "?": { + font: "main", + group: "close" + }, + "!": { + font: "main", + group: "close" + }, + "\\rangle": { + font: "main", + group: "close", + replace: "\u27e9" + }, + "\\rvert": { + font: "main", + group: "close", + replace: "\u2223" + }, + "=": { + font: "main", + group: "rel" + }, + "<": { + font: "main", + group: "rel" + }, + ">": { + font: "main", + group: "rel" + }, + ":": { + font: "main", + group: "rel" + }, + "\\approx": { + font: "main", + group: "rel", + replace: "\u2248" + }, + "\\cong": { + font: "main", + group: "rel", + replace: "\u2245" + }, + "\\ge": { + font: "main", + group: "rel", + replace: "\u2265" + }, + "\\geq": { + font: "main", + group: "rel", + replace: "\u2265" + }, + "\\gets": { + font: "main", + group: "rel", + replace: "\u2190" + }, + "\\in": { + font: "main", + group: "rel", + replace: "\u2208" + }, + "\\leftarrow": { + font: "main", + group: "rel", + replace: "\u2190" + }, + "\\le": { + font: "main", + group: "rel", + replace: "\u2264" + }, + "\\leq": { + font: "main", + group: "rel", + replace: "\u2264" + }, + "\\ne": { + font: "main", + group: "rel", + replace: "\u2260" + }, + "\\neq": { + font: "main", + group: "rel", + replace: "\u2260" + }, + "\\rightarrow": { + font: "main", + group: "rel", + replace: "\u2192" + }, + "\\to": { + font: "main", + group: "rel", + replace: "\u2192" + }, + "\\ngeq": { + font: "ams", + group: "rel", + replace: "\u2271" + }, + "\\nleq": { + font: "ams", + group: "rel", + replace: "\u2270" + }, + "\\!": { + font: "main", + group: "spacing" + }, + "\\ ": { + font: "main", + group: "spacing", + replace: "\u00a0" + }, + "~": { + font: "main", + group: "spacing", + replace: "\u00a0" + }, + "\\,": { + font: "main", + group: "spacing" + }, + "\\:": { + font: "main", + group: "spacing" + }, + "\\;": { + font: "main", + group: "spacing" + }, + "\\enspace": { + font: "main", + group: "spacing" + }, + "\\qquad": { + font: "main", + group: "spacing" + }, + "\\quad": { + font: "main", + group: "spacing" + }, + "\\space": { + font: "main", + group: "spacing", + replace: "\u00a0" + }, + ",": { + font: "main", + group: "punct" + }, + ";": { + font: "main", + group: "punct" + }, + "\\colon": { + font: "main", + group: "punct", + replace: ":" + }, + "\\barwedge": { + font: "ams", + group: "textord", + replace: "\u22bc" + }, + "\\veebar": { + font: "ams", + group: "textord", + replace: "\u22bb" + }, + "\\odot": { + font: "main", + group: "textord", + replace: "\u2299" + }, + "\\oplus": { + font: "main", + group: "textord", + replace: "\u2295" + }, + "\\otimes": { + font: "main", + group: "textord", + replace: "\u2297" + }, + "\\oslash": { + font: "main", + group: "textord", + replace: "\u2298" + }, + "\\circledcirc": { + font: "ams", + group: "textord", + replace: "\u229a" + }, + "\\boxdot": { + font: "ams", + group: "textord", + replace: "\u22a1" + }, + "\\bigtriangleup": { + font: "main", + group: "textord", + replace: "\u25b3" + }, + "\\bigtriangledown": { + font: "main", + group: "textord", + replace: "\u25bd" + }, + "\\dagger": { + font: "main", + group: "textord", + replace: "\u2020" + }, + "\\diamond": { + font: "main", + group: "textord", + replace: "\u22c4" + }, + "\\star": { + font: "main", + group: "textord", + replace: "\u22c6" + }, + "\\triangleleft": { + font: "main", + group: "textord", + replace: "\u25c3" + }, + "\\triangleright": { + font: "main", + group: "textord", + replace: "\u25b9" + }, + "\\{": { + font: "main", + group: "open", + replace: "{" + }, + "\\}": { + font: "main", + group: "close", + replace: "}" + }, + "\\lbrace": { + font: "main", + group: "open", + replace: "{" + }, + "\\rbrace": { + font: "main", + group: "close", + replace: "}" + }, + "\\lbrack": { + font: "main", + group: "open", + replace: "[" + }, + "\\rbrack": { + font: "main", + group: "close", + replace: "]" + }, + "\\lfloor": { + font: "main", + group: "open", + replace: "\u230a" + }, + "\\rfloor": { + font: "main", + group: "close", + replace: "\u230b" + }, + "\\lceil": { + font: "main", + group: "open", + replace: "\u2308" + }, + "\\rceil": { + font: "main", + group: "close", + replace: "\u2309" + }, + "\\backslash": { + font: "main", + group: "textord", + replace: "\\" + }, + "|": { + font: "main", + group: "textord", + replace: "\u2223" + }, + "\\vert": { + font: "main", + group: "textord", + replace: "\u2223" + }, + "\\|": { + font: "main", + group: "textord", + replace: "\u2225" + }, + "\\Vert": { + font: "main", + group: "textord", + replace: "\u2225" + }, + "\\uparrow": { + font: "main", + group: "textord", + replace: "\u2191" + }, + "\\Uparrow": { + font: "main", + group: "textord", + replace: "\u21d1" + }, + "\\downarrow": { + font: "main", + group: "textord", + replace: "\u2193" + }, + "\\Downarrow": { + font: "main", + group: "textord", + replace: "\u21d3" + }, + "\\updownarrow": { + font: "main", + group: "textord", + replace: "\u2195" + }, + "\\Updownarrow": { + font: "main", + group: "textord", + replace: "\u21d5" + } + }, + "text": { + "\\ ": { + font: "main", + group: "spacing", + replace: "\u00a0" + }, + " ": { + font: "main", + group: "spacing", + replace: "\u00a0" + }, + "~": { + font: "main", + group: "spacing", + replace: "\u00a0" + } + } +}; + +var mathTextSymbols = "0123456789/@.\""; +for (var i = 0; i < mathTextSymbols.length; i++) { + var ch = mathTextSymbols.charAt(i); + symbols["math"][ch] = { + font: "main", + group: "textord" + }; +} + +var textSymbols = "0123456789`!@*()-=+[]'\";:?/.,"; +for (var i = 0; i < textSymbols.length; i++) { + var ch = textSymbols.charAt(i); + symbols["text"][ch] = { + font: "main", + group: "textord" + }; +} + +var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +for (var i = 0; i < letters.length; i++) { + var ch = letters.charAt(i); + symbols["math"][ch] = { + font: "main", + group: "mathord" + }; + symbols["text"][ch] = { + font: "main", + group: "textord" + }; +} + +module.exports = symbols; + +},{}],15:[function(require,module,exports){ +var nativeIndexOf = Array.prototype.indexOf; +var indexOf = function(list, elem) { + if (list == null) { + return -1; + } + if (nativeIndexOf && list.indexOf === nativeIndexOf) { + return list.indexOf(elem); + } + var i = 0, l = list.length; + for (; i < l; i++) { + if (list[i] === elem) { + return i; + } + } + return -1; +}; + +var contains = function(list, elem) { + return indexOf(list, elem) !== -1; +}; + +var setTextContent; + +var testNode = document.createElement("span"); +if ("textContent" in testNode) { + setTextContent = function(node, text) { + node.textContent = text; + }; +} else { + setTextContent = function(node, text) { + node.innerText = text; + }; +} + +function clearNode(node) { + setTextContent(node, ""); +} + +module.exports = { + contains: contains, + indexOf: indexOf, + setTextContent: setTextContent, + clearNode: clearNode +}; + +},{}]},{},[12]) +(12) +}); +; \ No newline at end of file diff --git a/main.css b/main.css new file mode 100644 index 000000000..3056b78c1 --- /dev/null +++ b/main.css @@ -0,0 +1,14 @@ +body { + font-size: 20px; +} + +#main { + margin-left: auto; + margin-right: auto; + min-width: 300px; + max-width: 600px; +} + +#example { + font-size: 30px; +} diff --git a/main.js b/main.js new file mode 100644 index 000000000..c5273bfce --- /dev/null +++ b/main.js @@ -0,0 +1,20 @@ +window.startup = function() { + var title = document.getElementById("title"); + katex.process("\\KaTeX", title); + + var example = document.getElementById("example"); + katex.process("\\frac{1}{\\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\\frac25 \\pi}} = 1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}} {1+\\frac{e^{-8\\pi}} {1+...} } } }", example); + + var demoInput = document.getElementById("demo-input"); + var demoOutput = document.getElementById("demo"); + + function doDemo() { + katex.process(demoInput.value, demoOutput); + } + + demoInput.addEventListener("input", function() { + doDemo(); + }); + + doDemo(); +};