-- |
--  Module:     Data.Text.ICU.Translit
--  License:    BSD-style
--  Maintainer: me@lelf.lu
--
-- This module provides the bindings to the transliteration features
-- by the ICU (International Components for Unicode) library.
--
-- >>> IO.putStrLn $ transliterate (trans "name-any; ru") "\\N{RABBIT FACE} Nu pogodi!"
-- 🐰 Ну погоди!
--
-- >>> IO.putStrLn $ transliterate (trans "nl-title") "gelderse ijssel"
-- Gelderse IJssel
--
-- >>> IO.putStrLn $ transliterate (trans "ja") "Amsterdam"
-- アムステルダム
--
-- More information about the rules is
-- <http://userguide.icu-project.org/transforms/general here>.
module Data.Text.ICU.Translit (IO.Transliterator, trans, transliterate) where

import Data.Text
import Data.Text.ICU.Translit.IO qualified as IO
import System.IO.Unsafe

-- | Construct new transliterator by name. Will throw an error if
-- there is no such transliterator
trans :: Text -> IO.Transliterator
trans :: Text -> Transliterator
trans Text
t = IO Transliterator -> Transliterator
forall a. IO a -> a
unsafePerformIO (IO Transliterator -> Transliterator)
-> IO Transliterator -> Transliterator
forall a b. (a -> b) -> a -> b
$ Text -> IO Transliterator
IO.transliterator Text
t

-- | Transliterate the text using the transliterator
transliterate :: IO.Transliterator -> Text -> Text
transliterate :: Transliterator -> Text -> Text
transliterate Transliterator
tr Text
txt = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ Transliterator -> Text -> IO Text
IO.transliterate Transliterator
tr Text
txt