UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 5.15 kB
{"version":3,"file":"lang_string.mjs","sources":["../../../src/util/lang_string.ts"],"sourcesContent":["/**\n * Capitalizes a string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\nexport const capitalize = (string: string, firstLetterOnly = false): string =>\n `${string.charAt(0).toUpperCase()}${\n firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()\n }`;\n\n/**\n * Escapes XML in a string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\nexport const escapeXml = (string: string): string =>\n string\n .replace(/&/g, '&amp;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n/**\n * Divide a string in the user perceived single units\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\nexport const graphemeSplit = (textstring: string): string[] => {\n const graphemes = [];\n for (let i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr as string);\n }\n return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | boolean => {\n const code = str.charCodeAt(i);\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xd800 || code > 0xdfff) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 <= code && code <= 0xdbff) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n const next = str.charCodeAt(i + 1);\n if (0xdc00 > next || next > 0xdfff) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n const prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 > prev || prev > 0xdbff) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n};\n"],"names":["capitalize","string","firstLetterOnly","arguments","length","undefined","concat","charAt","toUpperCase","slice","toLowerCase","escapeXml","replace","graphemeSplit","textstring","graphemes","i","chr","getWholeChar","push","str","code","charCodeAt","isNaN","next","prev"],"mappings":"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"}