{"version":3,"file":"unicode-properties.cjs.js","sources":["index.js","node.js"],"sourcesContent":["const log2 = Math.log2 || (n => Math.log(n) / Math.LN2);\nconst bits = (n) => ((log2(n) + 1) | 0);\n\nconst buildUnicodeProperties = (data, trie) => {\n  // compute the number of bits stored for each field\n  const CATEGORY_BITS = bits(data.categories.length - 1);\n  const COMBINING_BITS = bits(data.combiningClasses.length - 1);\n  const SCRIPT_BITS = bits(data.scripts.length - 1);\n  const EAW_BITS = bits(data.eaw.length - 1);\n  const NUMBER_BITS = 10;\n\n  // compute shift and mask values for each field\n  const CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\n  const COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\n  const SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;\n  const EAW_SHIFT = NUMBER_BITS;\n  const CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;\n  const COMBINING_MASK = (1 << COMBINING_BITS) - 1;\n  const SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;\n  const EAW_MASK = (1 << EAW_BITS) - 1;\n  const NUMBER_MASK = (1 << NUMBER_BITS) - 1;\n\n  const getCategory = (codePoint) => {\n    const val = trie.get(codePoint);\n    return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK];\n  };\n\n  const getCombiningClass = (codePoint) => {\n    const val = trie.get(codePoint);\n    return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK];\n  };\n\n  const getScript = (codePoint) => {\n    const val = trie.get(codePoint);\n    return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK];\n  };\n\n  const getEastAsianWidth = (codePoint) => {\n    const val = trie.get(codePoint);\n    return data.eaw[(val >> EAW_SHIFT) & EAW_MASK];\n  };\n\n  const getNumericValue = (codePoint) => {\n    let val = trie.get(codePoint);\n    let num = val & NUMBER_MASK;\n\n    if (num === 0) {\n      return null;\n    } else if (num <= 50) {\n      return num - 1;\n    } else if (num < 0x1e0) {\n      const numerator = (num >> 4) - 12;\n      const denominator = (num & 0xf) + 1;\n      return numerator / denominator;\n    } else if (num < 0x300) {\n      val = (num >> 5) - 14;\n      let exp = (num & 0x1f) + 2;\n\n      while (exp > 0) {\n        val *= 10;\n        exp--;\n      }\n      return val;\n    } else {\n      val = (num >> 2) - 0xbf;\n      let exp = (num & 3) + 1;\n      while (exp > 0) {\n        val *= 60;\n        exp--;\n      }\n      return val;\n    }\n  };\n\n  const isAlphabetic = (codePoint) => {\n    const category = getCategory(codePoint);\n    return (\n      category === 'Lu' ||\n      category === 'Ll' ||\n      category === 'Lt' ||\n      category === 'Lm' ||\n      category === 'Lo' ||\n      category === 'Nl'\n    )\n  };\n\n  const isDigit = (codePoint) => (\n    getCategory(codePoint) === 'Nd'\n  );\n\n  const isPunctuation = (codePoint) => {\n    const category = getCategory(codePoint);\n    return (\n      category === 'Pc' ||\n      category === 'Pd' ||\n      category === 'Pe' ||\n      category === 'Pf' ||\n      category === 'Pi' ||\n      category === 'Po' ||\n      category === 'Ps'\n    );\n  };\n\n  const isLowerCase = (codePoint) => {\n    return getCategory(codePoint) === 'Ll';\n  };\n\n  const isUpperCase = (codePoint) => (\n    getCategory(codePoint) === 'Lu'\n  );\n\n  const isTitleCase = (codePoint) => (\n    getCategory(codePoint) === 'Lt'\n  );\n\n  const isWhiteSpace = (codePoint) => {\n    const category = getCategory(codePoint);\n    return (\n      category === 'Zs' ||\n      category === 'Zl' ||\n      category === 'Zp'\n    );\n  };\n\n  const isBaseForm = (codePoint) => {\n    const category = getCategory(codePoint);\n    return (\n      category === 'Nd' ||\n      category === 'No' ||\n      category === 'Nl' ||\n      category === 'Lu' ||\n      category === 'Ll' ||\n      category === 'Lt' ||\n      category === 'Lm' ||\n      category === 'Lo' ||\n      category === 'Me' ||\n      category === 'Mc'\n    )\n  };\n\n  const isMark = (codePoint) => {\n    const category = getCategory(codePoint);\n    return (\n      category === 'Mn' ||\n      category === 'Me' ||\n      category === 'Mc'\n    );\n  };\n\n  return {\n    getCategory,\n    getCombiningClass,\n    getScript,\n    getEastAsianWidth,\n    getNumericValue,\n    isAlphabetic,\n    isDigit,\n    isPunctuation,\n    isLowerCase,\n    isUpperCase,\n    isTitleCase,\n    isWhiteSpace,\n    isBaseForm,\n    isMark\n  }\n}\n\nexport default buildUnicodeProperties;\n","import fs from 'fs';\nimport UnicodeTrie from 'unicode-trie';\nimport data from './data.json';\nimport buildUnicodeProperties from './index';\n\nconst trie = new UnicodeTrie(fs.readFileSync(__dirname + '/data.trie'));\nconst unicodeProperties = buildUnicodeProperties(data, trie);\n\nexport default unicodeProperties;\n"],"names":["log2","Math","n","log","LN2","bits","buildUnicodeProperties","data","trie","CATEGORY_BITS","categories","length","COMBINING_BITS","combiningClasses","SCRIPT_BITS","scripts","EAW_BITS","eaw","NUMBER_BITS","CATEGORY_SHIFT","COMBINING_SHIFT","SCRIPT_SHIFT","EAW_SHIFT","CATEGORY_MASK","COMBINING_MASK","SCRIPT_MASK","EAW_MASK","NUMBER_MASK","getCategory","codePoint","val","get","getCombiningClass","getScript","getEastAsianWidth","getNumericValue","num","numerator","denominator","exp","isAlphabetic","category","isDigit","isPunctuation","isLowerCase","isUpperCase","isTitleCase","isWhiteSpace","isBaseForm","isMark","UnicodeTrie","fs","readFileSync","__dirname","unicodeProperties"],"mappings":"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"}