{"version":3,"sources":["webpack:///./node_modules/react-syntax-highlighter/node_modules/highlight.js/lib/languages/latex.js"],"names":["_toConsumableArray","source","re","either","_len","arguments","length","args","Array","_key","joined","map","x","join","module","exports","hljs","_ref","DOUBLE_CARET_VARIANTS","begin","EVERYTHING_BUT_VERBATIM","className","relevance","contains","endsParent","apply","word","RegExp","pattern","variants","end","COMMENT","BRACE_GROUP_NO_VERBATIM","concat","ARGUMENT_BRACES","inherit","ARGUMENT_BRACKETS","SPACE_GOBBLER","ARGUMENT_M","ARGUMENT_O","ARGUMENT_AND_THEN","arg","starts_mode","starts","CSNAME","csname","keywords","$pattern","keyword","BEGIN_ENV","envname","VERBATIM_DELIMITED_EQUAL","innerName","undefined","END_SAME_AS_BEGIN","excludeBegin","excludeEnd","VERBATIM_DELIMITED_ENV","VERBATIM_DELIMITED_BRACES","VERBATIM","suffix","prefix","name","aliases"],"mappings":"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","file":"react-syntax-highlighter_languages_highlight_latex-9e470a2c78431114d6c0.js","sourcesContent":["var _toConsumableArray = require(\"/Users/srinify/Documents/superset/docs/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/toConsumableArray\");\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n  return re.source;\n}\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\n\n\nfunction either() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var joined = '(' + args.map(function (x) {\n    return source(x);\n  }).join(\"|\") + \")\";\n  return joined;\n}\n/*\nLanguage: LaTeX\nAuthor: Benedikt Wilde <bwilde@posteo.de>\nWebsite: https://www.latex-project.org\nCategory: markup\n*/\n\n/** @type LanguageFn */\n\n\nfunction latex(hljs) {\n  var _ref;\n\n  var KNOWN_CONTROL_WORDS = either.apply(void 0, _toConsumableArray(['(?:NeedsTeXFormat|RequirePackage|GetIdInfo)', 'Provides(?:Expl)?(?:Package|Class|File)', '(?:DeclareOption|ProcessOptions)', '(?:documentclass|usepackage|input|include)', 'makeat(?:letter|other)', 'ExplSyntax(?:On|Off)', '(?:new|renew|provide)?command', '(?:re)newenvironment', '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand', '(?:New|Renew|Provide|Declare)DocumentEnvironment', '(?:(?:e|g|x)?def|let)', '(?:begin|end)', '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)', 'caption', '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)', '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)', '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)', '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)', '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)', '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'].map(function (word) {\n    return word + '(?![a-zA-Z@:_])';\n  })));\n  var L3_REGEX = new RegExp([// A function \\module_function_name:signature or \\__module_function_name:signature,\n  // where both module and function_name need at least two characters and\n  // function_name may contain single underscores.\n  '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*', // A variable \\scope_module_and_name_type or \\scope__module_ane_name_type,\n  // where scope is one of l, g or c, type needs at least two characters\n  // and module_and_name may contain single underscores.\n  '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}', // A quark \\q_the_name or \\q__the_name or\n  // scan mark \\s_the_name or \\s__vthe_name,\n  // where variable_name needs at least two characters and\n  // may contain single underscores.\n  '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+', // Other LaTeX3 macro names that are not covered by the three rules above.\n  'use(?:_i)?:[a-zA-Z]*', '(?:else|fi|or):', '(?:if|cs|exp):w', '(?:hbox|vbox):n', '::[a-zA-Z]_unbraced', '::[a-zA-Z:]'].map(function (pattern) {\n    return pattern + '(?![a-zA-Z:_])';\n  }).join('|'));\n  var L2_VARIANTS = [{\n    begin: /[a-zA-Z@]+/\n  }, // control word\n  {\n    begin: /[^a-zA-Z@]?/\n  } // control symbol\n  ];\n  var DOUBLE_CARET_VARIANTS = [{\n    begin: /\\^{6}[0-9a-f]{6}/\n  }, {\n    begin: /\\^{5}[0-9a-f]{5}/\n  }, {\n    begin: /\\^{4}[0-9a-f]{4}/\n  }, {\n    begin: /\\^{3}[0-9a-f]{3}/\n  }, {\n    begin: /\\^{2}[0-9a-f]{2}/\n  }, {\n    begin: /\\^{2}[\\u0000-\\u007f]/\n  }];\n  var CONTROL_SEQUENCE = {\n    className: 'keyword',\n    begin: /\\\\/,\n    relevance: 0,\n    contains: [{\n      endsParent: true,\n      begin: KNOWN_CONTROL_WORDS\n    }, {\n      endsParent: true,\n      begin: L3_REGEX\n    }, {\n      endsParent: true,\n      variants: DOUBLE_CARET_VARIANTS\n    }, {\n      endsParent: true,\n      relevance: 0,\n      variants: L2_VARIANTS\n    }]\n  };\n  var MACRO_PARAM = {\n    className: 'params',\n    relevance: 0,\n    begin: /#+\\d?/\n  };\n  var DOUBLE_CARET_CHAR = {\n    // relevance: 1\n    variants: DOUBLE_CARET_VARIANTS\n  };\n  var SPECIAL_CATCODE = {\n    className: 'built_in',\n    relevance: 0,\n    begin: /[$&^_]/\n  };\n  var MAGIC_COMMENT = {\n    className: 'meta',\n    begin: '% !TeX',\n    end: '$',\n    relevance: 10\n  };\n  var COMMENT = hljs.COMMENT('%', '$', {\n    relevance: 0\n  });\n  var EVERYTHING_BUT_VERBATIM = [CONTROL_SEQUENCE, MACRO_PARAM, DOUBLE_CARET_CHAR, SPECIAL_CATCODE, MAGIC_COMMENT, COMMENT];\n  var BRACE_GROUP_NO_VERBATIM = {\n    begin: /\\{/,\n    end: /\\}/,\n    relevance: 0,\n    contains: ['self'].concat(EVERYTHING_BUT_VERBATIM)\n  };\n  var ARGUMENT_BRACES = hljs.inherit(BRACE_GROUP_NO_VERBATIM, {\n    relevance: 0,\n    endsParent: true,\n    contains: [BRACE_GROUP_NO_VERBATIM].concat(EVERYTHING_BUT_VERBATIM)\n  });\n  var ARGUMENT_BRACKETS = {\n    begin: /\\[/,\n    end: /\\]/,\n    endsParent: true,\n    relevance: 0,\n    contains: [BRACE_GROUP_NO_VERBATIM].concat(EVERYTHING_BUT_VERBATIM)\n  };\n  var SPACE_GOBBLER = {\n    begin: /\\s+/,\n    relevance: 0\n  };\n  var ARGUMENT_M = [ARGUMENT_BRACES];\n  var ARGUMENT_O = [ARGUMENT_BRACKETS];\n\n  var ARGUMENT_AND_THEN = function ARGUMENT_AND_THEN(arg, starts_mode) {\n    return {\n      contains: [SPACE_GOBBLER],\n      starts: {\n        relevance: 0,\n        contains: arg,\n        starts: starts_mode\n      }\n    };\n  };\n\n  var CSNAME = function CSNAME(csname, starts_mode) {\n    return {\n      begin: '\\\\\\\\' + csname + '(?![a-zA-Z@:_])',\n      keywords: {\n        $pattern: /\\\\[a-zA-Z]+/,\n        keyword: '\\\\' + csname\n      },\n      relevance: 0,\n      contains: [SPACE_GOBBLER],\n      starts: starts_mode\n    };\n  };\n\n  var BEGIN_ENV = function BEGIN_ENV(envname, starts_mode) {\n    return hljs.inherit({\n      begin: '\\\\\\\\begin(?=\\\\s*\\\\r?\\\\n?\\\\s*\\\\{' + envname + '\\\\})',\n      keywords: {\n        $pattern: /\\\\[a-zA-Z]+/,\n        keyword: '\\\\begin'\n      },\n      relevance: 0\n    }, ARGUMENT_AND_THEN(ARGUMENT_M, starts_mode));\n  };\n\n  var VERBATIM_DELIMITED_EQUAL = function VERBATIM_DELIMITED_EQUAL() {\n    var innerName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"string\";\n    return hljs.END_SAME_AS_BEGIN({\n      className: innerName,\n      begin: /(.|\\r?\\n)/,\n      end: /(.|\\r?\\n)/,\n      excludeBegin: true,\n      excludeEnd: true,\n      endsParent: true\n    });\n  };\n\n  var VERBATIM_DELIMITED_ENV = function VERBATIM_DELIMITED_ENV(envname) {\n    return {\n      className: 'string',\n      end: '(?=\\\\\\\\end\\\\{' + envname + '\\\\})'\n    };\n  };\n\n  var VERBATIM_DELIMITED_BRACES = function VERBATIM_DELIMITED_BRACES() {\n    var innerName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"string\";\n    return {\n      relevance: 0,\n      begin: /\\{/,\n      starts: {\n        endsParent: true,\n        contains: [{\n          className: innerName,\n          end: /(?=\\})/,\n          endsParent: true,\n          contains: [{\n            begin: /\\{/,\n            end: /\\}/,\n            relevance: 0,\n            contains: [\"self\"]\n          }]\n        }]\n      }\n    };\n  };\n\n  var VERBATIM = [].concat(_toConsumableArray(['verb', 'lstinline'].map(function (csname) {\n    return CSNAME(csname, {\n      contains: [VERBATIM_DELIMITED_EQUAL()]\n    });\n  })), [CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M, {\n    contains: [VERBATIM_DELIMITED_EQUAL()]\n  })), CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M, {\n    contains: [VERBATIM_DELIMITED_BRACES(), VERBATIM_DELIMITED_EQUAL()]\n  })), CSNAME('url', {\n    contains: [VERBATIM_DELIMITED_BRACES(\"link\"), VERBATIM_DELIMITED_BRACES(\"link\")]\n  }), CSNAME('hyperref', {\n    contains: [VERBATIM_DELIMITED_BRACES(\"link\")]\n  }), CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O, {\n    contains: [VERBATIM_DELIMITED_BRACES(\"link\")]\n  }))], _toConsumableArray((_ref = []).concat.apply(_ref, _toConsumableArray(['', '\\\\*'].map(function (suffix) {\n    return [BEGIN_ENV('verbatim' + suffix, VERBATIM_DELIMITED_ENV('verbatim' + suffix)), BEGIN_ENV('filecontents' + suffix, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('filecontents' + suffix)))].concat(_toConsumableArray(['', 'B', 'L'].map(function (prefix) {\n      return BEGIN_ENV(prefix + 'Verbatim' + suffix, ARGUMENT_AND_THEN(ARGUMENT_O, VERBATIM_DELIMITED_ENV(prefix + 'Verbatim' + suffix)));\n    })));\n  })))), [BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('minted'))))]);\n  return {\n    name: 'LaTeX',\n    aliases: ['TeX'],\n    contains: [].concat(_toConsumableArray(VERBATIM), EVERYTHING_BUT_VERBATIM)\n  };\n}\n\nmodule.exports = latex;"],"sourceRoot":""}