hyhyhy 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +184 -0
- data/Rakefile +2 -0
- data/bin/hyhyhy +59 -0
- data/hyhyhy.gemspec +29 -0
- data/lib/hyhyhy.rb +101 -0
- data/lib/hyhyhy/config.rb +29 -0
- data/lib/hyhyhy/frames.rb +108 -0
- data/lib/hyhyhy/logger.rb +40 -0
- data/lib/hyhyhy/parser.rb +9 -0
- data/lib/hyhyhy/structure/.bowerrc +5 -0
- data/lib/hyhyhy/structure/.hyhyhy +5 -0
- data/lib/hyhyhy/structure/README.md +0 -0
- data/lib/hyhyhy/structure/_assets/javascripts/main.js +395 -0
- data/lib/hyhyhy/structure/_assets/stylesheets/main.css +520 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/.bower.json +47 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/Gruntfile.js +472 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/LICENSE +21 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/README.md +129 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/bower.json +38 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.css +470 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.css.map +1 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap-theme.min.css +5 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.css +6332 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.css.map +1 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/css/bootstrap.min.css +5 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/bootstrap.js +2320 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/bootstrap.min.js +7 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/dist/js/npm.js +13 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/.jshintrc +7 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-commonjs-generator.js +23 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-lessdoc-parser.js +238 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/bs-raw-files-generator.js +46 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/configBridge.json +44 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/grunt/sauce_browsers.yml +82 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/.jscsrc +34 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/.jshintrc +15 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/affix.js +162 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/alert.js +94 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/button.js +116 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/carousel.js +240 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/collapse.js +211 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/dropdown.js +161 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/modal.js +324 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/popover.js +119 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/scrollspy.js +175 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/tab.js +153 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/tooltip.js +478 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/js/transition.js +59 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/.csscomb.json +304 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/.csslintrc +19 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/alerts.less +68 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/badges.less +61 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/bootstrap.less +50 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/breadcrumbs.less +26 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/button-groups.less +243 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/buttons.less +160 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/carousel.less +267 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/close.less +33 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/code.less +69 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/component-animations.less +34 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/dropdowns.less +213 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/forms.less +546 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/glyphicons.less +234 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/grid.less +84 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/input-groups.less +166 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/jumbotron.less +49 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/labels.less +64 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/list-group.less +124 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/media.less +47 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins.less +39 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/alerts.less +14 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/background-variant.less +8 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/border-radius.less +18 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/buttons.less +52 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/center-block.less +7 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/clearfix.less +22 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/forms.less +85 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/gradients.less +59 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/grid-framework.less +91 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/grid.less +122 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/hide-text.less +21 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/image.less +33 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/labels.less +12 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/list-group.less +29 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/nav-divider.less +10 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/nav-vertical-align.less +9 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/opacity.less +8 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/pagination.less +23 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/panels.less +24 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/progress-bar.less +10 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/reset-filter.less +8 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/resize.less +6 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/responsive-visibility.less +15 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/size.less +10 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/tab-focus.less +9 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/table-row.less +28 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/text-emphasis.less +8 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/text-overflow.less +8 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/mixins/vendor-prefixes.less +227 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/modals.less +148 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/navbar.less +660 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/navs.less +244 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/normalize.less +427 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/pager.less +54 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/pagination.less +88 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/panels.less +261 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/popovers.less +135 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/print.less +107 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/progress-bars.less +87 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/responsive-embed.less +35 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/responsive-utilities.less +194 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/scaffolding.less +150 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/tables.less +234 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/theme.less +272 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/thumbnails.less +36 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/tooltip.less +103 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/type.less +302 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/utilities.less +56 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/variables.less +856 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/less/wells.less +29 -0
- data/lib/hyhyhy/structure/_includes/bootstrap/package.json +82 -0
- data/lib/hyhyhy/structure/_includes/bower.json +9 -0
- data/lib/hyhyhy/structure/_includes/d3/.bower.json +37 -0
- data/lib/hyhyhy/structure/_includes/d3/CONTRIBUTING.md +25 -0
- data/lib/hyhyhy/structure/_includes/d3/LICENSE +26 -0
- data/lib/hyhyhy/structure/_includes/d3/README.md +9 -0
- data/lib/hyhyhy/structure/_includes/d3/bower.json +26 -0
- data/lib/hyhyhy/structure/_includes/d3/d3.js +9470 -0
- data/lib/hyhyhy/structure/_includes/d3/d3.min.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/.bower.json +38 -0
- data/lib/hyhyhy/structure/_includes/jquery/MIT-LICENSE.txt +21 -0
- data/lib/hyhyhy/structure/_includes/jquery/bower.json +27 -0
- data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.js +9190 -0
- data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.min.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/dist/jquery.min.map +1 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax.js +806 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/jsonp.js +89 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/load.js +75 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/parseJSON.js +13 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/parseXML.js +28 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/script.js +64 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/var/nonce.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/var/rquery.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/ajax/xhr.js +135 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes.js +11 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes/attr.js +143 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes/classes.js +158 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes/prop.js +96 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes/support.js +35 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/attributes/val.js +163 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/callbacks.js +205 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core.js +498 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core/access.js +60 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core/init.js +123 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core/parseHTML.js +39 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core/ready.js +97 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/core/var/rsingleTag.js +4 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css.js +451 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/addGetHookIf.js +24 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/curCSS.js +57 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/defaultDisplay.js +70 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/support.js +91 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/swap.js +28 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/var/cssExpand.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/var/getStyles.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/var/isHidden.js +13 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/var/rmargin.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/css/var/rnumnonpx.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/data.js +179 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/data/Data.js +181 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/data/accepts.js +20 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/data/var/data_priv.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/data/var/data_user.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/deferred.js +149 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/deprecated.js +13 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/dimensions.js +50 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/effects.js +649 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/effects/Tween.js +114 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/effects/animatedSelector.js +13 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/event.js +868 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/event/alias.js +39 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/event/support.js +9 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/exports/amd.js +24 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/exports/global.js +32 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/intro.js +44 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/jquery.js +36 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/manipulation.js +582 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/_evalUrl.js +18 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/support.js +31 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/offset.js +204 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/outro.js +1 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/queue.js +142 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/queue/delay.js +22 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/selector-native.js +172 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/selector-sizzle.js +14 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/selector.js +1 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/serialize.js +111 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.js +2044 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/traversing.js +200 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/traversing/findFilter.js +100 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/arr.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/class2type.js +4 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/concat.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/hasOwn.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/indexOf.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/pnum.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/push.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/rnotwhite.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/slice.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/strundefined.js +3 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/support.js +4 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/var/toString.js +5 -0
- data/lib/hyhyhy/structure/_includes/jquery/src/wrap.js +78 -0
- data/lib/hyhyhy/structure/_includes/katex/.arcconfig +4 -0
- data/lib/hyhyhy/structure/_includes/katex/.bower.json +14 -0
- data/lib/hyhyhy/structure/_includes/katex/.gitignore +5 -0
- data/lib/hyhyhy/structure/_includes/katex/.hyhyhy +10 -0
- data/lib/hyhyhy/structure/_includes/katex/.jshintrc +67 -0
- data/lib/hyhyhy/structure/_includes/katex/.travis.yml +4 -0
- data/lib/hyhyhy/structure/_includes/katex/CONTRIBUTING.md +112 -0
- data/lib/hyhyhy/structure/_includes/katex/LICENSE.txt +21 -0
- data/lib/hyhyhy/structure/_includes/katex/Makefile +61 -0
- data/lib/hyhyhy/structure/_includes/katex/README.md +50 -0
- data/lib/hyhyhy/structure/_includes/katex/cli.js +15 -0
- data/lib/hyhyhy/structure/_includes/katex/dockers/HuxleyTests/Dockerfile +13 -0
- data/lib/hyhyhy/structure/_includes/katex/dockers/HuxleyTests/README.md +29 -0
- data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/Dockerfile +34 -0
- data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/README.md +55 -0
- data/lib/hyhyhy/structure/_includes/katex/dockers/MathJaxFonts/copy_fonts.sh +47 -0
- data/lib/hyhyhy/structure/_includes/katex/katex.js +54 -0
- data/lib/hyhyhy/structure/_includes/katex/lint_blacklist.txt +8 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/README.md +21 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/extract_tfms.py +94 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/extract_ttfs.py +75 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/mapping.pl +997 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/parse_tfm.py +201 -0
- data/lib/hyhyhy/structure/_includes/katex/metrics/replace_line.py +17 -0
- data/lib/hyhyhy/structure/_includes/katex/package.json +30 -0
- data/lib/hyhyhy/structure/_includes/katex/server.js +77 -0
- data/lib/hyhyhy/structure/_includes/katex/src/Lexer.js +190 -0
- data/lib/hyhyhy/structure/_includes/katex/src/Options.js +85 -0
- data/lib/hyhyhy/structure/_includes/katex/src/ParseError.js +40 -0
- data/lib/hyhyhy/structure/_includes/katex/src/Parser.js +639 -0
- data/lib/hyhyhy/structure/_includes/katex/src/Style.js +126 -0
- data/lib/hyhyhy/structure/_includes/katex/src/buildCommon.js +271 -0
- data/lib/hyhyhy/structure/_includes/katex/src/buildTree.js +1167 -0
- data/lib/hyhyhy/structure/_includes/katex/src/delimiter.js +541 -0
- data/lib/hyhyhy/structure/_includes/katex/src/domTree.js +241 -0
- data/lib/hyhyhy/structure/_includes/katex/src/fontMetrics.js +129 -0
- data/lib/hyhyhy/structure/_includes/katex/src/functions.js +539 -0
- data/lib/hyhyhy/structure/_includes/katex/src/parseTree.js +17 -0
- data/lib/hyhyhy/structure/_includes/katex/src/symbols.js +1006 -0
- data/lib/hyhyhy/structure/_includes/katex/src/utils.js +97 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts.less +73 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Bold.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-BoldItalic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Italic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Greek-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Bold.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Italic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Main-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Italic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Math-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Script-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.eot +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- data/lib/hyhyhy/structure/_includes/katex/static/index.html +17 -0
- data/lib/hyhyhy/structure/_includes/katex/static/katex.less +430 -0
- data/lib/hyhyhy/structure/_includes/katex/static/main.css +12 -0
- data/lib/hyhyhy/structure/_includes/katex/static/main.js +42 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfile.json +199 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Accents.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Accents.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Baseline.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Baseline.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BasicTest.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BasicTest.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BinomTest.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/BinomTest.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Colors.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Colors.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DeepFontSizing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DeepFontSizing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DelimiterSizing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DelimiterSizing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DisplayStyle.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/DisplayStyle.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Exponents.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Exponents.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/FractionTest.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/FractionTest.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Functions.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Functions.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/GreekLetters.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/GreekLetters.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/KaTeX.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/KaTeX.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Lap.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Lap.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRight.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRight.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightListStyling.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightListStyling.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightStyleSizing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/LeftRightStyleSizing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NestedFractions.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NestedFractions.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NullDelimiterInteraction.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/NullDelimiterInteraction.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/OpLimits.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/OpLimits.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Overline.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Overline.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/PrimeSpacing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/PrimeSpacing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/RlapBug.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/RlapBug.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Rule.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Rule.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sizing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sizing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SizingBaseline.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SizingBaseline.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Spacing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Spacing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sqrt.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Sqrt.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubCharacterBox.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubCharacterBox.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubHorizSpacing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubHorizSpacing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubOffsets.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/SupSubOffsets.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Text.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/Text.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/VerticalSpacing.hux/firefox-1.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/Huxleyfolder/VerticalSpacing.record.json +5 -0
- data/lib/hyhyhy/structure/_includes/katex/test/huxley/test.html +30 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/MIT.LICENSE +20 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/boot.js +120 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/console.js +166 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine-html.js +390 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine.css +61 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine.js +2593 -0
- data/lib/hyhyhy/structure/_includes/katex/test/jasmine/jasmine_favicon.png +0 -0
- data/lib/hyhyhy/structure/_includes/katex/test/katex-spec.js +1179 -0
- data/lib/hyhyhy/structure/_includes/katex/test/test.html +12 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/.bower.json +61 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/.hyhyhy +17 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/LICENSE +362 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/README.md +70 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/bower.json +50 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics-demo-dark.css +640 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics-demo.css +176 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/css/metricsgraphics.css +344 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/images/missing-data-dark.png +0 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/images/missing-data.png +0 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/js/metricsgraphics.min.js +590 -0
- data/lib/hyhyhy/structure/_includes/metrics-graphics/package.json +35 -0
- data/lib/hyhyhy/structure/_includes/prism/.bower.json +34 -0
- data/lib/hyhyhy/structure/_includes/prism/.hyhyhy +33 -0
- data/lib/hyhyhy/structure/_includes/prism/LICENSE +21 -0
- data/lib/hyhyhy/structure/_includes/prism/README.md +22 -0
- data/lib/hyhyhy/structure/_includes/prism/bower.json +26 -0
- data/lib/hyhyhy/structure/_includes/prism/components.js +233 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-apacheconf.js +46 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-apacheconf.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-aspnet.js +49 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-aspnet.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-autohotkey.js +27 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-autohotkey.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-bash.js +24 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-bash.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-c.js +26 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-c.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-clike.js +32 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-clike.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-coffeescript.js +18 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-coffeescript.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-core.js +424 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-core.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-cpp.js +12 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-cpp.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-csharp.js +6 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-csharp.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-css-extras.js +15 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-css-extras.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-css.js +50 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-css.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-gherkin.js +13 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-gherkin.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-git.js +68 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-git.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-go.js +9 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-go.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-groovy.js +43 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-groovy.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-handlebars.js +92 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-handlebars.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-haskell.js +32 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-haskell.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-http.js +44 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-http.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-ini.js +11 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-ini.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-java.js +8 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-java.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-javascript.js +27 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-javascript.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-latex.js +6 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-latex.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-markup.js +41 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-markup.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-nasm.js +20 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-nasm.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-nsis.js +19 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-nsis.min.js +5 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-objectivec.js +5 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-objectivec.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-perl.js +112 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-perl.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-php-extras.js +11 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-php-extras.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-php.js +99 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-php.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-python.js +14 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-python.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-rip.js +29 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-rip.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-ruby.js +21 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-ruby.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scala.js +8 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scala.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scheme-min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scheme.js +24 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scss.js +36 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-scss.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-sql.js +17 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-sql.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-swift.js +8 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-swift.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-twig.js +46 -0
- data/lib/hyhyhy/structure/_includes/prism/components/prism-twig.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/gulpfile.js +48 -0
- data/lib/hyhyhy/structure/_includes/prism/package.json +27 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.css +3 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.js +66 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/autolinker/prism-autolinker.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/file-highlight/prism-file-highlight.js +54 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/file-highlight/prism-file-highlight.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.css +3 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.js +42 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/ie8/prism-ie8.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.css +47 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.js +109 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-highlight/prism-line-highlight.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.css +40 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.js +24 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/line-numbers/prism-line-numbers.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.css +17 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.js +15 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-invisibles/prism-show-invisibles.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.css +21 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.js +16 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.min.css +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/show-language/prism-show-language.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.css +11 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.js +163 -0
- data/lib/hyhyhy/structure/_includes/prism/plugins/wpd/prism-wpd.min.js +1 -0
- data/lib/hyhyhy/structure/_includes/prism/prism.js +662 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-coy.css +210 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-dark.css +122 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-funky.css +111 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-okaidia.css +114 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-tomorrow.css +115 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism-twilight.css +195 -0
- data/lib/hyhyhy/structure/_includes/prism/themes/prism.css +131 -0
- data/lib/hyhyhy/structure/_includes/prism/vendor/promise.js +5 -0
- data/lib/hyhyhy/structure/_layouts/default.erb +41 -0
- data/lib/hyhyhy/structure/_slides/1.introduction.md +36 -0
- data/lib/hyhyhy/structure/_slides/2.packages.md +52 -0
- data/lib/hyhyhy/structure/_slides/3.usage.md +146 -0
- data/lib/hyhyhy/version.rb +5 -0
- 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;
|