{"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/syllabify.ts","../src/amalgamate.ts"],"sourcesContent":["const consonants = [\n  'β',\n  'γ',\n  'δ',\n  'ζ',\n  'θ',\n  'κ',\n  'λ',\n  'μ',\n  'ν',\n  'ξ',\n  'π',\n  'ρ',\n  'ς',\n  'σ',\n  'τ',\n  'φ',\n  'χ',\n  'ψ',\n];\nconst consonantClustersPronouncedTogether = [\n  'βλ',\n  'βρ',\n  'γλ',\n  'γν',\n  'γρ',\n  'δρ',\n  'θλ',\n  'θρ',\n  'θν',\n  'κλ',\n  'κρ',\n  'κτ',\n  'μν',\n  'πλ',\n  'πν',\n  'πρ',\n  'πτ',\n  'σκ',\n  'σκλ',\n  'σμ',\n  'σπ',\n  'σπλ',\n  'στ',\n  'στρ',\n  'σφ',\n  'σθ',\n  'σχ',\n  'τρ',\n  'φθ',\n  'φλ',\n  'φρ',\n  'χρ',\n  'χθ',\n];\n\nconst longVowels = ['η', 'ω', 'ᾳ'];\nconst shortVowels = ['α', 'ε', 'ι', 'ο', 'υ'];\nconst vowels = longVowels.concat(shortVowels);\n\nconst longDiphthongs = ['ει', 'ηυ', 'ου', 'ευ', 'αι', 'υι'];\nconst shortDiphthongsWhenFinal = ['αυ', 'οι'];\nconst diphthongs = longDiphthongs.concat(shortDiphthongsWhenFinal);\n\nfunction isLongVowel(character: string) {\n  return longVowels.indexOf(character) !== -1;\n}\n\nexport function isLongSyllable(syllable: string) {\n  const vowelsOnly = syllable.split('').filter(isVowel).join('');\n  if (vowelsOnly.length === 2) {\n    return isDiphthong(vowelsOnly);\n  }\n  return isLongVowel(vowelsOnly);\n}\n\nfunction isVowel(character = '') {\n  return vowels.indexOf(character.normalize('NFD')[0] || '') !== -1;\n}\n\nfunction beginsWithVowel(characters: string) {\n  return isVowel(characters[0]);\n}\n\nfunction isConsonant(character: string) {\n  return !isVowel(character);\n}\n\nfunction isDiphthong(characters: string) {\n  return diphthongs.indexOf(characters) !== -1;\n}\n\nfunction beginsWithConsonant(characters: string) {\n  return isConsonant(characters[0] || '');\n}\n\nfunction beginsWithDiphthong(characters: string) {\n  return diphthongs.indexOf(withoutAccents(characters).substr(0, 2)) !== -1;\n}\n\nfunction beginsWithConsonantClusterPronouncedTogether(characters: string) {\n  const charactersLowerCased = characters.toLowerCase();\n  for (let x = 0; x < consonantClustersPronouncedTogether.length; x++) {\n    const tmp = consonantClustersPronouncedTogether[x] || '';\n    if (charactersLowerCased.indexOf(tmp) === 0) {\n      return characters.substr(0, tmp.length);\n    }\n  }\n  return null;\n}\n\nfunction endsWithShortDiphthong(characters: string) {\n  return (\n    shortDiphthongsWhenFinal.indexOf(\n      characters.substr(characters.length - 2),\n    ) !== -1\n  );\n}\n\nfunction isSingleConsonant(characters: string) {\n  return characters.length === 1 && isConsonant(characters[0] || '');\n}\n\nfunction beginsWithSingleConsonantFollowedByVowel(characters: string) {\n  return isConsonant(characters[0] || '') && isVowel(characters[1]);\n}\n\nfunction beginsWithVowelFollowedByVowel(characters: string) {\n  return isVowel(characters[0]) && isVowel(characters[1]);\n}\n\nfunction beginsWithDoubleConsonant(characters: string) {\n  return (\n    characters.length > 1 &&\n    isConsonant(characters[0] || '') &&\n    isConsonant(characters[1] || '')\n  );\n}\n\nfunction withoutAccent(character: string) {\n  return character.normalize('NFD')[0];\n}\n\nfunction withoutAccents(characters: string) {\n  return characters.split('').map(withoutAccent).join('');\n}\n\nfunction removePunctuation(characters: string) {\n  return characters.replace(/[,.·;]/g, '');\n}\n\nfunction removeNumbers(characters: string) {\n  return clean(characters).replace(/[1234567890]/g, '');\n}\n\n// function lengthen(vowel: string) {}\n\n// function connectAndLengthen(part1: string, part2: string) {}\n\nfunction clean(characters: string) {\n  return (\n    characters\n      //remove newlines\n      .replace(/(\\r\\n|\\n|\\r)/gm, '')\n      // remove multiple spaces as well\n      .replace(/ +(?= )/g, '')\n  );\n}\n\nexport {\n  consonants,\n  consonantClustersPronouncedTogether,\n  isVowel,\n  isLongVowel,\n  isConsonant,\n  withoutAccents,\n  removeNumbers,\n  removePunctuation,\n  isSingleConsonant,\n  beginsWithVowel,\n  beginsWithDiphthong,\n  beginsWithConsonant,\n  beginsWithVowelFollowedByVowel,\n  beginsWithSingleConsonantFollowedByVowel,\n  beginsWithDoubleConsonant,\n  beginsWithConsonantClusterPronouncedTogether,\n  endsWithShortDiphthong,\n};\n","import type { Syllable, ConsonantCluster } from '../phonology';\nimport {\n  isSingleConsonant,\n  beginsWithConsonantClusterPronouncedTogether,\n  beginsWithConsonant,\n  beginsWithVowelFollowedByVowel,\n  beginsWithSingleConsonantFollowedByVowel,\n  isConsonant,\n  beginsWithDoubleConsonant,\n  beginsWithVowel,\n  removeNumbers,\n  beginsWithDiphthong,\n  removePunctuation,\n} from './utils';\n\nfunction syllabify(word = '') {\n  const syllables: Syllable[] = [];\n  let currentSyllable = '';\n  let charactersRemaining: string = word.normalize('NFC');\n  let cluster;\n\n  function advanceSyllable() {\n    if (currentSyllable.length) {\n      syllables.push(currentSyllable);\n      currentSyllable = '';\n    }\n  }\n\n  function shiftCharacter() {\n    currentSyllable += charactersRemaining[0];\n    charactersRemaining = charactersRemaining.substr(1);\n  }\n\n  // let wordWithoutAccents = withoutAccents(word);\n\n  while (charactersRemaining.length) {\n    if (isSingleConsonant(word)) {\n      shiftCharacter();\n      continue;\n    }\n\n    if (\n      (cluster =\n        beginsWithConsonantClusterPronouncedTogether(charactersRemaining))\n    ) {\n      if (currentSyllable.length) {\n        advanceSyllable();\n      }\n      currentSyllable += cluster;\n      charactersRemaining = charactersRemaining.substr(cluster.length);\n      continue;\n    }\n\n    if (beginsWithSingleConsonantFollowedByVowel(charactersRemaining)) {\n      // console.log('beginsWithSingleConsonantFollowedByVowel',charactersRemaining);\n      if (currentSyllable.length) {\n        advanceSyllable();\n      }\n      shiftCharacter();\n      continue;\n    }\n\n    if (beginsWithDoubleConsonant(charactersRemaining)) {\n      // console.log('beginsWithDoubleConsonant',charactersRemaining);\n      shiftCharacter();\n      advanceSyllable();\n      continue;\n    }\n\n    if (beginsWithConsonant(charactersRemaining)) {\n      shiftCharacter();\n      continue;\n    }\n\n    if (beginsWithDiphthong(charactersRemaining)) {\n      if (charactersRemaining[1]) {\n        currentSyllable += charactersRemaining[0] + charactersRemaining[1];\n      }\n      charactersRemaining = charactersRemaining.substr(2);\n\n      if (beginsWithVowel(charactersRemaining)) {\n        advanceSyllable();\n      }\n      continue;\n    }\n\n    if (beginsWithVowelFollowedByVowel(charactersRemaining)) {\n      // console.log('beginsWithVowelFollowedByVowel',charactersRemaining)\n      shiftCharacter();\n      advanceSyllable();\n      continue;\n    }\n\n    shiftCharacter();\n  }\n  advanceSyllable();\n  return syllables;\n}\n\nfunction extractConsonantClustersPronouncedTogether(text: string) {\n  const consonantClusters: ConsonantCluster[] = [];\n  const words = removeNumbers(removePunctuation(text.toLowerCase())).split(' ');\n  // console.log(words);\n  words.forEach(function (word: string) {\n    const characters = word.split('');\n    const consonantCluster = [];\n    while (characters[0] && isConsonant(characters[0])) {\n      consonantCluster.push(characters.shift());\n    }\n    if (consonantCluster.length > 1) {\n      consonantClusters.push(consonantCluster.join(''));\n    }\n  });\n  return Array.from(new Set(consonantClusters));\n}\n\nexport { syllabify, extractConsonantClustersPronouncedTogether };\n","export function amalgamate(characters: string) {\n  // Labials\n  // \"π, β, φ + σ form the double consonant ψ\" (Black)\n  characters = characters.replace(/[πβφ]σ/g, 'ψ');\n\n  // Velars\n  // \"κ, γ, χ + σ form the double consonant ξ.\" (Black)\n  characters = characters.replace(/[κγχ]σ/g, 'ξ');\n\n  // Dentals\n  // \"τ, δ, θ drop out before σ\" (Black)\n  characters = characters.replace(/[τδθ]σ/g, 'σ');\n  return characters;\n}\n"],"names":[],"mappings":"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"}