hyhyhy 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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;