ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/fragmentarium/domain/normalizeAccents.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import charactersWithAccents from './charactersWithAccents.json'
import specialTransliterationCharacters from './specialTransliterationCharacters.json'
import escapeRegExp from './escapeRegExp'

const charactersWithAccentsAsString = escapeRegExp(
  Object.keys(charactersWithAccents)
)

const specialTransliterationCharactersAsString = escapeRegExp(
  specialTransliterationCharacters
)

const accentExpression = new RegExp(
  `(${charactersWithAccentsAsString})(${specialTransliterationCharactersAsString}|)\\w*`,
  'g'
)

export default function normalizeAccents(userInput: string): string {
  return userInput.replace(accentExpression, (match) => {
    const subindex = match
      .split('')
      .map((character) => charactersWithAccents[character]?.index)

    const characterWithoutAccent = match
      .split('')
      .map((character) => charactersWithAccents[character]?.letter ?? character)

    return characterWithoutAccent.concat(subindex).join('')
  })
}