{"version":3,"sources":["../src/index.ts","../src/armenian/alphabet.ts","../src/armenian/ligatures.ts","../src/armenian/normalize.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/ru-geo-kt-1974.ts","../src/standards/cyrillic/ru-geo-ra-2011.ts","../src/standards/cyrillic/ru-proper-vartapetyan-1961.ts","../src/standards/cyrillic/ru-phonetic-eastern.ts","../src/standards/ipa/ipa-eastern.ts","../src/standards/ipa/ipa-western.ts","../src/standards/registry.ts","../src/profiles/metadata.ts","../src/profiles/index.ts"],"sourcesContent":["import type { Standard, 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\";\nexport {\n  getProfile,\n  getProfilesByTargetLanguage,\n  listProfiles,\n  profiles,\n} from \"./profiles/index.js\";\nexport type {\n  ProfileDomain,\n  ProfileMetadata,\n  ProfileSource,\n  ProfileSourceKind,\n  ProfileStatus,\n} from \"./profiles/index.js\";\n\nconst engineCache = new Map<Standard, TransliterationEngine>();\n\nfunction assertString(text: string): void {\n  if (typeof text !== \"string\") {\n    throw new TypeError(\"Expected text to be a string\");\n  }\n}\n\nfunction getEngine(standard: Standard): TransliterationEngine {\n  let engine = engineCache.get(standard);\n  if (!engine) {\n    engine = new TransliterationEngine(getStandard(standard));\n    engineCache.set(standard, engine);\n  }\n  return engine;\n}\n\n/**\n * Transliterate Armenian text to the chosen target script.\n *\n * @param text - The Armenian 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  assertString(text);\n  return getEngine(options?.standard ?? \"bgn-pcgn\").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 engine = getEngine(options.standard ?? \"bgn-pcgn\");\n  return (text: string) => {\n    assertString(text);\n    return engine.transliterate(text);\n  };\n}\n","export 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 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\nconst ARMENIAN_PUNCTUATION: ReadonlySet<string> = new Set([\n  \"ՙ\", // U+0559 MODIFIER LETTER LEFT HALF RING\n  \"՚\", // U+055A ARMENIAN APOSTROPHE\n  \"՛\", // U+055B ARMENIAN EMPHASIS MARK\n  \"՜\", // U+055C ARMENIAN EXCLAMATION MARK\n  \"՝\", // U+055D ARMENIAN COMMA\n  \"՞\", // U+055E ARMENIAN QUESTION MARK\n  \"՟\", // U+055F ARMENIAN ABBREVIATION MARK\n  \"։\", // U+0589 ARMENIAN FULL STOP\n  \"֊\", // U+058A ARMENIAN HYPHEN\n]);\n\nexport function isArmenianPunctuation(ch: string): boolean {\n  return ARMENIAN_PUNCTUATION.has(ch);\n}\n\n/**\n * Diacritic-like punctuation that appears word-internally and should be\n * transparent to word-boundary tracking. Includes the Armenian emphasis\n * mark (stress diacritic, U+055B), apostrophe (U+055A), modifier letter\n * left half ring (U+0559), and abbreviation mark (U+055F).\n *\n * Excludes terminal punctuation (full stop ։, question ՞, comma ՝,\n * exclamation ՜, hyphen ֊) which DO break words.\n *\n * Scanner emits these as kind:\"punctuation\" so they still map through\n * the standard's punctuation table for output, but they do not break\n * an Armenian-letter run for context-rule purposes (e.g. \"մի՛թե\" must\n * not let ՛ make թ word-initial).\n */\nconst ARMENIAN_INWORD_DIACRITICS: ReadonlySet<string> = new Set([\n  \"ՙ\", // U+0559\n  \"՚\", // U+055A\n  \"՛\", // U+055B\n  \"՟\", // U+055F\n]);\n\nexport function isArmenianInWordDiacritic(ch: string): boolean {\n  return ARMENIAN_INWORD_DIACRITICS.has(ch);\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","import type { Token } from \"./tokens.js\";\nimport type { SequenceMapping } from \"../types.js\";\nimport {\n  isArmenianInWordDiacritic,\n  isArmenianLetter,\n  isArmenianPunctuation,\n} 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\n/** Convert an Armenian string to all-lowercase */\nfunction seqToLower(s: string): string {\n  return Array.from(s).map(armenianCharToLower).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  // Matching is case-insensitive: input slice is lowercased before comparison.\n  const seenPatterns = new Set<string>();\n  const patterns: SequencePattern[] = [];\n\n  for (const mapping of sequences) {\n    const lower = seqToLower(mapping.armenian);\n    if (!seenPatterns.has(lower)) {\n      seenPatterns.add(lower);\n      patterns.push({ lowercase: lower, length: Array.from(lower).length });\n    }\n  }\n\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\n * tokens. Armenian in-word diacritic punctuation (emphasis ՛, apostrophe ՚,\n * left half-ring ՙ, abbreviation ՟) is transparent: it does not break a\n * word run, but does not receive a wordPosition of its own — the\n * surrounding letters are positioned as if the diacritic were absent.\n *\n * All other punctuation, whitespace, and \"other\" tokens close the run.\n *\n * Positions:\n * - \"isolated\": single-letter-token word\n * - \"initial\": first letter token of a multi-token word\n * - \"medial\": middle letter token(s)\n * - \"final\": last letter token\n */\nfunction annotateWordPositions(tokens: Token[]): Token[] {\n  const isArmenian = (t: Token) =>\n    t.kind === \"armenian_letter\" || t.kind === \"armenian_sequence\";\n  const isInWordDiacritic = (t: Token) =>\n    t.kind === \"punctuation\" && isArmenianInWordDiacritic(t.value);\n\n  // Indices of Armenian-letter/sequence tokens belonging to the current run.\n  let runLetterIndices: number[] = [];\n\n  const closeRun = () => {\n    if (runLetterIndices.length === 0) return;\n    if (runLetterIndices.length === 1) {\n      const idx = runLetterIndices[0];\n      if (idx !== undefined) {\n        const tok = tokens[idx];\n        if (tok) tok.wordPosition = \"isolated\";\n      }\n    } else {\n      const last = runLetterIndices.length - 1;\n      for (let k = 0; k < runLetterIndices.length; k++) {\n        const idx = runLetterIndices[k];\n        if (idx === undefined) continue;\n        const tok = tokens[idx];\n        if (!tok) continue;\n        if (k === 0) tok.wordPosition = \"initial\";\n        else if (k === last) tok.wordPosition = \"final\";\n        else tok.wordPosition = \"medial\";\n      }\n    }\n    runLetterIndices = [];\n  };\n\n  for (let j = 0; j < tokens.length; j++) {\n    const tok = tokens[j];\n    if (!tok) continue;\n    if (isArmenian(tok)) {\n      runLetterIndices.push(j);\n    } else if (isInWordDiacritic(tok)) {\n      // Transparent within a run; if no run is open, it doesn't open one.\n      continue;\n    } else {\n      closeRun();\n    }\n  }\n  closeRun();\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, possibly with\n * embedded in-word diacritic punctuation (which has no casing and is\n * skipped here).\n */\nexport function detectWordCasing(wordTokens: readonly Token[]): CasingPattern {\n  const letterTokens = wordTokens.filter(\n    (t) => t.kind === \"armenian_letter\" || t.kind === \"armenian_sequence\",\n  );\n  if (letterTokens.length === 0) return \"lower\";\n\n  const allUpper = letterTokens.every(isTokenUppercase);\n  if (allUpper) return \"upper\";\n\n  // Check if first letter token starts with uppercase\n  const firstLetter = letterTokens[0];\n  if (firstLetter && isTokenUppercase(firstLetter)) 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 { isArmenianInWordDiacritic } from \"../armenian/alphabet.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 * Armenian in-word diacritic punctuation is transparent to word runs and\n * context-rule prev/next lookups. The token is still emitted (and mapped\n * through punctuation) but it is invisible to phonological context.\n */\nfunction isInWordDiacriticToken(token: Token | undefined): boolean {\n  if (!token) return false;\n  return (\n    token.kind === \"punctuation\" && isArmenianInWordDiacritic(token.value)\n  );\n}\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      for (let i = run.start; i < run.end; i++) {\n        const token = tokens[i]!;\n        if (isInWordDiacriticToken(token)) {\n          // Diacritic — emit via punctuation map, skip phonological mapping.\n          output[i] = this.punctMap.get(token.value) ?? token.value;\n          processedInWord.add(i);\n          continue;\n        }\n        const prev = findNeighbor(tokens, i, -1);\n        const next = findNeighbor(tokens, i, +1);\n\n        const mapped = this.mapToken(token, prev, next);\n        output[i] =\n          casing === \"upper\"\n            ? applyUpperCasing(mapped)\n            : applySingleTokenCasing(token, mapped);\n        processedInWord.add(i);\n      }\n\n      if (casing === \"title\") {\n        this.applyTitleCasingToFirstOutput(output, run);\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  /** Preserve title case when the first source token maps to an empty string. */\n  private applyTitleCasingToFirstOutput(\n    output: string[],\n    run: { start: number; end: number },\n  ): void {\n    for (let i = run.start; i < run.end; i++) {\n      const value = output[i];\n      if (value && value.length > 0) {\n        output[i] = value.charAt(0).toUpperCase() + value.slice(1);\n        return;\n      }\n    }\n  }\n\n  /**\n   * Find consecutive runs of Armenian tokens (words). Armenian in-word\n   * diacritics (՛ ՚ ՙ ՟) extend a run but cannot start one — they only\n   * count as word-internal if surrounded by Armenian letters.\n   */\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    let lastLetterIndex = -1;\n\n    for (let i = 0; i <= tokens.length; i++) {\n      const token = i < tokens.length ? tokens[i] : undefined;\n      const isLetter =\n        token?.kind === \"armenian_letter\" ||\n        token?.kind === \"armenian_sequence\";\n      const isDiacritic = isInWordDiacriticToken(token);\n\n      if (isLetter) {\n        if (runStart === -1) runStart = i;\n        lastLetterIndex = i;\n      } else if (isDiacritic && runStart !== -1) {\n        // Extend the open run, but only commit to end:lastLetterIndex+1\n        // if no further letter appears.\n        continue;\n      } else if (runStart !== -1) {\n        runs.push({ start: runStart, end: lastLetterIndex + 1 });\n        runStart = -1;\n        lastLetterIndex = -1;\n      }\n    }\n\n    return runs;\n  }\n}\n\n/**\n * Find the nearest non-diacritic token from `tokens[i]` in `direction`\n * (-1 = before, +1 = after). Used for context-rule prev/next so in-word\n * diacritics are skipped during context evaluation.\n */\nfunction findNeighbor(\n  tokens: readonly Token[],\n  i: number,\n  direction: -1 | 1,\n): Token | undefined {\n  let j = i + direction;\n  while (j >= 0 && j < tokens.length) {\n    const candidate = tokens[j];\n    if (candidate && !isInWordDiacriticToken(candidate)) return candidate;\n    j += direction;\n  }\n  return undefined;\n}\n","import type { TransliterationStandard } from \"../../types.js\";\n\n// Armenian vowels (lowercase) used in context rules for ո word-initial behaviour\nconst VOWELS_AND_OU = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"ու\", \"օ\"] as const;\n\nexport const bgnPcgn: TransliterationStandard = {\n  id: \"bgn-pcgn\",\n  name: \"BGN/PCGN 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 ե — maps to \"ye\" initially and after vowels\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"ye\" },\n        { condition: { precededBy: [...VOWELS_AND_OU] }, 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: \"y\", reverseDefault: false },\n    // U+0569 թ — aspirated T\n    { armenian: \"թ\", target: \"t\\u2019\", 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\", reverseDefault: true },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ\n    { armenian: \"շ\", target: \"sh\" },\n    // U+0578 ո — word-initial maps to \"vo\" except in ով\n    {\n      armenian: \"ո\",\n      target: \"o\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, followedBy: [\"վ\"] },\n          target: \"o\",\n        },\n        {\n          condition: { wordInitial: true },\n          target: \"vo\",\n        },\n      ],\n    },\n    // U+0579 չ — aspirated CH\n    { armenian: \"չ\", target: \"ch\\u2019\", 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\n    { armenian: \"ռ\", target: \"rr\" },\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\n    { armenian: \"ր\", target: \"r\" },\n    // U+0581 ց — aspirated TS\n    { armenian: \"ց\", target: \"ts\\u2019\", reverseDefault: true },\n    // U+0582 ւ — not romanized standalone in BGN/PCGN; handled in ու/եւ sequences\n    { armenian: \"ւ\", target: \"\" },\n    // U+0583 փ — aspirated P; not reverse default\n    { armenian: \"փ\", target: \"p\\u2019\", reverseDefault: false },\n    // U+0584 ք — aspirated K; not reverse default\n    { armenian: \"ք\", target: \"k\\u2019\", 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\" — maps to \"yev\" initially and after vowels\n    {\n      armenian: \"եվ\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n        { condition: { precededBy: [...VOWELS_AND_OU] }, 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        { condition: { precededBy: [...VOWELS_AND_OU] }, target: \"yev\" },\n      ],\n    },\n    // և ligature (U+0587) — maps to \"yev\" initially and after vowels\n    {\n      armenian: \"և\",\n      target: \"ev\",\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"yev\" },\n        { condition: { precededBy: [...VOWELS_AND_OU] }, 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    // ու digraph (U+0578 + U+0582) → u (per Pedersen H-M column 35)\n    { armenian: \"ու\", target: \"u\" },\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/**\n * ALA-LC (Library of Congress) Armenian Romanization, 2022 version.\n *\n * Source: https://www.loc.gov/catdir/cpso/romanization/armenian.pdf\n *\n * Notes encoded in this profile:\n *\n *   - Note 1 (West Armenian bracketed alternates): the package emits only the\n *     East/Classical default value; the West Armenian \"[p] / [k] / [t] / …\"\n *     references are not produced.\n *   - Note 2 (ե → y initial+vowel, Classical orthography): word-initial ե\n *     followed by a vowel romanizes as \"y\" (replacing \"e\"), e.g. classical\n *     \"Եա...\" → \"ya…\". Initial ե + consonant stays \"e\" (so \"Երևան\" → \"Erevan\").\n *   - Note 3 (soft-sign disambiguation): inserts U+02B9 MODIFIER LETTER PRIME\n *     between letter pairs whose romanization would otherwise be read as a\n *     digraph (գհ → gʹh, դզ → dʹz, կհ → kʹh, սհ → sʹh, տս → tʹs).\n *   - Note 4 (յ → ḥ initial-of-word-or-stem, Classical orthography): the\n *     simple \"initial of a word\" form is implemented; \"initial of a stem in\n *     a compound\" is morphology-dependent and cannot be detected automatically.\n *   - Note 5 (եւ → ew, Classical): treated as a sequence; the modern ligature\n *     և (U+0587) maps separately to \"ev\" per note 6.\n *   - Note 6 (և → ev, with eʹv exception): the soft-sign exception for\n *     lowercase \"եվ\" at word start has two lexical exceptions (ևեթ, ևս) and\n *     is therefore NOT implemented; \"եվ\" maps to \"ev\" unconditionally.\n *\n * Diacritic / modifier characters used:\n *   - U+02BB MODIFIER LETTER TURNED COMMA (ʻ): aspirate mark (թ, չ, ց, փ, ք)\n *   - U+02B9 MODIFIER LETTER PRIME (ʹ): soft sign (note 3)\n *   - U+0113 LATIN SMALL LETTER E WITH MACRON (ē): է\n *   - U+011B LATIN SMALL LETTER E WITH CARON (ě): ը\n *   - U+1E25 LATIN SMALL LETTER H WITH DOT BELOW (ḥ): word-initial յ\n *   - U+1E5B LATIN SMALL LETTER R WITH DOT BELOW (ṛ): ռ\n *   - U+014D LATIN SMALL LETTER O WITH MACRON (ō): օ\n */\n\n// Classical Armenian vowels used by note 2 (ե → y when followed by a vowel).\n// Includes the ու digraph token because the scanner emits ու as one sequence.\nconst ALA_LC_VOWELS = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"ու\", \"օ\"] as const;\n\nexport const alaLc: TransliterationStandard = {\n  id: \"ala-lc\",\n  name: \"ALA-LC Romanization (2022)\",\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 գ — note 3: gʹh when followed by հ\n    {\n      armenian: \"գ\",\n      target: \"g\",\n      contextRules: [\n        { condition: { followedBy: [\"հ\"] }, target: \"gʹ\" },\n      ],\n    },\n    // U+0564 դ — note 3: dʹz when followed by զ\n    {\n      armenian: \"դ\",\n      target: \"d\",\n      contextRules: [\n        { condition: { followedBy: [\"զ\"] }, target: \"dʹ\" },\n      ],\n    },\n    // U+0565 ե — note 2: y (replaces e) word-initial + followed by vowel\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [\n        {\n          condition: { wordInitial: true, followedBy: [...ALA_LC_VOWELS] },\n          target: \"y\",\n        },\n      ],\n    },\n    // U+0566 զ\n    { armenian: \"զ\", target: \"z\" },\n    // U+0567 է → ē (e with macron, U+0113)\n    { armenian: \"է\", target: \"ē\" },\n    // U+0568 ը → ě (e with caron, U+011B)\n    { armenian: \"ը\", target: \"ě\" },\n    // U+0569 թ → tʻ (t + U+02BB modifier letter turned comma)\n    { armenian: \"թ\", target: \"tʻ\" },\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 (note 1: West Armenian alternative [dz] not emitted)\n    { armenian: \"ծ\", target: \"ts\", reverseDefault: true },\n    // U+056F կ — note 3: kʹh when followed by հ\n    {\n      armenian: \"կ\",\n      target: \"k\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { followedBy: [\"հ\"] }, target: \"kʹ\" },\n      ],\n    },\n    // U+0570 հ\n    { armenian: \"հ\", target: \"h\" },\n    // U+0571 ձ → dz (note 1: West Armenian alternative [ts] not emitted)\n    { armenian: \"ձ\", target: \"dz\", reverseDefault: true },\n    // U+0572 ղ → gh\n    { armenian: \"ղ\", target: \"gh\" },\n    // U+0573 ճ → ch (note 1: West Armenian alternative [j] not emitted)\n    { armenian: \"ճ\", target: \"ch\", reverseDefault: true },\n    // U+0574 մ\n    { armenian: \"մ\", target: \"m\" },\n    // U+0575 յ — note 4: ḥ word-initial (Classical orthography)\n    {\n      armenian: \"յ\",\n      target: \"y\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"ḥ\" },\n      ],\n    },\n    // U+0576 ն\n    { armenian: \"ն\", target: \"n\" },\n    // U+0577 շ → sh\n    { armenian: \"շ\", target: \"sh\" },\n    // U+0578 ո → o (NO word-initial vo rule)\n    { armenian: \"ո\", target: \"o\", reverseDefault: true },\n    // U+0579 չ → chʻ (ch + U+02BB)\n    { armenian: \"չ\", target: \"chʻ\", reverseDefault: false },\n    // U+057A պ\n    { armenian: \"պ\", target: \"p\", reverseDefault: true },\n    // U+057B ջ → j (note 1: West Armenian alternative [ch] not emitted)\n    { armenian: \"ջ\", target: \"j\" },\n    // U+057C ռ → ṙ (r with dot below, U+1E5B)\n    { armenian: \"ռ\", target: \"ṛ\", reverseDefault: true },\n    // U+057D ս — note 3: sʹh when followed by հ\n    {\n      armenian: \"ս\",\n      target: \"s\",\n      contextRules: [\n        { condition: { followedBy: [\"հ\"] }, target: \"sʹ\" },\n      ],\n    },\n    // U+057E վ\n    { armenian: \"վ\", target: \"v\" },\n    // U+057F տ — note 3: tʹs when followed by ս\n    {\n      armenian: \"տ\",\n      target: \"t\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { followedBy: [\"ս\"] }, target: \"tʹ\" },\n      ],\n    },\n    // U+0580 ր\n    { armenian: \"ր\", target: \"r\", reverseDefault: false },\n    // U+0581 ց → tsʻ (ts + U+02BB)\n    { armenian: \"ց\", target: \"tsʻ\", reverseDefault: false },\n    // U+0582 ւ → w (yiwn; the ու digraph below overrides for the o+w pair)\n    { armenian: \"ւ\", target: \"w\" },\n    // U+0583 փ → pʻ (p + U+02BB)\n    { armenian: \"փ\", target: \"pʻ\", reverseDefault: false },\n    // U+0584 ք → kʻ (k + U+02BB)\n    { armenian: \"ք\", target: \"kʻ\", reverseDefault: false },\n    // U+0585 օ → ō (o with macron, U+014D)\n    { armenian: \"օ\", target: \"ō\", 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    // եւ (U+0565 + U+0582), Classical orthography → \"ew\" (note 5)\n    { armenian: \"եւ\", target: \"ew\" },\n    // եվ (U+0565 + U+057E), modern Eve sequence → \"ev\"\n    { armenian: \"եվ\", target: \"ev\" },\n    // և (U+0587) modern ligature → \"ev\" (note 6, soft-sign exception not implemented)\n    { armenian: \"և\", target: \"ev\" },\n  ],\n\n  punctuation: {\n    \"։\": \".\",\n    \"՞\": \"?\",\n    \"՝\": \",\",\n    \"՜\": \"!\",\n    \"«\": '\"',\n    \"»\": '\"',\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n/**\n * Armenian vowels/digraphs used for Russian context rules.\n * \"ու\" can be a sequence token, so keep it in the same list as letters.\n */\nconst VOWELS_AND_U = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"ու\", \"օ\"] as const;\n\n/**\n * Russian transfer of Armenian SSR geographic names.\n *\n * Source: Инструкция по русской передаче географических названий Армянской ССР\n * / Сост. Г. Г. Кузьмина; Ред. Э. Г. Туманян. — М., 1974.\n *\n * This is a geographic-name profile, not a general phonetic Cyrillic\n * transcription. Official/traditional names may still override the table.\n */\nexport const ruGeoKt1974: TransliterationStandard = {\n  id: \"ru-geo-kt-1974\",\n  name: \"Russian Geographic Transliteration (Kuzmina-Tumanyan 1974)\",\n  targetScript: \"cyrillic\",\n  reversible: false,\n\n  charMappings: [\n    { armenian: \"ա\", target: \"а\" },\n    { armenian: \"բ\", target: \"б\" },\n    { armenian: \"գ\", target: \"г\" },\n    { armenian: \"դ\", target: \"д\" },\n    { armenian: \"ե\", target: \"е\" },\n    { armenian: \"զ\", target: \"з\" },\n    { armenian: \"է\", target: \"э\" },\n    { armenian: \"ը\", target: \"ы\" },\n    { armenian: \"թ\", target: \"т\", reverseDefault: false },\n    { armenian: \"ժ\", target: \"ж\" },\n    { armenian: \"ի\", target: \"и\" },\n    { armenian: \"լ\", target: \"л\" },\n    { armenian: \"խ\", target: \"х\", reverseDefault: true },\n    { armenian: \"ծ\", target: \"ц\", reverseDefault: false },\n    { armenian: \"կ\", target: \"к\", reverseDefault: true },\n    {\n      armenian: \"հ\",\n      target: \"х\",\n      reverseDefault: false,\n      contextRules: [{ condition: { wordInitial: true }, target: \"\" }],\n    },\n    { armenian: \"ձ\", target: \"дз\" },\n    {\n      armenian: \"ղ\",\n      target: \"х\",\n      reverseDefault: false,\n      contextRules: [{ condition: { wordInitial: true }, target: \"к\" }],\n    },\n    { armenian: \"ճ\", target: \"ч\", reverseDefault: false },\n    { armenian: \"մ\", target: \"м\" },\n    { armenian: \"յ\", target: \"й\" },\n    { armenian: \"ն\", target: \"н\" },\n    { armenian: \"շ\", target: \"ш\" },\n    {\n      armenian: \"ո\",\n      target: \"о\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true, followedBy: [\"վ\"] }, target: \"о\" },\n        { condition: { wordInitial: true }, target: \"во\" },\n      ],\n    },\n    { armenian: \"չ\", target: \"ч\", reverseDefault: true },\n    { armenian: \"պ\", target: \"п\", reverseDefault: true },\n    { armenian: \"ջ\", target: \"дж\" },\n    { armenian: \"ռ\", target: \"р\", reverseDefault: true },\n    { armenian: \"ս\", target: \"с\" },\n    { armenian: \"վ\", target: \"в\" },\n    { armenian: \"տ\", target: \"т\", reverseDefault: true },\n    { armenian: \"ր\", target: \"р\", reverseDefault: false },\n    { armenian: \"ց\", target: \"ц\", reverseDefault: true },\n    { armenian: \"ւ\", target: \"у\" },\n    { armenian: \"փ\", target: \"п\", reverseDefault: false },\n    { armenian: \"ք\", target: \"к\", reverseDefault: false },\n    { armenian: \"օ\", target: \"о\", reverseDefault: false },\n    { armenian: \"ֆ\", target: \"ф\" },\n  ],\n\n  sequenceMappings: [\n    { armenian: \"յու\", target: \"ю\" },\n    { armenian: \"յա\", target: \"я\" },\n    { armenian: \"յո\", target: \"ё\" },\n    { armenian: \"յե\", target: \"е\" },\n    { armenian: \"յի\", target: \"и\" },\n    { armenian: \"ու\", target: \"у\" },\n    { armenian: \"եվ\", target: \"ев\" },\n    { armenian: \"եւ\", target: \"ев\" },\n    { armenian: \"և\", target: \"ев\" },\n  ],\n\n  punctuation: {},\n};\n\n/**\n * Re-exported for sibling Russian geographic profiles that share the same\n * basic vowel contexts.\n */\nexport const russianVowelsAndU = VOWELS_AND_U;\n","import type { TransliterationStandard } from \"../../types.js\";\nimport { russianVowelsAndU } from \"./ru-geo-kt-1974.js\";\n\n/**\n * Russian transliteration of Republic of Armenia geographic names.\n *\n * Source: ՀՀ կառավարության 2011-03-03 N 220-Ն որոշում,\n * \"ՀՀ աշխարհագրական անվանումների ռուսերեն և անգլերեն տառադարձության կարգը\":\n *\n * This is intentionally separate from the 1974 Kuzmina-Tumanyan instruction:\n * both are geographic-name systems, but they make different choices for\n * letters such as հ and ղ.\n */\nexport const ruGeoRa2011: TransliterationStandard = {\n  id: \"ru-geo-ra-2011\",\n  name: \"Russian Geographic Transliteration (Republic of Armenia 2011)\",\n  targetScript: \"cyrillic\",\n  reversible: false,\n\n  charMappings: [\n    { armenian: \"ա\", target: \"а\" },\n    { armenian: \"բ\", target: \"б\" },\n    { armenian: \"գ\", target: \"г\" },\n    { armenian: \"դ\", target: \"д\" },\n    { armenian: \"ե\", target: \"е\" },\n    { armenian: \"զ\", target: \"з\" },\n    { armenian: \"է\", target: \"э\" },\n    { armenian: \"ը\", target: \"ы\" },\n    { armenian: \"թ\", target: \"т\", reverseDefault: false },\n    { armenian: \"ժ\", target: \"ж\" },\n    { armenian: \"ի\", target: \"и\" },\n    { armenian: \"լ\", target: \"л\" },\n    { armenian: \"խ\", target: \"х\", reverseDefault: true },\n    { armenian: \"ծ\", target: \"ц\", reverseDefault: false },\n    { armenian: \"կ\", target: \"к\", reverseDefault: true },\n    {\n      armenian: \"հ\",\n      target: \"х\",\n      reverseDefault: false,\n      contextRules: [\n        { condition: { wordInitial: true }, target: \"\" },\n        { condition: { followedBy: russianVowelsAndU }, target: \"\" },\n      ],\n    },\n    { armenian: \"ձ\", target: \"дз\" },\n    { armenian: \"ղ\", target: \"х\", reverseDefault: false },\n    { armenian: \"ճ\", target: \"ч\", reverseDefault: false },\n    { armenian: \"մ\", target: \"м\" },\n    { armenian: \"յ\", target: \"й\" },\n    { armenian: \"ն\", target: \"н\" },\n    { armenian: \"շ\", target: \"ш\" },\n    {\n      armenian: \"ո\",\n      target: \"о\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true, followedBy: [\"վ\"] }, target: \"о\" },\n        { condition: { wordInitial: true }, target: \"во\" },\n      ],\n    },\n    { armenian: \"չ\", target: \"ч\", reverseDefault: true },\n    { armenian: \"պ\", target: \"п\", reverseDefault: true },\n    { armenian: \"ջ\", target: \"дж\" },\n    { armenian: \"ռ\", target: \"р\", reverseDefault: true },\n    { armenian: \"ս\", target: \"с\" },\n    { armenian: \"վ\", target: \"в\" },\n    { armenian: \"տ\", target: \"т\", reverseDefault: true },\n    { armenian: \"ր\", target: \"р\", reverseDefault: false },\n    { armenian: \"ց\", target: \"ц\", reverseDefault: true },\n    { armenian: \"ւ\", target: \"у\" },\n    { armenian: \"փ\", target: \"п\", reverseDefault: false },\n    { armenian: \"ք\", target: \"к\", reverseDefault: false },\n    { armenian: \"օ\", target: \"о\", reverseDefault: false },\n    { armenian: \"ֆ\", target: \"ф\" },\n  ],\n\n  sequenceMappings: [\n    { armenian: \"յու\", target: \"ю\" },\n    { armenian: \"յա\", target: \"я\" },\n    { armenian: \"ու\", target: \"у\" },\n    { armenian: \"եվ\", target: \"ев\" },\n    { armenian: \"եւ\", target: \"ев\" },\n    { armenian: \"և\", target: \"ев\" },\n  ],\n\n  punctuation: {},\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n/** Armenian vowels (lowercase) used for context rules */\nconst VOWELS = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"օ\"] as const;\n\n/**\n * Russian Proper Names Transliteration, Vartapetyan 1961\n *\n * Based on: Вартапетян Н. А. Справочник по русской транскрипции армянских\n * имён, фамилий и географических названий. — Армянское государственное\n * издательство.\n *\n * Key characteristics for Eastern Armenian proper-name transfer:\n *   - ջ [dʒ]  → дж  (not ж — distinct from ժ)\n *   - ղ [ʁ]   → г mid-word; к word-initial\n *   - հ [h]   → positional:\n *       word-initial before vowel  → \"\"  (omit: Hakob → Акоб, Harutyun → Арутюн)\n *       word-initial before consonant → г  (Hrant → Грант, Hmayak → Гмаяк)\n *       mid-word                   → г\n *   - ե       → е   (word-initial е; same letter, no special prefix)\n *   - ո       → во  word-initial before consonant; о elsewhere\n */\nexport const ruProperVartapetyan1961: TransliterationStandard = {\n  id: \"ru-proper-vartapetyan-1961\",\n  name: \"Russian Proper Names Transliteration (Vartapetyan 1961)\",\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: ղ also → г mid-word, but գ is the canonical reverse)\n    { armenian: \"գ\", target: \"г\", reverseDefault: true },\n    // U+0564 դ → д\n    { armenian: \"դ\", target: \"д\" },\n    // U+0565 ե → е  (word-initial е; context rule is identity, present for explicitness)\n    {\n      armenian: \"ե\",\n      target: \"е\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"е\" }],\n    },\n    // U+0566 զ → з\n    { armenian: \"զ\", target: \"з\" },\n    // U+0567 է → э\n    { armenian: \"է\", target: \"э\" },\n    // U+0568 ը → ы\n    { armenian: \"ը\", target: \"ы\" },\n    // U+0569 թ [tʰ] → т  (reverseDefault: false — տ is the reverse default for т)\n    { armenian: \"թ\", target: \"т\", reverseDefault: false },\n    // U+056A ժ [ʒ] → ж  (sole mapping for ж — ջ maps to дж)\n    { armenian: \"ժ\", target: \"ж\" },\n    // U+056B ի → и\n    { armenian: \"ի\", target: \"и\" },\n    // U+056C լ → л\n    { armenian: \"լ\", target: \"л\" },\n    // U+056D խ [χ] → х  (reverseDefault: true — հ mid-word also → г, so խ is canonical for х)\n    { armenian: \"խ\", target: \"х\", reverseDefault: true },\n    // U+056E ծ [ts] → ц  (reverseDefault: false — ց is the reverse default for ц)\n    { armenian: \"ծ\", target: \"ц\", reverseDefault: false },\n    // U+056F կ [k] → к  (reverseDefault: true — ք also → к)\n    { armenian: \"կ\", target: \"к\", reverseDefault: true },\n    // U+0570 հ [h] — Vartapetyan proper-name rule:\n    //   word-initial before vowel  → \"\" (omit; Hakob → Акоб, Harutyun → Арутюн)\n    //   word-initial before consonant → г (Hrant → Грант)\n    //   mid-word                   → г (e.g. Mkhitar with internal հ)\n    // reverseDefault: false — խ is the canonical reverse for х\n    {\n      armenian: \"հ\",\n      target: \"г\",\n      reverseDefault: false,\n      contextRules: [\n        {\n          condition: { wordInitial: true, followedBy: [...VOWELS, \"ու\"] },\n          target: \"\",\n        },\n        { condition: { wordInitial: true }, target: \"г\" },\n      ],\n    },\n    // U+0571 ձ [dz] → дз\n    { armenian: \"ձ\", target: \"дз\" },\n    // U+0572 ղ [ʁ] → г mid-word; к word-initial\n    {\n      armenian: \"ղ\",\n      target: \"г\",\n      reverseDefault: false,\n      contextRules: [{ condition: { wordInitial: true }, target: \"к\" }],\n    },\n    // U+0573 ճ [tʃ] → ч  (reverseDefault: false — չ is the reverse default for ч)\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 ո → о; word-initial + not followed by vowel/վ → во\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 չ [tʃʰ] → ч  (reverseDefault: true — canonical reverse for ч)\n    { armenian: \"չ\", target: \"ч\", reverseDefault: true },\n    // U+057A պ [p] → п  (reverseDefault: true — փ also → п)\n    { armenian: \"պ\", target: \"п\", reverseDefault: true },\n    // U+057B ջ [dʒ] → дж  (Eastern Armenian; Вартапетян: дж for Eastern, ч for Western)\n    { armenian: \"ջ\", target: \"дж\" },\n    // U+057C ռ [r] → р  (reverseDefault: true — canonical reverse for р)\n    { armenian: \"ռ\", target: \"р\", reverseDefault: true },\n    // U+057D ս → с\n    { armenian: \"ս\", target: \"с\" },\n    // U+057E վ → в\n    { armenian: \"վ\", target: \"в\" },\n    // U+057F տ [t] → т  (reverseDefault: true — canonical reverse for т)\n    { armenian: \"տ\", target: \"т\", reverseDefault: true },\n    // U+0580 ր [ɾ] → р  (reverseDefault: false — ռ is the reverse default)\n    { armenian: \"ր\", target: \"р\", reverseDefault: false },\n    // U+0581 ց [tsʰ] → ц  (reverseDefault: true — canonical reverse for ц)\n    { armenian: \"ց\", target: \"ц\", reverseDefault: true },\n    // U+0582 ւ → у  (standalone yiwn; ու digraph handled in sequenceMappings)\n    { armenian: \"ւ\", target: \"у\" },\n    // U+0583 փ [pʰ] → п  (reverseDefault: false — պ is the reverse default)\n    { armenian: \"փ\", target: \"п\", reverseDefault: false },\n    // U+0584 ք [kʰ] → к  (reverseDefault: false — կ is the reverse default)\n    { armenian: \"ք\", target: \"к\", reverseDefault: false },\n    // U+0585 օ → о  (reverseDefault: false — ո is the canonical reverse)\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) → ев\n    { armenian: \"եւ\", target: \"ев\" },\n    // 5. և (U+0587 ligature) → ев\n    { armenian: \"և\", target: \"ев\" },\n  ],\n\n  punctuation: {},\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\nconst VOWELS = [\"ա\", \"ե\", \"է\", \"ը\", \"ի\", \"ո\", \"օ\"] as const;\n\n/**\n * Russian-oriented phonetic Cyrillic transcription for Eastern Armenian.\n *\n * This is a package profile for learner-facing common vocabulary, not an\n * official geographic or proper-name transfer system.\n */\nexport const ruPhoneticEastern: TransliterationStandard = {\n  id: \"ru-phonetic-eastern\",\n  name: \"Russian Phonetic Transcription (Eastern Armenian)\",\n  targetScript: \"cyrillic\",\n  reversible: false,\n\n  charMappings: [\n    { armenian: \"ա\", target: \"а\" },\n    { armenian: \"բ\", target: \"б\" },\n    { armenian: \"գ\", target: \"г\", reverseDefault: true },\n    { armenian: \"դ\", target: \"д\" },\n    { armenian: \"ե\", target: \"е\" },\n    { armenian: \"զ\", target: \"з\" },\n    { armenian: \"է\", target: \"э\" },\n    { armenian: \"ը\", target: \"ы\" },\n    { armenian: \"թ\", target: \"т\", reverseDefault: false },\n    { armenian: \"ժ\", target: \"ж\" },\n    { armenian: \"ի\", target: \"и\" },\n    { armenian: \"լ\", target: \"л\" },\n    { armenian: \"խ\", target: \"х\", reverseDefault: true },\n    { armenian: \"ծ\", target: \"ц\", reverseDefault: false },\n    { armenian: \"կ\", target: \"к\", reverseDefault: true },\n    { armenian: \"հ\", target: \"х\", reverseDefault: false },\n    { armenian: \"ձ\", target: \"дз\" },\n    { armenian: \"ղ\", target: \"г\", reverseDefault: false },\n    { armenian: \"ճ\", target: \"ч\", reverseDefault: false },\n    { armenian: \"մ\", target: \"м\" },\n    { armenian: \"յ\", target: \"й\" },\n    { armenian: \"ն\", target: \"н\" },\n    { armenian: \"շ\", target: \"ш\" },\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    { armenian: \"չ\", target: \"ч\", reverseDefault: true },\n    { armenian: \"պ\", target: \"п\", reverseDefault: true },\n    { armenian: \"ջ\", target: \"дж\" },\n    { armenian: \"ռ\", target: \"р\", reverseDefault: true },\n    { armenian: \"ս\", target: \"с\" },\n    { armenian: \"վ\", target: \"в\" },\n    { armenian: \"տ\", target: \"т\", reverseDefault: true },\n    { armenian: \"ր\", target: \"р\", reverseDefault: false },\n    { armenian: \"ց\", target: \"ц\", reverseDefault: true },\n    { armenian: \"ւ\", target: \"у\" },\n    { armenian: \"փ\", target: \"п\", reverseDefault: false },\n    { armenian: \"ք\", target: \"к\", reverseDefault: false },\n    { armenian: \"օ\", target: \"о\", reverseDefault: false },\n    { armenian: \"ֆ\", target: \"ф\" },\n  ],\n\n  sequenceMappings: [\n    { armenian: \"յու\", target: \"ю\" },\n    { armenian: \"յա\", target: \"я\" },\n    { armenian: \"ու\", target: \"у\" },\n    { armenian: \"եվ\", target: \"ев\" },\n    { armenian: \"եւ\", target: \"ев\" },\n    { armenian: \"և\", target: \"ев\" },\n  ],\n\n  punctuation: {},\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n/**\n * Eastern Armenian — broad phonemic IPA (Tier 1: orthography → phoneme).\n *\n * Scope: strict orthography-to-phoneme mapping. Every rule is attested in\n * primary phonology sources (Dum-Tragut 2009, JIPA 2024) as a phonemic-level\n * generalization, not as a lexicalized or morphophonological alternation.\n *\n * Out of scope (deferred to a future `ipa-eastern-narrow` profile):\n *  - Stress placement (regular: rightmost non-schwa syllable; many lexical\n *    exceptions documented in Dum-Tragut 2009: 47–49).\n *  - Schwa epenthesis in CC clusters (գրել → [ɡəɾel]). Not in the orthography\n *    and realization is variable. Dum-Tragut 2009: 30–35.\n *  - Word-final devoicing/aspiration (մարդ → [mɑɾtʰ]). Dum-Tragut 2009: 22\n *    explicitly states \"in principle, no terminal devoicing\"; the cases that\n *    do devoice are a closed lexical list, not a productive rule.\n *  - Post-nasal aspiration (անդամ → [ɑntʰɑm]). Lexicalized exception list\n *    per Dum-Tragut 2009: 23.\n *  - Regressive obstruent cluster devoicing (ղ → [χ] before voiceless;\n *    վ → [f] before voiceless). Morphophonological in derived environments\n *    only; the orthography typically preserves the underlying form. Dum-\n *    Tragut 2009: 22 explicitly: \"the 'rules' … are NOT strict and general\".\n *    JIPA 2024: 458–459 confirms the rule applies in compounds/suffixation,\n *    not as a blind phonotactic constraint.\n *  - -ությ- \"palatalization\" to [ut͡sʰjun]. NOT attested in the cited\n *    sources: Dum-Tragut 2009: 35 transcribes the suffix as [utʰjun] with\n *    plain [tʰ], not affricated [t͡sʰ]. This appears to be a Wiktionary-only\n *    over-narrow phonetic claim.\n *\n * Primary sources:\n *  - Dum-Tragut, Jasmine (2009). Armenian: Modern Eastern Armenian.\n *    John Benjamins. ISBN 978-90-272-3814-6. Phonology: pp. 12–55.\n *  - Seyfarth, S., Dolatian, H., Guekguezian, P., Kelly, N. & Toparlak, T.\n *    (2024). Armenian (Yerevan Eastern and Beirut Western). Journal of the\n *    International Phonetic Association 54(1): 445–478.\n *    DOI: 10.1017/S0025100323000130 (open access).\n *  - Dolatian, H. (2022). Armenian Phonology and Phonetics. Glottothèque\n *    lecture series.\n */\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    // ── Vowels ──────────────────────────────────────────────────────────\n    // Vowel inventory: Dum-Tragut 2009: 13 (Table 1.1); JIPA 2024: 446.\n    // Six-vowel system /ɑ e i o u ə/. Note: open central /ɑ/ (not /a/) per\n    // JIPA 2024: 446 (\"low central /ɑ/, not /a/\").\n    { armenian: \"ա\", target: \"ɑ\" },\n    { armenian: \"ի\", target: \"i\" },\n    { armenian: \"ը\", target: \"ə\" }, // schwa — phonemic per Dum-Tragut 2009: 13\n    { armenian: \"օ\", target: \"o\", reverseDefault: false },\n\n    // ե: word-initial → /je/ (E2). Dum-Tragut 2009: 14 §1.1.1 point 1.a.\n    // Reformed orthography distinguishes ե (with glide) from է (no glide).\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [{ condition: { wordInitial: true }, target: \"je\" }],\n    },\n    { armenian: \"է\", target: \"e\", reverseDefault: false },\n\n    // ո: word-initial → /vo/ (E3). Dum-Tragut 2009: 16 §1.1.1 point 2.a.\n    // Exception: ով + derivatives (interrogative pronoun \"who?\") stay /o/.\n    // The orthographic test \"ո + վ word-initial → o\" captures both the ով\n    // family and loanwords like ովասիս /ovɑsis/ \"oasis\" by phonotactic\n    // generalization. Dum-Tragut 2009: 16 lists the exceptions.\n    {\n      armenian: \"ո\",\n      target: \"o\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true, followedBy: [\"վ\"] }, target: \"o\" },\n        { condition: { wordInitial: true }, target: \"vo\" },\n      ],\n    },\n\n    // ── Stops and affricates: three-way contrast ────────────────────────\n    // Eastern preserves the Classical voiced / voiceless-unaspirated /\n    // voiceless-aspirated contrast (E1). Dum-Tragut 2009: 17–18 (Table\n    // 1.2 with minimal pairs); JIPA 2024: 447; Vaux 1998 (per JIPA: 447).\n    // Voiced:\n    { armenian: \"բ\", target: \"b\" },\n    { armenian: \"դ\", target: \"d\" },\n    { armenian: \"գ\", target: \"ɡ\" }, // U+0261 LATIN SMALL LETTER SCRIPT G\n    { armenian: \"ձ\", target: \"d͡z\" },\n    { armenian: \"ջ\", target: \"d͡ʒ\" },\n    // Voiceless unaspirated:\n    { armenian: \"պ\", target: \"p\" },\n    { armenian: \"տ\", target: \"t\", reverseDefault: true },\n    { armenian: \"կ\", target: \"k\" },\n    { armenian: \"ծ\", target: \"t͡s\", reverseDefault: false },\n    { armenian: \"ճ\", target: \"t͡ʃ\", reverseDefault: false },\n    // Voiceless aspirated:\n    { armenian: \"թ\", target: \"tʰ\" },\n    { armenian: \"ք\", target: \"kʰ\", reverseDefault: false },\n    { armenian: \"փ\", target: \"pʰ\", reverseDefault: false },\n    { armenian: \"ց\", target: \"t͡sʰ\", reverseDefault: true },\n    { armenian: \"չ\", target: \"t͡ʃʰ\", reverseDefault: true },\n\n    // ── Fricatives ──────────────────────────────────────────────────────\n    // Dum-Tragut 2009: 19 (Table 1.3); JIPA 2024: 447.\n    { armenian: \"զ\", target: \"z\" },\n    { armenian: \"ժ\", target: \"ʒ\" },\n    { armenian: \"խ\", target: \"χ\" }, // voiceless uvular fricative\n    { armenian: \"ղ\", target: \"ʁ\", reverseDefault: false }, // voiced uvular fricative\n    { armenian: \"հ\", target: \"h\" },\n    { armenian: \"ս\", target: \"s\" },\n    { armenian: \"շ\", target: \"ʃ\" },\n    { armenian: \"վ\", target: \"v\", reverseDefault: true },\n    { armenian: \"ֆ\", target: \"f\" },\n\n    // ── Sonorants ───────────────────────────────────────────────────────\n    // Two rhotics: ր alveolar tap /ɾ/ vs ռ alveolar trill /r/.\n    // Dum-Tragut 2009: 19; JIPA 2024: 447, 459 (\"Yerevan EA preserves the\n    // historical contrast between a trill ⟨ռ⟩ /r/ and a tap ⟨ր⟩ /ɾ/\").\n    { armenian: \"լ\", target: \"l\" },\n    { armenian: \"մ\", target: \"m\" },\n    { armenian: \"ն\", target: \"n\" },\n    { armenian: \"յ\", target: \"j\" },\n    { armenian: \"ռ\", target: \"r\", reverseDefault: true },\n    { armenian: \"ր\", target: \"ɾ\", reverseDefault: false },\n\n    // ── Glide letter ────────────────────────────────────────────────────\n    // ւ (standalone, U+0582) appears almost exclusively in the digraphs\n    // ու and ե+ւ (handled below). In rare standalone Classical orthography\n    // it represented /w/; in Modern Eastern it has merged with /v/.\n    { armenian: \"ւ\", target: \"v\", reverseDefault: false },\n  ],\n\n  sequenceMappings: [\n    // ── Digraph ─────────────────────────────────────────────────────────\n    // ու is a single grapheme in the Armenian alphabet, representing /u/\n    // (E7). Dum-Tragut 2009: 13, 18; JIPA 2024: 446.\n    { armenian: \"ու\", target: \"u\" },\n\n    // ── ե + V/W combinations ────────────────────────────────────────────\n    // ե+վ, ե+ւ, և (U+0587 ligature) — orthographic variants of the\n    // /ev/ sequence. Apply the word-initial /je/ rule to the whole\n    // sequence: word-initial → /jev/, otherwise /ev/.\n    // The ligature և is always lowercase; the reformed digraph ե+վ\n    // replaced the Classical ե+ւ in 1922.\n    {\n      armenian: \"եվ\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n    {\n      armenian: \"եւ\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n    {\n      armenian: \"և\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n  ],\n\n  punctuation: {\n    // Armenian punctuation → ASCII equivalents. The Unicode tables and\n    // glyphs follow the Armenian block (U+0531–U+058F).\n    \"։\": \".\", // U+0589 ARMENIAN FULL STOP\n    \"՞\": \"?\", // U+055E ARMENIAN QUESTION MARK\n    \"՝\": \",\", // U+055D ARMENIAN COMMA\n    \"՜\": \"!\", // U+055C ARMENIAN EXCLAMATION MARK\n    \"«\": '\"',\n    \"»\": '\"',\n    // Stress/emphasis markers in source orthography. We do not emit IPA\n    // stress in broad phonemic transcription (out of scope), so drop them.\n    \"՛\": \"\", // U+055B ARMENIAN EMPHASIS MARK\n    \"՚\": \"\", // U+055A ARMENIAN APOSTROPHE\n    \"ՙ\": \"\", // U+0559 ARMENIAN MODIFIER LETTER LEFT HALF RING\n    \"՟\": \"\", // U+055F ARMENIAN ABBREVIATION MARK\n  },\n};\n","import type { TransliterationStandard } from \"../../types.js\";\n\n/**\n * Western Armenian (Standard) — broad phonemic IPA (Tier 1: orthography → phoneme).\n *\n * Scope: strict orthography-to-phoneme mapping. Every rule is attested in\n * primary phonology sources (JIPA 2024, Dolatian 2022) as a phonemic-level\n * generalization, not as a lexicalized or morphophonological alternation.\n *\n * Western Armenian differs from Eastern in two ways:\n *  1. The Classical three-way stop/affricate contrast (voiced / voiceless\n *     unaspirated / voiceless aspirated) is reduced to two-way. The voiced\n *     and voiceless-aspirated series are merged into a single aspirated\n *     series; the voiceless-unaspirated series becomes voiced. (W1)\n *     Diachronic source: Sayeed & Vaux 2017, per JIPA 2024: 447–448;\n *     Baronian 2017; Dolatian 2022 slide 3.\n *\n *       Letter  Eastern   Standard Western\n *       բ       /b/       /pʰ/\n *       գ       /ɡ/       /kʰ/\n *       դ       /d/       /tʰ/\n *       ձ       /d͡z/      /t͡sʰ/\n *       ջ       /d͡ʒ/      /t͡ʃʰ/\n *       կ       /k/       /ɡ/\n *       պ       /p/       /b/\n *       տ       /t/       /d/\n *       ծ       /t͡s/      /d͡z/\n *       ճ       /t͡ʃ/      /d͡ʒ/\n *       թ       /tʰ/      /tʰ/   (unchanged: aspirated)\n *       ք       /kʰ/      /kʰ/   (unchanged)\n *       փ       /pʰ/      /pʰ/   (unchanged)\n *       ց       /t͡sʰ/     /t͡sʰ/  (unchanged in Standard Western)\n *       չ       /t͡ʃʰ/     /t͡ʃʰ/  (unchanged in Standard Western)\n *\n *  2. The /ju/ glide-vowel sequence is fronted to /ʏ/ in post-consonant\n *     contexts (W6). Documented as variable across speakers/words in\n *     Dolatian 2022 slide 6 and JIPA 2024: 461. Implemented here only for\n *     the orthographic digraph իւ (Classical spelling); the reformed\n *     spelling յու is left as /ju/ because the post-consonant context\n *     varies and the engine does not support the required lookbehind\n *     across arbitrary morpheme boundaries. Documented gap; see notes.\n *\n * Note on dialect variant: this profile targets the **Standard Western**\n * pronunciation taught in diaspora schools and used in dictionaries (e.g.,\n * Bedrossian, Kouymjian). The Beirut variety (HD speaker in JIPA 2024)\n * unaspirated affricates ց → /t͡s/ and չ → /t͡ʃ/; we keep them aspirated\n * for parity with Standard Western references.\n *\n * Out of scope (deferred to a future `ipa-western-narrow` profile):\n *  - Stress placement.\n *  - Schwa epenthesis (հոս → [hos], գրել → [kəɾel]; obligatory before\n *    initial sibilant-stop clusters in Western: ստ → [əst]).\n *    JIPA 2024: 465.\n *  - Western progressive obstruent devoicing (W4): voiced obstruent\n *    devoices when preceded by a voiceless obstruent across morpheme\n *    boundaries. JIPA 2024: 458–459. Applies in derived environments,\n *    not blindly.\n *  - Regressive obstruent devoicing (ղ → [χ], վ → [f] before voiceless).\n *    Same disposition as Eastern: lexicalized/morphophonological, not a\n *    productive phonotactic rule.\n *  - Adjacent-sibilant deaspiration of aspirated stops (ափսէ → [ɑpse]).\n *    Variable across speakers per JIPA 2024: 453.\n *  - յու / իւ → /ʏ/ in arbitrary post-consonant positions. Variable per\n *    Dolatian 2022 and JIPA 2024: 461.\n *  - Classical էօ → /œ/ digraph. Not attested in any primary source\n *    consulted; if needed, implement as a lexical exception list.\n *\n * Primary sources:\n *  - Seyfarth, S., Dolatian, H., Guekguezian, P., Kelly, N. & Toparlak, T.\n *    (2024). Armenian (Yerevan Eastern and Beirut Western). Journal of the\n *    International Phonetic Association 54(1): 445–478.\n *    DOI: 10.1017/S0025100323000130 (open access).\n *  - Dolatian, H. (2022). Armenian Phonology and Phonetics. Glottothèque\n *    lecture series.\n *  - Baronian, L. (2017). On the diachrony of Armenian stops. In Sayeed\n *    & Vaux (eds.). (Cited via JIPA 2024: 447.)\n */\n\n// Sibilant + stop phonotactic constraint (W3). Armenian (and most languages)\n// disallow sibilant + voiced-stop clusters at any morpheme boundary; the\n// orthographic ստ, սպ, սկ, շտ, շպ, շկ surfaces with voiceless plosives\n// regardless of the W1 voicing collapse applied to standalone պ/տ/կ.\n// Cross-linguistically universal phonotactic pattern; specific Armenian\n// confirmation in JIPA 2024: 453 (HD's \"voiceless plosives are not\n// aspirated adjacent to voiceless sibilants\") and Dum-Tragut 2009: 24\n// §1.2.1.b for the Eastern side of the same fact.\n\nexport const ipaWestern: TransliterationStandard = {\n  id: \"ipa-western\",\n  name: \"IPA Phonemic Transcription (Standard Western Armenian)\",\n  targetScript: \"ipa\",\n  reversible: false,\n\n  charMappings: [\n    // ── Vowels ──────────────────────────────────────────────────────────\n    // Identical inventory to Eastern. JIPA 2024: 446, 461.\n    { armenian: \"ա\", target: \"ɑ\" },\n    { armenian: \"ի\", target: \"i\" },\n    { armenian: \"ը\", target: \"ə\" },\n    { armenian: \"օ\", target: \"o\", reverseDefault: false },\n\n    // ե / է / ո — identical rules to Eastern. Dum-Tragut 2009: 14, 16.\n    {\n      armenian: \"ե\",\n      target: \"e\",\n      reverseDefault: true,\n      contextRules: [{ condition: { wordInitial: true }, target: \"je\" }],\n    },\n    { armenian: \"է\", target: \"e\", reverseDefault: false },\n    {\n      armenian: \"ո\",\n      target: \"o\",\n      reverseDefault: true,\n      contextRules: [\n        { condition: { wordInitial: true, followedBy: [\"վ\"] }, target: \"o\" },\n        { condition: { wordInitial: true }, target: \"vo\" },\n      ],\n    },\n\n    // ── Stops and affricates: W1 voicing collapse ───────────────────────\n    // Eastern voiced → Western aspirated:\n    { armenian: \"բ\", target: \"pʰ\", reverseDefault: false },\n    { armenian: \"գ\", target: \"kʰ\", reverseDefault: false },\n    { armenian: \"դ\", target: \"tʰ\", reverseDefault: false },\n    { armenian: \"ձ\", target: \"t͡sʰ\", reverseDefault: false },\n    { armenian: \"ջ\", target: \"t͡ʃʰ\", reverseDefault: false },\n    // Eastern voiceless-unaspirated → Western voiced:\n    { armenian: \"պ\", target: \"b\", reverseDefault: false },\n    { armenian: \"տ\", target: \"d\", reverseDefault: false },\n    { armenian: \"կ\", target: \"ɡ\", reverseDefault: false },\n    { armenian: \"ծ\", target: \"d͡z\", reverseDefault: false },\n    { armenian: \"ճ\", target: \"d͡ʒ\", reverseDefault: false },\n    // Eastern voiceless-aspirated → unchanged:\n    { armenian: \"թ\", target: \"tʰ\", reverseDefault: true },\n    { armenian: \"ք\", target: \"kʰ\", reverseDefault: true },\n    { armenian: \"փ\", target: \"pʰ\", reverseDefault: true },\n    { armenian: \"ց\", target: \"t͡sʰ\", reverseDefault: true },\n    { armenian: \"չ\", target: \"t͡ʃʰ\", reverseDefault: true },\n\n    // ── Fricatives ──────────────────────────────────────────────────────\n    // Identical to Eastern. JIPA 2024: 447.\n    { armenian: \"զ\", target: \"z\" },\n    { armenian: \"ժ\", target: \"ʒ\" },\n    { armenian: \"խ\", target: \"χ\" },\n    { armenian: \"ղ\", target: \"ʁ\", reverseDefault: false },\n    { armenian: \"հ\", target: \"h\" },\n    { armenian: \"ս\", target: \"s\" },\n    { armenian: \"շ\", target: \"ʃ\" },\n    { armenian: \"վ\", target: \"v\", reverseDefault: true },\n    { armenian: \"ֆ\", target: \"f\" },\n\n    // ── Sonorants ───────────────────────────────────────────────────────\n    // Standard Western has merged ր and ռ to a single rhotic /ɾ/ in most\n    // varieties (JIPA 2024: 459: \"Beirut WA … has neutralized the rhotic\n    // distinction\"). Some conservative speakers and prescriptive\n    // transcriptions retain the contrast. We follow the JIPA Beirut\n    // analysis: both → /ɾ/.\n    { armenian: \"լ\", target: \"l\" },\n    { armenian: \"մ\", target: \"m\" },\n    { armenian: \"ն\", target: \"n\" },\n    { armenian: \"յ\", target: \"j\" },\n    { armenian: \"ռ\", target: \"ɾ\", reverseDefault: false },\n    { armenian: \"ր\", target: \"ɾ\", reverseDefault: true },\n\n    // Classical glide letter ւ — see note under sequenceMappings (the\n    // standalone form is now rare; appears mainly in digraphs ու and ե+ւ).\n    { armenian: \"ւ\", target: \"v\", reverseDefault: false },\n  ],\n\n  // sequenceMappings: ordered longest-first as required by the scanner.\n  // All two-char sequences precede the single-char ligature և.\n  sequenceMappings: [\n    // ── Digraph ─────────────────────────────────────────────────────────\n    // ու = /u/. Identical to Eastern.\n    { armenian: \"ու\", target: \"u\" },\n\n    // ── ե + V/W combinations ────────────────────────────────────────────\n    {\n      armenian: \"եվ\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n    {\n      armenian: \"եւ\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n\n    // ── W3: sibilant + stop anti-collapse ───────────────────────────────\n    // Phonotactic constraint: Armenian disallows sibilant + voiced-stop\n    // clusters. The orthographic ս/շ + պ/տ/կ surface as /sp st sk ʃp ʃt\n    // ʃk/, NOT /sb sd sɡ ʃb ʃd ʃɡ/ (which the W1 collapse on պ/տ/կ would\n    // otherwise produce). JIPA 2024: 453.\n    { armenian: \"սպ\", target: \"sp\" },\n    { armenian: \"ստ\", target: \"st\" },\n    { armenian: \"սկ\", target: \"sk\" },\n    { armenian: \"շպ\", target: \"ʃp\" },\n    { armenian: \"շտ\", target: \"ʃt\" },\n    { armenian: \"շկ\", target: \"ʃk\" },\n\n    // Single-char ligature (length 1). Must come last to keep the\n    // longest-first invariant.\n    {\n      armenian: \"և\",\n      target: \"ev\",\n      contextRules: [{ condition: { wordInitial: true }, target: \"jev\" }],\n    },\n  ],\n\n  punctuation: {\n    \"։\": \".\",\n    \"՞\": \"?\",\n    \"՝\": \",\",\n    \"՜\": \"!\",\n    \"«\": '\"',\n    \"»\": '\"',\n    \"՛\": \"\",\n    \"՚\": \"\",\n    \"ՙ\": \"\",\n    \"՟\": \"\",\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 { ruGeoKt1974 } from \"./cyrillic/ru-geo-kt-1974.js\";\nimport { ruGeoRa2011 } from \"./cyrillic/ru-geo-ra-2011.js\";\nimport { ruProperVartapetyan1961 } from \"./cyrillic/ru-proper-vartapetyan-1961.js\";\nimport { ruPhoneticEastern } from \"./cyrillic/ru-phonetic-eastern.js\";\nimport { ipaEastern } from \"./ipa/ipa-eastern.js\";\nimport { ipaWestern } from \"./ipa/ipa-western.js\";\n\nconst STANDARDS = {\n  \"bgn-pcgn\": bgnPcgn,\n  \"iso-9985\": iso9985,\n  \"hubschmann-meillet\": hubschmannMeillet,\n  \"ala-lc\": alaLc,\n  \"ru-geo-kt-1974\": ruGeoKt1974,\n  \"ru-geo-ra-2011\": ruGeoRa2011,\n  \"ru-proper-vartapetyan-1961\": ruProperVartapetyan1961,\n  \"ru-phonetic-eastern\": ruPhoneticEastern,\n  \"ipa-eastern\": ipaEastern,\n  \"ipa-western\": ipaWestern,\n} as const satisfies Record<Standard, TransliterationStandard>;\n\nconst STANDARD_IDS = Object.keys(STANDARDS) as readonly Standard[];\n\nexport function getStandard(id: Standard): TransliterationStandard {\n  const standard = STANDARDS[id];\n  if (!standard) {\n    throw new Error(`Unknown transliteration standard: ${String(id)}`);\n  }\n  return standard;\n}\n\nexport function listStandards(): readonly Standard[] {\n  return STANDARD_IDS;\n}\n","import type { Standard } from \"../types.js\";\nimport type { ProfileMetadata } from \"./types.js\";\n\nconst bgnSources = [\n  {\n    title: \"Romanization of Armenian: BGN/PCGN 1981 System\",\n    kind: \"official-standard\",\n    year: 2022,\n    url: \"https://assets.publishing.service.gov.uk/media/636cd40ad3bf7f164de3c9f3/ROMANIZATION_OF_ARMENIAN_2022_final.pdf\",\n  },\n  {\n    title: \"Thomas T. Pedersen, Transliteration of Armenian, Rev. 2.0\",\n    kind: \"reference-table\",\n    year: 2009,\n    url: \"https://transliteration.eki.ee/pdf/Armenian_2.0.pdf\",\n  },\n] as const;\n\nconst canonicalProfiles = {\n  \"bgn-pcgn\": {\n    id: \"bgn-pcgn\",\n    canonicalId: \"bgn-pcgn\",\n    status: \"canonical\",\n    label: \"BGN/PCGN Romanization (1981)\",\n    targetLanguage: null,\n    targetScript: \"latin\",\n    scriptCode: \"Latn\",\n    domain: \"geographic\",\n    authority: \"United States Board on Geographic Names / PCGN\",\n    year: 1981,\n    aliases: [],\n    sources: bgnSources,\n    notes: [\n      \"Designed for romanizing Armenian names in the eastern variety used in the Republic of Armenia.\",\n      \"Aspirates use U+2019 RIGHT SINGLE QUOTATION MARK (per BGN/PCGN 2022 validation).\",\n      \"Word-initial ե → ye, after vowels → ye (note 4.1); ո → vo word-initial except ով (note 4.2); և → yev initially/isolated/after vowels (note 4.3).\",\n    ],\n  },\n  \"iso-9985\": {\n    id: \"iso-9985\",\n    canonicalId: \"iso-9985\",\n    status: \"canonical\",\n    label: \"ISO 9985 Romanization\",\n    targetLanguage: null,\n    targetScript: \"latin\",\n    scriptCode: \"Latn\",\n    domain: \"romanization\",\n    authority: \"International Organization for Standardization\",\n    year: 1996,\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"ISO 9985:1996 — Information and documentation — Transliteration of Armenian characters into Latin characters\",\n        kind: \"official-standard\",\n        year: 1996,\n      },\n      {\n        title:\n          \"Thomas T. Pedersen, Transliteration of Armenian, Rev. 2.0 (ISO 9985 column)\",\n        kind: \"reference-table\",\n        year: 2009,\n        url: \"https://transliteration.eki.ee/pdf/Armenian_2.0.pdf\",\n      },\n    ],\n    notes: [\n      \"Reversible Latin transliteration profile with diacritics.\",\n      \"Aspirates use U+02BF MODIFIER LETTER LEFT HALF RING (per ISO 9985:1996).\",\n      \"ու digraph romanizes letter-by-letter as 'ow' (ո→o + ւ→w), per Pedersen ISO column entry 35.\",\n    ],\n  },\n  \"hubschmann-meillet\": {\n    id: \"hubschmann-meillet\",\n    canonicalId: \"hubschmann-meillet\",\n    status: \"canonical\",\n    label: \"Hübschmann-Meillet Romanization\",\n    targetLanguage: null,\n    targetScript: \"latin\",\n    scriptCode: \"Latn\",\n    domain: \"academic\",\n    authority: \"Hübschmann-Meillet scholarly tradition\",\n    year: 1913,\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"A. Meillet, Altarmenisches Elementarbuch, Heidelberg, 1913 (2nd ed. 1980)\",\n        kind: \"scholarly-system\",\n        year: 1913,\n      },\n      {\n        title:\n          \"Thomas T. Pedersen, Transliteration of Armenian, Rev. 2.0 (H-M column)\",\n        kind: \"reference-table\",\n        year: 2009,\n        url: \"https://transliteration.eki.ee/pdf/Armenian_2.0.pdf\",\n      },\n    ],\n    notes: [\n      \"Academic Latin profile used for classical/linguistic contexts.\",\n      \"ու digraph → 'u' (per Pedersen H-M column entry 35).\",\n      \"Aspirates use U+02BF MODIFIER LETTER LEFT HALF RING; some scholarly editions use U+02BD instead.\",\n      \"ը → ə (U+0259 SCHWA); some sources use U+01DD LATIN SMALL LETTER TURNED E.\",\n    ],\n  },\n  \"ala-lc\": {\n    id: \"ala-lc\",\n    canonicalId: \"ala-lc\",\n    status: \"canonical\",\n    label: \"ALA-LC Romanization (2022)\",\n    targetLanguage: null,\n    targetScript: \"latin\",\n    scriptCode: \"Latn\",\n    domain: \"romanization\",\n    authority: \"American Library Association / Library of Congress\",\n    year: 2022,\n    aliases: [],\n    sources: [\n      {\n        title: \"ALA-LC Armenian Romanization Table, 2022 version\",\n        kind: \"official-standard\",\n        year: 2022,\n        url: \"https://www.loc.gov/catdir/cpso/romanization/armenian.pdf\",\n      },\n      {\n        title:\n          \"Thomas T. Pedersen, Transliteration of Armenian, Rev. 2.0 (ALA-LC 1997 column for historical comparison)\",\n        kind: \"secondary-reference\",\n        year: 2009,\n        url: \"https://transliteration.eki.ee/pdf/Armenian_2.0.pdf\",\n      },\n    ],\n    notes: [\n      \"Cataloging romanization profile (LoC 2022).\",\n      \"West Armenian bracketed alternates (note 1) are not emitted; East/Classical default only.\",\n      \"Word-initial 'ե → y' fires only when followed by a vowel (note 2, Classical orthography).\",\n      \"Soft sign U+02B9 inserted between Գհ/Դզ/Կհ/Սհ/Տս bigrams (note 3).\",\n      \"Word-initial 'յ → ḥ' (note 4); stem-internal compound boundaries are not detected.\",\n      \"'եւ → ew' is the Classical orthography sequence (note 5); modern 'և → ev' (note 6).\",\n      \"Note 6 lowercase 'եվ → eʹv' word-start soft-sign exception (with lexical exceptions ևեթ, ևս) is NOT implemented; 'եվ' always maps to 'ev'.\",\n    ],\n  },\n  \"ru-geo-kt-1974\": {\n    id: \"ru-geo-kt-1974\",\n    canonicalId: \"ru-geo-kt-1974\",\n    status: \"canonical\",\n    label: \"Russian Geographic Transliteration, Kuzmina-Tumanyan 1974\",\n    targetLanguage: \"ru\",\n    targetScript: \"cyrillic\",\n    scriptCode: \"Cyrl\",\n    domain: \"geographic\",\n    authority: \"G. G. Kuzmina, editor E. G. Tumanyan\",\n    year: 1974,\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"Инструкция по русской передаче географических названий Армянской ССР / Сост. Г. Г. Кузьмина; Ред. Э. Г. Туманян. — М., 1974. — 22 с. — 1000 экз.\",\n        kind: \"geographic-instruction\",\n        year: 1974,\n        url: \"https://arhiiv.eki.ee/knab/cyr/ins_topo_AM_ru_1974.pdf\",\n      },\n    ],\n    notes: [\n      \"Russian is primary in the ID: Ukrainian or Belarusian Cyrillic profiles would use different rules.\",\n      \"This profile models the 1974 instruction; official and traditional place names may override productive rules.\",\n    ],\n  },\n  \"ru-geo-ra-2011\": {\n    id: \"ru-geo-ra-2011\",\n    canonicalId: \"ru-geo-ra-2011\",\n    status: \"canonical\",\n    label: \"Russian Geographic Transliteration, Republic of Armenia 2011\",\n    targetLanguage: \"ru\",\n    targetScript: \"cyrillic\",\n    scriptCode: \"Cyrl\",\n    domain: \"geographic\",\n    authority: \"Government of the Republic of Armenia\",\n    year: 2011,\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"ՀՀ կառավարության 2011 թվականի մարտի 3-ի N 220-Ն որոշում / Постановление Правительства Республики Армения № 220 от 3 марта 2011 года\",\n        kind: \"government-decision\",\n        year: 2011,\n        url: \"https://www.arlis.am/hy/acts/66360\",\n      },\n    ],\n    notes: [\n      \"Separate from Kuzmina-Tumanyan 1974; it makes different choices for հ and ղ.\",\n      \"Designed for Republic of Armenia geographic names, not for general-word Cyrillic transcription.\",\n    ],\n  },\n  \"ru-proper-vartapetyan-1961\": {\n    id: \"ru-proper-vartapetyan-1961\",\n    canonicalId: \"ru-proper-vartapetyan-1961\",\n    status: \"canonical\",\n    label: \"Russian Proper Names Transliteration, Vartapetyan 1961\",\n    targetLanguage: \"ru\",\n    targetScript: \"cyrillic\",\n    scriptCode: \"Cyrl\",\n    domain: \"proper-names\",\n    authority: \"N. A. Vartapetyan\",\n    year: 1961,\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"Н. А. Вартапетян. Справочник по русской транскрипции армянских имен, фамилий и географических названий. Армянское государственное издательство, 1961\",\n        kind: \"reference-table\",\n        year: 1961,\n        url: \"https://books.google.com/books/about/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D0%BF%D0%BE_%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%BE%D0%B9.html?id=NYZKAQAAIAAJ\",\n      },\n      {\n        title:\n          \"И. Г. Казумян. Вариантные формы армянских фамилий в русском языке. Автореферат диссертации, Ереван, 1990\",\n        kind: \"secondary-reference\",\n        year: 1990,\n        url: \"https://search.rsl.ru/ru/record/01000295426\",\n      },\n      {\n        title:\n          \"С. Б. Тошьян. Рецензия на Н. А. Вартапетян. Справочник по русской транскрипции армянских имён, фамилий и географических названий. Известия Академии наук Армянской ССР, 1962\",\n        kind: \"critical-review\",\n        year: 1962,\n        url: \"https://arar.sci.am/Content/109000/file_0.pdf\",\n      },\n    ],\n    notes: [\n      \"For Armenian given names, surnames, and geographic names.\",\n      \"Not suitable as a default Cyrillic display for common Armenian vocabulary.\",\n    ],\n  },\n  \"ru-phonetic-eastern\": {\n    id: \"ru-phonetic-eastern\",\n    canonicalId: \"ru-phonetic-eastern\",\n    status: \"canonical\",\n    label: \"Russian Phonetic Transcription, Eastern Armenian\",\n    targetLanguage: \"ru\",\n    targetScript: \"cyrillic\",\n    scriptCode: \"Cyrl\",\n    domain: \"phonemic\",\n    authority: \"armenian-transliteration package profile\",\n    aliases: [],\n    sources: [\n      {\n        title: \"armenian-transliteration Russian phonetic Eastern Armenian profile\",\n        kind: \"package-profile\",\n      },\n    ],\n    notes: [\n      \"Learner-facing Cyrillic transcription for common vocabulary.\",\n      \"Not an official geographic or proper-name transfer system.\",\n    ],\n  },\n  \"ipa-eastern\": {\n    id: \"ipa-eastern\",\n    canonicalId: \"ipa-eastern\",\n    status: \"canonical\",\n    label: \"Eastern Armenian IPA (broad phonemic, Tier 1)\",\n    targetLanguage: null,\n    targetScript: \"ipa\",\n    scriptCode: \"IPA\",\n    domain: \"phonemic\",\n    authority:\n      \"Standard Eastern Armenian — broad phonemic transcription per Dum-Tragut 2009 and JIPA 2024. Tier 1: strict orthography → phoneme, no allophonic detail.\",\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"Jasmine Dum-Tragut, Armenian: Modern Eastern Armenian, London Oriental and African Language Library 14, Amsterdam: John Benjamins, 2009\",\n        kind: \"scholarly-system\",\n        year: 2009,\n      },\n      {\n        title:\n          \"Seyfarth, Dolatian, Guekguezian, Kelly & Toparlak (2024). Armenian (Yerevan Eastern and Beirut Western). Journal of the International Phonetic Association 54(1): 445–478\",\n        kind: \"scholarly-system\",\n        year: 2024,\n        url: \"https://doi.org/10.1017/S0025100323000130\",\n      },\n      {\n        title:\n          \"Hossep Dolatian, Armenian Phonology and Phonetics (Glottothèque lecture series, 2022)\",\n        kind: \"scholarly-system\",\n        year: 2022,\n      },\n      {\n        title:\n          \"Bert Vaux, The Phonology of Armenian, Oxford: Clarendon Press, 1998\",\n        kind: \"scholarly-system\",\n        year: 1998,\n      },\n    ],\n    notes: [\n      \"Broad phonemic transcription of Standard Eastern Armenian.\",\n      \"Three-way stop/affricate contrast: voiced (բ դ գ ձ ջ) / voiceless unaspirated (պ տ կ ծ ճ) / voiceless aspirated (թ ք փ ց չ).\",\n      \"Open back unrounded /ɑ/ (not /a/) per JIPA 2024: 446.\",\n      \"Word-initial yotation: ե → /je/, ո → /vo/ with ո + վ → /o/ exception (ով family).\",\n      \"ղ → /ʁ/, ր → /ɾ/ (tap), ռ → /r/ (trill — distinction preserved in Yerevan EA).\",\n      \"Excludes allophonic detail (stress, schwa epenthesis, regressive ղ/վ devoicing, word-final devoicing, post-nasal aspiration, -ությ- palatalization). See docs/LINGUISTIC_RATIONALE.md.\",\n    ],\n  },\n  \"ipa-western\": {\n    id: \"ipa-western\",\n    canonicalId: \"ipa-western\",\n    status: \"canonical\",\n    label: \"Standard Western Armenian IPA (broad phonemic, Tier 1)\",\n    targetLanguage: null,\n    targetScript: \"ipa\",\n    scriptCode: \"IPA\",\n    domain: \"phonemic\",\n    authority:\n      \"Standard Western Armenian — broad phonemic transcription per JIPA 2024 and Dolatian 2022. Standard Western retains aspiration on թ ք փ ց չ.\",\n    aliases: [],\n    sources: [\n      {\n        title:\n          \"Seyfarth, Dolatian, Guekguezian, Kelly & Toparlak (2024). Armenian (Yerevan Eastern and Beirut Western). Journal of the International Phonetic Association 54(1): 445–478\",\n        kind: \"scholarly-system\",\n        year: 2024,\n        url: \"https://doi.org/10.1017/S0025100323000130\",\n      },\n      {\n        title:\n          \"Hossep Dolatian, Armenian Phonology and Phonetics (Glottothèque lecture series, 2022)\",\n        kind: \"scholarly-system\",\n        year: 2022,\n      },\n      {\n        title:\n          \"Bert Vaux, The Phonology of Armenian, Oxford: Clarendon Press, 1998\",\n        kind: \"scholarly-system\",\n        year: 1998,\n      },\n      {\n        title:\n          \"Luc Baronian, On the diachrony of Armenian stops (in Sayeed & Vaux, eds.), 2017\",\n        kind: \"scholarly-system\",\n        year: 2017,\n      },\n    ],\n    notes: [\n      \"Broad phonemic transcription of Standard Western Armenian.\",\n      \"W1 voicing collapse: Eastern voiced (բ գ դ ձ ջ) → Western aspirated (/pʰ kʰ tʰ t͡sʰ t͡ʃʰ/); Eastern voiceless unaspirated (պ կ տ ծ ճ) → Western voiced (/b ɡ d d͡z d͡ʒ/). Aspirated series (թ ք փ ց չ) retained.\",\n      \"Word-initial yotation rules same as Eastern.\",\n      \"Rhotic merger: ր and ռ both → /ɾ/ in Standard Western (JIPA 2024: 459).\",\n      \"W3 phonotactic: sibilant + plain stop (ստ սպ սկ շտ շպ շկ) stays voiceless /st sp sk ʃt ʃp ʃk/.\",\n      \"Excludes Western-specific allophonic detail (progressive devoicing, schwa epenthesis, sibilant-adjacent deaspiration, յու → ʏ post-consonant). See docs/LINGUISTIC_RATIONALE.md.\",\n    ],\n  },\n} as const satisfies Record<Standard, ProfileMetadata>;\n\nexport const profiles: Record<Standard, ProfileMetadata> = canonicalProfiles;\n","import type { Standard } from \"../types.js\";\nimport type { ProfileMetadata } from \"./types.js\";\nimport { profiles } from \"./metadata.js\";\n\nexport type {\n  ProfileDomain,\n  ProfileMetadata,\n  ProfileSource,\n  ProfileSourceKind,\n  ProfileStatus,\n} from \"./types.js\";\n\nexport { profiles };\n\nexport function getProfile(id: Standard): ProfileMetadata {\n  const profile = profiles[id];\n  if (!profile) {\n    throw new Error(`Unknown transliteration profile: ${String(id)}`);\n  }\n  return profile;\n}\n\nexport function listProfiles(): readonly ProfileMetadata[] {\n  return Object.values(profiles);\n}\n\nexport function getProfilesByTargetLanguage(\n  targetLanguage: string,\n): readonly ProfileMetadata[] {\n  return listProfiles().filter(\n    (profile) => profile.targetLanguage === targetLanguage,\n  );\n}\n"],"mappings":"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F,CACF,EACA,qBAAsB,CACpB,GAAI,qBACJ,YAAa,qBACb,OAAQ,YACR,MAAO,qCACP,eAAgB,KAChB,aAAc,QACd,WAAY,OACZ,OAAQ,WACR,UAAW,4CACX,KAAM,KACN,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,4EACF,KAAM,mBACN,KAAM,IACR,EACA,CACE,MACE,yEACF,KAAM,kBACN,KAAM,KACN,IAAK,qDACP,CACF,EACA,MAAO,CACL,iEACA,sEACA,mGACA,2FACF,CACF,EACA,SAAU,CACR,GAAI,SACJ,YAAa,SACb,OAAQ,YACR,MAAO,6BACP,eAAgB,KAChB,aAAc,QACd,WAAY,OACZ,OAAQ,eACR,UAAW,qDACX,KAAM,KACN,QAAS,CAAC,EACV,QAAS,CACP,CACE,MAAO,mDACP,KAAM,oBACN,KAAM,KACN,IAAK,2DACP,EACA,CACE,MACE,2GACF,KAAM,sBACN,KAAM,KACN,IAAK,qDACP,CACF,EACA,MAAO,CACL,8CACA,4FACA,sGACA,uHACA,oGACA,+GACA,mMACF,CACF,EACA,iBAAkB,CAChB,GAAI,iBACJ,YAAa,iBACb,OAAQ,YACR,MAAO,4DACP,eAAgB,KAChB,aAAc,WACd,WAAY,OACZ,OAAQ,aACR,UAAW,uCACX,KAAM,KACN,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,8mBACF,KAAM,yBACN,KAAM,KACN,IAAK,wDACP,CACF,EACA,MAAO,CACL,qGACA,+GACF,CACF,EACA,iBAAkB,CAChB,GAAI,iBACJ,YAAa,iBACb,OAAQ,YACR,MAAO,+DACP,eAAgB,KAChB,aAAc,WACd,WAAY,OACZ,OAAQ,aACR,UAAW,wCACX,KAAM,KACN,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,6kBACF,KAAM,sBACN,KAAM,KACN,IAAK,oCACP,CACF,EACA,MAAO,CACL,yFACA,iGACF,CACF,EACA,6BAA8B,CAC5B,GAAI,6BACJ,YAAa,6BACb,OAAQ,YACR,MAAO,yDACP,eAAgB,KAChB,aAAc,WACd,WAAY,OACZ,OAAQ,eACR,UAAW,oBACX,KAAM,KACN,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,yvBACF,KAAM,kBACN,KAAM,KACN,IAAK,gLACP,EACA,CACE,MACE,ggBACF,KAAM,sBACN,KAAM,KACN,IAAK,6CACP,EACA,CACE,MACE,u1BACF,KAAM,kBACN,KAAM,KACN,IAAK,+CACP,CACF,EACA,MAAO,CACL,4DACA,4EACF,CACF,EACA,sBAAuB,CACrB,GAAI,sBACJ,YAAa,sBACb,OAAQ,YACR,MAAO,mDACP,eAAgB,KAChB,aAAc,WACd,WAAY,OACZ,OAAQ,WACR,UAAW,2CACX,QAAS,CAAC,EACV,QAAS,CACP,CACE,MAAO,qEACP,KAAM,iBACR,CACF,EACA,MAAO,CACL,+DACA,4DACF,CACF,EACA,cAAe,CACb,GAAI,cACJ,YAAa,cACb,OAAQ,YACR,MAAO,gDACP,eAAgB,KAChB,aAAc,MACd,WAAY,MACZ,OAAQ,WACR,UACE,oKACF,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,0IACF,KAAM,mBACN,KAAM,IACR,EACA,CACE,MACE,iLACF,KAAM,mBACN,KAAM,KACN,IAAK,2CACP,EACA,CACE,MACE,2FACF,KAAM,mBACN,KAAM,IACR,EACA,CACE,MACE,sEACF,KAAM,mBACN,KAAM,IACR,CACF,EACA,MAAO,CACL,6DACA,0MACA,6DACA,iIACA,8HACA,sNACF,CACF,EACA,cAAe,CACb,GAAI,cACJ,YAAa,cACb,OAAQ,YACR,MAAO,yDACP,eAAgB,KAChB,aAAc,MACd,WAAY,MACZ,OAAQ,WACR,UACE,4KACF,QAAS,CAAC,EACV,QAAS,CACP,CACE,MACE,iLACF,KAAM,mBACN,KAAM,KACN,IAAK,2CACP,EACA,CACE,MACE,2FACF,KAAM,mBACN,KAAM,IACR,EACA,CACE,MACE,sEACF,KAAM,mBACN,KAAM,IACR,EACA,CACE,MACE,kFACF,KAAM,mBACN,KAAM,IACR,CACF,EACA,MAAO,CACL,6DACA,oWACA,+CACA,8FACA,4KACA,2MACF,CACF,CACF,EAEaE,EAA8CD,GCpVpD,SAASE,GAAWC,EAA+B,CACxD,IAAMC,EAAUC,EAASF,CAAE,EAC3B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,oCAAoC,OAAOD,CAAE,CAAC,EAAE,EAElE,OAAOC,CACT,CAEO,SAASE,GAA2C,CACzD,OAAO,OAAO,OAAOD,CAAQ,CAC/B,CAEO,SAASE,GACdC,EAC4B,CAC5B,OAAOF,EAAa,EAAE,OACnBF,GAAYA,EAAQ,iBAAmBI,CAC1C,CACF,CrBGA,IAAMC,GAAc,IAAI,IAExB,SAASC,GAAaC,EAAoB,CACxC,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,8BAA8B,CAEtD,CAEA,SAASC,GAAUC,EAA2C,CAC5D,IAAIC,EAASL,GAAY,IAAII,CAAQ,EACrC,OAAKC,IACHA,EAAS,IAAIC,EAAsBC,EAAYH,CAAQ,CAAC,EACxDJ,GAAY,IAAII,EAAUC,CAAM,GAE3BA,CACT,CASO,SAASG,GACdN,EACAO,EACQ,CACR,OAAAR,GAAaC,CAAI,EACVC,GAAUM,GAAS,UAAY,UAAU,EAAE,cAAcP,CAAI,CACtE,CASO,SAASQ,GACdD,EAAgC,CAAC,EACP,CAC1B,IAAMJ,EAASF,GAAUM,EAAQ,UAAY,UAAU,EACvD,OAAQP,IACND,GAAaC,CAAI,EACVG,EAAO,cAAcH,CAAI,EAEpC","names":["index_exports","__export","createTransliterator","getProfile","getProfilesByTargetLanguage","listProfiles","listStandards","profiles","transliterate","__toCommonJS","isArmenianLetter","ch","cp","isArmenianUppercase","armenianToLower","ARMENIAN_PUNCTUATION","isArmenianPunctuation","ARMENIAN_INWORD_DIACRITICS","isArmenianInWordDiacritic","ARMENIAN_LIGATURES","normalizeArmenian","text","result","ligature","expansion","ARMENIAN_LIGATURES","ARMENIAN_EW","ARMENIAN_CASE_OFFSET","armenianCharToLower","ch","cp","seqToLower","s","isArmenianLetterOrEw","isArmenianLetter","isAngleBracketQuote","scan","text","sequences","seenPatterns","patterns","mapping","lower","a","b","chars","tokens","i","otherStart","otherValue","flushOther","matched","pattern","slice","isArmenianPunctuation","annotateWordPositions","isArmenian","t","isInWordDiacritic","isArmenianInWordDiacritic","runLetterIndices","closeRun","idx","tok","last","k","j","ARMENIAN_EW","isArmenianLetterOrEw","ch","isArmenianLetter","isTokenUppercase","token","armenianChars","isArmenianUppercase","detectWordCasing","wordTokens","letterTokens","t","firstLetter","applySingleTokenCasing","sourceToken","transliterated","applyUpperCasing","text","toLowerCanonical","value","armenianToLower","evaluateCondition","condition","token","prevToken","nextToken","isInitial","positions","nextLower","toLowerCanonical","prevLower","resolveMapping","mapping","rule","DEFAULT_PUNCTUATION","isInWordDiacriticToken","token","isArmenianInWordDiacritic","TransliterationEngine","standard","m","DEFAULT_PUNCTUATION","key","value","text","normalized","normalizeArmenian","tokens","scan","wordRuns","output","processedInWord","run","wordTokens","casing","detectWordCasing","i","prev","findNeighbor","next","mapped","applyUpperCasing","applySingleTokenCasing","canonical","toLowerCanonical","mapping","resolveMapping","seqMapping","charMapping","runs","runStart","lastLetterIndex","isLetter","isDiacritic","direction","j","candidate","VOWELS_AND_OU","bgnPcgn","iso9985","hubschmannMeillet","ALA_LC_VOWELS","alaLc","VOWELS_AND_U","ruGeoKt1974","russianVowelsAndU","ruGeoRa2011","russianVowelsAndU","VOWELS","ruProperVartapetyan1961","VOWELS","ruPhoneticEastern","ipaEastern","ipaWestern","STANDARDS","bgnPcgn","iso9985","hubschmannMeillet","alaLc","ruGeoKt1974","ruGeoRa2011","ruProperVartapetyan1961","ruPhoneticEastern","ipaEastern","ipaWestern","STANDARD_IDS","getStandard","id","standard","listStandards","bgnSources","canonicalProfiles","profiles","getProfile","id","profile","profiles","listProfiles","getProfilesByTargetLanguage","targetLanguage","engineCache","assertString","text","getEngine","standard","engine","TransliterationEngine","getStandard","transliterate","options","createTransliterator"]}