Use babel-plugin-preval instead of own unicodeMake for unicodeSymbols (#2153)

* Use babel-plugin-preval instead of own unicodeMake for unicodeSymbols

* Fix circular dependency transpiling issue

* Flow type unicodeSymbols.js

Co-authored-by: Erik Demaine <edemaine@mit.edu>
This commit is contained in:
ylemkimon
2020-07-09 06:58:11 +09:00
committed by GitHub
parent f2886af6de
commit 3272472ffe
9 changed files with 95 additions and 404 deletions

View File

@@ -85,7 +85,7 @@
},
"overrides": [{
"files": ["katex.js", "src/**/*.js", "contrib/**/*.js"],
"excludedFiles": ["*-spec.js", "unicodeMake.js"],
"excludedFiles": ["*-spec.js", "unicodeAccents.js", "unicodeSymbols.js"],
"rules": {
"no-restricted-syntax": [2, "ForOfStatement", "ClassDeclaration[superClass]", "ClassExpression[superClass]"],
"transform-runtime-aliasing/no-transform-runtime-aliasing": [2, {

View File

@@ -18,6 +18,7 @@ module.exports = api => {
loose: true,
}],
"version-inline",
"preval",
];
return {

View File

@@ -175,7 +175,7 @@ function startServer() {
options: {
plugins: [['istanbul', {
include: ["src/**/*.js"],
exclude: ["src/unicodeMake.js"],
exclude: ["src/unicodeSymbols.js"],
}]],
},
};

View File

@@ -28,6 +28,7 @@
"babel-jest": "^24.1.0",
"babel-loader": "^8.0.5",
"babel-plugin-istanbul": "^5.1.1",
"babel-plugin-preval": "^3.0.1",
"babel-plugin-version-inline": "^1.0.0",
"benchmark": "^2.1.4",
"browserslist": "^4.7.1",
@@ -75,7 +76,7 @@
},
"bin": "cli.js",
"scripts": {
"test": "yarn prestart && yarn test:lint && yarn test:flow && yarn test:jest",
"test": "yarn test:lint && yarn test:flow && yarn test:jest",
"test:lint": "yarn test:lint:js && yarn test:lint:css",
"test:lint:js": "eslint *.js src static test contrib dockers website",
"test:lint:css": "stylelint src/katex.less static/main.css contrib/**/*.css website/static/**/*.css",
@@ -85,14 +86,13 @@
"test:jest:update": "jest --updateSnapshot",
"test:jest:coverage": "jest --coverage",
"test:screenshots": "yarn test:screenshots:update --verify",
"test:screenshots:update": "yarn prestart && dockers/screenshotter/screenshotter.sh",
"test:perf": "yarn prestart && NODE_ENV=test node test/perf-test.js",
"test:screenshots:update": "dockers/screenshotter/screenshotter.sh",
"test:perf": "NODE_ENV=test node test/perf-test.js",
"clean": "rm -rf dist/ node_modules/",
"clean-install": "yarn clean && yarn",
"prestart": "node src/unicodeMake.js",
"start": "webpack-dev-server --hot --config webpack.dev.js",
"analyze": "webpack --config webpack.analyze.js",
"build": "yarn prestart && rimraf dist/ && mkdirp dist && cp README.md dist && rollup -c && webpack",
"build": "rimraf dist/ && mkdirp dist && cp README.md dist && rollup -c && webpack",
"watch": "yarn build --watch",
"dist": "yarn test && yarn build && yarn dist:zip",
"dist:zip": "rimraf katex/ katex.tar.gz katex.zip && cp -R dist katex && tar czf katex.tar.gz katex && zip -rq katex.zip katex && rimraf katex/"
@@ -111,7 +111,7 @@
"collectCoverageFrom": [
"src/**/*.js",
"contrib/**/*.js",
"!src/unicodeMake.js",
"!src/unicodeSymbols.js",
"!contrib/mhchem/**"
],
"setupFilesAfterEnv": [

View File

@@ -5,13 +5,16 @@ import MacroExpander, {implicitCommands} from "./MacroExpander";
import symbols, {ATOMS, extraLatin} from "./symbols";
import {validUnit} from "./units";
import {supportedCodepoint} from "./unicodeScripts";
import unicodeAccents from "./unicodeAccents";
import unicodeSymbols from "./unicodeSymbols";
import ParseError from "./ParseError";
import {combiningDiacriticalMarksEndRegex} from "./Lexer";
import Settings from "./Settings";
import SourceLocation from "./SourceLocation";
import {Token} from "./Token";
// Pre-evaluate both modules as unicodeSymbols require String.normalize()
import unicodeAccents from /*preval*/ "./unicodeAccents";
import unicodeSymbols from /*preval*/ "./unicodeSymbols";
import type {ParseNode, AnyParseNode, SymbolParseNode, UnsupportedCmdParseNode}
from "./parseNode";
import type {Atom, Group} from "./symbols";

View File

@@ -1,6 +1,8 @@
// Mapping of Unicode accent characters to their LaTeX equivalent in text and
// math mode (when they exist).
export default {
// This exports a CommonJS module, allowing to be required in unicodeSymbols
// without transpiling.
module.exports = {
'\u0301': {text: "\\'", math: '\\acute'},
'\u0300': {text: '\\`', math: '\\grave'},
'\u0308': {text: '\\"', math: '\\ddot'},

View File

@@ -1,70 +0,0 @@
/* eslint no-console:0 */
// This is an internal Node tool, not part of the KaTeX distribution,
// whose purpose is to generate unicodeSymbols.js in this directory.
// In this way, only this tool, and not the distribution/browser,
// needs String's normalize function.
const path = require('path');
const fs = require('fs');
const target = path.join(__dirname, 'unicodeSymbols.js');
const targetMtime = fs.statSync(target).mtime;
if (fs.statSync(__filename).mtime <= targetMtime && fs.statSync(
path.join(__dirname, 'unicodeAccents.js')).mtime <= targetMtime) {
process.exit(0);
}
require('@babel/register');
const accents = require('./unicodeAccents').default;
const encode = function(string) {
let output = '"';
for (let i = 0; i < string.length; i++) {
let hex = string.charCodeAt(i).toString(16);
while (hex.length < 4) {
hex = `0${hex}`;
}
output += `\\u${hex}`;
}
output = `${output}"`;
return output;
};
let unicodeSymbols =
`// @flow
// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
export default {
`;
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"αβγδεϵζηθϑικλμνξοπϖρϱςστυφϕχψωΓΔΘΛΞΠΣΥΦΨΩ";
for (const letter of letters) {
for (const accent of Object.getOwnPropertyNames(accents)) {
const combined = letter + accent;
const normalized = combined.normalize('NFC');
if (normalized.length === 1) {
unicodeSymbols +=
` ${encode(normalized)}: ${encode(combined)},`
+ ` // ${normalized} = ${accents[accent].text}{${letter}}\n`;
}
for (const accent2 of Object.getOwnPropertyNames(accents)) {
if (accent === accent2) {
continue;
}
const combined2 = combined + accent2;
const normalized2 = combined2.normalize('NFC');
if (normalized2.length === 1) {
unicodeSymbols +=
` ${encode(normalized2)}: ${encode(combined2)},`
+ ` // ${normalized2} = ${accents[accent].text}`
+ `${accents[accent2].text}{${letter}}\n`;
}
}
}
}
unicodeSymbols += `};
`;
fs.writeFileSync(target, unicodeSymbols);

View File

@@ -1,323 +1,32 @@
// @flow
// This file is GENERATED by unicodeMake.js. DO NOT MODIFY.
// This is an internal module, not part of the KaTeX distribution,
// whose purpose is to generate `unicodeSymbols` in Parser.js
// In this way, only this module, and not the distribution/browser,
// needs String's normalize function. As this file is not transpiled,
// Flow comment types syntax is used.
const accents = require('./unicodeAccents');
export default {
"\u00e1": "\u0061\u0301", // á = \'{a}
"\u00e0": "\u0061\u0300", // à = \`{a}
"\u00e4": "\u0061\u0308", // ä = \"{a}
"\u01df": "\u0061\u0308\u0304", // ǟ = \"\={a}
"\u00e3": "\u0061\u0303", // ã = \~{a}
"\u0101": "\u0061\u0304", // ā = \={a}
"\u0103": "\u0061\u0306", // ă = \u{a}
"\u1eaf": "\u0061\u0306\u0301", // ắ = \u\'{a}
"\u1eb1": "\u0061\u0306\u0300", // ằ = \u\`{a}
"\u1eb5": "\u0061\u0306\u0303", // ẵ = \u\~{a}
"\u01ce": "\u0061\u030c", // ǎ = \v{a}
"\u00e2": "\u0061\u0302", // â = \^{a}
"\u1ea5": "\u0061\u0302\u0301", // ấ = \^\'{a}
"\u1ea7": "\u0061\u0302\u0300", // ầ = \^\`{a}
"\u1eab": "\u0061\u0302\u0303", // ẫ = \^\~{a}
"\u0227": "\u0061\u0307", // ȧ = \.{a}
"\u01e1": "\u0061\u0307\u0304", // ǡ = \.\={a}
"\u00e5": "\u0061\u030a", // å = \r{a}
"\u01fb": "\u0061\u030a\u0301", // ǻ = \r\'{a}
"\u1e03": "\u0062\u0307", // ḃ = \.{b}
"\u0107": "\u0063\u0301", // ć = \'{c}
"\u010d": "\u0063\u030c", // č = \v{c}
"\u0109": "\u0063\u0302", // ĉ = \^{c}
"\u010b": "\u0063\u0307", // ċ = \.{c}
"\u010f": "\u0064\u030c", // ď = \v{d}
"\u1e0b": "\u0064\u0307", // ḋ = \.{d}
"\u00e9": "\u0065\u0301", // é = \'{e}
"\u00e8": "\u0065\u0300", // è = \`{e}
"\u00eb": "\u0065\u0308", // ë = \"{e}
"\u1ebd": "\u0065\u0303", // ẽ = \~{e}
"\u0113": "\u0065\u0304", // ē = \={e}
"\u1e17": "\u0065\u0304\u0301", // ḗ = \=\'{e}
"\u1e15": "\u0065\u0304\u0300", // ḕ = \=\`{e}
"\u0115": "\u0065\u0306", // ĕ = \u{e}
"\u011b": "\u0065\u030c", // ě = \v{e}
"\u00ea": "\u0065\u0302", // ê = \^{e}
"\u1ebf": "\u0065\u0302\u0301", // ế = \^\'{e}
"\u1ec1": "\u0065\u0302\u0300", // ề = \^\`{e}
"\u1ec5": "\u0065\u0302\u0303", // ễ = \^\~{e}
"\u0117": "\u0065\u0307", // ė = \.{e}
"\u1e1f": "\u0066\u0307", // ḟ = \.{f}
"\u01f5": "\u0067\u0301", // ǵ = \'{g}
"\u1e21": "\u0067\u0304", // ḡ = \={g}
"\u011f": "\u0067\u0306", // ğ = \u{g}
"\u01e7": "\u0067\u030c", // ǧ = \v{g}
"\u011d": "\u0067\u0302", // ĝ = \^{g}
"\u0121": "\u0067\u0307", // ġ = \.{g}
"\u1e27": "\u0068\u0308", // ḧ = \"{h}
"\u021f": "\u0068\u030c", // ȟ = \v{h}
"\u0125": "\u0068\u0302", // ĥ = \^{h}
"\u1e23": "\u0068\u0307", // ḣ = \.{h}
"\u00ed": "\u0069\u0301", // í = \'{i}
"\u00ec": "\u0069\u0300", // ì = \`{i}
"\u00ef": "\u0069\u0308", // ï = \"{i}
"\u1e2f": "\u0069\u0308\u0301", // ḯ = \"\'{i}
"\u0129": "\u0069\u0303", // ĩ = \~{i}
"\u012b": "\u0069\u0304", // ī = \={i}
"\u012d": "\u0069\u0306", // ĭ = \u{i}
"\u01d0": "\u0069\u030c", // ǐ = \v{i}
"\u00ee": "\u0069\u0302", // î = \^{i}
"\u01f0": "\u006a\u030c", // ǰ = \v{j}
"\u0135": "\u006a\u0302", // ĵ = \^{j}
"\u1e31": "\u006b\u0301", // ḱ = \'{k}
"\u01e9": "\u006b\u030c", // ǩ = \v{k}
"\u013a": "\u006c\u0301", // ĺ = \'{l}
"\u013e": "\u006c\u030c", // ľ = \v{l}
"\u1e3f": "\u006d\u0301", // ḿ = \'{m}
"\u1e41": "\u006d\u0307", // ṁ = \.{m}
"\u0144": "\u006e\u0301", // ń = \'{n}
"\u01f9": "\u006e\u0300", // ǹ = \`{n}
"\u00f1": "\u006e\u0303", // ñ = \~{n}
"\u0148": "\u006e\u030c", // ň = \v{n}
"\u1e45": "\u006e\u0307", // ṅ = \.{n}
"\u00f3": "\u006f\u0301", // ó = \'{o}
"\u00f2": "\u006f\u0300", // ò = \`{o}
"\u00f6": "\u006f\u0308", // ö = \"{o}
"\u022b": "\u006f\u0308\u0304", // ȫ = \"\={o}
"\u00f5": "\u006f\u0303", // õ = \~{o}
"\u1e4d": "\u006f\u0303\u0301", // ṍ = \~\'{o}
"\u1e4f": "\u006f\u0303\u0308", // ṏ = \~\"{o}
"\u022d": "\u006f\u0303\u0304", // ȭ = \~\={o}
"\u014d": "\u006f\u0304", // ō = \={o}
"\u1e53": "\u006f\u0304\u0301", // ṓ = \=\'{o}
"\u1e51": "\u006f\u0304\u0300", // ṑ = \=\`{o}
"\u014f": "\u006f\u0306", // ŏ = \u{o}
"\u01d2": "\u006f\u030c", // ǒ = \v{o}
"\u00f4": "\u006f\u0302", // ô = \^{o}
"\u1ed1": "\u006f\u0302\u0301", // ố = \^\'{o}
"\u1ed3": "\u006f\u0302\u0300", // ồ = \^\`{o}
"\u1ed7": "\u006f\u0302\u0303", // ỗ = \^\~{o}
"\u022f": "\u006f\u0307", // ȯ = \.{o}
"\u0231": "\u006f\u0307\u0304", // ȱ = \.\={o}
"\u0151": "\u006f\u030b", // ő = \H{o}
"\u1e55": "\u0070\u0301", // ṕ = \'{p}
"\u1e57": "\u0070\u0307", // ṗ = \.{p}
"\u0155": "\u0072\u0301", // ŕ = \'{r}
"\u0159": "\u0072\u030c", // ř = \v{r}
"\u1e59": "\u0072\u0307", // ṙ = \.{r}
"\u015b": "\u0073\u0301", // ś = \'{s}
"\u1e65": "\u0073\u0301\u0307", // ṥ = \'\.{s}
"\u0161": "\u0073\u030c", // š = \v{s}
"\u1e67": "\u0073\u030c\u0307", // ṧ = \v\.{s}
"\u015d": "\u0073\u0302", // ŝ = \^{s}
"\u1e61": "\u0073\u0307", // ṡ = \.{s}
"\u1e97": "\u0074\u0308", // ẗ = \"{t}
"\u0165": "\u0074\u030c", // ť = \v{t}
"\u1e6b": "\u0074\u0307", // ṫ = \.{t}
"\u00fa": "\u0075\u0301", // ú = \'{u}
"\u00f9": "\u0075\u0300", // ù = \`{u}
"\u00fc": "\u0075\u0308", // ü = \"{u}
"\u01d8": "\u0075\u0308\u0301", // ǘ = \"\'{u}
"\u01dc": "\u0075\u0308\u0300", // ǜ = \"\`{u}
"\u01d6": "\u0075\u0308\u0304", // ǖ = \"\={u}
"\u01da": "\u0075\u0308\u030c", // ǚ = \"\v{u}
"\u0169": "\u0075\u0303", // ũ = \~{u}
"\u1e79": "\u0075\u0303\u0301", // ṹ = \~\'{u}
"\u016b": "\u0075\u0304", // ū = \={u}
"\u1e7b": "\u0075\u0304\u0308", // ṻ = \=\"{u}
"\u016d": "\u0075\u0306", // ŭ = \u{u}
"\u01d4": "\u0075\u030c", // ǔ = \v{u}
"\u00fb": "\u0075\u0302", // û = \^{u}
"\u016f": "\u0075\u030a", // ů = \r{u}
"\u0171": "\u0075\u030b", // ű = \H{u}
"\u1e7d": "\u0076\u0303", // ṽ = \~{v}
"\u1e83": "\u0077\u0301", // ẃ = \'{w}
"\u1e81": "\u0077\u0300", // ẁ = \`{w}
"\u1e85": "\u0077\u0308", // ẅ = \"{w}
"\u0175": "\u0077\u0302", // ŵ = \^{w}
"\u1e87": "\u0077\u0307", // ẇ = \.{w}
"\u1e98": "\u0077\u030a", // ẘ = \r{w}
"\u1e8d": "\u0078\u0308", // ẍ = \"{x}
"\u1e8b": "\u0078\u0307", // ẋ = \.{x}
"\u00fd": "\u0079\u0301", // ý = \'{y}
"\u1ef3": "\u0079\u0300", // ỳ = \`{y}
"\u00ff": "\u0079\u0308", // ÿ = \"{y}
"\u1ef9": "\u0079\u0303", // ỹ = \~{y}
"\u0233": "\u0079\u0304", // ȳ = \={y}
"\u0177": "\u0079\u0302", // ŷ = \^{y}
"\u1e8f": "\u0079\u0307", // ẏ = \.{y}
"\u1e99": "\u0079\u030a", // ẙ = \r{y}
"\u017a": "\u007a\u0301", // ź = \'{z}
"\u017e": "\u007a\u030c", // ž = \v{z}
"\u1e91": "\u007a\u0302", // ẑ = \^{z}
"\u017c": "\u007a\u0307", // ż = \.{z}
"\u00c1": "\u0041\u0301", // Á = \'{A}
"\u00c0": "\u0041\u0300", // À = \`{A}
"\u00c4": "\u0041\u0308", // Ä = \"{A}
"\u01de": "\u0041\u0308\u0304", // Ǟ = \"\={A}
"\u00c3": "\u0041\u0303", // Ã = \~{A}
"\u0100": "\u0041\u0304", // Ā = \={A}
"\u0102": "\u0041\u0306", // Ă = \u{A}
"\u1eae": "\u0041\u0306\u0301", // Ắ = \u\'{A}
"\u1eb0": "\u0041\u0306\u0300", // Ằ = \u\`{A}
"\u1eb4": "\u0041\u0306\u0303", // Ẵ = \u\~{A}
"\u01cd": "\u0041\u030c", // Ǎ = \v{A}
"\u00c2": "\u0041\u0302", // Â = \^{A}
"\u1ea4": "\u0041\u0302\u0301", // Ấ = \^\'{A}
"\u1ea6": "\u0041\u0302\u0300", // Ầ = \^\`{A}
"\u1eaa": "\u0041\u0302\u0303", // Ẫ = \^\~{A}
"\u0226": "\u0041\u0307", // Ȧ = \.{A}
"\u01e0": "\u0041\u0307\u0304", // Ǡ = \.\={A}
"\u00c5": "\u0041\u030a", // Å = \r{A}
"\u01fa": "\u0041\u030a\u0301", // Ǻ = \r\'{A}
"\u1e02": "\u0042\u0307", // Ḃ = \.{B}
"\u0106": "\u0043\u0301", // Ć = \'{C}
"\u010c": "\u0043\u030c", // Č = \v{C}
"\u0108": "\u0043\u0302", // Ĉ = \^{C}
"\u010a": "\u0043\u0307", // Ċ = \.{C}
"\u010e": "\u0044\u030c", // Ď = \v{D}
"\u1e0a": "\u0044\u0307", // Ḋ = \.{D}
"\u00c9": "\u0045\u0301", // É = \'{E}
"\u00c8": "\u0045\u0300", // È = \`{E}
"\u00cb": "\u0045\u0308", // Ë = \"{E}
"\u1ebc": "\u0045\u0303", // Ẽ = \~{E}
"\u0112": "\u0045\u0304", // Ē = \={E}
"\u1e16": "\u0045\u0304\u0301", // Ḗ = \=\'{E}
"\u1e14": "\u0045\u0304\u0300", // Ḕ = \=\`{E}
"\u0114": "\u0045\u0306", // Ĕ = \u{E}
"\u011a": "\u0045\u030c", // Ě = \v{E}
"\u00ca": "\u0045\u0302", // Ê = \^{E}
"\u1ebe": "\u0045\u0302\u0301", // Ế = \^\'{E}
"\u1ec0": "\u0045\u0302\u0300", // Ề = \^\`{E}
"\u1ec4": "\u0045\u0302\u0303", // Ễ = \^\~{E}
"\u0116": "\u0045\u0307", // Ė = \.{E}
"\u1e1e": "\u0046\u0307", // Ḟ = \.{F}
"\u01f4": "\u0047\u0301", // Ǵ = \'{G}
"\u1e20": "\u0047\u0304", // Ḡ = \={G}
"\u011e": "\u0047\u0306", // Ğ = \u{G}
"\u01e6": "\u0047\u030c", // Ǧ = \v{G}
"\u011c": "\u0047\u0302", // Ĝ = \^{G}
"\u0120": "\u0047\u0307", // Ġ = \.{G}
"\u1e26": "\u0048\u0308", // Ḧ = \"{H}
"\u021e": "\u0048\u030c", // Ȟ = \v{H}
"\u0124": "\u0048\u0302", // Ĥ = \^{H}
"\u1e22": "\u0048\u0307", // Ḣ = \.{H}
"\u00cd": "\u0049\u0301", // Í = \'{I}
"\u00cc": "\u0049\u0300", // Ì = \`{I}
"\u00cf": "\u0049\u0308", // Ï = \"{I}
"\u1e2e": "\u0049\u0308\u0301", // Ḯ = \"\'{I}
"\u0128": "\u0049\u0303", // Ĩ = \~{I}
"\u012a": "\u0049\u0304", // Ī = \={I}
"\u012c": "\u0049\u0306", // Ĭ = \u{I}
"\u01cf": "\u0049\u030c", // Ǐ = \v{I}
"\u00ce": "\u0049\u0302", // Î = \^{I}
"\u0130": "\u0049\u0307", // İ = \.{I}
"\u0134": "\u004a\u0302", // Ĵ = \^{J}
"\u1e30": "\u004b\u0301", // Ḱ = \'{K}
"\u01e8": "\u004b\u030c", // Ǩ = \v{K}
"\u0139": "\u004c\u0301", // Ĺ = \'{L}
"\u013d": "\u004c\u030c", // Ľ = \v{L}
"\u1e3e": "\u004d\u0301", // Ḿ = \'{M}
"\u1e40": "\u004d\u0307", // Ṁ = \.{M}
"\u0143": "\u004e\u0301", // Ń = \'{N}
"\u01f8": "\u004e\u0300", // Ǹ = \`{N}
"\u00d1": "\u004e\u0303", // Ñ = \~{N}
"\u0147": "\u004e\u030c", // Ň = \v{N}
"\u1e44": "\u004e\u0307", // Ṅ = \.{N}
"\u00d3": "\u004f\u0301", // Ó = \'{O}
"\u00d2": "\u004f\u0300", // Ò = \`{O}
"\u00d6": "\u004f\u0308", // Ö = \"{O}
"\u022a": "\u004f\u0308\u0304", // Ȫ = \"\={O}
"\u00d5": "\u004f\u0303", // Õ = \~{O}
"\u1e4c": "\u004f\u0303\u0301", // Ṍ = \~\'{O}
"\u1e4e": "\u004f\u0303\u0308", // Ṏ = \~\"{O}
"\u022c": "\u004f\u0303\u0304", // Ȭ = \~\={O}
"\u014c": "\u004f\u0304", // Ō = \={O}
"\u1e52": "\u004f\u0304\u0301", // Ṓ = \=\'{O}
"\u1e50": "\u004f\u0304\u0300", // Ṑ = \=\`{O}
"\u014e": "\u004f\u0306", // Ŏ = \u{O}
"\u01d1": "\u004f\u030c", // Ǒ = \v{O}
"\u00d4": "\u004f\u0302", // Ô = \^{O}
"\u1ed0": "\u004f\u0302\u0301", // Ố = \^\'{O}
"\u1ed2": "\u004f\u0302\u0300", // Ồ = \^\`{O}
"\u1ed6": "\u004f\u0302\u0303", // Ỗ = \^\~{O}
"\u022e": "\u004f\u0307", // Ȯ = \.{O}
"\u0230": "\u004f\u0307\u0304", // Ȱ = \.\={O}
"\u0150": "\u004f\u030b", // Ő = \H{O}
"\u1e54": "\u0050\u0301", // Ṕ = \'{P}
"\u1e56": "\u0050\u0307", // Ṗ = \.{P}
"\u0154": "\u0052\u0301", // Ŕ = \'{R}
"\u0158": "\u0052\u030c", // Ř = \v{R}
"\u1e58": "\u0052\u0307", // Ṙ = \.{R}
"\u015a": "\u0053\u0301", // Ś = \'{S}
"\u1e64": "\u0053\u0301\u0307", // Ṥ = \'\.{S}
"\u0160": "\u0053\u030c", // Š = \v{S}
"\u1e66": "\u0053\u030c\u0307", // Ṧ = \v\.{S}
"\u015c": "\u0053\u0302", // Ŝ = \^{S}
"\u1e60": "\u0053\u0307", // Ṡ = \.{S}
"\u0164": "\u0054\u030c", // Ť = \v{T}
"\u1e6a": "\u0054\u0307", // Ṫ = \.{T}
"\u00da": "\u0055\u0301", // Ú = \'{U}
"\u00d9": "\u0055\u0300", // Ù = \`{U}
"\u00dc": "\u0055\u0308", // Ü = \"{U}
"\u01d7": "\u0055\u0308\u0301", // Ǘ = \"\'{U}
"\u01db": "\u0055\u0308\u0300", // Ǜ = \"\`{U}
"\u01d5": "\u0055\u0308\u0304", // Ǖ = \"\={U}
"\u01d9": "\u0055\u0308\u030c", // Ǚ = \"\v{U}
"\u0168": "\u0055\u0303", // Ũ = \~{U}
"\u1e78": "\u0055\u0303\u0301", // Ṹ = \~\'{U}
"\u016a": "\u0055\u0304", // Ū = \={U}
"\u1e7a": "\u0055\u0304\u0308", // Ṻ = \=\"{U}
"\u016c": "\u0055\u0306", // Ŭ = \u{U}
"\u01d3": "\u0055\u030c", // Ǔ = \v{U}
"\u00db": "\u0055\u0302", // Û = \^{U}
"\u016e": "\u0055\u030a", // Ů = \r{U}
"\u0170": "\u0055\u030b", // Ű = \H{U}
"\u1e7c": "\u0056\u0303", // Ṽ = \~{V}
"\u1e82": "\u0057\u0301", // Ẃ = \'{W}
"\u1e80": "\u0057\u0300", // Ẁ = \`{W}
"\u1e84": "\u0057\u0308", // Ẅ = \"{W}
"\u0174": "\u0057\u0302", // Ŵ = \^{W}
"\u1e86": "\u0057\u0307", // Ẇ = \.{W}
"\u1e8c": "\u0058\u0308", // Ẍ = \"{X}
"\u1e8a": "\u0058\u0307", // Ẋ = \.{X}
"\u00dd": "\u0059\u0301", // Ý = \'{Y}
"\u1ef2": "\u0059\u0300", // Ỳ = \`{Y}
"\u0178": "\u0059\u0308", // Ÿ = \"{Y}
"\u1ef8": "\u0059\u0303", // Ỹ = \~{Y}
"\u0232": "\u0059\u0304", // Ȳ = \={Y}
"\u0176": "\u0059\u0302", // Ŷ = \^{Y}
"\u1e8e": "\u0059\u0307", // Ẏ = \.{Y}
"\u0179": "\u005a\u0301", // Ź = \'{Z}
"\u017d": "\u005a\u030c", // Ž = \v{Z}
"\u1e90": "\u005a\u0302", // Ẑ = \^{Z}
"\u017b": "\u005a\u0307", // Ż = \.{Z}
"\u03ac": "\u03b1\u0301", // ά = \'{α}
"\u1f70": "\u03b1\u0300", // ὰ = \`{α}
"\u1fb1": "\u03b1\u0304", // ᾱ = \={α}
"\u1fb0": "\u03b1\u0306", // ᾰ = \u{α}
"\u03ad": "\u03b5\u0301", // έ = \'{ε}
"\u1f72": "\u03b5\u0300", // ὲ = \`{ε}
"\u03ae": "\u03b7\u0301", // ή = \'{η}
"\u1f74": "\u03b7\u0300", // ὴ = \`{η}
"\u03af": "\u03b9\u0301", // ί = \'{ι}
"\u1f76": "\u03b9\u0300", // ὶ = \`{ι}
"\u03ca": "\u03b9\u0308", // ϊ = \"{ι}
"\u0390": "\u03b9\u0308\u0301", // ΐ = \"\'{ι}
"\u1fd2": "\u03b9\u0308\u0300", // ῒ = \"\`{ι}
"\u1fd1": "\u03b9\u0304", // ῑ = \={ι}
"\u1fd0": "\u03b9\u0306", // ῐ = \u{ι}
"\u03cc": "\u03bf\u0301", // ό = \'{ο}
"\u1f78": "\u03bf\u0300", // ὸ = \`{ο}
"\u03cd": "\u03c5\u0301", // ύ = \'{υ}
"\u1f7a": "\u03c5\u0300", // ὺ = \`{υ}
"\u03cb": "\u03c5\u0308", // ϋ = \"{υ}
"\u03b0": "\u03c5\u0308\u0301", // ΰ = \"\'{υ}
"\u1fe2": "\u03c5\u0308\u0300", // ῢ = \"\`{υ}
"\u1fe1": "\u03c5\u0304", // ῡ = \={υ}
"\u1fe0": "\u03c5\u0306", // ῠ = \u{υ}
"\u03ce": "\u03c9\u0301", // ώ = \'{ω}
"\u1f7c": "\u03c9\u0300", // ὼ = \`{ω}
"\u038e": "\u03a5\u0301", // Ύ = \'{Υ}
"\u1fea": "\u03a5\u0300", // Ὺ = \`{Υ}
"\u03ab": "\u03a5\u0308", // Ϋ = \"{Υ}
"\u1fe9": "\u03a5\u0304", // Ῡ = \={Υ}
"\u1fe8": "\u03a5\u0306", // Ῠ = \u{Υ}
"\u038f": "\u03a9\u0301", // Ώ = \'{Ω}
"\u1ffa": "\u03a9\u0300", // Ὼ = \`{Ω}
};
const result /*: {[string]: string}*/ = {};
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"αβγδεϵζηθϑικλμνξοπϖρϱςστυφϕχψωΓΔΘΛΞΠΣΥΦΨΩ";
for (const letter of letters) {
for (const accent of Object.getOwnPropertyNames(accents)) {
const combined = letter + accent;
const normalized = combined.normalize('NFC');
if (normalized.length === 1) {
result[normalized] = combined;
}
for (const accent2 of Object.getOwnPropertyNames(accents)) {
if (accent === accent2) {
continue;
}
const combined2 = combined + accent2;
const normalized2 = combined2.normalize('NFC');
if (normalized2.length === 1) {
result[normalized2] = combined2;
}
}
}
}
module.exports = result;

View File

@@ -654,6 +654,13 @@
dependencies:
regenerator-runtime "^0.12.0"
"@babel/runtime@^7.4.2":
version "7.7.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a"
integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw==
dependencies:
regenerator-runtime "^0.13.2"
"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2":
version "7.2.2"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
@@ -1316,6 +1323,23 @@ babel-plugin-jest-hoist@^24.1.0:
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8"
integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw==
babel-plugin-macros@^2.2.2:
version "2.6.1"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181"
integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==
dependencies:
"@babel/runtime" "^7.4.2"
cosmiconfig "^5.2.0"
resolve "^1.10.0"
babel-plugin-preval@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-3.0.1.tgz#a26f9690114a864a54a5cbdf865496ebf541a9c3"
integrity sha512-s8hmTlRSmzcL7cHSIi0s6WxmpOAxfIlWqSVQwBIt7V5bNBaac+8JMZ6kJXLOazMJ8gCIcb5AJgQUgPHvbSYUzw==
dependencies:
babel-plugin-macros "^2.2.2"
require-from-string "^2.0.2"
babel-plugin-version-inline@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-version-inline/-/babel-plugin-version-inline-1.0.0.tgz#b99b6f925db4a4c6789eb08836e66d128dd5993f"
@@ -2094,6 +2118,16 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.0.7:
lodash.get "^4.4.2"
parse-json "^4.0.0"
cosmiconfig@^5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
dependencies:
import-fresh "^2.0.0"
is-directory "^0.3.1"
js-yaml "^3.13.1"
parse-json "^4.0.0"
create-ecdh@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -4839,7 +4873,7 @@ js-levenshtein@^1.1.3:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@3.13.1, js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.13.0, js-yaml@^3.9.0:
js-yaml@3.13.1, js-yaml@^3.12.0, js-yaml@^3.12.1, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.0:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@@ -7020,6 +7054,11 @@ regenerator-runtime@^0.12.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
regenerator-runtime@^0.13.2:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
regenerator-transform@^0.13.3:
version "0.13.3"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
@@ -7186,7 +7225,7 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-from-string@^2.0.1:
require-from-string@^2.0.1, require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
@@ -7241,6 +7280,13 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@^1.10.0:
version "1.12.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
dependencies:
path-parse "^1.0.6"
resolve@^1.3.2, resolve@^1.8.1, resolve@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"