transliterate-ferris

Rust Library to transliterate between scripts.

Issues

  1. Outrageous build time (36 seconds!!!)
    1. I thought removing the serde and json dependencies and reading from data.rs would improve the build time but it made it much much worse.
    2. The code does run a bit faster with this.
    3. rust-analyzer crashing on vs-code due to this.
  2. ~40 millisecond vs ~120 millisecond by aksharamukha-python on the same conversion. (Can be made even better)
  3. Too many ugly nested code blocks.
  4. No tests so changes can have unintended consequences.

Despite these issues it seems sufficient for basic conversion requirement.

Setup and Usage

git clone https://github.com/MSSRPRAD/ transliterate-ferris.git

cd transliterate-ferris

time cargo run --release 1>out.txt 2>error.txt

out.txt contains the output. error.txt contains the warnings and error messages emmitted by the program.

main.rs contains a sort of 'demo'. The input text is given by:

let input: String = "अस्त्य् उत्तरस्यां दिशि देवतात्मा हिमालयो नाम नगाधिराजः । पूर्वापरौ तोयनिधी विगाह्य स्थितः पृथिव्या इव मानदण्डः ॥" .to_string();

You can change it to try different test cases.

The output generated for the above input text was:

"asty uttarasyAM diSi devatAtmA himAlayo nAma nagADirAjaH .\n pUrvAparO toyaniDI vigAhya sTitaH pfTivyA iva mAnadaRqaH .."

NOTE

Some conversions that that I have tested (Need to test more) :

Many more transliterations between scripts not mentioned here can be achieved indirectly (eg: telugu->devanagari = telugu->slp1->devanagari)

| source key | destination key | function | | ---------- | --------------- | ------------------------ | | devanagari | slp1 | convertindictoroman() | | devanagari | iast | convertindictoroman() | | devanagari | hk | convertindictoroman() | | telugu | slp1 | convertindictoroman() | | telugu | iast | convertindictoroman() | | telugu | hk | convertindictoroman() | | kannada | slp1 | convertindictoroman() | | kannada | iast | convertindictoroman() | | kannada | hk | convertindictoroman() | | slp1 | devanagari | convertromantoindic() | | slp1 | telugu | convertromantoindic() | | slp1 | kannada | convertromantoindic() | | slp1 | itrans | convertromantoroman() | | iast | slp1 | convertromantoroman() | | slp1 | iast | convertromantoroman() | | iast | slp1 | convertromantoroman() | | iast | itrans | convertromantoroman() | | iast | hk | convertromantoroman() | | devanagari | telugu | convertromantoroman() | | telugu | devanagari | convertromantoroman() | | devanagari | kannada | convertromantoroman() | | kannada | devanagari | convertromantoroman() | | kannada | telugu | convertromantoroman() | | telugu | kannada | convertromantoroman() |

Primary Focus was transliterating between devanagari to slp1 as many programs require input in slp1 and rust has no transliteration library from devanagari -> slp1 yet. It turned out making the convertromantoindic() and convertromantoroman() was not much different from this so I did that too.