forked from sheetjs/docs.sheetjs.com
		
	
		
			
				
	
	
		
			870 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			870 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
(function webpackUniversalModuleDefinition(root, factory) {
 | 
						|
	if(typeof exports === 'object' && typeof module === 'object')
 | 
						|
		module.exports = factory(require("katex"));
 | 
						|
	else if(typeof define === 'function' && define.amd)
 | 
						|
		define(["katex"], factory);
 | 
						|
	else {
 | 
						|
		var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]);
 | 
						|
		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
 | 
						|
	}
 | 
						|
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) {
 | 
						|
return /******/ (function(modules) { // webpackBootstrap
 | 
						|
/******/ 	// The module cache
 | 
						|
/******/ 	var installedModules = {};
 | 
						|
/******/
 | 
						|
/******/ 	// The require function
 | 
						|
/******/ 	function __webpack_require__(moduleId) {
 | 
						|
/******/
 | 
						|
/******/ 		// Check if module is in cache
 | 
						|
/******/ 		if(installedModules[moduleId]) {
 | 
						|
/******/ 			return installedModules[moduleId].exports;
 | 
						|
/******/ 		}
 | 
						|
/******/ 		// Create a new module (and put it into the cache)
 | 
						|
/******/ 		var module = installedModules[moduleId] = {
 | 
						|
/******/ 			i: moduleId,
 | 
						|
/******/ 			l: false,
 | 
						|
/******/ 			exports: {}
 | 
						|
/******/ 		};
 | 
						|
/******/
 | 
						|
/******/ 		// Execute the module function
 | 
						|
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
 | 
						|
/******/
 | 
						|
/******/ 		// Flag the module as loaded
 | 
						|
/******/ 		module.l = true;
 | 
						|
/******/
 | 
						|
/******/ 		// Return the exports of the module
 | 
						|
/******/ 		return module.exports;
 | 
						|
/******/ 	}
 | 
						|
/******/
 | 
						|
/******/
 | 
						|
/******/ 	// expose the modules object (__webpack_modules__)
 | 
						|
/******/ 	__webpack_require__.m = modules;
 | 
						|
/******/
 | 
						|
/******/ 	// expose the module cache
 | 
						|
/******/ 	__webpack_require__.c = installedModules;
 | 
						|
/******/
 | 
						|
/******/ 	// define getter function for harmony exports
 | 
						|
/******/ 	__webpack_require__.d = function(exports, name, getter) {
 | 
						|
/******/ 		if(!__webpack_require__.o(exports, name)) {
 | 
						|
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
 | 
						|
/******/ 		}
 | 
						|
/******/ 	};
 | 
						|
/******/
 | 
						|
/******/ 	// define __esModule on exports
 | 
						|
/******/ 	__webpack_require__.r = function(exports) {
 | 
						|
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
 | 
						|
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
 | 
						|
/******/ 		}
 | 
						|
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
 | 
						|
/******/ 	};
 | 
						|
/******/
 | 
						|
/******/ 	// create a fake namespace object
 | 
						|
/******/ 	// mode & 1: value is a module id, require it
 | 
						|
/******/ 	// mode & 2: merge all properties of value into the ns
 | 
						|
/******/ 	// mode & 4: return value when already ns object
 | 
						|
/******/ 	// mode & 8|1: behave like require
 | 
						|
/******/ 	__webpack_require__.t = function(value, mode) {
 | 
						|
/******/ 		if(mode & 1) value = __webpack_require__(value);
 | 
						|
/******/ 		if(mode & 8) return value;
 | 
						|
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
 | 
						|
/******/ 		var ns = Object.create(null);
 | 
						|
/******/ 		__webpack_require__.r(ns);
 | 
						|
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
 | 
						|
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
 | 
						|
/******/ 		return ns;
 | 
						|
/******/ 	};
 | 
						|
/******/
 | 
						|
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
 | 
						|
/******/ 	__webpack_require__.n = function(module) {
 | 
						|
/******/ 		var getter = module && module.__esModule ?
 | 
						|
/******/ 			function getDefault() { return module['default']; } :
 | 
						|
/******/ 			function getModuleExports() { return module; };
 | 
						|
/******/ 		__webpack_require__.d(getter, 'a', getter);
 | 
						|
/******/ 		return getter;
 | 
						|
/******/ 	};
 | 
						|
/******/
 | 
						|
/******/ 	// Object.prototype.hasOwnProperty.call
 | 
						|
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
 | 
						|
/******/
 | 
						|
/******/ 	// __webpack_public_path__
 | 
						|
/******/ 	__webpack_require__.p = "";
 | 
						|
/******/
 | 
						|
/******/
 | 
						|
/******/ 	// Load entry module and return exports
 | 
						|
/******/ 	return __webpack_require__(__webpack_require__.s = 1);
 | 
						|
/******/ })
 | 
						|
/************************************************************************/
 | 
						|
/******/ ([
 | 
						|
/* 0 */
 | 
						|
/***/ (function(module, exports) {
 | 
						|
 | 
						|
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
 | 
						|
 | 
						|
/***/ }),
 | 
						|
/* 1 */
 | 
						|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
 | 
						|
 | 
						|
"use strict";
 | 
						|
__webpack_require__.r(__webpack_exports__);
 | 
						|
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
 | 
						|
/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__);
 | 
						|
/**
 | 
						|
 * renderA11yString returns a readable string.
 | 
						|
 *
 | 
						|
 * In some cases the string will have the proper semantic math
 | 
						|
 * meaning,:
 | 
						|
 *   renderA11yString("\\frac{1}{2}"")
 | 
						|
 *   -> "start fraction, 1, divided by, 2, end fraction"
 | 
						|
 *
 | 
						|
 * However, other cases do not:
 | 
						|
 *   renderA11yString("f(x) = x^2")
 | 
						|
 *   -> "f, left parenthesis, x, right parenthesis, equals, x, squared"
 | 
						|
 *
 | 
						|
 * The commas in the string aim to increase ease of understanding
 | 
						|
 * when read by a screenreader.
 | 
						|
 */
 | 
						|
// NOTE: since we're importing types here these files won't actually be
 | 
						|
// included in the build.
 | 
						|
// $FlowIgnore: we import the types directly anyways
 | 
						|
 | 
						|
var stringMap = {
 | 
						|
  "(": "left parenthesis",
 | 
						|
  ")": "right parenthesis",
 | 
						|
  "[": "open bracket",
 | 
						|
  "]": "close bracket",
 | 
						|
  "\\{": "left brace",
 | 
						|
  "\\}": "right brace",
 | 
						|
  "\\lvert": "open vertical bar",
 | 
						|
  "\\rvert": "close vertical bar",
 | 
						|
  "|": "vertical bar",
 | 
						|
  "\\uparrow": "up arrow",
 | 
						|
  "\\Uparrow": "up arrow",
 | 
						|
  "\\downarrow": "down arrow",
 | 
						|
  "\\Downarrow": "down arrow",
 | 
						|
  "\\updownarrow": "up down arrow",
 | 
						|
  "\\leftarrow": "left arrow",
 | 
						|
  "\\Leftarrow": "left arrow",
 | 
						|
  "\\rightarrow": "right arrow",
 | 
						|
  "\\Rightarrow": "right arrow",
 | 
						|
  "\\langle": "open angle",
 | 
						|
  "\\rangle": "close angle",
 | 
						|
  "\\lfloor": "open floor",
 | 
						|
  "\\rfloor": "close floor",
 | 
						|
  "\\int": "integral",
 | 
						|
  "\\intop": "integral",
 | 
						|
  "\\lim": "limit",
 | 
						|
  "\\ln": "natural log",
 | 
						|
  "\\log": "log",
 | 
						|
  "\\sin": "sine",
 | 
						|
  "\\cos": "cosine",
 | 
						|
  "\\tan": "tangent",
 | 
						|
  "\\cot": "cotangent",
 | 
						|
  "\\sum": "sum",
 | 
						|
  "/": "slash",
 | 
						|
  ",": "comma",
 | 
						|
  ".": "point",
 | 
						|
  "-": "negative",
 | 
						|
  "+": "plus",
 | 
						|
  "~": "tilde",
 | 
						|
  ":": "colon",
 | 
						|
  "?": "question mark",
 | 
						|
  "'": "apostrophe",
 | 
						|
  "\\%": "percent",
 | 
						|
  " ": "space",
 | 
						|
  "\\ ": "space",
 | 
						|
  "\\$": "dollar sign",
 | 
						|
  "\\angle": "angle",
 | 
						|
  "\\degree": "degree",
 | 
						|
  "\\circ": "circle",
 | 
						|
  "\\vec": "vector",
 | 
						|
  "\\triangle": "triangle",
 | 
						|
  "\\pi": "pi",
 | 
						|
  "\\prime": "prime",
 | 
						|
  "\\infty": "infinity",
 | 
						|
  "\\alpha": "alpha",
 | 
						|
  "\\beta": "beta",
 | 
						|
  "\\gamma": "gamma",
 | 
						|
  "\\omega": "omega",
 | 
						|
  "\\theta": "theta",
 | 
						|
  "\\sigma": "sigma",
 | 
						|
  "\\lambda": "lambda",
 | 
						|
  "\\tau": "tau",
 | 
						|
  "\\Delta": "delta",
 | 
						|
  "\\delta": "delta",
 | 
						|
  "\\mu": "mu",
 | 
						|
  "\\rho": "rho",
 | 
						|
  "\\nabla": "del",
 | 
						|
  "\\ell": "ell",
 | 
						|
  "\\ldots": "dots",
 | 
						|
  // TODO: add entries for all accents
 | 
						|
  "\\hat": "hat",
 | 
						|
  "\\acute": "acute"
 | 
						|
};
 | 
						|
var powerMap = {
 | 
						|
  "prime": "prime",
 | 
						|
  "degree": "degrees",
 | 
						|
  "circle": "degrees",
 | 
						|
  "2": "squared",
 | 
						|
  "3": "cubed"
 | 
						|
};
 | 
						|
var openMap = {
 | 
						|
  "|": "open vertical bar",
 | 
						|
  ".": ""
 | 
						|
};
 | 
						|
var closeMap = {
 | 
						|
  "|": "close vertical bar",
 | 
						|
  ".": ""
 | 
						|
};
 | 
						|
var binMap = {
 | 
						|
  "+": "plus",
 | 
						|
  "-": "minus",
 | 
						|
  "\\pm": "plus minus",
 | 
						|
  "\\cdot": "dot",
 | 
						|
  "*": "times",
 | 
						|
  "/": "divided by",
 | 
						|
  "\\times": "times",
 | 
						|
  "\\div": "divided by",
 | 
						|
  "\\circ": "circle",
 | 
						|
  "\\bullet": "bullet"
 | 
						|
};
 | 
						|
var relMap = {
 | 
						|
  "=": "equals",
 | 
						|
  "\\approx": "approximately equals",
 | 
						|
  "≠": "does not equal",
 | 
						|
  "\\geq": "is greater than or equal to",
 | 
						|
  "\\ge": "is greater than or equal to",
 | 
						|
  "\\leq": "is less than or equal to",
 | 
						|
  "\\le": "is less than or equal to",
 | 
						|
  ">": "is greater than",
 | 
						|
  "<": "is less than",
 | 
						|
  "\\leftarrow": "left arrow",
 | 
						|
  "\\Leftarrow": "left arrow",
 | 
						|
  "\\rightarrow": "right arrow",
 | 
						|
  "\\Rightarrow": "right arrow",
 | 
						|
  ":": "colon"
 | 
						|
};
 | 
						|
var accentUnderMap = {
 | 
						|
  "\\underleftarrow": "left arrow",
 | 
						|
  "\\underrightarrow": "right arrow",
 | 
						|
  "\\underleftrightarrow": "left-right arrow",
 | 
						|
  "\\undergroup": "group",
 | 
						|
  "\\underlinesegment": "line segment",
 | 
						|
  "\\utilde": "tilde"
 | 
						|
};
 | 
						|
 | 
						|
var buildString = function buildString(str, type, a11yStrings) {
 | 
						|
  if (!str) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  var ret;
 | 
						|
 | 
						|
  if (type === "open") {
 | 
						|
    ret = str in openMap ? openMap[str] : stringMap[str] || str;
 | 
						|
  } else if (type === "close") {
 | 
						|
    ret = str in closeMap ? closeMap[str] : stringMap[str] || str;
 | 
						|
  } else if (type === "bin") {
 | 
						|
    ret = binMap[str] || str;
 | 
						|
  } else if (type === "rel") {
 | 
						|
    ret = relMap[str] || str;
 | 
						|
  } else {
 | 
						|
    ret = stringMap[str] || str;
 | 
						|
  } // If the text to add is a number and there is already a string
 | 
						|
  // in the list and the last string is a number then we should
 | 
						|
  // combine them into a single number
 | 
						|
 | 
						|
 | 
						|
  if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string
 | 
						|
  // I think we might be able to drop the nested arrays, which would make
 | 
						|
  // this easier to type - $FlowFixMe
 | 
						|
  /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) {
 | 
						|
    a11yStrings[a11yStrings.length - 1] += ret;
 | 
						|
  } else if (ret) {
 | 
						|
    a11yStrings.push(ret);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
var buildRegion = function buildRegion(a11yStrings, callback) {
 | 
						|
  var regionStrings = [];
 | 
						|
  a11yStrings.push(regionStrings);
 | 
						|
  callback(regionStrings);
 | 
						|
};
 | 
						|
 | 
						|
var handleObject = function handleObject(tree, a11yStrings, atomType) {
 | 
						|
  // Everything else is assumed to be an object...
 | 
						|
  switch (tree.type) {
 | 
						|
    case "accent":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (a11yStrings) {
 | 
						|
          buildA11yStrings(tree.base, a11yStrings, atomType);
 | 
						|
          a11yStrings.push("with");
 | 
						|
          buildString(tree.label, "normal", a11yStrings);
 | 
						|
          a11yStrings.push("on top");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "accentUnder":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (a11yStrings) {
 | 
						|
          buildA11yStrings(tree.base, a11yStrings, atomType);
 | 
						|
          a11yStrings.push("with");
 | 
						|
          buildString(accentUnderMap[tree.label], "normal", a11yStrings);
 | 
						|
          a11yStrings.push("underneath");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "accent-token":
 | 
						|
      {
 | 
						|
        // Used internally by accent symbols.
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "atom":
 | 
						|
      {
 | 
						|
        var text = tree.text;
 | 
						|
 | 
						|
        switch (tree.family) {
 | 
						|
          case "bin":
 | 
						|
            {
 | 
						|
              buildString(text, "bin", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
 | 
						|
          case "close":
 | 
						|
            {
 | 
						|
              buildString(text, "close", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
          // TODO(kevinb): figure out what should be done for inner
 | 
						|
 | 
						|
          case "inner":
 | 
						|
            {
 | 
						|
              buildString(tree.text, "inner", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
 | 
						|
          case "open":
 | 
						|
            {
 | 
						|
              buildString(text, "open", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
 | 
						|
          case "punct":
 | 
						|
            {
 | 
						|
              buildString(text, "punct", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
 | 
						|
          case "rel":
 | 
						|
            {
 | 
						|
              buildString(text, "rel", a11yStrings);
 | 
						|
              break;
 | 
						|
            }
 | 
						|
 | 
						|
          default:
 | 
						|
            {
 | 
						|
              tree.family;
 | 
						|
              throw new Error("\"" + tree.family + "\" is not a valid atom type");
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "color":
 | 
						|
      {
 | 
						|
        var color = tree.color.replace(/katex-/, "");
 | 
						|
        buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
          regionStrings.push("start color " + color);
 | 
						|
          buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
          regionStrings.push("end color " + color);
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "color-token":
 | 
						|
      {
 | 
						|
        // Used by \color, \colorbox, and \fcolorbox but not directly rendered.
 | 
						|
        // It's a leaf node and has no children so just break.
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "delimsizing":
 | 
						|
      {
 | 
						|
        if (tree.delim && tree.delim !== ".") {
 | 
						|
          buildString(tree.delim, "normal", a11yStrings);
 | 
						|
        }
 | 
						|
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "genfrac":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
          // genfrac can have unbalanced delimiters
 | 
						|
          var leftDelim = tree.leftDelim,
 | 
						|
              rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption
 | 
						|
          // hasBarLine true -> fraction, false -> binomial
 | 
						|
 | 
						|
          if (tree.hasBarLine) {
 | 
						|
            regionStrings.push("start fraction");
 | 
						|
            leftDelim && buildString(leftDelim, "open", regionStrings);
 | 
						|
            buildA11yStrings(tree.numer, regionStrings, atomType);
 | 
						|
            regionStrings.push("divided by");
 | 
						|
            buildA11yStrings(tree.denom, regionStrings, atomType);
 | 
						|
            rightDelim && buildString(rightDelim, "close", regionStrings);
 | 
						|
            regionStrings.push("end fraction");
 | 
						|
          } else {
 | 
						|
            regionStrings.push("start binomial");
 | 
						|
            leftDelim && buildString(leftDelim, "open", regionStrings);
 | 
						|
            buildA11yStrings(tree.numer, regionStrings, atomType);
 | 
						|
            regionStrings.push("over");
 | 
						|
            buildA11yStrings(tree.denom, regionStrings, atomType);
 | 
						|
            rightDelim && buildString(rightDelim, "close", regionStrings);
 | 
						|
            regionStrings.push("end binomial");
 | 
						|
          }
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "kern":
 | 
						|
      {
 | 
						|
        // No op: we don't attempt to present kerning information
 | 
						|
        // to the screen reader.
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "leftright":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
          buildString(tree.left, "open", regionStrings);
 | 
						|
          buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
          buildString(tree.right, "close", regionStrings);
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "leftright-right":
 | 
						|
      {
 | 
						|
        // TODO: double check that this is a no-op
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "lap":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "mathord":
 | 
						|
      {
 | 
						|
        buildString(tree.text, "normal", a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "op":
 | 
						|
      {
 | 
						|
        var body = tree.body,
 | 
						|
            name = tree.name;
 | 
						|
 | 
						|
        if (body) {
 | 
						|
          buildA11yStrings(body, a11yStrings, atomType);
 | 
						|
        } else if (name) {
 | 
						|
          buildString(name, "normal", a11yStrings);
 | 
						|
        }
 | 
						|
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "op-token":
 | 
						|
      {
 | 
						|
        // Used internally by operator symbols.
 | 
						|
        buildString(tree.text, atomType, a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "ordgroup":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "overline":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (a11yStrings) {
 | 
						|
          a11yStrings.push("start overline");
 | 
						|
          buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
          a11yStrings.push("end overline");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "phantom":
 | 
						|
      {
 | 
						|
        a11yStrings.push("empty space");
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "raisebox":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "rule":
 | 
						|
      {
 | 
						|
        a11yStrings.push("rectangle");
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "sizing":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "spacing":
 | 
						|
      {
 | 
						|
        a11yStrings.push("space");
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "styling":
 | 
						|
      {
 | 
						|
        // We ignore the styling and just pass through the contents
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "sqrt":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
          var body = tree.body,
 | 
						|
              index = tree.index;
 | 
						|
 | 
						|
          if (index) {
 | 
						|
            var indexString = flatten(buildA11yStrings(index, [], atomType)).join(",");
 | 
						|
 | 
						|
            if (indexString === "3") {
 | 
						|
              regionStrings.push("cube root of");
 | 
						|
              buildA11yStrings(body, regionStrings, atomType);
 | 
						|
              regionStrings.push("end cube root");
 | 
						|
              return;
 | 
						|
            }
 | 
						|
 | 
						|
            regionStrings.push("root");
 | 
						|
            regionStrings.push("start index");
 | 
						|
            buildA11yStrings(index, regionStrings, atomType);
 | 
						|
            regionStrings.push("end index");
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          regionStrings.push("square root of");
 | 
						|
          buildA11yStrings(body, regionStrings, atomType);
 | 
						|
          regionStrings.push("end square root");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "supsub":
 | 
						|
      {
 | 
						|
        var base = tree.base,
 | 
						|
            sub = tree.sub,
 | 
						|
            sup = tree.sup;
 | 
						|
        var isLog = false;
 | 
						|
 | 
						|
        if (base) {
 | 
						|
          buildA11yStrings(base, a11yStrings, atomType);
 | 
						|
          isLog = base.type === "op" && base.name === "\\log";
 | 
						|
        }
 | 
						|
 | 
						|
        if (sub) {
 | 
						|
          var regionName = isLog ? "base" : "subscript";
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            regionStrings.push("start " + regionName);
 | 
						|
            buildA11yStrings(sub, regionStrings, atomType);
 | 
						|
            regionStrings.push("end " + regionName);
 | 
						|
          });
 | 
						|
        }
 | 
						|
 | 
						|
        if (sup) {
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            var supString = flatten(buildA11yStrings(sup, [], atomType)).join(",");
 | 
						|
 | 
						|
            if (supString in powerMap) {
 | 
						|
              regionStrings.push(powerMap[supString]);
 | 
						|
              return;
 | 
						|
            }
 | 
						|
 | 
						|
            regionStrings.push("start superscript");
 | 
						|
            buildA11yStrings(sup, regionStrings, atomType);
 | 
						|
            regionStrings.push("end superscript");
 | 
						|
          });
 | 
						|
        }
 | 
						|
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "text":
 | 
						|
      {
 | 
						|
        // TODO: handle other fonts
 | 
						|
        if (tree.font === "\\textbf") {
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            regionStrings.push("start bold text");
 | 
						|
            buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
            regionStrings.push("end bold text");
 | 
						|
          });
 | 
						|
          break;
 | 
						|
        }
 | 
						|
 | 
						|
        buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
          regionStrings.push("start text");
 | 
						|
          buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
          regionStrings.push("end text");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "textord":
 | 
						|
      {
 | 
						|
        buildString(tree.text, atomType, a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "smash":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "enclose":
 | 
						|
      {
 | 
						|
        // TODO: create a map for these.
 | 
						|
        // TODO: differentiate between a body with a single atom, e.g.
 | 
						|
        // "cancel a" instead of "start cancel, a, end cancel"
 | 
						|
        if (/cancel/.test(tree.label)) {
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            regionStrings.push("start cancel");
 | 
						|
            buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
            regionStrings.push("end cancel");
 | 
						|
          });
 | 
						|
          break;
 | 
						|
        } else if (/box/.test(tree.label)) {
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            regionStrings.push("start box");
 | 
						|
            buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
            regionStrings.push("end box");
 | 
						|
          });
 | 
						|
          break;
 | 
						|
        } else if (/sout/.test(tree.label)) {
 | 
						|
          buildRegion(a11yStrings, function (regionStrings) {
 | 
						|
            regionStrings.push("start strikeout");
 | 
						|
            buildA11yStrings(tree.body, regionStrings, atomType);
 | 
						|
            regionStrings.push("end strikeout");
 | 
						|
          });
 | 
						|
          break;
 | 
						|
        }
 | 
						|
 | 
						|
        throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "vphantom":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: vphantom not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "hphantom":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: hphantom not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "operatorname":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "array":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: array not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "raw":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: raw not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "size":
 | 
						|
      {
 | 
						|
        // Although there are nodes of type "size" in the parse tree, they have
 | 
						|
        // no semantic meaning and should be ignored.
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "url":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: url not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "tag":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: tag not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "verb":
 | 
						|
      {
 | 
						|
        buildString("start verbatim", "normal", a11yStrings);
 | 
						|
        buildString(tree.body, "normal", a11yStrings);
 | 
						|
        buildString("end verbatim", "normal", a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "environment":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: environment not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "horizBrace":
 | 
						|
      {
 | 
						|
        buildString("start " + tree.label.slice(1), "normal", a11yStrings);
 | 
						|
        buildA11yStrings(tree.base, a11yStrings, atomType);
 | 
						|
        buildString("end " + tree.label.slice(1), "normal", a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "infix":
 | 
						|
      {
 | 
						|
        // All infix nodes are replace with other nodes.
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "includegraphics":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: includegraphics not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "font":
 | 
						|
      {
 | 
						|
        // TODO: callout the start/end of specific fonts
 | 
						|
        // TODO: map \BBb{N} to "the naturals" or something like that
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "href":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: href not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "cr":
 | 
						|
      {
 | 
						|
        // This is used by environments.
 | 
						|
        throw new Error("KaTeX-a11y: cr not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "underline":
 | 
						|
      {
 | 
						|
        buildRegion(a11yStrings, function (a11yStrings) {
 | 
						|
          a11yStrings.push("start underline");
 | 
						|
          buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
          a11yStrings.push("end underline");
 | 
						|
        });
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "xArrow":
 | 
						|
      {
 | 
						|
        throw new Error("KaTeX-a11y: xArrow not implemented yet");
 | 
						|
      }
 | 
						|
 | 
						|
    case "mclass":
 | 
						|
      {
 | 
						|
        // \neq and \ne are macros so we let "htmlmathml" render the mathmal
 | 
						|
        // side of things and extract the text from that.
 | 
						|
        var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass
 | 
						|
 | 
						|
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, _atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "mathchoice":
 | 
						|
      {
 | 
						|
        // TODO: track which which style we're using, e.g. dispaly, text, etc.
 | 
						|
        // default to text style if even that may not be the correct style
 | 
						|
        buildA11yStrings(tree.text, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "htmlmathml":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.mathml, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "middle":
 | 
						|
      {
 | 
						|
        buildString(tree.delim, atomType, a11yStrings);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "internal":
 | 
						|
      {
 | 
						|
        // internal nodes are never included in the parse tree
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    case "html":
 | 
						|
      {
 | 
						|
        buildA11yStrings(tree.body, a11yStrings, atomType);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    default:
 | 
						|
      tree.type;
 | 
						|
      throw new Error("KaTeX a11y un-recognized type: " + tree.type);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) {
 | 
						|
  if (a11yStrings === void 0) {
 | 
						|
    a11yStrings = [];
 | 
						|
  }
 | 
						|
 | 
						|
  if (tree instanceof Array) {
 | 
						|
    for (var i = 0; i < tree.length; i++) {
 | 
						|
      buildA11yStrings(tree[i], a11yStrings, atomType);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    handleObject(tree, a11yStrings, atomType);
 | 
						|
  }
 | 
						|
 | 
						|
  return a11yStrings;
 | 
						|
};
 | 
						|
 | 
						|
var flatten = function flatten(array) {
 | 
						|
  var result = [];
 | 
						|
  array.forEach(function (item) {
 | 
						|
    if (item instanceof Array) {
 | 
						|
      result = result.concat(flatten(item));
 | 
						|
    } else {
 | 
						|
      result.push(item);
 | 
						|
    }
 | 
						|
  });
 | 
						|
  return result;
 | 
						|
};
 | 
						|
 | 
						|
var renderA11yString = function renderA11yString(text, settings) {
 | 
						|
  var tree = katex__WEBPACK_IMPORTED_MODULE_0___default.a.__parse(text, settings);
 | 
						|
 | 
						|
  var a11yStrings = buildA11yStrings(tree, [], "normal");
 | 
						|
  return flatten(a11yStrings).join(", ");
 | 
						|
};
 | 
						|
 | 
						|
/* harmony default export */ __webpack_exports__["default"] = (renderA11yString);
 | 
						|
 | 
						|
/***/ })
 | 
						|
/******/ ])["default"];
 | 
						|
}); |