{"version":3,"file":"lang_string.mjs","sources":["../../../src/util/lang_string.ts"],"sourcesContent":["import { getFabricWindow } from '../env';\n\n/**\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 = (stringOrNumber: string | number): string =>\n  stringOrNumber\n    .toString()\n    .replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&apos;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n\nlet segmenter: Intl.Segmenter | false;\n\nconst getSegmenter = () => {\n  if (!segmenter) {\n    segmenter =\n      'Intl' in getFabricWindow() &&\n      'Segmenter' in Intl &&\n      new Intl.Segmenter(undefined, {\n        granularity: 'grapheme',\n      });\n  }\n  return segmenter;\n};\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  segmenter || getSegmenter();\n  if (segmenter) {\n    const segments = segmenter.segment(textstring);\n    return Array.from(segments).map(({ segment }) => segment);\n  }\n\n  //Fallback\n  return graphemeSplitImpl(textstring);\n};\n\nconst graphemeSplitImpl = (textstring: string): string[] => {\n  const graphemes: string[] = [];\n  for (let i = 0, chr; i < textstring.length; i++) {\n    if ((chr = getWholeChar(textstring, i)) === false) {\n      continue;\n    }\n    graphemes.push(chr);\n  }\n  return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | false => {\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","charAt","toUpperCase","slice","toLowerCase","escapeXml","stringOrNumber","toString","replace","segmenter","getSegmenter","getFabricWindow","Intl","Segmenter","granularity","graphemeSplit","textstring","segments","segment","Array","from","map","_ref","graphemeSplitImpl","graphemes","i","chr","getWholeChar","push","str","code","charCodeAt","isNaN","next","prev"],"mappings":"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"}