{"mappings":"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","sources":["src/index.ts","src/utils.ts","src/tokenize.ts","src/char.ts","src/tamil-char-types.ts","src/token.ts","src/varna.ts"],"sourcesContent":["import * as utils from \"./utils\";\r\n\r\nimport { tokenize } from \"./tokenize\";\r\n\r\nimport { Token, TokenType } from \"./token\";\r\nimport { Varna, VarnaType } from \"./varna\";\r\n\r\ntype Results = {\r\n  all: Token[];\r\n  aksharas: Token[];\r\n  varnas: Varna[];\r\n  symbols: Token[];\r\n  whitespaces: Token[];\r\n  chars: string[];\r\n  invalid: Token[];\r\n  unrecognised: Token[];\r\n};\r\n\r\nconst analyse = (input: string): Results => {\r\n  const tokens = tokenize(input);\r\n\r\n  const aksharas = utils.filterTokens(tokens, TokenType.Akshara);\r\n\r\n  const varnas = utils.extractVarnas(aksharas);\r\n\r\n  const chars = input.split(\"\");\r\n\r\n  const symbols = utils.filterTokens(tokens, TokenType.Symbol);\r\n\r\n  const invalidChars = utils.filterTokens(tokens, TokenType.Invalid);\r\n\r\n  const whitespaces = utils.filterTokens(tokens, TokenType.Whitespace);\r\n\r\n  const unrecognisedChars = utils.filterTokens(tokens, TokenType.Unrecognised);\r\n\r\n  return {\r\n    all: tokens,\r\n    aksharas: aksharas,\r\n    varnas: varnas,\r\n    chars: chars,\r\n    symbols: symbols,\r\n    invalid: invalidChars,\r\n    whitespaces: whitespaces,\r\n    unrecognised: unrecognisedChars,\r\n  };\r\n};\r\n\r\nconst Aksharas = {\r\n  analyse,\r\n  TokenType,\r\n  VarnaType,\r\n};\r\n\r\nexport default Aksharas;\r\n\r\nexport { TokenType, VarnaType };\r\n","import { Token, TokenType } from \"./token\";\r\nimport { Varna } from \"./varna\";\r\n\r\nexport const extractVarnas = (aksharas: Token[]): Varna[] =>\r\n  aksharas.flatMap((akshara) => akshara.attributes?.varnas);\r\n\r\nexport const filterTokens = (tokens: Token[], tokenType: TokenType) =>\r\n  tokens.filter((token) => token.type === tokenType);\r\n\r\nexport const getVowel = (vowelMark: string): string =>\r\n  ({\r\n    \"ா\": \"ஆ\",\r\n    \"ி\": \"இ\",\r\n    \"◌ீ\": \"ஈ\",\r\n    \"ு\": \"உ\",\r\n    \"ூ\": \"ஊ\",\r\n    \"ெ\": \"எ\",\r\n    \"ே\": \"ஏ\",\r\n    \"ை\": \"ஐ\",\r\n    \"ொ\": \"ஒ\",\r\n    \"ோ\": \"ஓ\",\r\n    \"ௌ\": \"ஔ\",\r\n  }[vowelMark] || \"\");\r\n","import { Char } from \"./char\";\r\nimport { getVowel } from \"./utils\";\r\nimport { Token, TokenAttributes, TokenType } from \"./token\";\r\nimport { Varna, VarnaType, VARNAS } from \"./varna\";\r\n\r\nenum State {\r\n  Initial,\r\n  Vowel,\r\n  Consonant,\r\n  ConjunctConsonant,\r\n}\r\n\r\nexport const tokenize = (input: string): Token[] => {\r\n  const tokens: Token[] = [];\r\n\r\n  let pos: number = 0;\r\n  let acc: string = \"\";\r\n  let svaraAcc: string = \"\";\r\n  let vyanjanaAcc: string = \"\";\r\n  let varnas: Varna[] = [];\r\n  let state = State.Initial;\r\n\r\n  const resetVariables = () => {\r\n    pos = 0;\r\n    acc = \"\";\r\n    svaraAcc = \"\";\r\n    vyanjanaAcc = \"\";\r\n    varnas = [];\r\n    state = State.Initial;\r\n  };\r\n\r\n  const createToken = (tokenType: TokenType, attributes?: TokenAttributes) => {\r\n    tokens.push(new Token(tokenType, acc, pos, attributes));\r\n    resetVariables();\r\n  };\r\n\r\n  for (let i = 0, l = input.length; i < l; i += 1) {\r\n    const char = new Char(input[i]);\r\n\r\n    const nextChar = new Char(input[i + 1]);\r\n\r\n    acc += char.value;\r\n\r\n    switch (state) {\r\n      case State.Initial: {\r\n        pos = i;\r\n\r\n        if (char.isOm()) {\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([\r\n              new Varna(VarnaType.Svara, VARNAS.Om[0]),\r\n              new Varna(VarnaType.Vyanjana, VARNAS.Om[1]),\r\n            ]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isSymbol()) {\r\n          createToken(TokenType.Symbol);\r\n          break;\r\n        }\r\n\r\n        if (char.isWhitespace()) {\r\n          createToken(TokenType.Whitespace);\r\n          break;\r\n        }\r\n\r\n        if (char.isUnrecognised()) {\r\n          createToken(TokenType.Unrecognised);\r\n          break;\r\n        }\r\n\r\n        if (char.isVowel()) {\r\n          if (nextChar.isVowelAttachment()) {\r\n            state = State.Vowel;\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([new Varna(VarnaType.Svara, acc)]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isConsonant()) {\r\n          vyanjanaAcc += char.value;\r\n\r\n          if (nextChar.isNukta() || nextChar.isConsonantAttachment()) {\r\n            state = State.Consonant;\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc + VARNAS.Virama),\r\n              new Varna(VarnaType.Svara, VARNAS.InherentA),\r\n            ]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        createToken(TokenType.Invalid);\r\n        break;\r\n      }\r\n\r\n      case State.Vowel: {\r\n        if (char.isAccent()) {\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([new Varna(VarnaType.Svara, acc)]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isYogavaha()) {\r\n          if (nextChar.isAccent()) {\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([new Varna(VarnaType.Svara, acc)]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        break;\r\n      }\r\n\r\n      case State.Consonant: {\r\n        if (char.isNukta()) {\r\n          vyanjanaAcc += char.value;\r\n\r\n          if (nextChar.isConsonantAttachment()) {\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc + VARNAS.Virama),\r\n              new Varna(VarnaType.Svara, VARNAS.InherentA),\r\n            ]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isVirama()) {\r\n          vyanjanaAcc += char.value;\r\n\r\n          if (nextChar.isJoiner()) {\r\n            break;\r\n          }\r\n\r\n          if (nextChar.isConsonant()) {\r\n            varnas = varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc),\r\n            ]);\r\n\r\n            state = State.ConjunctConsonant;\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([new Varna(VarnaType.Vyanjana, vyanjanaAcc)]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isJoiner()) {\r\n          vyanjanaAcc += char.value;\r\n\r\n          if (nextChar.isJoiner()) {\r\n            break;\r\n          }\r\n\r\n          if (nextChar.isConsonant()) {\r\n            varnas = varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc),\r\n            ]);\r\n\r\n            state = State.ConjunctConsonant;\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([new Varna(VarnaType.Vyanjana, vyanjanaAcc)]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isVowelMarkAttachment()) {\r\n          svaraAcc = (svaraAcc || VARNAS.InherentA) + char.value;\r\n\r\n          if (nextChar.isAccent()) {\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc + VARNAS.Virama),\r\n              new Varna(VarnaType.Svara, svaraAcc),\r\n            ]),\r\n          });\r\n          break;\r\n        }\r\n\r\n        if (char.isVowelMark()) {\r\n          svaraAcc = getVowel(char.value);\r\n\r\n          if (nextChar.isVowelMarkAttachment()) {\r\n            break;\r\n          }\r\n\r\n          createToken(TokenType.Akshara, {\r\n            varnas: varnas.concat([\r\n              new Varna(VarnaType.Vyanjana, vyanjanaAcc + VARNAS.Virama),\r\n              new Varna(VarnaType.Svara, svaraAcc),\r\n            ]),\r\n          });\r\n          break;\r\n        }\r\n      }\r\n\r\n      case State.ConjunctConsonant: {\r\n        vyanjanaAcc = char.value;\r\n\r\n        if (nextChar.isNukta() || nextChar.isConsonantAttachment()) {\r\n          state = State.Consonant;\r\n          break;\r\n        }\r\n\r\n        createToken(TokenType.Akshara, {\r\n          varnas: varnas.concat([\r\n            new Varna(VarnaType.Vyanjana, vyanjanaAcc + VARNAS.Virama),\r\n            new Varna(VarnaType.Svara, VARNAS.InherentA),\r\n          ]),\r\n        });\r\n        break;\r\n      }\r\n\r\n      default: {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  return tokens;\r\n};\r\n","import { TAMIL_CHAR_TYPES } from \"./tamil-char-types\";\r\n\r\nenum CharType {\r\n  Vowel = \"vowels\",\r\n  Symbol = \"symbols\",\r\n  VowelMark = \"vowel_marks\",\r\n  Yogavaha = \"yogavaahas\",\r\n  Accent = \"accents\",\r\n  Virama = \"virama\",\r\n  Nukta = \"nukta\",\r\n  ZWNJ = \"zwnj\",\r\n  ZWJ = \"zwj\",\r\n  Consonant = \"consonants\",\r\n  ExtraConsonant = \"extra_consonants\",\r\n  Whitespace = \"whitespace\",\r\n  Unrecognised = \"unrecognised\",\r\n  EndOfInput = \"end_of_input\",\r\n}\r\n\r\nconst OM = \"ௐ\";\r\nconst MATRAS = [\"௧\", \"௨\", \"௩\"];\r\n\r\nexport class Char {\r\n  value: string;\r\n  type: CharType;\r\n\r\n  constructor(value: string) {\r\n    this.value = value;\r\n    this.type = this.#getCharType(value);\r\n  }\r\n\r\n  #getCharType = (char: string): CharType => {\r\n    if (char === undefined) return CharType.EndOfInput;\r\n\r\n    if (/\\s/.test(char)) return CharType.Whitespace;\r\n\r\n    return TAMIL_CHAR_TYPES[char] ?? CharType.Unrecognised;\r\n  };\r\n\r\n  isVowel = () => this.type === CharType.Vowel;\r\n\r\n  isConsonant = () =>\r\n    [CharType.Consonant, CharType.ExtraConsonant].includes(this.type);\r\n\r\n  isOm = () => this.value === OM;\r\n\r\n  isSymbol = () => this.type === CharType.Symbol;\r\n\r\n  isVowelMark = () => this.type === CharType.VowelMark;\r\n\r\n  isYogavaha = () => this.type === CharType.Yogavaha;\r\n\r\n  isAccent = () => this.type === CharType.Accent;\r\n\r\n  isVirama = () => this.type === CharType.Virama;\r\n\r\n  isNukta = () => this.type === CharType.Nukta;\r\n\r\n  isMatra = () => MATRAS.includes(this.value);\r\n\r\n  isJoiner = () => [CharType.ZWNJ, CharType.ZWJ].includes(this.type);\r\n\r\n  isWhitespace = () => this.type === CharType.Whitespace;\r\n\r\n  isUnrecognised = () => this.type === CharType.Unrecognised;\r\n\r\n  isEndOfInput = () => this.type === CharType.EndOfInput;\r\n\r\n  isVowelAttachment = () => this.isVowelMark() || this.isAccent();\r\n\r\n  isConsonantAttachment = () =>\r\n    this.isVirama() ||\r\n    this.isYogavaha() ||\r\n    this.isAccent() ||\r\n    this.isVowelMark() ||\r\n    this.isMatra();\r\n\r\n  isVowelMarkAttachment = () =>\r\n    this.isYogavaha() || this.isAccent() || this.isMatra();\r\n\r\n  //   Only for debugging\r\n  //   toString = () => this.value;\r\n}\r\n","export const TAMIL_CHAR_TYPES: Record<string, any> = {\r\n  அ: \"vowels\",\r\n  ஆ: \"vowels\",\r\n  இ: \"vowels\",\r\n  ஈ: \"vowels\",\r\n  உ: \"vowels\",\r\n  ஊ: \"vowels\",\r\n  எ: \"vowels\",\r\n  ஏ: \"vowels\",\r\n  ஐ: \"vowels\",\r\n  ஒ: \"vowels\",\r\n  ஓ: \"vowels\",\r\n  ஔ: \"vowels\",\r\n  ஃ: \"vowels\",\r\n  க: \"consonants\",\r\n  ங: \"consonants\",\r\n  ச: \"consonants\",\r\n  ஞ: \"consonants\",\r\n  ட: \"consonants\",\r\n  ண: \"consonants\",\r\n  த: \"consonants\",\r\n  ந: \"consonants\",\r\n  ப: \"consonants\",\r\n  ம: \"consonants\",\r\n  ய: \"consonants\",\r\n  ர: \"consonants\",\r\n  ல: \"consonants\",\r\n  வ: \"consonants\",\r\n  ழ: \"consonants\",\r\n  ள: \"consonants\",\r\n  ற: \"consonants\",\r\n  ன: \"consonants\",\r\n  ஜ: \"extra_consonants\",\r\n  ஶ: \"extra_consonants\",\r\n  ஷ: \"extra_consonants\",\r\n  ஸ: \"extra_consonants\",\r\n  ஹ: \"extra_consonants\",\r\n  \"்\": \"vowel_marks\",\r\n  \"ா\": \"vowel_marks\",\r\n  \"ி\": \"vowel_marks\",\r\n  \"ீ\": \"vowel_marks\",\r\n  \"ு\": \"vowel_marks\",\r\n  \"ூ\": \"vowel_marks\",\r\n  \"ெ\": \"vowel_marks\",\r\n  \"ே\": \"vowel_marks\",\r\n  \"ை\": \"vowel_marks\",\r\n  \"ொ\": \"vowel_marks\",\r\n  \"ோ\": \"vowel_marks\",\r\n  \"ௌ\": \"vowel_marks\",\r\n  \"ௗ\": \"vowel_marks\",\r\n  \"‍\": \"zwj\",\r\n  \"‌\": \"zwnj\",\r\n  \"௦\": \"symbols\",\r\n  \"௧\": \"symbols\",\r\n  \"௨\": \"symbols\",\r\n  \"௩\": \"symbols\",\r\n  \"௪\": \"symbols\",\r\n  \"௫\": \"symbols\",\r\n  \"௭\": \"symbols\",\r\n  \"௮\": \"symbols\",\r\n  \"௯\": \"symbols\",\r\n  \"௰\": \"symbols\",\r\n  \"௱\": \"symbols\",\r\n  \"௲\": \"symbols\",\r\n  ௐ: \"symbols\",\r\n  \"।\": \"symbols\",\r\n  \"॥\": \"symbols\",\r\n};\r\n","export enum TokenType {\r\n  Akshara = \"akshara\",\r\n  Symbol = \"symbol\",\r\n  Whitespace = \"whitespace\",\r\n  Invalid = \"invalid\",\r\n  Unrecognised = \"unrecognised\",\r\n}\r\n\r\nexport type TokenAttributes = Record<string, any>;\r\n\r\nexport class Token {\r\n  readonly type: TokenType;\r\n  readonly value: string;\r\n  readonly from: number;\r\n  readonly to: number;\r\n  readonly attributes?: TokenAttributes;\r\n\r\n  constructor(\r\n    type: TokenType,\r\n    value: string,\r\n    pos: number,\r\n    attributes?: TokenAttributes\r\n  ) {\r\n    this.type = type;\r\n    this.value = value;\r\n    this.from = pos;\r\n    this.to = pos + (value.length - 1);\r\n    this.attributes = attributes;\r\n  }\r\n\r\n  //   Only for debugging\r\n  //   toString = () => this.value;\r\n}\r\n","export enum VarnaType {\r\n  Svara = \"svara\",\r\n  Vyanjana = \"vyanjana\",\r\n}\r\n\r\nexport const VARNAS = {\r\n  Virama: \"◌்\",\r\n  InherentA: \"அ\",\r\n  Om: [\"ஓ\", \"ம்\"],\r\n};\r\n\r\nexport class Varna {\r\n  readonly type: VarnaType;\r\n  readonly value: string;\r\n\r\n  constructor(type: VarnaType, value: string) {\r\n    this.type = type;\r\n    this.value = value;\r\n  }\r\n}\r\n"],"names":[],"version":3,"file":"index.cjs.map"}