hyhyhy 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (576) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +184 -0
  9. data/Rakefile +2 -0
  10. data/bin/hyhyhy +59 -0
  11. data/hyhyhy.gemspec +29 -0
  12. data/lib/hyhyhy.rb +101 -0
  13. data/lib/hyhyhy/config.rb +29 -0
  14. data/lib/hyhyhy/frames.rb +108 -0
  15. data/lib/hyhyhy/logger.rb +40 -0
  16. data/lib/hyhyhy/parser.rb +9 -0
  17. data/lib/hyhyhy/structure/.bowerrc +5 -0
  18. data/lib/hyhyhy/structure/.hyhyhy +5 -0
  19. data/lib/hyhyhy/structure/README.md +0 -0
  20. data/lib/hyhyhy/structure/_assets/javascripts/main.js +395 -0
  21. data/lib/hyhyhy/structure/_assets/stylesheets/main.css +520 -0
  22. data/lib/hyhyhy/structure/_includes/bootstrap/.bower.json +47 -0
  23. data/lib/hyhyhy/structure/_includes/bootstrap/Gruntfile.js +472 -0
  24. data/lib/hyhyhy/structure/_includes/bootstrap/LICENSE +21 -0
  25. data/lib/hyhyhy/structure/_includes/bootstrap/README.md +129 -0
  26. data/lib/hyhyhy/structure/_includes/bootstrap/bower.json +38 -0
  27. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.css +470 -0
  28. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
  29. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.min.css +5 -0
  30. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.css +6332 -0
  31. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.css.map +1 -0
  32. data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.min.css +5 -0
  33. data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  34. data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  35. data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  36. data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  37. data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/bootstrap.js +2320 -0
  38. data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/bootstrap.min.js +7 -0
  39. data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/npm.js +13 -0
  40. data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  41. data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
  42. data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  43. data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  44. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/.jshintrc +7 -0
  45. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-commonjs-generator.js +23 -0
  46. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-lessdoc-parser.js +238 -0
  47. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-raw-files-generator.js +46 -0
  48. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/configBridge.json +44 -0
  49. data/lib/hyhyhy/structure/_includes/bootstrap/grunt/sauce_browsers.yml +82 -0
  50. data/lib/hyhyhy/structure/_includes/bootstrap/js/.jscsrc +34 -0
  51. data/lib/hyhyhy/structure/_includes/bootstrap/js/.jshintrc +15 -0
  52. data/lib/hyhyhy/structure/_includes/bootstrap/js/affix.js +162 -0
  53. data/lib/hyhyhy/structure/_includes/bootstrap/js/alert.js +94 -0
  54. data/lib/hyhyhy/structure/_includes/bootstrap/js/button.js +116 -0
  55. data/lib/hyhyhy/structure/_includes/bootstrap/js/carousel.js +240 -0
  56. data/lib/hyhyhy/structure/_includes/bootstrap/js/collapse.js +211 -0
  57. data/lib/hyhyhy/structure/_includes/bootstrap/js/dropdown.js +161 -0
  58. data/lib/hyhyhy/structure/_includes/bootstrap/js/modal.js +324 -0
  59. data/lib/hyhyhy/structure/_includes/bootstrap/js/popover.js +119 -0
  60. data/lib/hyhyhy/structure/_includes/bootstrap/js/scrollspy.js +175 -0
  61. data/lib/hyhyhy/structure/_includes/bootstrap/js/tab.js +153 -0
  62. data/lib/hyhyhy/structure/_includes/bootstrap/js/tooltip.js +478 -0
  63. data/lib/hyhyhy/structure/_includes/bootstrap/js/transition.js +59 -0
  64. data/lib/hyhyhy/structure/_includes/bootstrap/less/.csscomb.json +304 -0
  65. data/lib/hyhyhy/structure/_includes/bootstrap/less/.csslintrc +19 -0
  66. data/lib/hyhyhy/structure/_includes/bootstrap/less/alerts.less +68 -0
  67. data/lib/hyhyhy/structure/_includes/bootstrap/less/badges.less +61 -0
  68. data/lib/hyhyhy/structure/_includes/bootstrap/less/bootstrap.less +50 -0
  69. data/lib/hyhyhy/structure/_includes/bootstrap/less/breadcrumbs.less +26 -0
  70. data/lib/hyhyhy/structure/_includes/bootstrap/less/button-groups.less +243 -0
  71. data/lib/hyhyhy/structure/_includes/bootstrap/less/buttons.less +160 -0
  72. data/lib/hyhyhy/structure/_includes/bootstrap/less/carousel.less +267 -0
  73. data/lib/hyhyhy/structure/_includes/bootstrap/less/close.less +33 -0
  74. data/lib/hyhyhy/structure/_includes/bootstrap/less/code.less +69 -0
  75. data/lib/hyhyhy/structure/_includes/bootstrap/less/component-animations.less +34 -0
  76. data/lib/hyhyhy/structure/_includes/bootstrap/less/dropdowns.less +213 -0
  77. data/lib/hyhyhy/structure/_includes/bootstrap/less/forms.less +546 -0
  78. data/lib/hyhyhy/structure/_includes/bootstrap/less/glyphicons.less +234 -0
  79. data/lib/hyhyhy/structure/_includes/bootstrap/less/grid.less +84 -0
  80. data/lib/hyhyhy/structure/_includes/bootstrap/less/input-groups.less +166 -0
  81. data/lib/hyhyhy/structure/_includes/bootstrap/less/jumbotron.less +49 -0
  82. data/lib/hyhyhy/structure/_includes/bootstrap/less/labels.less +64 -0
  83. data/lib/hyhyhy/structure/_includes/bootstrap/less/list-group.less +124 -0
  84. data/lib/hyhyhy/structure/_includes/bootstrap/less/media.less +47 -0
  85. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins.less +39 -0
  86. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/alerts.less +14 -0
  87. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/background-variant.less +8 -0
  88. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/border-radius.less +18 -0
  89. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/buttons.less +52 -0
  90. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/center-block.less +7 -0
  91. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/clearfix.less +22 -0
  92. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/forms.less +85 -0
  93. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/gradients.less +59 -0
  94. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/grid-framework.less +91 -0
  95. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/grid.less +122 -0
  96. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/hide-text.less +21 -0
  97. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/image.less +33 -0
  98. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/labels.less +12 -0
  99. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/list-group.less +29 -0
  100. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/nav-divider.less +10 -0
  101. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/nav-vertical-align.less +9 -0
  102. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/opacity.less +8 -0
  103. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/pagination.less +23 -0
  104. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/panels.less +24 -0
  105. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/progress-bar.less +10 -0
  106. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/reset-filter.less +8 -0
  107. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/resize.less +6 -0
  108. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/responsive-visibility.less +15 -0
  109. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/size.less +10 -0
  110. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/tab-focus.less +9 -0
  111. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/table-row.less +28 -0
  112. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/text-emphasis.less +8 -0
  113. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/text-overflow.less +8 -0
  114. data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/vendor-prefixes.less +227 -0
  115. data/lib/hyhyhy/structure/_includes/bootstrap/less/modals.less +148 -0
  116. data/lib/hyhyhy/structure/_includes/bootstrap/less/navbar.less +660 -0
  117. data/lib/hyhyhy/structure/_includes/bootstrap/less/navs.less +244 -0
  118. data/lib/hyhyhy/structure/_includes/bootstrap/less/normalize.less +427 -0
  119. data/lib/hyhyhy/structure/_includes/bootstrap/less/pager.less +54 -0
  120. data/lib/hyhyhy/structure/_includes/bootstrap/less/pagination.less +88 -0
  121. data/lib/hyhyhy/structure/_includes/bootstrap/less/panels.less +261 -0
  122. data/lib/hyhyhy/structure/_includes/bootstrap/less/popovers.less +135 -0
  123. data/lib/hyhyhy/structure/_includes/bootstrap/less/print.less +107 -0
  124. data/lib/hyhyhy/structure/_includes/bootstrap/less/progress-bars.less +87 -0
  125. data/lib/hyhyhy/structure/_includes/bootstrap/less/responsive-embed.less +35 -0
  126. data/lib/hyhyhy/structure/_includes/bootstrap/less/responsive-utilities.less +194 -0
  127. data/lib/hyhyhy/structure/_includes/bootstrap/less/scaffolding.less +150 -0
  128. data/lib/hyhyhy/structure/_includes/bootstrap/less/tables.less +234 -0
  129. data/lib/hyhyhy/structure/_includes/bootstrap/less/theme.less +272 -0
  130. data/lib/hyhyhy/structure/_includes/bootstrap/less/thumbnails.less +36 -0
  131. data/lib/hyhyhy/structure/_includes/bootstrap/less/tooltip.less +103 -0
  132. data/lib/hyhyhy/structure/_includes/bootstrap/less/type.less +302 -0
  133. data/lib/hyhyhy/structure/_includes/bootstrap/less/utilities.less +56 -0
  134. data/lib/hyhyhy/structure/_includes/bootstrap/less/variables.less +856 -0
  135. data/lib/hyhyhy/structure/_includes/bootstrap/less/wells.less +29 -0
  136. data/lib/hyhyhy/structure/_includes/bootstrap/package.json +82 -0
  137. data/lib/hyhyhy/structure/_includes/bower.json +9 -0
  138. data/lib/hyhyhy/structure/_includes/d3/.bower.json +37 -0
  139. data/lib/hyhyhy/structure/_includes/d3/CONTRIBUTING.md +25 -0
  140. data/lib/hyhyhy/structure/_includes/d3/LICENSE +26 -0
  141. data/lib/hyhyhy/structure/_includes/d3/README.md +9 -0
  142. data/lib/hyhyhy/structure/_includes/d3/bower.json +26 -0
  143. data/lib/hyhyhy/structure/_includes/d3/d3.js +9470 -0
  144. data/lib/hyhyhy/structure/_includes/d3/d3.min.js +5 -0
  145. data/lib/hyhyhy/structure/_includes/jquery/.bower.json +38 -0
  146. data/lib/hyhyhy/structure/_includes/jquery/MIT-LICENSE.txt +21 -0
  147. data/lib/hyhyhy/structure/_includes/jquery/bower.json +27 -0
  148. data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.js +9190 -0
  149. data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.min.js +5 -0
  150. data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.min.map +1 -0
  151. data/lib/hyhyhy/structure/_includes/jquery/src/ajax.js +806 -0
  152. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/jsonp.js +89 -0
  153. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/load.js +75 -0
  154. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/parseJSON.js +13 -0
  155. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/parseXML.js +28 -0
  156. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/script.js +64 -0
  157. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/var/nonce.js +5 -0
  158. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/var/rquery.js +3 -0
  159. data/lib/hyhyhy/structure/_includes/jquery/src/ajax/xhr.js +135 -0
  160. data/lib/hyhyhy/structure/_includes/jquery/src/attributes.js +11 -0
  161. data/lib/hyhyhy/structure/_includes/jquery/src/attributes/attr.js +143 -0
  162. data/lib/hyhyhy/structure/_includes/jquery/src/attributes/classes.js +158 -0
  163. data/lib/hyhyhy/structure/_includes/jquery/src/attributes/prop.js +96 -0
  164. data/lib/hyhyhy/structure/_includes/jquery/src/attributes/support.js +35 -0
  165. data/lib/hyhyhy/structure/_includes/jquery/src/attributes/val.js +163 -0
  166. data/lib/hyhyhy/structure/_includes/jquery/src/callbacks.js +205 -0
  167. data/lib/hyhyhy/structure/_includes/jquery/src/core.js +498 -0
  168. data/lib/hyhyhy/structure/_includes/jquery/src/core/access.js +60 -0
  169. data/lib/hyhyhy/structure/_includes/jquery/src/core/init.js +123 -0
  170. data/lib/hyhyhy/structure/_includes/jquery/src/core/parseHTML.js +39 -0
  171. data/lib/hyhyhy/structure/_includes/jquery/src/core/ready.js +97 -0
  172. data/lib/hyhyhy/structure/_includes/jquery/src/core/var/rsingleTag.js +4 -0
  173. data/lib/hyhyhy/structure/_includes/jquery/src/css.js +451 -0
  174. data/lib/hyhyhy/structure/_includes/jquery/src/css/addGetHookIf.js +24 -0
  175. data/lib/hyhyhy/structure/_includes/jquery/src/css/curCSS.js +57 -0
  176. data/lib/hyhyhy/structure/_includes/jquery/src/css/defaultDisplay.js +70 -0
  177. data/lib/hyhyhy/structure/_includes/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  178. data/lib/hyhyhy/structure/_includes/jquery/src/css/support.js +91 -0
  179. data/lib/hyhyhy/structure/_includes/jquery/src/css/swap.js +28 -0
  180. data/lib/hyhyhy/structure/_includes/jquery/src/css/var/cssExpand.js +3 -0
  181. data/lib/hyhyhy/structure/_includes/jquery/src/css/var/getStyles.js +5 -0
  182. data/lib/hyhyhy/structure/_includes/jquery/src/css/var/isHidden.js +13 -0
  183. data/lib/hyhyhy/structure/_includes/jquery/src/css/var/rmargin.js +3 -0
  184. data/lib/hyhyhy/structure/_includes/jquery/src/css/var/rnumnonpx.js +5 -0
  185. data/lib/hyhyhy/structure/_includes/jquery/src/data.js +179 -0
  186. data/lib/hyhyhy/structure/_includes/jquery/src/data/Data.js +181 -0
  187. data/lib/hyhyhy/structure/_includes/jquery/src/data/accepts.js +20 -0
  188. data/lib/hyhyhy/structure/_includes/jquery/src/data/var/data_priv.js +5 -0
  189. data/lib/hyhyhy/structure/_includes/jquery/src/data/var/data_user.js +5 -0
  190. data/lib/hyhyhy/structure/_includes/jquery/src/deferred.js +149 -0
  191. data/lib/hyhyhy/structure/_includes/jquery/src/deprecated.js +13 -0
  192. data/lib/hyhyhy/structure/_includes/jquery/src/dimensions.js +50 -0
  193. data/lib/hyhyhy/structure/_includes/jquery/src/effects.js +649 -0
  194. data/lib/hyhyhy/structure/_includes/jquery/src/effects/Tween.js +114 -0
  195. data/lib/hyhyhy/structure/_includes/jquery/src/effects/animatedSelector.js +13 -0
  196. data/lib/hyhyhy/structure/_includes/jquery/src/event.js +868 -0
  197. data/lib/hyhyhy/structure/_includes/jquery/src/event/alias.js +39 -0
  198. data/lib/hyhyhy/structure/_includes/jquery/src/event/support.js +9 -0
  199. data/lib/hyhyhy/structure/_includes/jquery/src/exports/amd.js +24 -0
  200. data/lib/hyhyhy/structure/_includes/jquery/src/exports/global.js +32 -0
  201. data/lib/hyhyhy/structure/_includes/jquery/src/intro.js +44 -0
  202. data/lib/hyhyhy/structure/_includes/jquery/src/jquery.js +36 -0
  203. data/lib/hyhyhy/structure/_includes/jquery/src/manipulation.js +582 -0
  204. data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/_evalUrl.js +18 -0
  205. data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/support.js +31 -0
  206. data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/var/rcheckableType.js +3 -0
  207. data/lib/hyhyhy/structure/_includes/jquery/src/offset.js +204 -0
  208. data/lib/hyhyhy/structure/_includes/jquery/src/outro.js +1 -0
  209. data/lib/hyhyhy/structure/_includes/jquery/src/queue.js +142 -0
  210. data/lib/hyhyhy/structure/_includes/jquery/src/queue/delay.js +22 -0
  211. data/lib/hyhyhy/structure/_includes/jquery/src/selector-native.js +172 -0
  212. data/lib/hyhyhy/structure/_includes/jquery/src/selector-sizzle.js +14 -0
  213. data/lib/hyhyhy/structure/_includes/jquery/src/selector.js +1 -0
  214. data/lib/hyhyhy/structure/_includes/jquery/src/serialize.js +111 -0
  215. data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.js +2044 -0
  216. data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  217. data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  218. data/lib/hyhyhy/structure/_includes/jquery/src/traversing.js +200 -0
  219. data/lib/hyhyhy/structure/_includes/jquery/src/traversing/findFilter.js +100 -0
  220. data/lib/hyhyhy/structure/_includes/jquery/src/traversing/var/rneedsContext.js +6 -0
  221. data/lib/hyhyhy/structure/_includes/jquery/src/var/arr.js +3 -0
  222. data/lib/hyhyhy/structure/_includes/jquery/src/var/class2type.js +4 -0
  223. data/lib/hyhyhy/structure/_includes/jquery/src/var/concat.js +5 -0
  224. data/lib/hyhyhy/structure/_includes/jquery/src/var/hasOwn.js +5 -0
  225. data/lib/hyhyhy/structure/_includes/jquery/src/var/indexOf.js +5 -0
  226. data/lib/hyhyhy/structure/_includes/jquery/src/var/pnum.js +3 -0
  227. data/lib/hyhyhy/structure/_includes/jquery/src/var/push.js +5 -0
  228. data/lib/hyhyhy/structure/_includes/jquery/src/var/rnotwhite.js +3 -0
  229. data/lib/hyhyhy/structure/_includes/jquery/src/var/slice.js +5 -0
  230. data/lib/hyhyhy/structure/_includes/jquery/src/var/strundefined.js +3 -0
  231. data/lib/hyhyhy/structure/_includes/jquery/src/var/support.js +4 -0
  232. data/lib/hyhyhy/structure/_includes/jquery/src/var/toString.js +5 -0
  233. data/lib/hyhyhy/structure/_includes/jquery/src/wrap.js +78 -0
  234. data/lib/hyhyhy/structure/_includes/katex/.arcconfig +4 -0
  235. data/lib/hyhyhy/structure/_includes/katex/.bower.json +14 -0
  236. data/lib/hyhyhy/structure/_includes/katex/.gitignore +5 -0
  237. data/lib/hyhyhy/structure/_includes/katex/.hyhyhy +10 -0
  238. data/lib/hyhyhy/structure/_includes/katex/.jshintrc +67 -0
  239. data/lib/hyhyhy/structure/_includes/katex/.travis.yml +4 -0
  240. data/lib/hyhyhy/structure/_includes/katex/CONTRIBUTING.md +112 -0
  241. data/lib/hyhyhy/structure/_includes/katex/LICENSE.txt +21 -0
  242. data/lib/hyhyhy/structure/_includes/katex/Makefile +61 -0
  243. data/lib/hyhyhy/structure/_includes/katex/README.md +50 -0
  244. data/lib/hyhyhy/structure/_includes/katex/cli.js +15 -0
  245. data/lib/hyhyhy/structure/_includes/katex/dockers/HuxleyTests/Dockerfile +13 -0
  246. data/lib/hyhyhy/structure/_includes/katex/dockers/HuxleyTests/README.md +29 -0
  247. data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/Dockerfile +34 -0
  248. data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/README.md +55 -0
  249. data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/copy_fonts.sh +47 -0
  250. data/lib/hyhyhy/structure/_includes/katex/katex.js +54 -0
  251. data/lib/hyhyhy/structure/_includes/katex/lint_blacklist.txt +8 -0
  252. data/lib/hyhyhy/structure/_includes/katex/metrics/README.md +21 -0
  253. data/lib/hyhyhy/structure/_includes/katex/metrics/extract_tfms.py +94 -0
  254. data/lib/hyhyhy/structure/_includes/katex/metrics/extract_ttfs.py +75 -0
  255. data/lib/hyhyhy/structure/_includes/katex/metrics/mapping.pl +997 -0
  256. data/lib/hyhyhy/structure/_includes/katex/metrics/parse_tfm.py +201 -0
  257. data/lib/hyhyhy/structure/_includes/katex/metrics/replace_line.py +17 -0
  258. data/lib/hyhyhy/structure/_includes/katex/package.json +30 -0
  259. data/lib/hyhyhy/structure/_includes/katex/server.js +77 -0
  260. data/lib/hyhyhy/structure/_includes/katex/src/Lexer.js +190 -0
  261. data/lib/hyhyhy/structure/_includes/katex/src/Options.js +85 -0
  262. data/lib/hyhyhy/structure/_includes/katex/src/ParseError.js +40 -0
  263. data/lib/hyhyhy/structure/_includes/katex/src/Parser.js +639 -0
  264. data/lib/hyhyhy/structure/_includes/katex/src/Style.js +126 -0
  265. data/lib/hyhyhy/structure/_includes/katex/src/buildCommon.js +271 -0
  266. data/lib/hyhyhy/structure/_includes/katex/src/buildTree.js +1167 -0
  267. data/lib/hyhyhy/structure/_includes/katex/src/delimiter.js +541 -0
  268. data/lib/hyhyhy/structure/_includes/katex/src/domTree.js +241 -0
  269. data/lib/hyhyhy/structure/_includes/katex/src/fontMetrics.js +129 -0
  270. data/lib/hyhyhy/structure/_includes/katex/src/functions.js +539 -0
  271. data/lib/hyhyhy/structure/_includes/katex/src/parseTree.js +17 -0
  272. data/lib/hyhyhy/structure/_includes/katex/src/symbols.js +1006 -0
  273. data/lib/hyhyhy/structure/_includes/katex/src/utils.js +97 -0
  274. data/lib/hyhyhy/structure/_includes/katex/static/fonts.less +73 -0
  275. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.eot +0 -0
  276. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.ttf +0 -0
  277. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.woff +0 -0
  278. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  279. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.eot +0 -0
  280. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  281. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  282. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  283. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.eot +0 -0
  284. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  285. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  286. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  287. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.eot +0 -0
  288. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  289. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  290. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  291. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.eot +0 -0
  292. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  293. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  294. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  295. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Bold.woff2 +0 -0
  296. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-BoldItalic.woff2 +0 -0
  297. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Italic.woff2 +0 -0
  298. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Regular.woff2 +0 -0
  299. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.eot +0 -0
  300. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.ttf +0 -0
  301. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.woff +0 -0
  302. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.woff2 +0 -0
  303. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.eot +0 -0
  304. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.ttf +0 -0
  305. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.woff +0 -0
  306. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.woff2 +0 -0
  307. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.eot +0 -0
  308. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.ttf +0 -0
  309. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.woff +0 -0
  310. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.woff2 +0 -0
  311. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.eot +0 -0
  312. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  313. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  314. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  315. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.eot +0 -0
  316. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.ttf +0 -0
  317. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.woff +0 -0
  318. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.woff2 +0 -0
  319. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.eot +0 -0
  320. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.ttf +0 -0
  321. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.woff +0 -0
  322. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.woff2 +0 -0
  323. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.eot +0 -0
  324. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  325. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  326. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  327. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.eot +0 -0
  328. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  329. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  330. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  331. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.eot +0 -0
  332. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  333. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  334. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  335. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.eot +0 -0
  336. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.ttf +0 -0
  337. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.woff +0 -0
  338. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.woff2 +0 -0
  339. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.eot +0 -0
  340. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.ttf +0 -0
  341. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.woff +0 -0
  342. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  343. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.eot +0 -0
  344. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.ttf +0 -0
  345. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.woff +0 -0
  346. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  347. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.eot +0 -0
  348. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.ttf +0 -0
  349. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.woff +0 -0
  350. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  351. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.eot +0 -0
  352. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.ttf +0 -0
  353. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.woff +0 -0
  354. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  355. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.eot +0 -0
  356. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  357. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  358. data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  359. data/lib/hyhyhy/structure/_includes/katex/static/index.html +17 -0
  360. data/lib/hyhyhy/structure/_includes/katex/static/katex.less +430 -0
  361. data/lib/hyhyhy/structure/_includes/katex/static/main.css +12 -0
  362. data/lib/hyhyhy/structure/_includes/katex/static/main.js +42 -0
  363. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfile.json +199 -0
  364. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Accents.hux/firefox-1.png +0 -0
  365. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Accents.record.json +5 -0
  366. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Baseline.hux/firefox-1.png +0 -0
  367. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Baseline.record.json +5 -0
  368. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BasicTest.hux/firefox-1.png +0 -0
  369. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BasicTest.record.json +5 -0
  370. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BinomTest.hux/firefox-1.png +0 -0
  371. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BinomTest.record.json +5 -0
  372. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Colors.hux/firefox-1.png +0 -0
  373. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Colors.record.json +5 -0
  374. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DeepFontSizing.hux/firefox-1.png +0 -0
  375. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DeepFontSizing.record.json +5 -0
  376. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DelimiterSizing.hux/firefox-1.png +0 -0
  377. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DelimiterSizing.record.json +5 -0
  378. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DisplayStyle.hux/firefox-1.png +0 -0
  379. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DisplayStyle.record.json +5 -0
  380. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Exponents.hux/firefox-1.png +0 -0
  381. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Exponents.record.json +5 -0
  382. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/FractionTest.hux/firefox-1.png +0 -0
  383. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/FractionTest.record.json +5 -0
  384. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Functions.hux/firefox-1.png +0 -0
  385. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Functions.record.json +5 -0
  386. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/GreekLetters.hux/firefox-1.png +0 -0
  387. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/GreekLetters.record.json +5 -0
  388. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/KaTeX.hux/firefox-1.png +0 -0
  389. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/KaTeX.record.json +5 -0
  390. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Lap.hux/firefox-1.png +0 -0
  391. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Lap.record.json +5 -0
  392. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRight.hux/firefox-1.png +0 -0
  393. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRight.record.json +5 -0
  394. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightListStyling.hux/firefox-1.png +0 -0
  395. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightListStyling.record.json +5 -0
  396. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightStyleSizing.hux/firefox-1.png +0 -0
  397. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightStyleSizing.record.json +5 -0
  398. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NestedFractions.hux/firefox-1.png +0 -0
  399. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NestedFractions.record.json +5 -0
  400. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NullDelimiterInteraction.hux/firefox-1.png +0 -0
  401. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NullDelimiterInteraction.record.json +5 -0
  402. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/OpLimits.hux/firefox-1.png +0 -0
  403. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/OpLimits.record.json +5 -0
  404. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Overline.hux/firefox-1.png +0 -0
  405. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Overline.record.json +5 -0
  406. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/PrimeSpacing.hux/firefox-1.png +0 -0
  407. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/PrimeSpacing.record.json +5 -0
  408. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/RlapBug.hux/firefox-1.png +0 -0
  409. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/RlapBug.record.json +5 -0
  410. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Rule.hux/firefox-1.png +0 -0
  411. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Rule.record.json +5 -0
  412. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sizing.hux/firefox-1.png +0 -0
  413. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sizing.record.json +5 -0
  414. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SizingBaseline.hux/firefox-1.png +0 -0
  415. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SizingBaseline.record.json +5 -0
  416. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Spacing.hux/firefox-1.png +0 -0
  417. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Spacing.record.json +5 -0
  418. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sqrt.hux/firefox-1.png +0 -0
  419. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sqrt.record.json +5 -0
  420. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubCharacterBox.hux/firefox-1.png +0 -0
  421. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubCharacterBox.record.json +5 -0
  422. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubHorizSpacing.hux/firefox-1.png +0 -0
  423. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubHorizSpacing.record.json +5 -0
  424. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubOffsets.hux/firefox-1.png +0 -0
  425. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubOffsets.record.json +5 -0
  426. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Text.hux/firefox-1.png +0 -0
  427. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Text.record.json +5 -0
  428. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/VerticalSpacing.hux/firefox-1.png +0 -0
  429. data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/VerticalSpacing.record.json +5 -0
  430. data/lib/hyhyhy/structure/_includes/katex/test/huxley/test.html +30 -0
  431. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/MIT.LICENSE +20 -0
  432. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/boot.js +120 -0
  433. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/console.js +166 -0
  434. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine-html.js +390 -0
  435. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine.css +61 -0
  436. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine.js +2593 -0
  437. data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine_favicon.png +0 -0
  438. data/lib/hyhyhy/structure/_includes/katex/test/katex-spec.js +1179 -0
  439. data/lib/hyhyhy/structure/_includes/katex/test/test.html +12 -0
  440. data/lib/hyhyhy/structure/_includes/metrics-graphics/.bower.json +61 -0
  441. data/lib/hyhyhy/structure/_includes/metrics-graphics/.hyhyhy +17 -0
  442. data/lib/hyhyhy/structure/_includes/metrics-graphics/LICENSE +362 -0
  443. data/lib/hyhyhy/structure/_includes/metrics-graphics/README.md +70 -0
  444. data/lib/hyhyhy/structure/_includes/metrics-graphics/bower.json +50 -0
  445. data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics-demo-dark.css +640 -0
  446. data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics-demo.css +176 -0
  447. data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics.css +344 -0
  448. data/lib/hyhyhy/structure/_includes/metrics-graphics/images/missing-data-dark.png +0 -0
  449. data/lib/hyhyhy/structure/_includes/metrics-graphics/images/missing-data.png +0 -0
  450. data/lib/hyhyhy/structure/_includes/metrics-graphics/js/metricsgraphics.min.js +590 -0
  451. data/lib/hyhyhy/structure/_includes/metrics-graphics/package.json +35 -0
  452. data/lib/hyhyhy/structure/_includes/prism/.bower.json +34 -0
  453. data/lib/hyhyhy/structure/_includes/prism/.hyhyhy +33 -0
  454. data/lib/hyhyhy/structure/_includes/prism/LICENSE +21 -0
  455. data/lib/hyhyhy/structure/_includes/prism/README.md +22 -0
  456. data/lib/hyhyhy/structure/_includes/prism/bower.json +26 -0
  457. data/lib/hyhyhy/structure/_includes/prism/components.js +233 -0
  458. data/lib/hyhyhy/structure/_includes/prism/components/prism-apacheconf.js +46 -0
  459. data/lib/hyhyhy/structure/_includes/prism/components/prism-apacheconf.min.js +1 -0
  460. data/lib/hyhyhy/structure/_includes/prism/components/prism-aspnet.js +49 -0
  461. data/lib/hyhyhy/structure/_includes/prism/components/prism-aspnet.min.js +1 -0
  462. data/lib/hyhyhy/structure/_includes/prism/components/prism-autohotkey.js +27 -0
  463. data/lib/hyhyhy/structure/_includes/prism/components/prism-autohotkey.min.js +1 -0
  464. data/lib/hyhyhy/structure/_includes/prism/components/prism-bash.js +24 -0
  465. data/lib/hyhyhy/structure/_includes/prism/components/prism-bash.min.js +1 -0
  466. data/lib/hyhyhy/structure/_includes/prism/components/prism-c.js +26 -0
  467. data/lib/hyhyhy/structure/_includes/prism/components/prism-c.min.js +1 -0
  468. data/lib/hyhyhy/structure/_includes/prism/components/prism-clike.js +32 -0
  469. data/lib/hyhyhy/structure/_includes/prism/components/prism-clike.min.js +1 -0
  470. data/lib/hyhyhy/structure/_includes/prism/components/prism-coffeescript.js +18 -0
  471. data/lib/hyhyhy/structure/_includes/prism/components/prism-coffeescript.min.js +1 -0
  472. data/lib/hyhyhy/structure/_includes/prism/components/prism-core.js +424 -0
  473. data/lib/hyhyhy/structure/_includes/prism/components/prism-core.min.js +1 -0
  474. data/lib/hyhyhy/structure/_includes/prism/components/prism-cpp.js +12 -0
  475. data/lib/hyhyhy/structure/_includes/prism/components/prism-cpp.min.js +1 -0
  476. data/lib/hyhyhy/structure/_includes/prism/components/prism-csharp.js +6 -0
  477. data/lib/hyhyhy/structure/_includes/prism/components/prism-csharp.min.js +1 -0
  478. data/lib/hyhyhy/structure/_includes/prism/components/prism-css-extras.js +15 -0
  479. data/lib/hyhyhy/structure/_includes/prism/components/prism-css-extras.min.js +1 -0
  480. data/lib/hyhyhy/structure/_includes/prism/components/prism-css.js +50 -0
  481. data/lib/hyhyhy/structure/_includes/prism/components/prism-css.min.js +1 -0
  482. data/lib/hyhyhy/structure/_includes/prism/components/prism-gherkin.js +13 -0
  483. data/lib/hyhyhy/structure/_includes/prism/components/prism-gherkin.min.js +1 -0
  484. data/lib/hyhyhy/structure/_includes/prism/components/prism-git.js +68 -0
  485. data/lib/hyhyhy/structure/_includes/prism/components/prism-git.min.js +1 -0
  486. data/lib/hyhyhy/structure/_includes/prism/components/prism-go.js +9 -0
  487. data/lib/hyhyhy/structure/_includes/prism/components/prism-go.min.js +1 -0
  488. data/lib/hyhyhy/structure/_includes/prism/components/prism-groovy.js +43 -0
  489. data/lib/hyhyhy/structure/_includes/prism/components/prism-groovy.min.js +1 -0
  490. data/lib/hyhyhy/structure/_includes/prism/components/prism-handlebars.js +92 -0
  491. data/lib/hyhyhy/structure/_includes/prism/components/prism-handlebars.min.js +1 -0
  492. data/lib/hyhyhy/structure/_includes/prism/components/prism-haskell.js +32 -0
  493. data/lib/hyhyhy/structure/_includes/prism/components/prism-haskell.min.js +1 -0
  494. data/lib/hyhyhy/structure/_includes/prism/components/prism-http.js +44 -0
  495. data/lib/hyhyhy/structure/_includes/prism/components/prism-http.min.js +1 -0
  496. data/lib/hyhyhy/structure/_includes/prism/components/prism-ini.js +11 -0
  497. data/lib/hyhyhy/structure/_includes/prism/components/prism-ini.min.js +1 -0
  498. data/lib/hyhyhy/structure/_includes/prism/components/prism-java.js +8 -0
  499. data/lib/hyhyhy/structure/_includes/prism/components/prism-java.min.js +1 -0
  500. data/lib/hyhyhy/structure/_includes/prism/components/prism-javascript.js +27 -0
  501. data/lib/hyhyhy/structure/_includes/prism/components/prism-javascript.min.js +1 -0
  502. data/lib/hyhyhy/structure/_includes/prism/components/prism-latex.js +6 -0
  503. data/lib/hyhyhy/structure/_includes/prism/components/prism-latex.min.js +1 -0
  504. data/lib/hyhyhy/structure/_includes/prism/components/prism-markup.js +41 -0
  505. data/lib/hyhyhy/structure/_includes/prism/components/prism-markup.min.js +1 -0
  506. data/lib/hyhyhy/structure/_includes/prism/components/prism-nasm.js +20 -0
  507. data/lib/hyhyhy/structure/_includes/prism/components/prism-nasm.min.js +1 -0
  508. data/lib/hyhyhy/structure/_includes/prism/components/prism-nsis.js +19 -0
  509. data/lib/hyhyhy/structure/_includes/prism/components/prism-nsis.min.js +5 -0
  510. data/lib/hyhyhy/structure/_includes/prism/components/prism-objectivec.js +5 -0
  511. data/lib/hyhyhy/structure/_includes/prism/components/prism-objectivec.min.js +1 -0
  512. data/lib/hyhyhy/structure/_includes/prism/components/prism-perl.js +112 -0
  513. data/lib/hyhyhy/structure/_includes/prism/components/prism-perl.min.js +1 -0
  514. data/lib/hyhyhy/structure/_includes/prism/components/prism-php-extras.js +11 -0
  515. data/lib/hyhyhy/structure/_includes/prism/components/prism-php-extras.min.js +1 -0
  516. data/lib/hyhyhy/structure/_includes/prism/components/prism-php.js +99 -0
  517. data/lib/hyhyhy/structure/_includes/prism/components/prism-php.min.js +1 -0
  518. data/lib/hyhyhy/structure/_includes/prism/components/prism-python.js +14 -0
  519. data/lib/hyhyhy/structure/_includes/prism/components/prism-python.min.js +1 -0
  520. data/lib/hyhyhy/structure/_includes/prism/components/prism-rip.js +29 -0
  521. data/lib/hyhyhy/structure/_includes/prism/components/prism-rip.min.js +1 -0
  522. data/lib/hyhyhy/structure/_includes/prism/components/prism-ruby.js +21 -0
  523. data/lib/hyhyhy/structure/_includes/prism/components/prism-ruby.min.js +1 -0
  524. data/lib/hyhyhy/structure/_includes/prism/components/prism-scala.js +8 -0
  525. data/lib/hyhyhy/structure/_includes/prism/components/prism-scala.min.js +1 -0
  526. data/lib/hyhyhy/structure/_includes/prism/components/prism-scheme-min.js +1 -0
  527. data/lib/hyhyhy/structure/_includes/prism/components/prism-scheme.js +24 -0
  528. data/lib/hyhyhy/structure/_includes/prism/components/prism-scss.js +36 -0
  529. data/lib/hyhyhy/structure/_includes/prism/components/prism-scss.min.js +1 -0
  530. data/lib/hyhyhy/structure/_includes/prism/components/prism-sql.js +17 -0
  531. data/lib/hyhyhy/structure/_includes/prism/components/prism-sql.min.js +1 -0
  532. data/lib/hyhyhy/structure/_includes/prism/components/prism-swift.js +8 -0
  533. data/lib/hyhyhy/structure/_includes/prism/components/prism-swift.min.js +1 -0
  534. data/lib/hyhyhy/structure/_includes/prism/components/prism-twig.js +46 -0
  535. data/lib/hyhyhy/structure/_includes/prism/components/prism-twig.min.js +1 -0
  536. data/lib/hyhyhy/structure/_includes/prism/gulpfile.js +48 -0
  537. data/lib/hyhyhy/structure/_includes/prism/package.json +27 -0
  538. data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.css +3 -0
  539. data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.js +66 -0
  540. data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.min.js +1 -0
  541. data/lib/hyhyhy/structure/_includes/prism/plugins/file-highlight/prism-file-highlight.js +54 -0
  542. data/lib/hyhyhy/structure/_includes/prism/plugins/file-highlight/prism-file-highlight.min.js +1 -0
  543. data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.css +3 -0
  544. data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.js +42 -0
  545. data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.min.js +1 -0
  546. data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.css +47 -0
  547. data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.js +109 -0
  548. data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.min.js +1 -0
  549. data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.css +40 -0
  550. data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.js +24 -0
  551. data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.min.js +1 -0
  552. data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.css +17 -0
  553. data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.js +15 -0
  554. data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.min.js +1 -0
  555. data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.css +21 -0
  556. data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.js +16 -0
  557. data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.min.css +1 -0
  558. data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.min.js +1 -0
  559. data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.css +11 -0
  560. data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.js +163 -0
  561. data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.min.js +1 -0
  562. data/lib/hyhyhy/structure/_includes/prism/prism.js +662 -0
  563. data/lib/hyhyhy/structure/_includes/prism/themes/prism-coy.css +210 -0
  564. data/lib/hyhyhy/structure/_includes/prism/themes/prism-dark.css +122 -0
  565. data/lib/hyhyhy/structure/_includes/prism/themes/prism-funky.css +111 -0
  566. data/lib/hyhyhy/structure/_includes/prism/themes/prism-okaidia.css +114 -0
  567. data/lib/hyhyhy/structure/_includes/prism/themes/prism-tomorrow.css +115 -0
  568. data/lib/hyhyhy/structure/_includes/prism/themes/prism-twilight.css +195 -0
  569. data/lib/hyhyhy/structure/_includes/prism/themes/prism.css +131 -0
  570. data/lib/hyhyhy/structure/_includes/prism/vendor/promise.js +5 -0
  571. data/lib/hyhyhy/structure/_layouts/default.erb +41 -0
  572. data/lib/hyhyhy/structure/_slides/1.introduction.md +36 -0
  573. data/lib/hyhyhy/structure/_slides/2.packages.md +52 -0
  574. data/lib/hyhyhy/structure/_slides/3.usage.md +146 -0
  575. data/lib/hyhyhy/version.rb +5 -0
  576. metadata +747 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * This file contains information about the options that the Parser carries
3
+ * around with it while parsing. Data is held in an `Options` object, and when
4
+ * recursing, a new `Options` object can be created with the `.with*` and
5
+ * `.reset` functions.
6
+ */
7
+
8
+ /**
9
+ * This is the main options class. It contains the style, size, and color of the
10
+ * current parse level. It also contains the style and size of the parent parse
11
+ * level, so size changes can be handled efficiently.
12
+ *
13
+ * Each of the `.with*` and `.reset` functions passes its current style and size
14
+ * as the parentStyle and parentSize of the new options class, so parent
15
+ * handling is taken care of automatically.
16
+ */
17
+ function Options(style, size, color, parentStyle, parentSize) {
18
+ this.style = style;
19
+ this.color = color;
20
+ this.size = size;
21
+
22
+ if (parentStyle === undefined) {
23
+ parentStyle = style;
24
+ }
25
+ this.parentStyle = parentStyle;
26
+
27
+ if (parentSize === undefined) {
28
+ parentSize = size;
29
+ }
30
+ this.parentSize = parentSize;
31
+ }
32
+
33
+ /**
34
+ * Create a new options object with the given style.
35
+ */
36
+ Options.prototype.withStyle = function(style) {
37
+ return new Options(style, this.size, this.color, this.style, this.size);
38
+ };
39
+
40
+ /**
41
+ * Create a new options object with the given size.
42
+ */
43
+ Options.prototype.withSize = function(size) {
44
+ return new Options(this.style, size, this.color, this.style, this.size);
45
+ };
46
+
47
+ /**
48
+ * Create a new options object with the given color.
49
+ */
50
+ Options.prototype.withColor = function(color) {
51
+ return new Options(this.style, this.size, color, this.style, this.size);
52
+ };
53
+
54
+ /**
55
+ * Create a new options object with the same style, size, and color. This is
56
+ * used so that parent style and size changes are handled correctly.
57
+ */
58
+ Options.prototype.reset = function() {
59
+ return new Options(
60
+ this.style, this.size, this.color, this.style, this.size);
61
+ };
62
+
63
+ /**
64
+ * A map of color names to CSS colors.
65
+ * TODO(emily): Remove this when we have real macros
66
+ */
67
+ var colorMap = {
68
+ "katex-blue": "#6495ed",
69
+ "katex-orange": "#ffa500",
70
+ "katex-pink": "#ff00af",
71
+ "katex-red": "#df0030",
72
+ "katex-green": "#28ae7b",
73
+ "katex-gray": "gray",
74
+ "katex-purple": "#9d38bd"
75
+ };
76
+
77
+ /**
78
+ * Gets the CSS color of the current options object, accounting for the
79
+ * `colorMap`.
80
+ */
81
+ Options.prototype.getColor = function() {
82
+ return colorMap[this.color] || this.color;
83
+ };
84
+
85
+ module.exports = Options;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * This is the ParseError class, which is the main error thrown by KaTeX
3
+ * functions when something has gone wrong. This is used to distinguish internal
4
+ * errors from errors in the expression that the user provided.
5
+ */
6
+ function ParseError(message, lexer, position) {
7
+ var error = "KaTeX parse error: " + message;
8
+
9
+ if (lexer !== undefined && position !== undefined) {
10
+ // If we have the input and a position, make the error a bit fancier
11
+
12
+ // Prepend some information
13
+ error += " at position " + position + ": ";
14
+
15
+ // Get the input
16
+ var input = lexer._input;
17
+ // Insert a combining underscore at the correct position
18
+ input = input.slice(0, position) + "\u0332" +
19
+ input.slice(position);
20
+
21
+ // Extract some context from the input and add it to the error
22
+ var begin = Math.max(0, position - 15);
23
+ var end = position + 15;
24
+ error += input.slice(begin, end);
25
+ }
26
+
27
+ // Some hackery to make ParseError a prototype of Error
28
+ // See http://stackoverflow.com/a/8460753
29
+ var self = new Error(error);
30
+ self.name = "ParseError";
31
+ self.__proto__ = ParseError.prototype;
32
+
33
+ self.position = position;
34
+ return self;
35
+ }
36
+
37
+ // More hackery
38
+ ParseError.prototype.__proto__ = Error.prototype;
39
+
40
+ module.exports = ParseError;
@@ -0,0 +1,639 @@
1
+ var functions = require("./functions");
2
+ var Lexer = require("./Lexer");
3
+ var symbols = require("./symbols");
4
+ var utils = require("./utils");
5
+
6
+ var ParseError = require("./ParseError");
7
+
8
+ /**
9
+ * This file contains the parser used to parse out a TeX expression from the
10
+ * input. Since TeX isn't context-free, standard parsers don't work particularly
11
+ * well.
12
+ *
13
+ * The strategy of this parser is as such:
14
+ *
15
+ * The main functions (the `.parse...` ones) take a position in the current
16
+ * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
17
+ * this.lexer) also supports pulling out tokens at arbitrary places. When
18
+ * individual tokens are needed at a position, the lexer is called to pull out a
19
+ * token, which is then used.
20
+ *
21
+ * The main functions also take a mode that the parser is currently in
22
+ * (currently "math" or "text"), which denotes whether the current environment
23
+ * is a math-y one or a text-y one (e.g. inside \text). Currently, this serves
24
+ * to limit the functions which can be used in text mode.
25
+ *
26
+ * The main functions then return an object which contains the useful data that
27
+ * was parsed at its given point, and a new position at the end of the parsed
28
+ * data. The main functions can call each other and continue the parsing by
29
+ * using the returned position as a new starting point.
30
+ *
31
+ * There are also extra `.handle...` functions, which pull out some reused
32
+ * functionality into self-contained functions.
33
+ *
34
+ * The earlier functions return `ParseResult`s, which contain a ParseNode and a
35
+ * new position.
36
+ *
37
+ * The later functions (which are called deeper in the parse) sometimes return
38
+ * ParseFuncOrArgument, which contain a ParseResult as well as some data about
39
+ * whether the parsed object is a function which is missing some arguments, or a
40
+ * standalone object which can be used as an argument to another function.
41
+ */
42
+
43
+ /**
44
+ * Main Parser class
45
+ */
46
+ function Parser(input) {
47
+ // Make a new lexer
48
+ this.lexer = new Lexer(input);
49
+ }
50
+
51
+ /**
52
+ * The resulting parse tree nodes of the parse tree.
53
+ */
54
+ function ParseNode(type, value, mode) {
55
+ this.type = type;
56
+ this.value = value;
57
+ this.mode = mode;
58
+ }
59
+
60
+ /**
61
+ * A result and final position returned by the `.parse...` functions.
62
+ */
63
+ function ParseResult(result, newPosition) {
64
+ this.result = result;
65
+ this.position = newPosition;
66
+ }
67
+
68
+ /**
69
+ * An initial function (without its arguments), or an argument to a function.
70
+ * The `result` argument should be a ParseResult.
71
+ */
72
+ function ParseFuncOrArgument(result, isFunction, allowedInText, numArgs, numOptionalArgs, argTypes) {
73
+ this.result = result;
74
+ // Is this a function (i.e. is it something defined in functions.js)?
75
+ this.isFunction = isFunction;
76
+ // Is it allowed in text mode?
77
+ this.allowedInText = allowedInText;
78
+ // How many arguments?
79
+ this.numArgs = numArgs;
80
+ // How many optional arguments?
81
+ this.numOptionalArgs = numOptionalArgs;
82
+ // What types of arguments?
83
+ this.argTypes = argTypes;
84
+ }
85
+
86
+ /**
87
+ * Checks a result to make sure it has the right type, and throws an
88
+ * appropriate error otherwise.
89
+ */
90
+ Parser.prototype.expect = function(result, text) {
91
+ if (result.text !== text) {
92
+ throw new ParseError(
93
+ "Expected '" + text + "', got '" + result.text + "'",
94
+ this.lexer, result.position
95
+ );
96
+ }
97
+ };
98
+
99
+ /**
100
+ * Main parsing function, which parses an entire input.
101
+ *
102
+ * @return {?Array.<ParseNode>}
103
+ */
104
+ Parser.prototype.parse = function(input) {
105
+ // Try to parse the input
106
+ var parse = this.parseInput(0, "math");
107
+ return parse.result;
108
+ };
109
+
110
+ /**
111
+ * Parses an entire input tree.
112
+ */
113
+ Parser.prototype.parseInput = function(pos, mode) {
114
+ // Parse an expression
115
+ var expression = this.parseExpression(pos, mode, false, null);
116
+ // If we succeeded, make sure there's an EOF at the end
117
+ var EOF = this.lexer.lex(expression.position, mode);
118
+ this.expect(EOF, "EOF");
119
+ return expression;
120
+ };
121
+
122
+ /**
123
+ * Parses an "expression", which is a list of atoms.
124
+ *
125
+ * @param {boolean} breakOnInfix Should the parsing stop when we hit infix
126
+ * nodes? This happens when functions have higher precendence
127
+ * than infix nodes in implicit parses.
128
+ *
129
+ * @param {?string} breakOnToken The token that the expression should end with,
130
+ * or `null` if something else should end the expression.
131
+ *
132
+ * @return {ParseResult}
133
+ */
134
+ Parser.prototype.parseExpression = function(pos, mode, breakOnInfix, breakOnToken) {
135
+ var body = [];
136
+ // Keep adding atoms to the body until we can't parse any more atoms (either
137
+ // we reached the end, a }, or a \right)
138
+ while (true) {
139
+ var lex = this.lexer.lex(pos, mode);
140
+ if (breakOnToken != null && lex.text === breakOnToken) {
141
+ break;
142
+ }
143
+ var atom = this.parseAtom(pos, mode);
144
+ if (!atom) {
145
+ break;
146
+ }
147
+ if (breakOnInfix && atom.result.type === "infix") {
148
+ break;
149
+ }
150
+ body.push(atom.result);
151
+ pos = atom.position;
152
+ }
153
+ return new ParseResult(this.handleInfixNodes(body, mode), pos);
154
+ };
155
+
156
+ /**
157
+ * Rewrites infix operators such as \over with corresponding commands such
158
+ * as \frac.
159
+ *
160
+ * There can only be one infix operator per group. If there's more than one
161
+ * then the expression is ambiguous. This can be resolved by adding {}.
162
+ *
163
+ * @returns {Array}
164
+ */
165
+ Parser.prototype.handleInfixNodes = function (body, mode) {
166
+ var overIndex = -1;
167
+ var func;
168
+ var funcName;
169
+
170
+ for (var i = 0; i < body.length; i++) {
171
+ var node = body[i];
172
+ if (node.type === "infix") {
173
+ if (overIndex !== -1) {
174
+ throw new ParseError("only one infix operator per group",
175
+ this.lexer, -1);
176
+ }
177
+ overIndex = i;
178
+ funcName = node.value.replaceWith;
179
+ func = functions.funcs[funcName];
180
+ }
181
+ }
182
+
183
+ if (overIndex !== -1) {
184
+ var numerNode, denomNode;
185
+
186
+ var numerBody = body.slice(0, overIndex);
187
+ var denomBody = body.slice(overIndex + 1);
188
+
189
+ if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
190
+ numerNode = numerBody[0];
191
+ } else {
192
+ numerNode = new ParseNode("ordgroup", numerBody, mode);
193
+ }
194
+
195
+ if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
196
+ denomNode = denomBody[0];
197
+ } else {
198
+ denomNode = new ParseNode("ordgroup", denomBody, mode);
199
+ }
200
+
201
+ var value = func.handler(funcName, numerNode, denomNode);
202
+ return [new ParseNode(value.type, value, mode)];
203
+ } else {
204
+ return body;
205
+ }
206
+ };
207
+
208
+ // The greediness of a superscript or subscript
209
+ var SUPSUB_GREEDINESS = 1;
210
+
211
+ /**
212
+ * Handle a subscript or superscript with nice errors.
213
+ */
214
+ Parser.prototype.handleSupSubscript = function(pos, mode, symbol, name) {
215
+ var group = this.parseGroup(pos, mode);
216
+
217
+ if (!group) {
218
+ throw new ParseError(
219
+ "Expected group after '" + symbol + "'", this.lexer, pos);
220
+ } else if (group.numArgs > 0) {
221
+ // ^ and _ have a greediness, so handle interactions with functions'
222
+ // greediness
223
+ var funcGreediness = functions.getGreediness(group.result.result);
224
+ if (funcGreediness > SUPSUB_GREEDINESS) {
225
+ return this.parseFunction(pos, mode);
226
+ } else {
227
+ throw new ParseError(
228
+ "Got function '" + group.result.result + "' with no arguments " +
229
+ "as " + name,
230
+ this.lexer, pos);
231
+ }
232
+ } else {
233
+ return group.result;
234
+ }
235
+ };
236
+
237
+ /**
238
+ * Parses a group with optional super/subscripts.
239
+ *
240
+ * @return {?ParseResult}
241
+ */
242
+ Parser.prototype.parseAtom = function(pos, mode) {
243
+ // The body of an atom is an implicit group, so that things like
244
+ // \left(x\right)^2 work correctly.
245
+ var base = this.parseImplicitGroup(pos, mode);
246
+
247
+ // In text mode, we don't have superscripts or subscripts
248
+ if (mode === "text") {
249
+ return base;
250
+ }
251
+
252
+ // Handle an empty base
253
+ var currPos;
254
+ if (!base) {
255
+ currPos = pos;
256
+ base = undefined;
257
+ } else {
258
+ currPos = base.position;
259
+ }
260
+
261
+ var superscript;
262
+ var subscript;
263
+ var result;
264
+ while (true) {
265
+ // Lex the first token
266
+ var lex = this.lexer.lex(currPos, mode);
267
+
268
+ if (lex.text === "^") {
269
+ // We got a superscript start
270
+ if (superscript) {
271
+ throw new ParseError(
272
+ "Double superscript", this.lexer, currPos);
273
+ }
274
+ result = this.handleSupSubscript(
275
+ lex.position, mode, lex.text, "superscript");
276
+ currPos = result.position;
277
+ superscript = result.result;
278
+ } else if (lex.text === "_") {
279
+ // We got a subscript start
280
+ if (subscript) {
281
+ throw new ParseError(
282
+ "Double subscript", this.lexer, currPos);
283
+ }
284
+ result = this.handleSupSubscript(
285
+ lex.position, mode, lex.text, "subscript");
286
+ currPos = result.position;
287
+ subscript = result.result;
288
+ } else if (lex.text === "'") {
289
+ // We got a prime
290
+ var prime = new ParseNode("textord", "\\prime", mode);
291
+
292
+ // Many primes can be grouped together, so we handle this here
293
+ var primes = [prime];
294
+ currPos = lex.position;
295
+ // Keep lexing tokens until we get something that's not a prime
296
+ while ((lex = this.lexer.lex(currPos, mode)).text === "'") {
297
+ // For each one, add another prime to the list
298
+ primes.push(prime);
299
+ currPos = lex.position;
300
+ }
301
+ // Put them into an ordgroup as the superscript
302
+ superscript = new ParseNode("ordgroup", primes, mode);
303
+ } else {
304
+ // If it wasn't ^, _, or ', stop parsing super/subscripts
305
+ break;
306
+ }
307
+ }
308
+
309
+ if (superscript || subscript) {
310
+ // If we got either a superscript or subscript, create a supsub
311
+ return new ParseResult(
312
+ new ParseNode("supsub", {
313
+ base: base && base.result,
314
+ sup: superscript,
315
+ sub: subscript
316
+ }, mode),
317
+ currPos);
318
+ } else {
319
+ // Otherwise return the original body
320
+ return base;
321
+ }
322
+ };
323
+
324
+ // A list of the size-changing functions, for use in parseImplicitGroup
325
+ var sizeFuncs = [
326
+ "\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize",
327
+ "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"
328
+ ];
329
+
330
+ // A list of the style-changing functions, for use in parseImplicitGroup
331
+ var styleFuncs = [
332
+ "\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"
333
+ ];
334
+
335
+ /**
336
+ * Parses an implicit group, which is a group that starts at the end of a
337
+ * specified, and ends right before a higher explicit group ends, or at EOL. It
338
+ * is used for functions that appear to affect the current style, like \Large or
339
+ * \textrm, where instead of keeping a style we just pretend that there is an
340
+ * implicit grouping after it until the end of the group. E.g.
341
+ * small text {\Large large text} small text again
342
+ * It is also used for \left and \right to get the correct grouping.
343
+ *
344
+ * @return {?ParseResult}
345
+ */
346
+ Parser.prototype.parseImplicitGroup = function(pos, mode) {
347
+ var start = this.parseSymbol(pos, mode);
348
+
349
+ if (!start || !start.result) {
350
+ // If we didn't get anything we handle, fall back to parseFunction
351
+ return this.parseFunction(pos, mode);
352
+ }
353
+
354
+ var func = start.result.result;
355
+ var body;
356
+
357
+ if (func === "\\left") {
358
+ // If we see a left:
359
+ // Parse the entire left function (including the delimiter)
360
+ var left = this.parseFunction(pos, mode);
361
+ // Parse out the implicit body
362
+ body = this.parseExpression(left.position, mode, false, "}");
363
+ // Check the next token
364
+ var rightLex = this.parseSymbol(body.position, mode);
365
+
366
+ if (rightLex && rightLex.result.result === "\\right") {
367
+ // If it's a \right, parse the entire right function (including the delimiter)
368
+ var right = this.parseFunction(body.position, mode);
369
+
370
+ return new ParseResult(
371
+ new ParseNode("leftright", {
372
+ body: body.result,
373
+ left: left.result.value.value,
374
+ right: right.result.value.value
375
+ }, mode),
376
+ right.position);
377
+ } else {
378
+ throw new ParseError("Missing \\right", this.lexer, body.position);
379
+ }
380
+ } else if (func === "\\right") {
381
+ // If we see a right, explicitly fail the parsing here so the \left
382
+ // handling ends the group
383
+ return null;
384
+ } else if (utils.contains(sizeFuncs, func)) {
385
+ // If we see a sizing function, parse out the implict body
386
+ body = this.parseExpression(start.result.position, mode, false, "}");
387
+ return new ParseResult(
388
+ new ParseNode("sizing", {
389
+ // Figure out what size to use based on the list of functions above
390
+ size: "size" + (utils.indexOf(sizeFuncs, func) + 1),
391
+ value: body.result
392
+ }, mode),
393
+ body.position);
394
+ } else if (utils.contains(styleFuncs, func)) {
395
+ // If we see a styling function, parse out the implict body
396
+ body = this.parseExpression(start.result.position, mode, true, "}");
397
+ return new ParseResult(
398
+ new ParseNode("styling", {
399
+ // Figure out what style to use by pulling out the style from
400
+ // the function name
401
+ style: func.slice(1, func.length - 5),
402
+ value: body.result
403
+ }, mode),
404
+ body.position);
405
+ } else {
406
+ // Defer to parseFunction if it's not a function we handle
407
+ return this.parseFunction(pos, mode);
408
+ }
409
+ };
410
+
411
+ /**
412
+ * Parses an entire function, including its base and all of its arguments
413
+ *
414
+ * @return {?ParseResult}
415
+ */
416
+ Parser.prototype.parseFunction = function(pos, mode) {
417
+ var baseGroup = this.parseGroup(pos, mode);
418
+
419
+ if (baseGroup) {
420
+ if (baseGroup.isFunction) {
421
+ var func = baseGroup.result.result;
422
+ if (mode === "text" && !baseGroup.allowedInText) {
423
+ throw new ParseError(
424
+ "Can't use function '" + func + "' in text mode",
425
+ this.lexer, baseGroup.position);
426
+ }
427
+
428
+ var newPos = baseGroup.result.position;
429
+ var result;
430
+
431
+ var totalArgs = baseGroup.numArgs + baseGroup.numOptionalArgs;
432
+
433
+ if (totalArgs > 0) {
434
+ var baseGreediness = functions.getGreediness(func);
435
+ var args = [func];
436
+ var positions = [newPos];
437
+
438
+ for (var i = 0; i < totalArgs; i++) {
439
+ var argType = baseGroup.argTypes && baseGroup.argTypes[i];
440
+ var arg;
441
+ if (i < baseGroup.numOptionalArgs) {
442
+ if (argType) {
443
+ arg = this.parseSpecialGroup(newPos, argType, mode, true);
444
+ } else {
445
+ arg = this.parseOptionalGroup(newPos, mode);
446
+ }
447
+ if (!arg) {
448
+ args.push(null);
449
+ positions.push(newPos);
450
+ continue;
451
+ }
452
+ } else {
453
+ if (argType) {
454
+ arg = this.parseSpecialGroup(newPos, argType, mode);
455
+ } else {
456
+ arg = this.parseGroup(newPos, mode);
457
+ }
458
+ if (!arg) {
459
+ throw new ParseError(
460
+ "Expected group after '" + baseGroup.result.result +
461
+ "'",
462
+ this.lexer, newPos);
463
+ }
464
+ }
465
+ var argNode;
466
+ if (arg.numArgs > 0) {
467
+ var argGreediness = functions.getGreediness(arg.result.result);
468
+ if (argGreediness > baseGreediness) {
469
+ argNode = this.parseFunction(newPos, mode);
470
+ } else {
471
+ throw new ParseError(
472
+ "Got function '" + arg.result.result + "' as " +
473
+ "argument to function '" +
474
+ baseGroup.result.result + "'",
475
+ this.lexer, arg.result.position - 1);
476
+ }
477
+ } else {
478
+ argNode = arg.result;
479
+ }
480
+ args.push(argNode.result);
481
+ positions.push(argNode.position);
482
+ newPos = argNode.position;
483
+ }
484
+
485
+ args.push(positions);
486
+
487
+ result = functions.funcs[func].handler.apply(this, args);
488
+ } else {
489
+ result = functions.funcs[func].handler.apply(this, [func]);
490
+ }
491
+
492
+ return new ParseResult(
493
+ new ParseNode(result.type, result, mode),
494
+ newPos);
495
+ } else {
496
+ return baseGroup.result;
497
+ }
498
+ } else {
499
+ return null;
500
+ }
501
+ };
502
+
503
+ /**
504
+ * Parses a group when the mode is changing. Takes a position, a new mode, and
505
+ * an outer mode that is used to parse the outside.
506
+ *
507
+ * @return {?ParseFuncOrArgument}
508
+ */
509
+ Parser.prototype.parseSpecialGroup = function(pos, mode, outerMode, optional) {
510
+ if (mode === "color" || mode === "size") {
511
+ // color and size modes are special because they should have braces and
512
+ // should only lex a single symbol inside
513
+ var openBrace = this.lexer.lex(pos, outerMode);
514
+ if (optional && openBrace.text !== "[") {
515
+ // optional arguments should return null if they don't exist
516
+ return null;
517
+ }
518
+ this.expect(openBrace, optional ? "[" : "{");
519
+ var inner = this.lexer.lex(openBrace.position, mode);
520
+ var data;
521
+ if (mode === "color") {
522
+ data = inner.text;
523
+ } else {
524
+ data = inner.data;
525
+ }
526
+ var closeBrace = this.lexer.lex(inner.position, outerMode);
527
+ this.expect(closeBrace, optional ? "]" : "}");
528
+ return new ParseFuncOrArgument(
529
+ new ParseResult(
530
+ new ParseNode(mode, data, outerMode),
531
+ closeBrace.position),
532
+ false);
533
+ } else if (mode === "text") {
534
+ // text mode is special because it should ignore the whitespace before
535
+ // it
536
+ var whitespace = this.lexer.lex(pos, "whitespace");
537
+ pos = whitespace.position;
538
+ }
539
+
540
+ if (optional) {
541
+ return this.parseOptionalGroup(pos, mode);
542
+ } else {
543
+ return this.parseGroup(pos, mode);
544
+ }
545
+ };
546
+
547
+ /**
548
+ * Parses a group, which is either a single nucleus (like "x") or an expression
549
+ * in braces (like "{x+y}")
550
+ *
551
+ * @return {?ParseFuncOrArgument}
552
+ */
553
+ Parser.prototype.parseGroup = function(pos, mode) {
554
+ var start = this.lexer.lex(pos, mode);
555
+ // Try to parse an open brace
556
+ if (start.text === "{") {
557
+ // If we get a brace, parse an expression
558
+ var expression = this.parseExpression(start.position, mode, false, "}");
559
+ // Make sure we get a close brace
560
+ var closeBrace = this.lexer.lex(expression.position, mode);
561
+ this.expect(closeBrace, "}");
562
+ return new ParseFuncOrArgument(
563
+ new ParseResult(
564
+ new ParseNode("ordgroup", expression.result, mode),
565
+ closeBrace.position),
566
+ false);
567
+ } else {
568
+ // Otherwise, just return a nucleus
569
+ return this.parseSymbol(pos, mode);
570
+ }
571
+ };
572
+
573
+ /**
574
+ * Parses a group, which is an expression in brackets (like "[x+y]")
575
+ *
576
+ * @return {?ParseFuncOrArgument}
577
+ */
578
+ Parser.prototype.parseOptionalGroup = function(pos, mode) {
579
+ var start = this.lexer.lex(pos, mode);
580
+ // Try to parse an open bracket
581
+ if (start.text === "[") {
582
+ // If we get a brace, parse an expression
583
+ var expression = this.parseExpression(start.position, mode, false, "]");
584
+ // Make sure we get a close bracket
585
+ var closeBracket = this.lexer.lex(expression.position, mode);
586
+ this.expect(closeBracket, "]");
587
+ return new ParseFuncOrArgument(
588
+ new ParseResult(
589
+ new ParseNode("ordgroup", expression.result, mode),
590
+ closeBracket.position),
591
+ false);
592
+ } else {
593
+ // Otherwise, return null,
594
+ return null;
595
+ }
596
+ };
597
+
598
+ /**
599
+ * Parse a single symbol out of the string. Here, we handle both the functions
600
+ * we have defined, as well as the single character symbols
601
+ *
602
+ * @return {?ParseFuncOrArgument}
603
+ */
604
+ Parser.prototype.parseSymbol = function(pos, mode) {
605
+ var nucleus = this.lexer.lex(pos, mode);
606
+
607
+ if (functions.funcs[nucleus.text]) {
608
+ // If there is a function with this name, we use its data
609
+ var func = functions.funcs[nucleus.text];
610
+
611
+ // Here, we replace "original" argTypes with the current mode
612
+ var argTypes = func.argTypes;
613
+ if (argTypes) {
614
+ argTypes = argTypes.slice();
615
+ for (var i = 0; i < argTypes.length; i++) {
616
+ if (argTypes[i] === "original") {
617
+ argTypes[i] = mode;
618
+ }
619
+ }
620
+ }
621
+
622
+ return new ParseFuncOrArgument(
623
+ new ParseResult(nucleus.text, nucleus.position),
624
+ true, func.allowedInText, func.numArgs, func.numOptionalArgs, argTypes);
625
+ } else if (symbols[mode][nucleus.text]) {
626
+ // Otherwise if this is a no-argument function, find the type it
627
+ // corresponds to in the symbols map
628
+ return new ParseFuncOrArgument(
629
+ new ParseResult(
630
+ new ParseNode(symbols[mode][nucleus.text].group,
631
+ nucleus.text, mode),
632
+ nucleus.position),
633
+ false);
634
+ } else {
635
+ return null;
636
+ }
637
+ };
638
+
639
+ module.exports = Parser;