{"version":3,"sources":["../src/index.ts","../src/armenian/ligatures.ts","../src/armenian/normalize.ts","../src/armenian/alphabet.ts","../src/scanner/scanner.ts","../src/engine/casing.ts","../src/engine/context.ts","../src/engine/punctuation.ts","../src/engine/engine.ts","../src/standards/latin/bgn-pcgn.ts","../src/standards/latin/iso-9985.ts","../src/standards/latin/hubschmann-meillet.ts","../src/standards/latin/ala-lc.ts","../src/standards/cyrillic/russian-phonetic.ts","../src/standards/ipa/ipa-eastern.ts","../src/standards/ipa/ipa-western.ts","../src/standards/registry.ts"],"sourcesContent":["import type { Standard, Direction, TransliterateOptions } from \"./types.js\";\nimport { TransliterationEngine } from \"./engine/engine.js\";\nimport { getStandard } from \"./standards/registry.js\";\n\nexport type {\n  Standard,\n  LatinStandard,\n  CyrillicStandard,\n  IpaStandard,\n  Direction,\n  TransliterateOptions,\n  TransliterationStandard,\n  CharMapping,\n  SequenceMapping,\n  ContextCondition,\n  ContextRule,\n  LetterPosition,\n  TargetScript,\n} from \"./types.js\";\n\nexport { listStandards } from \"./standards/registry.js\";\n\n// Engine cache: avoid re-creating engines for the same standard\nconst engineCache = new Map<string, TransliterationEngine>();\n\nfunction getEngine(standard: Standard): TransliterationEngine {\n  let engine = engineCache.get(standard);\n  if (!engine) {\n    const std = getStandard(standard);\n    engine = new TransliterationEngine(std);\n    engineCache.set(standard, engine);\n  }\n  return engine;\n}\n\n/**\n * Transliterate text between Armenian and Latin/Cyrillic scripts.\n *\n * @param text - The text to transliterate\n * @param options - Standard and direction options\n * @returns Transliterated text\n */\nexport function transliterate(\n  text: string,\n  options?: TransliterateOptions,\n): string {\n  const standard: Standard = options?.standard ?? \"bgn-pcgn\";\n  const direction: Direction = options?.direction ?? \"from-armenian\";\n\n  if (direction === \"to-armenian\") {\n    throw new Error(\n      \"Reverse transliteration (to-armenian) is not yet implemented\",\n    );\n  }\n\n  const engine = getEngine(standard);\n  return engine.transliterate(text);\n}\n\n/**\n * Create a reusable transliterator function with fixed options.\n * More efficient for repeated transliterations with the same settings.\n *\n * @param options - Standard and direction options\n * @returns A function that transliterates text\n */\nexport function createTransliterator(\n  options: TransliterateOptions,\n): (text: string) => string {\n  const standard: Standard = options.standard ?? \"bgn-pcgn\";\n  const direction: Direction = options.direction ?? \"from-armenian\";\n\n  if (direction === \"to-armenian\") {\n    throw new Error(\n      \"Reverse transliteration (to-armenian) is not yet implemented\",\n    );\n  }\n\n  const engine = getEngine(standard);\n  return (text: string) => engine.transliterate(text);\n}\n","/**\n * Armenian ligatures and their expansions.\n * These are in the Unicode Alphabetic Presentation Forms block (U+FB13-U+FB17).\n */\nexport const ARMENIAN_LIGATURES: ReadonlyMap<string, string> = new Map([\n  [\"\\uFB13\", \"\\u0574\\u0576\"],  // ﬓ → մն\n  [\"\\uFB14\", \"\\u0574\\u0565\"],  // ﬔ → մե\n  [\"\\uFB15\", \"\\u0574\\u056B\"],  // ﬕ → մի\n  [\"\\uFB16\", \"\\u057E\\u0576\"],  // ﬖ → վն\n  [\"\\uFB17\", \"\\u0574\\u056D\"],  // ﬗ → մխ\n]);\n","import { ARMENIAN_LIGATURES } from \"./ligatures.js\";\n\n/**\n * Normalize Armenian text before transliteration:\n * 1. Unicode NFC normalization\n * 2. Expand Armenian ligatures to their component letters\n */\nexport function normalizeArmenian(text: string): string {\n  let result = text.normalize(\"NFC\");\n  for (const [ligature, expansion] of ARMENIAN_LIGATURES) {\n    result = result.replaceAll(ligature, expansion);\n  }\n  return result;\n}\n","export const ARMENIAN_LOWER: string[] = Array.from({ length: 38 }, (_, i) => String.fromCodePoint(0x0561 + i));\n\nexport const ARMENIAN_UPPER: string[] = Array.from({ length: 38 }, (_, i) => String.fromCodePoint(0x0531 + i));\n\nconst vowelLowerCodepoints = [0x0561, 0x0565, 0x0567, 0x0568, 0x056B, 0x0578, 0x0585];\nconst vowelUpperCodepoints = [0x0531, 0x0535, 0x0537, 0x0538, 0x053B, 0x0548, 0x0555];\n\nexport const ARMENIAN_VOWELS: Set<string> = new Set([\n  ...vowelLowerCodepoints.map((cp) => String.fromCodePoint(cp)),\n  ...vowelUpperCodepoints.map((cp) => String.fromCodePoint(cp)),\n]);\n\nexport const ARMENIAN_LETTER_RANGE = /[\\u0531-\\u0556\\u0561-\\u0586]/;\n\nexport function isArmenianLetter(ch: string): boolean {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return false;\n  return (cp >= 0x0531 && cp <= 0x0556) || (cp >= 0x0561 && cp <= 0x0586);\n}\n\nexport function isArmenianUppercase(ch: string): boolean {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return false;\n  return cp >= 0x0531 && cp <= 0x0556;\n}\n\nexport function isArmenianVowel(ch: string): boolean {\n  return ARMENIAN_VOWELS.has(ch);\n}\n\nexport function armenianToLower(ch: string): string {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return ch;\n  if (cp >= 0x0531 && cp <= 0x0556) {\n    return String.fromCodePoint(cp + 0x30);\n  }\n  return ch;\n}\n\nexport function armenianToUpper(ch: string): string {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return ch;\n  if (cp >= 0x0561 && cp <= 0x0586) {\n    return String.fromCodePoint(cp - 0x30);\n  }\n  return ch;\n}\n\nexport const ARMENIAN_PUNCTUATION: string[] = [\n  String.fromCodePoint(0x0559), // ՙ\n  String.fromCodePoint(0x055A), // ՚\n  String.fromCodePoint(0x055B), // ՛\n  String.fromCodePoint(0x055C), // ՜\n  String.fromCodePoint(0x055D), // ՝\n  String.fromCodePoint(0x055E), // ՞\n  String.fromCodePoint(0x055F), // ՟\n  String.fromCodePoint(0x0589), // ։\n  String.fromCodePoint(0x058A), // ֊\n];\n\nexport function isArmenianPunctuation(ch: string): boolean {\n  return ARMENIAN_PUNCTUATION.includes(ch);\n}\n","import type { Token } from \"./tokens.js\";\nimport type { SequenceMapping } from \"../types.js\";\nimport { isArmenianLetter, isArmenianPunctuation } from \"../armenian/alphabet.js\";\n\n/** U+0587 ARMENIAN SMALL LIGATURE EW — treated as an Armenian letter */\nconst ARMENIAN_EW = \"\\u0587\";\n\n/** Offset between Armenian uppercase (U+0531) and lowercase (U+0561) */\nconst ARMENIAN_CASE_OFFSET = 0x30;\n\nfunction armenianCharToLower(ch: string): string {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return ch;\n  if (cp >= 0x0531 && cp <= 0x0556) return String.fromCodePoint(cp + ARMENIAN_CASE_OFFSET);\n  return ch;\n}\n\nfunction armenianCharToUpper(ch: string): string {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined) return ch;\n  if (cp >= 0x0561 && cp <= 0x0586) return String.fromCodePoint(cp - ARMENIAN_CASE_OFFSET);\n  return ch;\n}\n\n/** Convert an Armenian string to all-lowercase */\nfunction seqToLower(s: string): string {\n  return Array.from(s).map(armenianCharToLower).join(\"\");\n}\n\n/** Convert an Armenian string to all-uppercase */\nfunction seqToUpper(s: string): string {\n  return Array.from(s).map(armenianCharToUpper).join(\"\");\n}\n\n/** Convert an Armenian string to title case (first char upper, rest lower) */\nfunction seqToTitle(s: string): string {\n  const chars = Array.from(s);\n  return chars.map((ch, i) => (i === 0 ? armenianCharToUpper(ch) : armenianCharToLower(ch))).join(\"\");\n}\n\nfunction isArmenianLetterOrEw(ch: string): boolean {\n  return ch === ARMENIAN_EW || isArmenianLetter(ch);\n}\n\n/** Check if a character is « (U+00AB) or » (U+00BB) */\nfunction isAngleBracketQuote(ch: string): boolean {\n  return ch === \"\\u00AB\" || ch === \"\\u00BB\";\n}\n\ninterface SequencePattern {\n  /** Lowercase canonical form used for matching */\n  lowercase: string;\n  length: number;\n}\n\n/**\n * Scans Armenian text into tokens.\n *\n * The scanner is parameterized by the multi-character sequences defined\n * in a transliteration standard (e.g., \"ու\" for BGN/PCGN, \"յու\"/\"յա\" for Russian).\n *\n * Algorithm:\n * 1. Greedy longest-match for multi-char sequences\n * 2. Single Armenian letters\n * 3. Armenian punctuation\n * 4. Whitespace\n * 5. Everything else accumulated as \"other\"\n */\nexport function scan(text: string, sequences: readonly SequenceMapping[]): Token[] {\n  // Build unique set of sequence patterns (lowercase canonical), sorted longest-first\n  const seenPatterns = new Set<string>();\n  const patterns: SequencePattern[] = [];\n\n  for (const mapping of sequences) {\n    const lower = seqToLower(mapping.armenian);\n    const upper = seqToUpper(mapping.armenian);\n    const chars = Array.from(mapping.armenian);\n    const candidates = new Set([lower, upper]);\n    if (chars.length > 1) candidates.add(seqToTitle(mapping.armenian));\n\n    for (const variant of candidates) {\n      const variantLower = seqToLower(variant);\n      if (!seenPatterns.has(variantLower)) {\n        seenPatterns.add(variantLower);\n        patterns.push({ lowercase: variantLower, length: Array.from(variantLower).length });\n      }\n    }\n  }\n\n  // Sort longest-first for greedy matching\n  patterns.sort((a, b) => b.length - a.length);\n\n  const chars = Array.from(text);\n  const tokens: Token[] = [];\n\n  // Track byte offset alongside char index for the token offset field\n  // We report char-index offsets (consistent with Array.from iteration)\n  let i = 0;\n  let otherStart = -1;\n  let otherValue = \"\";\n\n  const flushOther = () => {\n    if (otherValue.length > 0) {\n      tokens.push({ kind: \"other\", value: otherValue, offset: otherStart });\n      otherValue = \"\";\n      otherStart = -1;\n    }\n  };\n\n  while (i < chars.length) {\n    const ch = chars[i];\n    if (ch === undefined) break;\n\n    // 1. Try greedy longest-match for multi-char sequences\n    let matched = false;\n    for (const pattern of patterns) {\n      if (i + pattern.length > chars.length) continue;\n      const slice = chars.slice(i, i + pattern.length).join(\"\");\n      const sliceLower = seqToLower(slice);\n      if (sliceLower === pattern.lowercase) {\n        flushOther();\n        tokens.push({ kind: \"armenian_sequence\", value: slice, offset: i });\n        i += pattern.length;\n        matched = true;\n        break;\n      }\n    }\n    if (matched) continue;\n\n    // 2. Single Armenian letter (including U+0587)\n    if (isArmenianLetterOrEw(ch)) {\n      flushOther();\n      tokens.push({ kind: \"armenian_letter\", value: ch, offset: i });\n      i++;\n      continue;\n    }\n\n    // 3. Armenian punctuation and angle-bracket quotes\n    if (isArmenianPunctuation(ch) || isAngleBracketQuote(ch)) {\n      flushOther();\n      tokens.push({ kind: \"punctuation\", value: ch, offset: i });\n      i++;\n      continue;\n    }\n\n    // 4. Whitespace\n    if (/\\s/.test(ch)) {\n      flushOther();\n      tokens.push({ kind: \"whitespace\", value: ch, offset: i });\n      i++;\n      continue;\n    }\n\n    // 5. Accumulate \"other\"\n    if (otherValue.length === 0) otherStart = i;\n    otherValue += ch;\n    i++;\n  }\n\n  flushOther();\n\n  return annotateWordPositions(tokens);\n}\n\n/**\n * Annotate each Armenian token with its position within its word.\n *\n * A \"word\" is a consecutive run of armenian_letter and armenian_sequence tokens.\n * Word boundaries are any non-Armenian token (whitespace, punctuation, other).\n *\n * Positions:\n * - \"isolated\": single-token word\n * - \"initial\": first token of a multi-token word\n * - \"medial\": middle token(s)\n * - \"final\": last token\n */\nfunction annotateWordPositions(tokens: Token[]): Token[] {\n  const isArmenian = (t: Token) => t.kind === \"armenian_letter\" || t.kind === \"armenian_sequence\";\n\n  let runStart = -1;\n\n  const closeRun = (runEnd: number) => {\n    if (runStart === -1) return;\n    const len = runEnd - runStart;\n    if (len === 1) {\n      const tok = tokens[runStart];\n      if (tok) tok.wordPosition = \"isolated\";\n    } else {\n      for (let k = runStart; k < runEnd; k++) {\n        const tok = tokens[k];\n        if (!tok) continue;\n        if (k === runStart) tok.wordPosition = \"initial\";\n        else if (k === runEnd - 1) tok.wordPosition = \"final\";\n        else tok.wordPosition = \"medial\";\n      }\n    }\n    runStart = -1;\n  };\n\n  for (let j = 0; j < tokens.length; j++) {\n    const tok = tokens[j];\n    if (tok && isArmenian(tok)) {\n      if (runStart === -1) runStart = j;\n    } else {\n      closeRun(j);\n    }\n  }\n  closeRun(tokens.length);\n\n  return tokens;\n}\n","import {\n  isArmenianLetter,\n  isArmenianUppercase,\n  armenianToLower,\n} from \"../armenian/alphabet.js\";\nimport type { Token } from \"../scanner/tokens.js\";\n\n/** Casing pattern of an Armenian word */\nexport type CasingPattern = \"upper\" | \"lower\" | \"title\";\n\n/** U+0587 ARMENIAN SMALL LIGATURE EW — always lowercase, no uppercase form */\nconst ARMENIAN_EW = \"\\u0587\";\n\n/**\n * Check if a character is an Armenian letter (including U+0587 և).\n */\nfunction isArmenianLetterOrEw(ch: string): boolean {\n  return ch === ARMENIAN_EW || isArmenianLetter(ch);\n}\n\n/**\n * Detect the casing pattern of an Armenian token.\n * Looks only at Armenian letters (ignores non-Armenian chars).\n * U+0587 (և) is always lowercase — it has no uppercase form.\n */\nfunction isTokenUppercase(token: Token): boolean {\n  const chars = Array.from(token.value);\n  const armenianChars = chars.filter(isArmenianLetterOrEw);\n  if (armenianChars.length === 0) return false;\n  return armenianChars.every(\n    (ch) => ch !== ARMENIAN_EW && isArmenianUppercase(ch),\n  );\n}\n\n/**\n * Determine the casing pattern of a word from its constituent tokens.\n * A \"word\" is a consecutive run of Armenian tokens.\n */\nexport function detectWordCasing(wordTokens: readonly Token[]): CasingPattern {\n  if (wordTokens.length === 0) return \"lower\";\n\n  const allUpper = wordTokens.every(isTokenUppercase);\n  if (allUpper) return \"upper\";\n\n  // Check if first token starts with uppercase\n  const firstToken = wordTokens[0];\n  if (firstToken && isTokenUppercase(firstToken)) return \"title\";\n\n  return \"lower\";\n}\n\n/**\n * Apply casing to a transliterated string based on the source Armenian token.\n *\n * For a single token's output:\n * - If the source was uppercase: capitalize the first character of the output\n * - If the source was lowercase: output as-is (lowercase)\n *\n * Word-level ALL-CAPS handling is done separately by the engine.\n */\nexport function applySingleTokenCasing(\n  sourceToken: Token,\n  transliterated: string,\n): string {\n  if (transliterated.length === 0) return transliterated;\n\n  // Check if any Armenian char in the source is uppercase\n  const hasUppercase = Array.from(sourceToken.value).some(\n    (ch) => isArmenianLetter(ch) && isArmenianUppercase(ch),\n  );\n\n  if (hasUppercase) {\n    // Capitalize first character of output\n    return transliterated.charAt(0).toUpperCase() + transliterated.slice(1);\n  }\n\n  return transliterated;\n}\n\n/**\n * Apply ALL-CAPS casing to an entire word's transliterated output.\n */\nexport function applyUpperCasing(text: string): string {\n  return text.toUpperCase();\n}\n\n/**\n * Get the lowercase canonical form of an Armenian token value.\n * Converts each Armenian character to lowercase.\n */\nexport function toLowerCanonical(value: string): string {\n  return Array.from(value).map(armenianToLower).join(\"\");\n}\n","import type { ContextCondition, CharMapping, SequenceMapping } from \"../types.js\";\nimport type { Token } from \"../scanner/tokens.js\";\nimport { toLowerCanonical } from \"./casing.js\";\n\n/**\n * Evaluate a context condition against a token and its neighbors.\n * All specified conditions must be true (AND logic).\n */\nexport function evaluateCondition(\n  condition: ContextCondition,\n  token: Token,\n  prevToken: Token | undefined,\n  nextToken: Token | undefined,\n): boolean {\n  // wordInitial: token must be at word start\n  if (condition.wordInitial !== undefined) {\n    const isInitial =\n      token.wordPosition === \"initial\" || token.wordPosition === \"isolated\";\n    if (condition.wordInitial !== isInitial) return false;\n  }\n\n  // position: token must be at one of the specified positions\n  if (condition.position !== undefined) {\n    const positions = Array.isArray(condition.position)\n      ? condition.position\n      : [condition.position];\n    if (!token.wordPosition || !positions.includes(token.wordPosition))\n      return false;\n  }\n\n  // followedBy: next token's lowercase value must be in the list\n  if (condition.followedBy !== undefined) {\n    if (!nextToken) return false;\n    const nextLower = toLowerCanonical(nextToken.value);\n    if (!condition.followedBy.includes(nextLower)) return false;\n  }\n\n  // notFollowedBy: next token's lowercase value must NOT be in the list\n  if (condition.notFollowedBy !== undefined) {\n    if (nextToken) {\n      const nextLower = toLowerCanonical(nextToken.value);\n      if (condition.notFollowedBy.includes(nextLower)) return false;\n    }\n    // If no next token, notFollowedBy is satisfied (nothing follows)\n  }\n\n  // precededBy: prev token's lowercase value must be in the list\n  if (condition.precededBy !== undefined) {\n    if (!prevToken) return false;\n    const prevLower = toLowerCanonical(prevToken.value);\n    if (!condition.precededBy.includes(prevLower)) return false;\n  }\n\n  return true;\n}\n\n/**\n * Resolve the transliteration output for a mapping, considering context rules.\n * Evaluates context rules in order; first matching rule wins.\n * Falls back to default target if no rules match.\n */\nexport function resolveMapping(\n  mapping: CharMapping | SequenceMapping,\n  token: Token,\n  prevToken: Token | undefined,\n  nextToken: Token | undefined,\n): string {\n  if (mapping.contextRules) {\n    for (const rule of mapping.contextRules) {\n      if (evaluateCondition(rule.condition, token, prevToken, nextToken)) {\n        return rule.target;\n      }\n    }\n  }\n  return mapping.target;\n}\n","/**\n * Default Armenian punctuation mappings.\n * Standards can override these via their `punctuation` field.\n */\nexport const DEFAULT_PUNCTUATION: Record<string, string> = {\n  \"\\u0559\": \"'\",   // ՙ ARMENIAN MODIFIER LETTER LEFT HALF RING\n  \"\\u055A\": \"'\",   // ՚ ARMENIAN APOSTROPHE\n  \"\\u055B\": \"'\",   // ՛ ARMENIAN EMPHASIS MARK\n  \"\\u055C\": \"!\",   // ՜ ARMENIAN EXCLAMATION MARK\n  \"\\u055D\": \",\",   // ՝ ARMENIAN COMMA\n  \"\\u055E\": \"?\",   // ՞ ARMENIAN QUESTION MARK\n  \"\\u055F\": \".\",   // ՟ ARMENIAN ABBREVIATION MARK\n  \"\\u0589\": \".\",   // ։ ARMENIAN FULL STOP\n  \"\\u058A\": \"-\",   // ֊ ARMENIAN HYPHEN\n  \"\\u00AB\": '\"',   // « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n  \"\\u00BB\": '\"',   // » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n};\n","import type { TransliterationStandard, CharMapping, SequenceMapping } from \"../types.js\";\nimport type { Token } from \"../scanner/tokens.js\";\nimport { normalizeArmenian } from \"../armenian/normalize.js\";\nimport { scan } from \"../scanner/scanner.js\";\nimport { resolveMapping } from \"./context.js\";\nimport {\n  detectWordCasing,\n  applySingleTokenCasing,\n  applyUpperCasing,\n  toLowerCanonical,\n} from \"./casing.js\";\nimport { DEFAULT_PUNCTUATION } from \"./punctuation.js\";\n\n/**\n * Core transliteration engine.\n * Processes text through: normalize -> scan -> map -> casing.\n */\nexport class TransliterationEngine {\n  private readonly charMap: Map<string, CharMapping>;\n  private readonly seqMap: Map<string, SequenceMapping>;\n  private readonly punctMap: Map<string, string>;\n\n  constructor(private readonly standard: TransliterationStandard) {\n    // Build lookup maps keyed by lowercase canonical Armenian\n    this.charMap = new Map(\n      standard.charMappings.map((m) => [m.armenian, m]),\n    );\n    this.seqMap = new Map(\n      standard.sequenceMappings.map((m) => [m.armenian, m]),\n    );\n\n    // Merge default punctuation with standard-specific overrides\n    this.punctMap = new Map(Object.entries(DEFAULT_PUNCTUATION));\n    if (standard.punctuation) {\n      for (const [key, value] of Object.entries(standard.punctuation)) {\n        this.punctMap.set(key, value);\n      }\n    }\n  }\n\n  /** Transliterate Armenian text to the target script */\n  transliterate(text: string): string {\n    // 1. Normalize: expand ligatures, NFC\n    const normalized = normalizeArmenian(text);\n\n    // 2. Scan into tokens\n    const tokens = scan(normalized, this.standard.sequenceMappings);\n\n    // 3. Find word boundaries (consecutive Armenian token runs)\n    const wordRuns = this.findWordRuns(tokens);\n\n    // 4. For each word, detect casing and transliterate\n    const output: string[] = new Array(tokens.length);\n    const processedInWord = new Set<number>();\n\n    for (const run of wordRuns) {\n      const wordTokens = tokens.slice(run.start, run.end);\n      const casing = detectWordCasing(wordTokens);\n\n      // Transliterate each token in the word\n      const wordParts: string[] = [];\n      for (let i = run.start; i < run.end; i++) {\n        const token = tokens[i]!;\n        const prev = i > 0 ? tokens[i - 1] : undefined;\n        const next = i < tokens.length - 1 ? tokens[i + 1] : undefined;\n\n        const mapped = this.mapToken(token, prev, next);\n        const cased =\n          casing === \"upper\"\n            ? applyUpperCasing(mapped)\n            : applySingleTokenCasing(token, mapped);\n\n        output[i] = cased;\n        wordParts.push(cased);\n        processedInWord.add(i);\n      }\n    }\n\n    // 5. Process non-word tokens (punctuation, whitespace, other)\n    for (let i = 0; i < tokens.length; i++) {\n      if (processedInWord.has(i)) continue;\n      const token = tokens[i]!;\n\n      switch (token.kind) {\n        case \"punctuation\":\n          output[i] = this.punctMap.get(token.value) ?? token.value;\n          break;\n        default:\n          output[i] = token.value;\n          break;\n      }\n    }\n\n    return output.join(\"\");\n  }\n\n  /** Map a single Armenian token to its transliterated form (lowercase) */\n  private mapToken(\n    token: Token,\n    prev: Token | undefined,\n    next: Token | undefined,\n  ): string {\n    const canonical = toLowerCanonical(token.value);\n\n    if (token.kind === \"armenian_sequence\") {\n      const mapping = this.seqMap.get(canonical);\n      if (mapping) return resolveMapping(mapping, token, prev, next);\n    }\n\n    if (token.kind === \"armenian_letter\") {\n      // Handle U+0587 (և) as a special case - it might be in seqMap\n      const seqMapping = this.seqMap.get(canonical);\n      if (seqMapping) return resolveMapping(seqMapping, token, prev, next);\n\n      const charMapping = this.charMap.get(canonical);\n      if (charMapping) return resolveMapping(charMapping, token, prev, next);\n    }\n\n    return token.value;\n  }\n\n  /** Find consecutive runs of Armenian tokens (words) */\n  private findWordRuns(\n    tokens: readonly Token[],\n  ): Array<{ start: number; end: number }> {\n    const runs: Array<{ start: number; end: number }> = [];\n    let runStart = -1;\n\n    for (let i = 0; i <= tokens.length; i++) {\n      const token = i < tokens.length ? tokens[i] : undefined;\n      const isArmenian =\n        token?.kind === \"armenian_letter\" ||\n        token?.kind === \"armenian_sequence\";\n\n      if (isArmenian && runStart === -1) {\n        runStart = i;\n      } else if (!isArmenian && runStart !== -1) {\n        runs.push({ start: runStart, end: i });\n        runStart = -1;\n      }\n    }\n\n    return runs;\n  }\n}\n","import type { TransliterationStandard } from \"../../types.js\";\n\n// Armenian vowels (lowercase) used in context rules for ո word-initial behaviour\nconst VOWELS_AND_V = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"օ\", \"վ\"] as const;\n\nexport const bgnPcgn: TransliterationStandard = {\n  id: \"bgn-pcgn\",\n  name: \"BGN/PCGN Romanization (simplified)\",\n  targetScript: \"latin\",\n  reversible: false,\n\n  charMappings: [\n    // U+0561 ա\n    { armenian: \"ա\", target: \"a\" },\n    // U+0562 բ\n    { armenian: \"բ\", target: \"b\" },\n    // U+0563 գ\n    { armenian: \"գ\", target: \"g\" },\n    // U+0564 դ\n    { armenian: \"դ\", target: \"d\" },\n    // U+0565 ե — word-initial maps to \"ye\"\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"ye\" },\n      ],\n    },\n    // U+0566 զ\n    { armenian: \"զ\", target: \"z\" },\n    // U+0567 է — same Latin \"e\" as ե, not the reverse default\n    { armenian: \"է\", target: \"e\", reverseDefault: false },\n    // U+0568 ը\n    { armenian: \"ը\", target: \"ə\" },\n    // U+0569 թ — aspirated T, simplified (no apostrophe)\n    { armenian: \"թ\", target: \"t\", reverseDefault: false },\n    // U+056A ժ\n    { armenian: \"ժ\", target: \"zh\" },\n    // U+056B ի\n    { armenian: \"ի\", target: \"i\" },\n    // U+056C լ\n    { armenian: \"լ\", target: \"l\" },\n    // U+056D խ\n    { armenian: \"խ\", target: \"kh\" },\n    // U+056E ծ — same Latin \"ts\" as ձ, not the reverse default\n    { armenian: \"ծ\", target: \"ts\", reverseDefault: false },\n    // U+056F կ\n    { armenian: \"կ\", target: \"k\", reverseDefault: true },\n    // U+0570 հ\n    { armenian: \"հ\", target: \"h\" },\n    // U+0571 ձ\n    { armenian: \"ձ\", target: \"dz\" },\n    // U+0572 ղ\n    { armenian: \"ղ\", target: \"gh\" },\n    // U+0573 ճ — same Latin \"ch\" as չ, not the reverse default\n    { armenian: \"ճ\", target: \"ch\", reverseDefault: false },\n    // U+0574 մ\n    { armenian: \"մ\", target: \"m\" },\n    // U+0575 յ\n    { armenian: \"յ\", target: \"y\" },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ\n    { armenian: \"շ\", target: \"sh\" },\n    // U+0578 ո — word-initial maps to \"vo\" unless followed by a vowel or վ\n    {\n      armenian: \"ո\",\n      target: \"o\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, notFollowedBy: [...VOWELS_AND_V] },\n          target: \"vo\",\n        },\n      ],\n    },\n    // U+0579 չ — reverse default \"ch\"\n    { armenian: \"չ\", target: \"ch\", reverseDefault: true },\n    // U+057A պ — aspirated P counterpart; reverse default\n    { armenian: \"պ\", target: \"p\", reverseDefault: true },\n    // U+057B ջ\n    { armenian: \"ջ\", target: \"j\" },\n    // U+057C ռ — trilled R; reverse default\n    { armenian: \"ռ\", target: \"r\", reverseDefault: true },\n    // U+057D ս\n    { armenian: \"ս\", target: \"s\" },\n    // U+057E վ\n    { armenian: \"վ\", target: \"v\" },\n    // U+057F տ — reverse default \"t\"\n    { armenian: \"տ\", target: \"t\", reverseDefault: true },\n    // U+0580 ր — non-trilled R; not reverse default (ռ is)\n    { armenian: \"ր\", target: \"r\", reverseDefault: false },\n    // U+0581 ց — reverse default \"ts\"\n    { armenian: \"ց\", target: \"ts\", reverseDefault: true },\n    // U+0582 ւ — rarely stands alone; part of the ու digraph\n    { armenian: \"ւ\", target: \"u\" },\n    // U+0583 փ — aspirated P, simplified (no apostrophe); not reverse default\n    { armenian: \"փ\", target: \"p\", reverseDefault: false },\n    // U+0584 ք — aspirated K, simplified (no apostrophe); not reverse default\n    { armenian: \"ք\", target: \"k\", reverseDefault: false },\n    // U+0585 օ — not reverse default (ո already maps to \"o\" with reverseDefault)\n    { armenian: \"օ\", target: \"o\", reverseDefault: false },\n    // U+0586 ֆ\n    { armenian: \"ֆ\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // ու digraph (U+0578 + U+0582) → \"u\"\n    { armenian: \"ու\", target: \"u\" },\n    // եվ sequence (ե + վ) as alternative spelling of \"ev\" — word-initial maps to \"yev\"\n    {\n      armenian: \"եվ\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n      ],\n    },\n    // եւ traditional spelling (U+0565 + U+0582) — alternative spelling of \"ev\"\n    {\n      armenian: \"եւ\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n      ],\n    },\n    // և ligature (U+0587) — word-initial maps to \"yev\"\n    {\n      armenian: \"և\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n      ],\n    },\n  ],\n\n  punctuation: {\n    \"։\": \".\",   // Armenian full stop → period\n    \"՞\": \"?\",   // Armenian question mark → question mark\n    \"՝\": \",\",   // Armenian comma → comma\n    \"՜\": \"!\",   // Armenian exclamation mark → exclamation mark\n    \"«\": '\"',   // Armenian left guillemet → double quote\n    \"»\": '\"',   // Armenian right guillemet → double quote\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\nexport const iso9985: TransliterationStandard = {\n  id: \"iso-9985\",\n  name: \"ISO 9985:1996\",\n  targetScript: \"latin\",\n  reversible: true,\n\n  charMappings: [\n    // U+0561 ա\n    { armenian: \"ա\", target: \"a\" },\n    // U+0562 բ\n    { armenian: \"բ\", target: \"b\" },\n    // U+0563 գ\n    { armenian: \"գ\", target: \"g\" },\n    // U+0564 դ\n    { armenian: \"դ\", target: \"d\" },\n    // U+0565 ե\n    { armenian: \"ե\", target: \"e\" },\n    // U+0566 զ\n    { armenian: \"զ\", target: \"z\" },\n    // U+0567 է → ē (e with macron, U+0113)\n    { armenian: \"է\", target: \"ē\" },\n    // U+0568 ը → ë (e with diaeresis, U+00EB)\n    { armenian: \"ը\", target: \"ë\" },\n    // U+0569 թ → tʿ (t + modifier letter left half ring U+02BF)\n    { armenian: \"թ\", target: \"tʿ\" },\n    // U+056A ժ → ž (U+017E)\n    { armenian: \"ժ\", target: \"ž\" },\n    // U+056B ի\n    { armenian: \"ի\", target: \"i\" },\n    // U+056C լ\n    { armenian: \"լ\", target: \"l\" },\n    // U+056D խ\n    { armenian: \"խ\", target: \"x\" },\n    // U+056E ծ → c̣ (c + combining dot below U+0323)\n    { armenian: \"ծ\", target: \"c\\u0323\" },\n    // U+056F կ\n    { armenian: \"կ\", target: \"k\" },\n    // U+0570 հ\n    { armenian: \"հ\", target: \"h\" },\n    // U+0571 ձ → j\n    { armenian: \"ձ\", target: \"j\" },\n    // U+0572 ղ → ġ (g + combining dot above U+0307)\n    { armenian: \"ղ\", target: \"g\\u0307\" },\n    // U+0573 ճ → č̣ (č U+010D + combining dot below U+0323)\n    { armenian: \"ճ\", target: \"\\u010D\\u0323\" },\n    // U+0574 մ\n    { armenian: \"մ\", target: \"m\" },\n    // U+0575 յ\n    { armenian: \"յ\", target: \"y\" },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ → š (U+0161)\n    { armenian: \"շ\", target: \"š\" },\n    // U+0578 ո\n    { armenian: \"ո\", target: \"o\" },\n    // U+0579 չ → č (U+010D)\n    { armenian: \"չ\", target: \"č\" },\n    // U+057A պ\n    { armenian: \"պ\", target: \"p\" },\n    // U+057B ջ → ǰ (j + combining caron, U+01F0)\n    { armenian: \"ջ\", target: \"\\u01F0\" },\n    // U+057C ռ → ṙ (r + combining dot above U+0307 applied to r... use ṙ U+1E59)\n    { armenian: \"ռ\", target: \"\\u1E59\" },\n    // U+057D ս\n    { armenian: \"ս\", target: \"s\" },\n    // U+057E վ\n    { armenian: \"վ\", target: \"v\" },\n    // U+057F տ\n    { armenian: \"տ\", target: \"t\" },\n    // U+0580 ր\n    { armenian: \"ր\", target: \"r\" },\n    // U+0581 ց → cʿ (c + modifier letter left half ring U+02BF)\n    { armenian: \"ց\", target: \"c\\u02BF\" },\n    // U+0582 ւ → w\n    { armenian: \"ւ\", target: \"w\" },\n    // U+0583 փ → pʿ (p + modifier letter left half ring U+02BF)\n    { armenian: \"փ\", target: \"p\\u02BF\" },\n    // U+0584 ք → kʿ (k + modifier letter left half ring U+02BF)\n    { armenian: \"ք\", target: \"k\\u02BF\" },\n    // U+0585 օ → ò (o with grave, U+00F2)\n    { armenian: \"օ\", target: \"ò\" },\n    // U+0586 ֆ\n    { armenian: \"ֆ\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // ու digraph (U+0578 + U+0582) — in ISO 9985 each letter maps independently (ո→o, ւ→w)\n    // but the digraph \"ow\" is the natural reversible representation; no override needed.\n    // և ligature (U+0587) → ew\n    { armenian: \"և\", target: \"ew\" },\n  ],\n\n  punctuation: {\n    \"։\": \".\",\n    \"՞\": \"?\",\n    \"՝\": \",\",\n    \"՜\": \"!\",\n    \"«\": '\"',\n    \"»\": '\"',\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\nexport const hubschmannMeillet: TransliterationStandard = {\n  id: \"hubschmann-meillet\",\n  name: \"Hübschmann-Meillet Transliteration\",\n  targetScript: \"latin\",\n  reversible: true,\n\n  charMappings: [\n    // U+0561 ա\n    { armenian: \"ա\", target: \"a\" },\n    // U+0562 բ\n    { armenian: \"բ\", target: \"b\" },\n    // U+0563 գ\n    { armenian: \"գ\", target: \"g\" },\n    // U+0564 դ\n    { armenian: \"դ\", target: \"d\" },\n    // U+0565 ե\n    { armenian: \"ե\", target: \"e\" },\n    // U+0566 զ\n    { armenian: \"զ\", target: \"z\" },\n    // U+0567 է → ē (e with macron, U+0113)\n    { armenian: \"է\", target: \"ē\" },\n    // U+0568 ը → ə (schwa, U+0259)\n    { armenian: \"ը\", target: \"ə\" },\n    // U+0569 թ → tʿ (t + modifier letter left half ring U+02BF)\n    { armenian: \"թ\", target: \"tʿ\" },\n    // U+056A ժ → ž (U+017E)\n    { armenian: \"ժ\", target: \"ž\" },\n    // U+056B ի\n    { armenian: \"ի\", target: \"i\" },\n    // U+056C լ\n    { armenian: \"լ\", target: \"l\" },\n    // U+056D խ\n    { armenian: \"խ\", target: \"x\" },\n    // U+056E ծ → c (plain c; H-M uses c without diacritic)\n    { armenian: \"ծ\", target: \"c\" },\n    // U+056F կ\n    { armenian: \"կ\", target: \"k\" },\n    // U+0570 հ\n    { armenian: \"հ\", target: \"h\" },\n    // U+0571 ձ → j\n    { armenian: \"ձ\", target: \"j\" },\n    // U+0572 ղ → ł (l with stroke, U+0142)\n    { armenian: \"ղ\", target: \"ł\" },\n    // U+0573 ճ → č (c with caron, U+010D)\n    { armenian: \"ճ\", target: \"č\" },\n    // U+0574 մ\n    { armenian: \"մ\", target: \"m\" },\n    // U+0575 յ\n    { armenian: \"յ\", target: \"y\" },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ → š (U+0161)\n    { armenian: \"շ\", target: \"š\" },\n    // U+0578 ո\n    { armenian: \"ո\", target: \"o\" },\n    // U+0579 չ → čʿ (č + modifier letter left half ring U+02BF)\n    { armenian: \"չ\", target: \"č\\u02BF\" },\n    // U+057A պ\n    { armenian: \"պ\", target: \"p\" },\n    // U+057B ջ → ǰ (j with combining caron, U+01F0)\n    { armenian: \"ջ\", target: \"\\u01F0\" },\n    // U+057C ռ → ṙ (r with dot above, U+1E59)\n    { armenian: \"ռ\", target: \"\\u1E59\" },\n    // U+057D ս\n    { armenian: \"ս\", target: \"s\" },\n    // U+057E վ\n    { armenian: \"վ\", target: \"v\" },\n    // U+057F տ\n    { armenian: \"տ\", target: \"t\" },\n    // U+0580 ր\n    { armenian: \"ր\", target: \"r\" },\n    // U+0581 ց → cʿ (c + modifier letter left half ring U+02BF)\n    { armenian: \"ց\", target: \"c\\u02BF\" },\n    // U+0582 ւ → w\n    { armenian: \"ւ\", target: \"w\" },\n    // U+0583 փ → pʿ (p + modifier letter left half ring U+02BF)\n    { armenian: \"փ\", target: \"pʿ\" },\n    // U+0584 ք → kʿ (k + modifier letter left half ring U+02BF)\n    { armenian: \"ք\", target: \"kʿ\" },\n    // U+0585 օ → ō (o with macron, U+014D)\n    { armenian: \"օ\", target: \"ō\" },\n    // U+0586 ֆ\n    { armenian: \"ֆ\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // և ligature (U+0587) → ew\n    { armenian: \"և\", target: \"ew\" },\n  ],\n\n  punctuation: {\n    \"։\": \".\",\n    \"՞\": \"?\",\n    \"՝\": \",\",\n    \"՜\": \"!\",\n    \"«\": '\"',\n    \"»\": '\"',\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n// Armenian vowels (lowercase) used in context rules for ո word-initial behaviour\nconst VOWELS_AND_V = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"օ\", \"վ\"] as const;\n\nexport const alaLc: TransliterationStandard = {\n  id: \"ala-lc\",\n  name: \"ALA-LC Romanization\",\n  targetScript: \"latin\",\n  reversible: false,\n\n  charMappings: [\n    // U+0561 ա\n    { armenian: \"ա\", target: \"a\" },\n    // U+0562 բ\n    { armenian: \"բ\", target: \"b\" },\n    // U+0563 գ\n    { armenian: \"գ\", target: \"g\" },\n    // U+0564 դ\n    { armenian: \"դ\", target: \"d\" },\n    // U+0565 ե — word-initial maps to \"ye\"\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"ye\" },\n      ],\n    },\n    // U+0566 զ\n    { armenian: \"զ\", target: \"z\" },\n    // U+0567 է — same Latin \"e\" as ե, not the reverse default\n    { armenian: \"է\", target: \"e\", reverseDefault: false },\n    // U+0568 ը → ě (e with caron, U+011B) — ALA-LC uses ě instead of ə\n    { armenian: \"ը\", target: \"ě\" },\n    // U+0569 թ → tʻ (t + modifier letter turned comma U+02BB)\n    { armenian: \"թ\", target: \"t\\u02BB\" },\n    // U+056A ժ → zh\n    { armenian: \"ժ\", target: \"zh\" },\n    // U+056B ի\n    { armenian: \"ի\", target: \"i\" },\n    // U+056C լ\n    { armenian: \"լ\", target: \"l\" },\n    // U+056D խ → kh\n    { armenian: \"խ\", target: \"kh\" },\n    // U+056E ծ → ts (same as ց, not reverse default)\n    { armenian: \"ծ\", target: \"ts\", reverseDefault: false },\n    // U+056F կ\n    { armenian: \"կ\", target: \"k\", reverseDefault: true },\n    // U+0570 հ\n    { armenian: \"հ\", target: \"h\" },\n    // U+0571 ձ → dz\n    { armenian: \"ձ\", target: \"dz\" },\n    // U+0572 ղ → gh\n    { armenian: \"ղ\", target: \"gh\" },\n    // U+0573 ճ → ch (same as չ, not reverse default)\n    { armenian: \"ճ\", target: \"ch\", reverseDefault: false },\n    // U+0574 մ\n    { armenian: \"մ\", target: \"m\" },\n    // U+0575 յ\n    { armenian: \"յ\", target: \"y\" },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ → sh\n    { armenian: \"շ\", target: \"sh\" },\n    // U+0578 ո — word-initial maps to \"vo\" unless followed by a vowel or վ\n    {\n      armenian: \"ո\",\n      target: \"o\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, notFollowedBy: [...VOWELS_AND_V] },\n          target: \"vo\",\n        },\n      ],\n    },\n    // U+0579 չ — reverse default \"ch\"\n    { armenian: \"չ\", target: \"ch\", reverseDefault: true },\n    // U+057A պ — reverse default \"p\"\n    { armenian: \"պ\", target: \"p\", reverseDefault: true },\n    // U+057B ջ → j\n    { armenian: \"ջ\", target: \"j\" },\n    // U+057C ռ — trilled R; reverse default\n    { armenian: \"ռ\", target: \"r\", reverseDefault: true },\n    // U+057D ս\n    { armenian: \"ս\", target: \"s\" },\n    // U+057E վ\n    { armenian: \"վ\", target: \"v\" },\n    // U+057F տ — reverse default \"t\"\n    { armenian: \"տ\", target: \"t\", reverseDefault: true },\n    // U+0580 ր — non-trilled R; not reverse default\n    { armenian: \"ր\", target: \"r\", reverseDefault: false },\n    // U+0581 ց → tsʻ (ts + modifier letter turned comma U+02BB) — reverse default\n    { armenian: \"ց\", target: \"ts\\u02BB\", reverseDefault: true },\n    // U+0582 ւ — rarely stands alone; part of the ու digraph\n    { armenian: \"ւ\", target: \"u\" },\n    // U+0583 փ → pʻ (p + modifier letter turned comma U+02BB)\n    { armenian: \"փ\", target: \"p\\u02BB\", reverseDefault: false },\n    // U+0584 ք → kʻ (k + modifier letter turned comma U+02BB)\n    { armenian: \"ք\", target: \"k\\u02BB\", reverseDefault: false },\n    // U+0585 օ — not reverse default (ո already maps to \"o\")\n    { armenian: \"օ\", target: \"o\", reverseDefault: false },\n    // U+0586 ֆ\n    { armenian: \"ֆ\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // ու digraph (U+0578 + U+0582) → \"u\"\n    { armenian: \"ու\", target: \"u\" },\n    // եվ sequence (ե + վ) as alternative spelling of \"ev\" — word-initial maps to \"yev\"\n    {\n      armenian: \"եվ\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n      ],\n    },\n    // և ligature (U+0587) — word-initial maps to \"yev\"\n    {\n      armenian: \"և\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n      ],\n    },\n  ],\n\n  punctuation: {\n    \"։\": \".\",\n    \"՞\": \"?\",\n    \"՝\": \",\",\n    \"՜\": \"!\",\n    \"«\": '\"',\n    \"»\": '\"',\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n/** Armenian vowels (lowercase) used for ո word-initial context rule */\nconst VOWELS = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"օ\"] as const;\n\nexport const russianPhonetic: TransliterationStandard = {\n  id: \"russian-phonetic\",\n  name: \"Russian Phonetic Transliteration\",\n  targetScript: \"cyrillic\",\n  reversible: false,\n\n  charMappings: [\n    // U+0561 ա → а\n    { armenian: \"ա\", target: \"а\" },\n    // U+0562 բ → б\n    { armenian: \"բ\", target: \"б\" },\n    // U+0563 գ → г (reverseDefault: true — ղ also → г)\n    { armenian: \"գ\", target: \"г\", reverseDefault: true },\n    // U+0564 դ → д\n    { armenian: \"դ\", target: \"д\" },\n    // U+0565 ե → е (wordInitial → \"е\" — same letter, no change)\n    {\n      armenian: \"ե\",\n      target: \"е\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"е\" },\n      ],\n    },\n    // U+0566 զ → з\n    { armenian: \"զ\", target: \"з\" },\n    // U+0567 է → э\n    { armenian: \"է\", target: \"э\" },\n    // U+0568 ը → ы\n    { armenian: \"ը\", target: \"ы\" },\n    // U+0569 թ → т (reverseDefault: false — տ is the reverse default)\n    { armenian: \"թ\", target: \"т\", reverseDefault: false },\n    // U+056A ժ → ж (reverseDefault: true — ջ also → ж)\n    { armenian: \"ժ\", target: \"ж\", reverseDefault: true },\n    // U+056B ի → и\n    { armenian: \"ի\", target: \"и\" },\n    // U+056C լ → л\n    { armenian: \"լ\", target: \"л\" },\n    // U+056D խ → х (reverseDefault: true — հ also → х)\n    { armenian: \"խ\", target: \"х\", reverseDefault: true },\n    // U+056E ծ → ц (reverseDefault: false — ց is the reverse default)\n    { armenian: \"ծ\", target: \"ц\", reverseDefault: false },\n    // U+056F կ → к (reverseDefault: true — ք also → к)\n    { armenian: \"կ\", target: \"к\", reverseDefault: true },\n    // U+0570 հ → х (reverseDefault: false — խ is the reverse default)\n    { armenian: \"հ\", target: \"х\", reverseDefault: false },\n    // U+0571 ձ → дз\n    { armenian: \"ձ\", target: \"дз\" },\n    // U+0572 ղ → г (reverseDefault: false — գ is the reverse default)\n    { armenian: \"ղ\", target: \"г\", reverseDefault: false },\n    // U+0573 ճ → ч (reverseDefault: false — չ is the reverse default)\n    { armenian: \"ճ\", target: \"ч\", reverseDefault: false },\n    // U+0574 մ → м\n    { armenian: \"մ\", target: \"м\" },\n    // U+0575 յ → й\n    { armenian: \"յ\", target: \"й\" },\n    // U+0576 ն → н\n    { armenian: \"ն\", target: \"н\" },\n    // U+0577 շ → ш\n    { armenian: \"շ\", target: \"ш\" },\n    // U+0578 ո → о (wordInitial + NOT followed by vowel or վ → \"во\")\n    {\n      armenian: \"ո\",\n      target: \"о\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: {\n            wordInitial: true,\n            notFollowedBy: [...VOWELS, \"վ\"],\n          },\n          target: \"во\",\n        },\n      ],\n    },\n    // U+0579 չ → ч (reverseDefault: true — ճ also → ч)\n    { armenian: \"չ\", target: \"ч\", reverseDefault: true },\n    // U+057A պ → п (reverseDefault: true — փ also → п)\n    { armenian: \"պ\", target: \"п\", reverseDefault: true },\n    // U+057B ջ → ж (reverseDefault: false — ժ is the reverse default)\n    { armenian: \"ջ\", target: \"ж\", reverseDefault: false },\n    // U+057C ռ → р (reverseDefault: true — ր also → р)\n    { armenian: \"ռ\", target: \"р\", reverseDefault: true },\n    // U+057D ս → с\n    { armenian: \"ս\", target: \"с\" },\n    // U+057E վ → в\n    { armenian: \"վ\", target: \"в\" },\n    // U+057F տ → т (reverseDefault: true — թ also → т)\n    { armenian: \"տ\", target: \"т\", reverseDefault: true },\n    // U+0580 ր → р (reverseDefault: false — ռ is the reverse default)\n    { armenian: \"ր\", target: \"р\", reverseDefault: false },\n    // U+0581 ց → ц (reverseDefault: true — ծ also → ц)\n    { armenian: \"ց\", target: \"ц\", reverseDefault: true },\n    // U+0582 ւ — standalone yiwn (part of ու digraph when preceded by ո, handled in sequenceMappings)\n    { armenian: \"ւ\", target: \"у\" },\n    // U+0583 փ → п (reverseDefault: false — պ is the reverse default)\n    { armenian: \"փ\", target: \"п\", reverseDefault: false },\n    // U+0584 ք → к (reverseDefault: false — կ is the reverse default)\n    { armenian: \"ք\", target: \"к\", reverseDefault: false },\n    // U+0585 օ → о (reverseDefault: false — ո is the reverse default)\n    { armenian: \"օ\", target: \"о\", reverseDefault: false },\n    // U+0586 ֆ → ф\n    { armenian: \"ֆ\", target: \"ф\" },\n  ],\n\n  sequenceMappings: [\n    // 1. յու → ю  (3 chars, longest first)\n    { armenian: \"յու\", target: \"ю\" },\n    // 2. յա → я\n    { armenian: \"յա\", target: \"я\" },\n    // 3. ու digraph → у\n    { armenian: \"ու\", target: \"у\" },\n    // 4. եւ traditional spelling (U+0565 + U+0582) — alternative spelling of \"ev\"  (2 chars)\n    { armenian: \"եւ\", target: \"ев\" },\n    // 5. և (U+0587 ligature) → ев (1 char, shortest last)\n    { armenian: \"և\", target: \"ев\" },\n  ],\n\n  punctuation: {},\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n// Armenian vowels (lowercase) used in context rules for \\u0578 word-initial behaviour\n// \\u0561\\u0565\\u0567\\u0568\\u056B\\u0578\\u0585\\u057E\nconst VOWELS_AND_V = [\"\\u0561\", \"\\u0565\", \"\\u0567\", \"\\u0568\", \"\\u056B\", \"\\u0578\", \"\\u0585\", \"\\u057E\"] as const;\n\nexport const ipaEastern: TransliterationStandard = {\n  id: \"ipa-eastern\",\n  name: \"IPA Phonemic Transcription (Eastern Armenian)\",\n  targetScript: \"ipa\",\n  reversible: false,\n\n  charMappings: [\n    // U+0561 \\u0561\n    { armenian: \"\\u0561\", target: \"a\" },\n    // U+0562 \\u0562\n    { armenian: \"\\u0562\", target: \"b\" },\n    // U+0563 \\u0563 — IPA \\u0261 (lowercase g, U+0261)\n    { armenian: \"\\u0563\", target: \"\\u0261\" },\n    // U+0564 \\u0564\n    { armenian: \"\\u0564\", target: \"d\" },\n    // U+0565 \\u0565 — word-initial maps to \"j\\u025B\"\n    {\n      armenian: \"\\u0565\",\n      target: \"\\u025B\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025B\" },\n      ],\n    },\n    // U+0566 \\u0566\n    { armenian: \"\\u0566\", target: \"z\" },\n    // U+0567 \\u0567 — same IPA \"\\u025B\" as \\u0565, not the reverse default\n    { armenian: \"\\u0567\", target: \"\\u025B\", reverseDefault: false },\n    // U+0568 \\u0568\n    { armenian: \"\\u0568\", target: \"\\u0259\" },\n    // U+0569 \\u0569 — aspirated T\n    { armenian: \"\\u0569\", target: \"t\\u02B0\" },\n    // U+056A \\u056A\n    { armenian: \"\\u056A\", target: \"\\u0292\" },\n    // U+056B \\u056B\n    { armenian: \"\\u056B\", target: \"i\" },\n    // U+056C \\u056C\n    { armenian: \"\\u056C\", target: \"l\" },\n    // U+056D \\u056D\n    { armenian: \"\\u056D\", target: \"\\u03C7\" },\n    // U+056E \\u056E — same IPA \"t\\u0361s\" as \\u0571 variant, not the reverse default\n    { armenian: \"\\u056E\", target: \"t\\u0361s\", reverseDefault: false },\n    // U+056F \\u056F\n    { armenian: \"\\u056F\", target: \"k\" },\n    // U+0570 \\u0570\n    { armenian: \"\\u0570\", target: \"h\" },\n    // U+0571 \\u0571\n    { armenian: \"\\u0571\", target: \"d\\u0361z\" },\n    // U+0572 \\u0572\n    { armenian: \"\\u0572\", target: \"\\u0281\" },\n    // U+0573 \\u0573 — same IPA \"t\\u0361\\u0283\" as \\u0579 base, not the reverse default\n    { armenian: \"\\u0573\", target: \"t\\u0361\\u0283\", reverseDefault: false },\n    // U+0574 \\u0574\n    { armenian: \"\\u0574\", target: \"m\" },\n    // U+0575 \\u0575\n    { armenian: \"\\u0575\", target: \"j\" },\n    // U+0576 \\u0576\n    { armenian: \"\\u0576\", target: \"n\" },\n    // U+0577 \\u0577\n    { armenian: \"\\u0577\", target: \"\\u0283\" },\n    // U+0578 \\u0578 — word-initial maps to \"v\\u0254\" unless followed by a vowel or \\u057E\n    {\n      armenian: \"\\u0578\",\n      target: \"\\u0254\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, notFollowedBy: [...VOWELS_AND_V] },\n          target: \"v\\u0254\",\n        },\n      ],\n    },\n    // U+0579 \\u0579 — aspirated affricate; reverse default\n    { armenian: \"\\u0579\", target: \"t\\u0361\\u0283\\u02B0\", reverseDefault: true },\n    // U+057A \\u057A\n    { armenian: \"\\u057A\", target: \"p\" },\n    // U+057B \\u057B\n    { armenian: \"\\u057B\", target: \"d\\u0361\\u0292\" },\n    // U+057C \\u057C — trilled R; reverse default\n    { armenian: \"\\u057C\", target: \"r\", reverseDefault: true },\n    // U+057D \\u057D\n    { armenian: \"\\u057D\", target: \"s\" },\n    // U+057E \\u057E\n    { armenian: \"\\u057E\", target: \"v\" },\n    // U+057F \\u057F — reverse default \"t\"\n    { armenian: \"\\u057F\", target: \"t\", reverseDefault: true },\n    // U+0580 \\u0580 — tap R; not reverse default (\\u057C is)\n    { armenian: \"\\u0580\", target: \"\\u027E\", reverseDefault: false },\n    // U+0581 \\u0581 — aspirated affricate; reverse default\n    { armenian: \"\\u0581\", target: \"t\\u0361s\\u02B0\", reverseDefault: true },\n    // U+0582 \\u0582 — rarely stands alone; part of the \\u0578\\u0582 digraph\n    { armenian: \"\\u0582\", target: \"u\" },\n    // U+0583 \\u0583 — aspirated P; not reverse default\n    { armenian: \"\\u0583\", target: \"p\\u02B0\", reverseDefault: false },\n    // U+0584 \\u0584 — aspirated K; not reverse default\n    { armenian: \"\\u0584\", target: \"k\\u02B0\", reverseDefault: false },\n    // U+0585 \\u0585 — not reverse default (\\u0578 already maps to \"\\u0254\" with reverseDefault)\n    { armenian: \"\\u0585\", target: \"\\u0254\", reverseDefault: false },\n    // U+0586 \\u0586\n    { armenian: \"\\u0586\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // \\u0578\\u0582 digraph (U+0578 + U+0582) \\u2192 \"u\"\n    { armenian: \"\\u0578\\u0582\", target: \"u\" },\n    // \\u0565\\u057E sequence (\\u0565 + \\u057E) \\u2014 word-initial maps to \"j\\u025Bv\"\n    {\n      armenian: \"\\u0565\\u057E\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n    // \\u0565\\u0582 traditional spelling (U+0565 + U+0582) \\u2014 alternative spelling of \"\\u025Bv\"\n    {\n      armenian: \"\\u0565\\u0582\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n    // \\u0587 ligature (U+0587) \\u2014 word-initial maps to \"j\\u025Bv\"\n    {\n      armenian: \"\\u0587\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n  ],\n\n  punctuation: {\n    \"\\u0589\": \".\",   // Armenian full stop \\u2192 period\n    \"\\u055E\": \"?\",   // Armenian question mark \\u2192 question mark\n    \"\\u055D\": \",\",   // Armenian comma \\u2192 comma\n    \"\\u055C\": \"!\",   // Armenian exclamation mark \\u2192 exclamation mark\n    \"\\u00AB\": '\"',   // Armenian left guillemet \\u2192 double quote\n    \"\\u00BB\": '\"',   // Armenian right guillemet \\u2192 double quote\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n// Armenian vowels (lowercase) used in context rules for \\u0578 word-initial behaviour\n// \\u0561\\u0565\\u0567\\u0568\\u056B\\u0578\\u0585\\u057E\nconst VOWELS_AND_V = [\"\\u0561\", \"\\u0565\", \"\\u0567\", \"\\u0568\", \"\\u056B\", \"\\u0578\", \"\\u0585\", \"\\u057E\"] as const;\n\n// Western Armenian reduced the three-way stop/affricate contrast (voiced /\n// voiceless unaspirated / aspirated) to a two-way contrast (voiced / aspirated):\n//\n//   - Eastern voiced series merged with aspirated in Western\n//   - Eastern voiceless unaspirated series became voiced in Western\n//   - Eastern aspirated series remained aspirated in Western\n//\n//   Letter  Eastern    Western\n//   \\u0562 (բ)   b          p\\u02B0     (voiced → aspirated, merges with \\u0583)\n//   \\u0563 (գ)   \\u0261          k\\u02B0     (voiced → aspirated, merges with \\u0584)\n//   \\u0564 (դ)   d          t\\u02B0     (voiced → aspirated, merges with \\u0569)\n//   \\u056E (ծ)   t\\u0361s        d\\u0361z     (voiceless → voiced)\n//   \\u056F (կ)   k          \\u0261      (voiceless → voiced)\n//   \\u0571 (ձ)   d\\u0361z        t\\u0361s\\u02B0   (voiced → aspirated, merges with \\u0581)\n//   \\u0573 (ճ)   t\\u0361\\u0283        d\\u0361\\u0292     (voiceless → voiced)\n//   \\u057A (պ)   p          b      (voiceless → voiced)\n//   \\u057B (ջ)   d\\u0361\\u0292        t\\u0361\\u0283\\u02B0   (voiced → aspirated, merges with \\u0579)\n//   \\u057F (տ)   t          d      (voiceless → voiced)\n//\n// Aspirated consonants (\\u0569 t\\u02B0, \\u0579 t\\u0361\\u0283\\u02B0, \\u0581 t\\u0361s\\u02B0, \\u0583 p\\u02B0, \\u0584 k\\u02B0) are unchanged.\n\nexport const ipaWestern: TransliterationStandard = {\n  id: \"ipa-western\",\n  name: \"IPA Phonemic Transcription (Western Armenian)\",\n  targetScript: \"ipa\",\n  reversible: false,\n\n  charMappings: [\n    // U+0561 \\u0561\n    { armenian: \"\\u0561\", target: \"a\" },\n    // U+0562 \\u0562 — Western: Eastern voiced /b/ → aspirated /p\\u02B0/ (merges with \\u0583); reverseDefault false (\\u0583 is canonical /p\\u02B0/)\n    { armenian: \"\\u0562\", target: \"p\\u02B0\", reverseDefault: false },\n    // U+0563 \\u0563 — Western: Eastern voiced /\\u0261/ → aspirated /k\\u02B0/ (merges with \\u0584); reverseDefault false (\\u0584 is canonical /k\\u02B0/)\n    { armenian: \"\\u0563\", target: \"k\\u02B0\", reverseDefault: false },\n    // U+0564 \\u0564 — Western: Eastern voiced /d/ → aspirated /t\\u02B0/ (merges with \\u0569); reverseDefault false (\\u0569 is canonical /t\\u02B0/)\n    { armenian: \"\\u0564\", target: \"t\\u02B0\", reverseDefault: false },\n    // U+0565 \\u0565 — word-initial maps to \"j\\u025B\"\n    {\n      armenian: \"\\u0565\",\n      target: \"\\u025B\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025B\" },\n      ],\n    },\n    // U+0566 \\u0566\n    { armenian: \"\\u0566\", target: \"z\" },\n    // U+0567 \\u0567 — same IPA \"\\u025B\" as \\u0565, not the reverse default\n    { armenian: \"\\u0567\", target: \"\\u025B\", reverseDefault: false },\n    // U+0568 \\u0568\n    { armenian: \"\\u0568\", target: \"\\u0259\" },\n    // U+0569 \\u0569 — aspirated T (unchanged in Western)\n    { armenian: \"\\u0569\", target: \"t\\u02B0\" },\n    // U+056A \\u056A\n    { armenian: \"\\u056A\", target: \"\\u0292\" },\n    // U+056B \\u056B\n    { armenian: \"\\u056B\", target: \"i\" },\n    // U+056C \\u056C\n    { armenian: \"\\u056C\", target: \"l\" },\n    // U+056D \\u056D\n    { armenian: \"\\u056D\", target: \"\\u03C7\" },\n    // U+056E \\u056E — Western voicing shift: Eastern t\\u0361s → Western d\\u0361z; reverseDefault true (sole source of /d\\u0361z/)\n    { armenian: \"\\u056E\", target: \"d\\u0361z\", reverseDefault: true },\n    // U+056F \\u056F — Western voicing shift: Eastern k → Western \\u0261 (IPA voiced velar stop, U+0261); reverseDefault true (sole source of /\\u0261/)\n    { armenian: \"\\u056F\", target: \"\\u0261\", reverseDefault: true },\n    // U+0570 \\u0570\n    { armenian: \"\\u0570\", target: \"h\" },\n    // U+0571 \\u0571 — Western: Eastern voiced /d\\u0361z/ → aspirated /t\\u0361s\\u02B0/ (merges with \\u0581); reverseDefault false (\\u0581 is canonical /t\\u0361s\\u02B0/)\n    { armenian: \"\\u0571\", target: \"t\\u0361s\\u02B0\", reverseDefault: false },\n    // U+0572 \\u0572\n    { armenian: \"\\u0572\", target: \"\\u0281\" },\n    // U+0573 \\u0573 — Western voicing shift: Eastern t\\u0361\\u0283 → Western d\\u0361\\u0292; reverseDefault true (sole source of /d\\u0361\\u0292/)\n    { armenian: \"\\u0573\", target: \"d\\u0361\\u0292\", reverseDefault: true },\n    // U+0574 \\u0574\n    { armenian: \"\\u0574\", target: \"m\" },\n    // U+0575 \\u0575\n    { armenian: \"\\u0575\", target: \"j\" },\n    // U+0576 \\u0576\n    { armenian: \"\\u0576\", target: \"n\" },\n    // U+0577 \\u0577\n    { armenian: \"\\u0577\", target: \"\\u0283\" },\n    // U+0578 \\u0578 — word-initial maps to \"v\\u0254\" unless followed by a vowel or \\u057E\n    {\n      armenian: \"\\u0578\",\n      target: \"\\u0254\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, notFollowedBy: [...VOWELS_AND_V] },\n          target: \"v\\u0254\",\n        },\n      ],\n    },\n    // U+0579 \\u0579 — aspirated affricate (unchanged in Western); reverse default\n    { armenian: \"\\u0579\", target: \"t\\u0361\\u0283\\u02B0\", reverseDefault: true },\n    // U+057A \\u057A — Western voicing shift: Eastern p → Western b; reverseDefault true (sole source of /b/)\n    { armenian: \"\\u057A\", target: \"b\", reverseDefault: true },\n    // U+057B \\u057B — Western: Eastern voiced /d\\u0361\\u0292/ → aspirated /t\\u0361\\u0283\\u02B0/ (merges with \\u0579); reverseDefault false (\\u0579 is canonical /t\\u0361\\u0283\\u02B0/)\n    { armenian: \"\\u057B\", target: \"t\\u0361\\u0283\\u02B0\", reverseDefault: false },\n    // U+057C \\u057C — trilled R; reverse default\n    { armenian: \"\\u057C\", target: \"r\", reverseDefault: true },\n    // U+057D \\u057D\n    { armenian: \"\\u057D\", target: \"s\" },\n    // U+057E \\u057E\n    { armenian: \"\\u057E\", target: \"v\" },\n    // U+057F \\u057F — Western voicing shift: Eastern t → Western d; reverseDefault true (sole source of /d/)\n    { armenian: \"\\u057F\", target: \"d\", reverseDefault: true },\n    // U+0580 \\u0580 — tap R; not reverse default (\\u057C is)\n    { armenian: \"\\u0580\", target: \"\\u027E\", reverseDefault: false },\n    // U+0581 \\u0581 — aspirated affricate (unchanged in Western); reverse default\n    { armenian: \"\\u0581\", target: \"t\\u0361s\\u02B0\", reverseDefault: true },\n    // U+0582 \\u0582 — rarely stands alone; part of the \\u0578\\u0582 digraph\n    { armenian: \"\\u0582\", target: \"u\" },\n    // U+0583 \\u0583 — aspirated P (unchanged in Western); not reverse default\n    { armenian: \"\\u0583\", target: \"p\\u02B0\", reverseDefault: false },\n    // U+0584 \\u0584 — aspirated K (unchanged in Western); not reverse default\n    { armenian: \"\\u0584\", target: \"k\\u02B0\", reverseDefault: false },\n    // U+0585 \\u0585 — not reverse default (\\u0578 already maps to \"\\u0254\" with reverseDefault)\n    { armenian: \"\\u0585\", target: \"\\u0254\", reverseDefault: false },\n    // U+0586 \\u0586\n    { armenian: \"\\u0586\", target: \"f\" },\n  ],\n\n  sequenceMappings: [\n    // \\u0578\\u0582 digraph (U+0578 + U+0582) \\u2192 \"u\"\n    { armenian: \"\\u0578\\u0582\", target: \"u\" },\n    // \\u0565\\u057E sequence (\\u0565 + \\u057E) \\u2014 word-initial maps to \"j\\u025Bv\"\n    {\n      armenian: \"\\u0565\\u057E\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n    // \\u0565\\u0582 traditional spelling (U+0565 + U+0582) \\u2014 alternative spelling of \"\\u025Bv\"\n    {\n      armenian: \"\\u0565\\u0582\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n    // \\u0587 ligature (U+0587) \\u2014 word-initial maps to \"j\\u025Bv\"\n    {\n      armenian: \"\\u0587\",\n      target: \"\\u025Bv\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"j\\u025Bv\" },\n      ],\n    },\n  ],\n\n  punctuation: {\n    \"\\u0589\": \".\",   // Armenian full stop \\u2192 period\n    \"\\u055E\": \"?\",   // Armenian question mark \\u2192 question mark\n    \"\\u055D\": \",\",   // Armenian comma \\u2192 comma\n    \"\\u055C\": \"!\",   // Armenian exclamation mark \\u2192 exclamation mark\n    \"\\u00AB\": '\"',   // Armenian left guillemet \\u2192 double quote\n    \"\\u00BB\": '\"',   // Armenian right guillemet \\u2192 double quote\n  },\n};\n","import type { Standard, TransliterationStandard } from \"../types.js\";\nimport { bgnPcgn } from \"./latin/bgn-pcgn.js\";\nimport { iso9985 } from \"./latin/iso-9985.js\";\nimport { hubschmannMeillet } from \"./latin/hubschmann-meillet.js\";\nimport { alaLc } from \"./latin/ala-lc.js\";\nimport { russianPhonetic } from \"./cyrillic/russian-phonetic.js\";\nimport { ipaEastern } from \"./ipa/ipa-eastern.js\";\nimport { ipaWestern } from \"./ipa/ipa-western.js\";\n\nconst STANDARDS: ReadonlyMap<Standard, TransliterationStandard> = new Map([\n  [\"bgn-pcgn\", bgnPcgn],\n  [\"iso-9985\", iso9985],\n  [\"hubschmann-meillet\", hubschmannMeillet],\n  [\"ala-lc\", alaLc],\n  [\"russian-phonetic\", russianPhonetic],\n  [\"ipa-eastern\", ipaEastern],\n  [\"ipa-western\", ipaWestern],\n]);\n\nexport function getStandard(id: Standard): TransliterationStandard {\n  const standard = STANDARDS.get(id);\n  if (!standard) {\n    throw new Error(`Unknown transliteration standard: ${id}`);\n  }\n  return standard;\n}\n\nexport function listStandards(): readonly Standard[] {\n  return [...STANDARDS.keys()];\n}\n"],"mappings":"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","names":["index_exports","__export","createTransliterator","listStandards","transliterate","__toCommonJS","ARMENIAN_LIGATURES","normalizeArmenian","text","result","ligature","expansion","ARMENIAN_LIGATURES","ARMENIAN_LOWER","_","i","ARMENIAN_UPPER","vowelLowerCodepoints","vowelUpperCodepoints","ARMENIAN_VOWELS","cp","isArmenianLetter","ch","cp","isArmenianUppercase","armenianToLower","ch","cp","ARMENIAN_PUNCTUATION","isArmenianPunctuation","ch","ARMENIAN_EW","ARMENIAN_CASE_OFFSET","armenianCharToLower","ch","cp","armenianCharToUpper","seqToLower","s","seqToUpper","seqToTitle","i","isArmenianLetterOrEw","isArmenianLetter","isAngleBracketQuote","scan","text","sequences","seenPatterns","patterns","mapping","lower","upper","chars","candidates","variant","variantLower","a","b","tokens","otherStart","otherValue","flushOther","matched","pattern","slice","isArmenianPunctuation","annotateWordPositions","isArmenian","t","runStart","closeRun","runEnd","tok","k","j","ARMENIAN_EW","isArmenianLetterOrEw","ch","isArmenianLetter","isTokenUppercase","token","armenianChars","isArmenianUppercase","detectWordCasing","wordTokens","firstToken","applySingleTokenCasing","sourceToken","transliterated","applyUpperCasing","text","toLowerCanonical","value","armenianToLower","evaluateCondition","condition","token","prevToken","nextToken","isInitial","positions","nextLower","toLowerCanonical","prevLower","resolveMapping","mapping","rule","DEFAULT_PUNCTUATION","TransliterationEngine","standard","m","DEFAULT_PUNCTUATION","key","value","text","normalized","normalizeArmenian","tokens","scan","wordRuns","output","processedInWord","run","wordTokens","casing","detectWordCasing","wordParts","i","token","prev","next","mapped","cased","applyUpperCasing","applySingleTokenCasing","canonical","toLowerCanonical","mapping","resolveMapping","seqMapping","charMapping","runs","runStart","isArmenian","VOWELS_AND_V","bgnPcgn","iso9985","hubschmannMeillet","VOWELS_AND_V","alaLc","VOWELS","russianPhonetic","VOWELS_AND_V","ipaEastern","VOWELS_AND_V","ipaWestern","STANDARDS","bgnPcgn","iso9985","hubschmannMeillet","alaLc","russianPhonetic","ipaEastern","ipaWestern","getStandard","id","standard","listStandards","engineCache","getEngine","standard","engine","std","getStandard","TransliterationEngine","transliterate","text","options","createTransliterator"]}