defmodule Persian do @moduledoc """ Convert word to persian. use Persian.fix/1 """ @corrections [ %{ list: ["؆","؇","؈","؉","؊","؍","؎","ؐ","ؑ","ؒ","ؓ","ؔ","ؕ", "ؖ","ؘ","ؙ","ؚ","؞","ٖ","ٗ","٘","ٙ","ٚ","ٛ","ٜ","ٝ","ٞ","ٟ","٪", "٬","٭","ہ","ۂ","ۃ","۔","ۖ","ۗ","ۘ","ۙ","ۚ","ۛ","ۜ","۞","۟","۠", "ۡ","ۢ","ۣ","ۤ","ۥ","ۦ","ۧ","ۨ","۩","۪","۫","۬","ۭ","ۮ","ۯ","ﮧ", "﮲","﮳","﮴","﮵","﮶","﮷","﮸","﮹","﮺","﮻","﮼","﮽","﮾","﮿","﯀","﯁","ﱞ", "ﱟ","ﱠ","ﱡ","ﱢ","ﱣ","ﹰ","ﹱ","ﹲ","ﹳ","ﹴ","ﹶ","ﹷ","ﹸ","ﹹ","ﹺ","ﹻ","ﹼ","ﹽ", "ﹾ","ﹿ"], rep: ""}, %{list: ["أ","إ","ٱ","ٲ","ٳ","ٵ","ݳ","ݴ","ﭐ","ﭑ","ﺃ","ﺄ","ﺇ","ﺈ", "ﺍ","ﺎ","𞺀","ﴼ","ﴽ","𞸀"], rep: "ا"}, %{list: ["ٮ","ݕ","ݖ","ﭒ","ﭓ","ﭔ","ﭕ","ﺏ","ﺐ","ﺑ","ﺒ","𞸁","𞸜", "𞸡","𞹡","𞹼","𞺁","𞺡"], rep: "ب"}, %{list: ["ڀ","ݐ","ݔ","ﭖ","ﭗ","ﭘ","ﭙ","ﭚ","ﭛ","ﭜ","ﭝ"], rep: "پ"}, %{list: ["ٹ","ٺ","ٻ","ټ","ݓ","ﭞ","ﭟ","ﭠ","ﭡ","ﭢ","ﭣ","ﭤ","ﭥ", "ﭦ","ﭧ","ﭨ","ﭩ","ﺕ","ﺖ","ﺗ","ﺘ","𞸕","𞸵","𞹵","𞺕","𞺵"], rep: "ت"}, %{list: ["ٽ","ٿ","ݑ","ﺙ","ﺚ","ﺛ","ﺜ","𞸖","𞸶","𞹶","𞺖","𞺶"], rep: "ث"}, %{list: ["ڃ","ڄ","ﭲ","ﭳ","ﭴ","ﭵ","ﭶ","ﭷ","ﭸ","ﭹ","ﺝ","ﺞ","ﺟ", "ﺠ","𞸂","𞸢","𞹂","𞹢","𞺂","𞺢"], rep: "ج"}, %{list: ["ڇ","ڿ","ݘ","ﭺ","ﭻ","ﭼ","ﭽ","ﭾ","ﭿ","ﮀ","ﮁ", "𞸃","𞺃"], rep: "چ"}, %{list: ["ځ","ݮ","ݯ","ݲ","ݼ","ﺡ","ﺢ","ﺣ","ﺤ","𞸇","𞸧","𞹇","𞹧", "𞺇","𞺧"], rep: "ح"}, %{list: ["ڂ","څ","ݗ","ﺥ","ﺦ","ﺧ","ﺨ","𞸗","𞸷","𞹗","𞹷","𞺗","𞺷"], rep: "خ"}, %{list: ["ڈ","ډ","ڊ","ڌ","ڍ","ڎ","ڏ","ڐ","ݙ","ݚ","ﺩ","ﺪ","𞺣","ﮂ", "ﮃ","ﮈ","ﮉ"], rep: "د"}, %{list: ["ﱛ","ﱝ","ﺫ","ﺬ","𞸘","𞺘","𞺸","ﮄ","ﮅ","ﮆ","ﮇ"], rep: "ذ"}, %{list: ["٫","ڑ","ڒ","ړ","ڔ","ڕ","ږ","ݛ","ݬ","ﮌ","ﮍ","ﱜ","ﺭ","ﺮ", "𞸓","𞺓","𞺳"], rep: "ر"}, %{list: ["ڗ","ڙ","ݫ","ݱ","ﺯ","ﺰ","𞸆","𞺆","𞺦"], rep: "ز"}, %{list: ["ﮊ","ﮋ","ژ"], rep: "ژ"}, %{list: ["ښ","ݽ","ݾ","ﺱ","ﺲ","ﺳ","ﺴ","𞸎","𞸮","𞹎","𞹮","𞺎","𞺮"], rep: "س"}, %{list: ["ڛ","ۺ","ݜ","ݭ","ݰ","ﺵ","ﺶ","ﺷ","ﺸ","𞸔","𞸴","𞹔","𞹴", "𞺔","𞺴"], rep: "ش"}, %{list: ["ڝ","ﺹ","ﺺ","ﺻ","ﺼ","𞸑","𞹑","𞸱","𞹱","𞺑","𞺱"], rep: "ص"}, %{list: ["ڞ","ۻ","ﺽ","ﺾ","ﺿ","ﻀ","𞸙","𞸹","𞹙","𞹹","𞺙","𞺹"], rep: "ض"}, %{list: ["ﻁ","ﻂ","ﻃ","ﻄ","𞸈","𞹨","𞺈","𞺨"], rep: "ط"}, %{list: ["ڟ","ﻅ","ﻆ","ﻇ","ﻈ","𞸚","𞹺","𞺚","𞺺"], rep: "ظ"}, %{list: ["؏","ڠ","ﻉ","ﻊ","ﻋ","ﻌ","𞸏","𞸯","𞹏","𞹯","𞺏","𞺯"], rep: "ع"}, %{list: ["ۼ","ݝ","ݞ","ݟ","ﻍ","ﻎ","ﻏ","ﻐ","𞸛","𞸻","𞹛","𞹻","𞺛", "𞺻"], rep: "غ"}, %{list: ["؋","ڡ","ڢ","ڣ","ڤ","ڥ","ڦ","ݠ","ݡ","ﭪ","ﭫ","ﭬ","ﭭ", "ﭮ","ﭯ","ﭰ","ﭱ","ﻑ","ﻒ","ﻓ","ﻔ","𞸐","𞸞","𞸰","𞹰","𞹾","𞺐","𞺰"], rep: "ف"}, %{list: ["ٯ","ڧ","ڨ","ﻕ","ﻖ","ﻗ","ﻘ","𞸒","𞸟","𞸲","𞹒","𞹟","𞹲", "𞺒","𞺲","؈"], rep: "ق"}, %{list: ["ػ","ؼ","ك","ڪ","ګ","ڬ","ڭ","ڮ","ݢ","ݣ","ݤ","ݿ","ﮎ", "ﮏ","ﮐ","ﮑ","ﯓ","ﯔ","ﯕ","ﯖ","ﻙ","ﻚ","ﻛ","ﻜ","𞸊","𞸪","𞹪"], rep: "ک"}, %{list: ["ڰ","ڱ","ڲ","ڳ","ڴ","ﮒ","ﮓ","ﮔ","ﮕ","ﮖ","ﮗ","ﮘ","ﮙ","ﮚ", "ﮛ","ﮜ","ﮝ"], rep: "گ"}, %{list: ["ڵ","ڶ","ڷ","ڸ","ݪ","ﻝ","ﻞ","ﻟ","ﻠ","𞸋","𞸫","𞹋","𞺋", "𞺫"], rep: "ل"}, %{list: ["۾","ݥ","ݦ","ﻡ","ﻢ","ﻣ","ﻤ","𞸌","𞸬","𞹬","𞺌","𞺬"], rep: "م"}, %{list: ["ڹ","ں","ڻ","ڼ","ڽ","ݧ","ݨ","ݩ","ﮞ","ﮟ","ﮠ","ﮡ","ﻥ","ﻦ", "ﻧ","ﻨ","𞸍","𞸝","𞸭","𞹍","𞹝","𞹭","𞺍","𞺭"], rep: "ن"}, %{list: ["ؤ","ٶ","ٷ","ۄ","ۅ","ۆ","ۇ","ۈ","ۉ","ۊ","ۋ","ۏ","ݸ","ݹ", "ﯗ","ﯘ","ﯙ","ﯚ","ﯛ","ﯜ","ﯝ","ﯞ","ﯟ","ﯠ","ﯡ","ﯢ","ﯣ","ﺅ","ﺆ","ﻭ","ﻮ", "𞸅","𞺅","𞺥"], rep: "و"}, %{list: ["ة","ھ","ۀ","ە","ۿ","ﮤ","ﮥ","ﮦ","ﮩ","ﮨ","ﮪ","ﮫ","ﮬ","ﮭ", "ﺓ","ﺔ","ﻩ","ﻪ","ﻫ","ﻬ","𞸤","𞹤","𞺄"], rep: "ه"}, %{list: ["ؠ","ئ","ؽ","ؾ","ؿ","ى","ي","ٸ","ۍ","ێ","ې","ۑ","ے","ۓ", "ݵ","ݶ","ݷ","ݺ","ݻ","ﮢ","ﮣ","ﮮ","ﮯ","ﮰ","ﮱ","ﯤ","ﯥ","ﯦ","ﯧ","ﯨ", "ﯩ","ﯼ","ﯽ","ﯾ","ﯿ","ﺉ","ﺊ","ﺋ","ﺌ","ﻯ","ﻰ","ﻱ","ﻲ","ﻳ","ﻴ","𞸉","𞸩", "𞹉","𞹩","𞺉","𞺩"], rep: "ی"}, %{list: ["ٴ","۽","ﺀ"], rep: "ء"}, %{list: ["ﻵ","ﻶ","ﻷ","ﻸ","ﻹ","ﻺ","ﻻ","ﻼ"], rep: "لا"}] defp fix_char(char) do case (@corrections |> Enum.filter(fn(data) -> data.list |> Enum.find_index(fn(c) -> c == char end) != nil end) |> List.last) do nil -> char [] -> char l -> l.rep end end defp get_word_chars(word) do for i <- 1..(word |> String.length) do word |> String.slice(i-1, 1) end |> Enum.map(fn(x) -> x |> fix_char end) end def fix(word) do word |> get_word_chars |> Enum.join end end