#!/usr/bin/perl # # linek # # Copyright (C) 2007 Sridhar M.A. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #use strict ; #{{{ascii_varnamala definition my %asc_varnamala = ( #{{{svaragalu "M" => chr(65), # anusvara "H" => chr(66), # visarga "a" => chr(67), # svaragalu "A" => chr(68), "i" => chr(69), "I" => chr(70), "u" => chr(71), "U" => chr(72), "R" => chr(73) . chr(196), "RU" => chr(73) . chr(198), "e" => chr(74), "E" => chr(75), "Y" => chr(76), "o" => chr(77), "O" => chr(78), "V" => chr(79), #}}} # # vyanjanagalu # #{{{ka "kf" => chr(80) . chr(239), "k" => chr(80) . chr(192), "kA" => chr(80) . chr(193), "ki" => chr(81), "kI" => chr(81) . chr(195), "ku" => chr(80) . chr(192) . chr(196), "kU" => chr(80) . chr(192) . chr(198), "kR" => chr(80) . chr(192) . chr(200), "kRX" => chr(80) . chr(192) . chr(241), "ke" => chr(80) . chr(201), "kE" => chr(80) . chr(201) . chr(195), "kY" => chr(80) . chr(201) . chr(202), "ko" => chr(80) . chr(201) . chr(198), "kO" => chr(80) . chr(201) . chr(198) . chr(195), "kV" => chr(80) . chr(203), #}}} #{{{Ka "Kf" => chr(83) . chr(239), # Ka "K" => chr(82), "KA" => chr(83) . chr(193), "Ki" => chr(84), "KI" => chr(84) . chr(195), "Ku" => chr(82) . chr(196), "KU" => chr(82) . chr(198), "KR" => chr(82) . chr(200), "KRX" => chr(82) . chr(241), "Ke" => chr(83) . chr(201), "KE" => chr(83) . chr(201) . chr(195), "KY" => chr(83) . chr(201) . chr(202), "Ko" => chr(83) . chr(201) . chr(198), "KO" => chr(83) . chr(201) . chr(198) . chr(195), "KV" => chr(83) . chr(203), #}}} #{{{ga "gf" => chr(85) . chr(239), # ga "g" => chr(85) . chr(192), "gA" => chr(85) . chr(193), "gi" => chr(86), "gI" => chr(86) . chr(195), "gu" => chr(85) . chr(192) . chr(196), "gU" => chr(85) . chr(192) . chr(198), "gR" => chr(85) . chr(192) . chr(200), "gRX" => chr(85) . chr(192) . chr(241), "ge" => chr(85) . chr(201), "gE" => chr(85) . chr(201) . chr(195), "gY" => chr(85) . chr(201) . chr(202), "go" => chr(85) . chr(201) . chr(198), "gO" => chr(85) . chr(201) . chr(198) . chr(195), "gV" => chr(85) . chr(203), #}}} #{{{Ga "Gf" => chr(87) . chr(239), # Ga "G" => chr(87) . chr(192), "GA" => chr(87) . chr(193), "Gi" => chr(88), "GI" => chr(88) . chr(195), "Gu" => chr(87) . chr(192) . chr(196), "GU" => chr(87) . chr(192) . chr(198), "GR" => chr(87) . chr(192) . chr(200), "GRX" => chr(87) . chr(192) . chr(241), "Ge" => chr(87) . chr(201), "GE" => chr(87) . chr(201) . chr(195), "GY" => chr(87) . chr(201) . chr(202), "Go" => chr(87) . chr(201) . chr(198), "GO" => chr(87) . chr(201) . chr(198) . chr(195), "GV" => chr(87) . chr(203), #}}} #{{{Z - kavargada anunAsika "Zf" => chr(89) . chr(239), "Z" => chr(89), "ZA" => chr(89) . chr(193), "Zi" => chr(89) . chr(194), "ZI" => chr(89) . chr(194) . chr(195), "Zu" => chr(89) . chr(196), "ZU" => chr(89) . chr(198), "ZR" => chr(89) . chr(200), "ZRX" => chr(89) . chr(241), "Ze" => chr(89) . chr(201), "ZE" => chr(89) . chr(201) . chr(195), "ZY" => chr(89) . chr(201) . chr(202), "Zo" => chr(89) . chr(201) . chr(198), "ZO" => chr(89) . chr(201) . chr(198) . chr(195), "ZV" => chr(89) . chr(203), #}}} #{{{ca "cf" => chr(90) . chr(239), # ca "c" => chr(90) . chr(192), "cA" => chr(90) . chr(193), "ci" => chr(97), "cI" => chr(97) . chr(195), "cu" => chr(90) . chr(192) . chr(196), "cU" => chr(90) . chr(192) . chr(198), "cR" => chr(90) . chr(192) . chr(200), "cRX" => chr(90) . chr(192) . chr(241), "ce" => chr(90) . chr(201), "cE" => chr(90) . chr(201) . chr(195), "cY" => chr(90) . chr(201) . chr(202), "co" => chr(90) . chr(201) . chr(198), "cO" => chr(90) . chr(201) . chr(198) . chr(195), "cV" => chr(90) . chr(203), #}}} #{{{Cha "Cf" => chr(98) . chr(239), # Ca "C" => chr(98) . chr(192), "CA" => chr(98) . chr(193), "Ci" => chr(99), "CI" => chr(99) . chr(195), "Cu" => chr(98) . chr(192) . chr(196), "CU" => chr(98) . chr(192) . chr(198), "CR" => chr(98) . chr(192) . chr(200), "CRX" => chr(98) . chr(192) . chr(241), "Ce" => chr(98) . chr(201), "CE" => chr(98) . chr(201) . chr(195), "CY" => chr(98) . chr(201) . chr(202), "Co" => chr(98) . chr(201) . chr(198), "CO" => chr(98) . chr(201) . chr(198) . chr(195), "CV" => chr(98) . chr(203), #}}} #{{{ja "jf" => chr(101) . chr(239), # ja "j" => chr(100), "jA" => chr(101) . chr(193), "ji" => chr(102), "jI" => chr(102) . chr(195), "ju" => chr(100) . chr(196), "jU" => chr(100) . chr(198), "jR" => chr(100) . chr(200), "jRX" => chr(100) . chr(241), "je" => chr(101) . chr(201), "jE" => chr(101) . chr(201) . chr(195), "jY" => chr(101) . chr(201) . chr(202), "jo" => chr(101) . chr(201) . chr(198), "jO" => chr(101) . chr(201) . chr(198) . chr(195), "jV" => chr(101) . chr(203), #}}} #{{{zha "jXf" => chr(101) . chr(243) . chr(239), # jha "jX" => chr(100) . chr(251), "jXA" => chr(101) . chr(243) . chr(193), "jXi" => chr(102) . chr(251), "jXI" => chr(102) . chr(251) . chr(195), "jXu" => chr(100) . chr(251) . chr(196), "jXU" => chr(100) . chr(251) . chr(198), "jXR" => chr(100) . chr(251) . chr(200), "jXRX" => chr(100) . chr(251) . chr(241), "jXe" => chr(101) . chr(243) . chr(201), "jXE" => chr(101) . chr(243) . chr(201) . chr(195), "jXY" => chr(101) . chr(243) . chr(201) . chr(202), "jXo" => chr(101) . chr(243) . chr(201) . chr(198), "jXO" => chr(101) . chr(243) . chr(201) . chr(198) . chr(195), "jXV" => chr(101) . chr(243) . chr(203), #}}} #{{{Ja "Jf" => chr(103) . chr(192) . chr(104) . chr(105) . chr(239), # Ja "J" => chr(103) . chr(192) . chr(104) . chr(196), "JA" => chr(103) . chr(192) . chr(104) . chr(105) . chr(193), "Ji" => chr(106) . chr(104) . chr(196), "JI" => chr(106) . chr(104) . chr(196) . chr(195), "Ju" => chr(103) . chr(192) . chr(104) . chr(196) . chr(196), "JU" => chr(103) . chr(192) . chr(104) . chr(196) . chr(198), "JR" => chr(103) . chr(192) . chr(104) . chr(196) . chr(200), "JRX" => chr(103) . chr(192) . chr(104) . chr(196) . chr(241), "Je" => chr(103) . chr(201) . chr(104) . chr(196), "JE" => chr(103) . chr(201) . chr(104) . chr(196) . chr(195), "JY" => chr(103) . chr(201) . chr(104) . chr(196) . chr(202), "Jo" => chr(103) . chr(201) . chr(104) . chr(198), "JO" => chr(103) . chr(201) . chr(104) . chr(198) . chr(195), "JV" => chr(103) . chr(192) . chr(104) . chr(105) . chr(203), #}}} #{{{z - cavargada anunAsika "zf" => chr(107) . chr(239), "z" => chr(107), "zA" => chr(107) . chr(193), "zi" => chr(107) . chr(194), "zI" => chr(107) . chr(194) . chr(195), "zu" => chr(107) . chr(196), "zU" => chr(107) . chr(198), "zR" => chr(107) . chr(200), "zRX" => chr(107) . chr(241), "ze" => chr(107) . chr(201), "zE" => chr(107) . chr(201) . chr(195), "zY" => chr(107) . chr(201) . chr(202), "zo" => chr(107) . chr(201) . chr(198), "zO" => chr(107) . chr(201) . chr(198) . chr(195), "zV" => chr(107) . chr(203), #}}} #{{{Ta "qf" => chr(109) . chr(239), "q" => chr(108), "qA" => chr(109) . chr(193), "qi" => chr(110), "qI" => chr(110) . chr(195), "qu" => chr(108) . chr(196), "qU" => chr(108) . chr(198), "qR" => chr(108) . chr(200), "qRX" => chr(108) . chr(241), "qe" => chr(109) . chr(201), "qE" => chr(109) . chr(201) . chr(195), "qY" => chr(109) . chr(201) . chr(202), "qo" => chr(109) . chr(201) . chr(198), "qO" => chr(109) . chr(201) . chr(198) . chr(195), "qV" => chr(109) . chr(203), #}}} #{{{Tha "Qf" => chr(111) . chr(239), "Q" => chr(111) . chr(192), "QA" => chr(111) . chr(193), "Qi" => chr(112), "QI" => chr(112) . chr(195), "Qu" => chr(111) . chr(192) . chr(196), "QU" => chr(111) . chr(192) . chr(198), "QR" => chr(111) . chr(192) . chr(200), "QRX" => chr(111) . chr(192) . chr(241), "Qe" => chr(111) . chr(201), "QE" => chr(111) . chr(201) . chr(195), "QY" => chr(111) . chr(201) . chr(202), "Qo" => chr(111) . chr(201) . chr(198), "QO" => chr(111) . chr(201) . chr(198) . chr(195), "QV" => chr(111) . chr(203), #}}} #{{{Da "wf" => chr(113) . chr(239), "w" => chr(113) . chr(192), "wA" => chr(113) . chr(193), "wi" => chr(114), "wI" => chr(114) . chr(195), "wu" => chr(113) . chr(192) . chr(196), "wU" => chr(113) . chr(192) . chr(198), "wR" => chr(113) . chr(192) . chr(200), "wRX" => chr(113) . chr(192) . chr(241), "we" => chr(113) . chr(201), "wE" => chr(113) . chr(201) . chr(195), "wY" => chr(113) . chr(201) . chr(202), "wo" => chr(113) . chr(201) . chr(198), "wO" => chr(113) . chr(201) . chr(198) . chr(195), "wV" => chr(113) . chr(203), #}}} #{{{Dha "Wf" => chr(113) . chr(115) . chr(239), "W" => chr(113) . chr(115) . chr(192), "WA" => chr(113) . chr(115) . chr(193), "Wi" => chr(114) . chr(252), "WI" => chr(114) . chr(252) . chr(195), "Wu" => chr(113) . chr(115) . chr(192) . chr(196), "WU" => chr(113) . chr(115) . chr(192) . chr(198), "WR" => chr(113) . chr(115) . chr(192) . chr(200), "WRX" => chr(113) . chr(115) . chr(192) . chr(241), "We" => chr(113) . chr(115) . chr(201), "WE" => chr(113) . chr(115) . chr(201) . chr(195), "WY" => chr(113) . chr(115) . chr(201) . chr(202), "Wo" => chr(113) . chr(115) . chr(201) . chr(198), "WO" => chr(113) . chr(115) . chr(201) . chr(198) . chr(195), "WV" => chr(113) . chr(115) . chr(203), #}}} #{{{Na "Nf" => chr(117) . chr(239), "N" => chr(116), "NA" => chr(117) . chr(193), "Ni" => chr(116) . chr(194), "NI" => chr(116) . chr(194) . chr(195), "Nu" => chr(116) . chr(196), "NU" => chr(116) . chr(198), "NR" => chr(116) . chr(200), "NRX" => chr(116) . chr(241), "Ne" => chr(117) . chr(201), "NE" => chr(117) . chr(201) . chr(195), "NY" => chr(117) . chr(201) . chr(202), "No" => chr(117) . chr(201) . chr(198), "NO" => chr(117) . chr(201) . chr(198) . chr(195), "NV" => chr(117) . chr(203), #}}} #{{{ta "tf" => chr(118) . chr(239), "t" => chr(118) . chr(192), "tA" => chr(118) . chr(193), "ti" => chr(119), "tI" => chr(119) . chr(195), "tu" => chr(118) . chr(192) . chr(196), "tU" => chr(118) . chr(192) . chr(198), "tR" => chr(118) . chr(192) . chr(200), "tRX" => chr(118) . chr(192) . chr(241), "te" => chr(118) . chr(201), "tE" => chr(118) . chr(201) . chr(195), "tY" => chr(118) . chr(201) . chr(202), "to" => chr(118) . chr(201) . chr(198), "tO" => chr(118) . chr(201) . chr(198) . chr(195), "tV" => chr(118) . chr(203), #}}} #{{{tha "Tf" => chr(120) . chr(239), "T" => chr(120) . chr(192), "TA" => chr(120) . chr(193), "Ti" => chr(121), "TI" => chr(121) . chr(195), "Tu" => chr(120) . chr(192) . chr(196), "TU" => chr(120) . chr(192) . chr(198), "TR" => chr(120) . chr(192) . chr(200), "TRX" => chr(120) . chr(192) . chr(241), "Te" => chr(120) . chr(201), "TE" => chr(120) . chr(201) . chr(195), "TY" => chr(120) . chr(201) . chr(202), "To" => chr(120) . chr(201) . chr(198), "TO" => chr(120) . chr(201) . chr(198) . chr(195), "TV" => chr(120) . chr(203), #}}} #{{{da "df" => chr(122) . chr(239), "d" => chr(122) . chr(192), "dA" => chr(122) . chr(193), "di" => chr(162), "dI" => chr(162) . chr(195), "du" => chr(122) . chr(192) . chr(196), "dU" => chr(122) . chr(192) . chr(198), "dR" => chr(122) . chr(192) . chr(200), "dRX" => chr(122) . chr(192) . chr(241), "de" => chr(122) . chr(201), "dE" => chr(122) . chr(201) . chr(195), "dY" => chr(122) . chr(201) . chr(202), "do" => chr(122) . chr(201) . chr(198), "dO" => chr(122) . chr(201) . chr(198) . chr(195), "dV" => chr(122) . chr(203), #}}} #{{{dha "Df" => chr(122) . chr(115) . chr(239), "D" => chr(122) . chr(115) . chr(192), "DA" => chr(122) . chr(115) . chr(193), "Di" => chr(162) . chr(252), "DI" => chr(162) . chr(252) . chr(195), "Du" => chr(122) . chr(115) . chr(192) . chr(196), "DU" => chr(122) . chr(115) . chr(192) . chr(198), "DR" => chr(122) . chr(115) . chr(192) . chr(200), "DRX" => chr(122) . chr(115) . chr(192) . chr(241), "De" => chr(122) . chr(115) . chr(201), "DE" => chr(122) . chr(115) . chr(201) . chr(195), "DY" => chr(122) . chr(115) . chr(201) . chr(202), "Do" => chr(122) . chr(115) . chr(201) . chr(198), "DO" => chr(122) . chr(115) . chr(201) . chr(198) . chr(195), "DV" => chr(122) . chr(115) . chr(203), #}}} #{{{na "nf" => chr(163) . chr(239), "n" => chr(163) . chr(192), "nA" => chr(163) . chr(193), "ni" => chr(164), "nI" => chr(164) . chr(195), "nu" => chr(163) . chr(192) . chr(196), "nU" => chr(163) . chr(192) . chr(198), "nR" => chr(163) . chr(192) . chr(200), "nRX" => chr(163) . chr(192) . chr(241), "ne" => chr(163) . chr(201), "nE" => chr(163) . chr(201) . chr(195), "nY" => chr(163) . chr(201) . chr(202), "no" => chr(163) . chr(201) . chr(198), "nO" => chr(163) . chr(201) . chr(198) . chr(195), "nV" => chr(163) . chr(203), #}}} #{{{pa "pf" => chr(165) . chr(239), "p" => chr(165) . chr(192), "pA" => chr(165) . chr(193), "pi" => chr(166), "pI" => chr(166) . chr(195), "pu" => chr(165) . chr(192) . chr(197), "pU" => chr(165) . chr(192) . chr(199), "pR" => chr(165) . chr(192) . chr(200), "pRX" => chr(165) . chr(192) . chr(241), "pe" => chr(165) . chr(201), "pE" => chr(165) . chr(201) . chr(195), "pY" => chr(165) . chr(201) . chr(202), "po" => chr(165) . chr(201) . chr(199), "pO" => chr(165) . chr(201) . chr(199) . chr(195), "pV" => chr(165) . chr(203), #}}} #{{{Pa "Pf" => chr(165) . chr(115) . chr(239), "P" => chr(165) . chr(115) . chr(192), "PA" => chr(165) . chr(115) . chr(193), "Pi" => chr(166) . chr(252), "PI" => chr(166) . chr(252) . chr(195), "Pu" => chr(165) . chr(115) . chr(192) . chr(197), "PU" => chr(165) . chr(115) . chr(192) . chr(199), "PR" => chr(165) . chr(115) . chr(192) . chr(200), "PRX" => chr(165) . chr(115) . chr(192) . chr(241), "Pe" => chr(165) . chr(115) . chr(201), "PE" => chr(165) . chr(115) . chr(201) . chr(195), "PY" => chr(165) . chr(115) . chr(201) . chr(202), "Po" => chr(165) . chr(115) . chr(201) . chr(198), "PO" => chr(165) . chr(115) . chr(201) . chr(198) . chr(195), "PV" => chr(165) . chr(115) . chr(203), #}}} #{{{Pha "PXf" => chr(165) . chr(115) . chr(243) . chr(239), "PX" => chr(165) . chr(115) . chr(243) . chr(192), "PXA" => chr(165) . chr(115) . chr(243) . chr(193), "PXi" => chr(166) . chr(251) . chr(252), "PXI" => chr(166) . chr(251) . chr(252) . chr(195), "PXu" => chr(165) . chr(115) . chr(243) . chr(192) . chr(197), "PXU" => chr(165) . chr(115) . chr(243) . chr(192) . chr(199), "PXR" => chr(165) . chr(115) . chr(243) . chr(192) . chr(200), "PXRX" => chr(165) . chr(115) . chr(243) . chr(192) . chr(241), "PXe" => chr(165) . chr(115) . chr(243) . chr(201), "PXE" => chr(165) . chr(115) . chr(243) . chr(201) . chr(195), "PXY" => chr(165) . chr(115) . chr(243) . chr(201) . chr(202), "PXo" => chr(165) . chr(115) . chr(243) . chr(201) . chr(198), "PXO" => chr(165) . chr(115) . chr(243) . chr(201) . chr(198) . chr(195), "PXV" => chr(165) . chr(115) . chr(243) . chr(203), #}}} #{{{ba "bf" => chr(168) . chr(239), "b" => chr(167), "bA" => chr(168) . chr(193), "bi" => chr(169), "bI" => chr(169) . chr(195), "bu" => chr(167) . chr(196), "bU" => chr(167) . chr(198), "bR" => chr(167) . chr(200), "bRX" => chr(167) . chr(241), "be" => chr(168) . chr(201), "bE" => chr(168) . chr(201) . chr(195), "bY" => chr(168) . chr(201) . chr(202), "bo" => chr(168) . chr(201) . chr(198), "bO" => chr(168) . chr(201) . chr(198) . chr(195), "bV" => chr(168) . chr(203), #}}} #{{{Ba "Bf" => chr(168) . chr(115) . chr(239), "B" => chr(168) . chr(115) . chr(192), "BA" => chr(168) . chr(115) . chr(193), "Bi" => chr(169) . chr(252), "BI" => chr(169) . chr(252) . chr(195), "Bu" => chr(168) . chr(115) . chr(192) . chr(196), "BU" => chr(168) . chr(115) . chr(192) . chr(198), "BR" => chr(168) . chr(115) . chr(192) . chr(200), "BRX" => chr(168) . chr(115) . chr(192) . chr(241), "Be" => chr(168) . chr(115) . chr(201), "BE" => chr(168) . chr(115) . chr(201) . chr(195), "BY" => chr(168) . chr(115) . chr(201) . chr(202), "Bo" => chr(168) . chr(115) . chr(201) . chr(198), "BO" => chr(168) . chr(115) . chr(201) . chr(198) . chr(195), "BV" => chr(168) . chr(115) . chr(203), #}}} #{{{ma "mf" => chr(170) . chr(192) . chr(105) . chr(239), "m" => chr(170) . chr(192) . chr(196), "mA" => chr(170) . chr(192) . chr(105) . chr(193), "mi" => chr(171) . chr(196), "mI" => chr(171) . chr(196) . chr(195), "mu" => chr(170) . chr(192) . chr(196) . chr(196), "mU" => chr(170) . chr(192) . chr(196) . chr(198), "mR" => chr(170) . chr(192) . chr(196) . chr(200), "mRX" => chr(170) . chr(192) . chr(196) . chr(241), "me" => chr(170) . chr(201) . chr(196), "mE" => chr(170) . chr(201) . chr(196) . chr(195), "mY" => chr(170) . chr(201) . chr(196) . chr(202), "mo" => chr(170) . chr(201) . chr(198), "mO" => chr(170) . chr(201) . chr(198) . chr(195), "mV" => chr(170) . chr(192) . chr(105) . chr(203), #}}} #{{{ya "yf" => chr(65) . chr(105) . chr(192) . chr(105) . chr(239), "y" => chr(65) . chr(105) . chr(192) . chr(196), "yA" => chr(65) . chr(105) . chr(192) . chr(105) . chr(193), "yi" => chr(172) . chr(196), "yI" => chr(172) . chr(196) . chr(195), "yu" => chr(65) . chr(105) . chr(192) . chr(196) . chr(196), "yU" => chr(65) . chr(105) . chr(192) . chr(196) . chr(198), "yR" => chr(65) . chr(105) . chr(192) . chr(196) . chr(200), "yRX" => chr(65) . chr(105) . chr(192) . chr(196) . chr(241), "ye" => chr(65) . chr(105) . chr(201) . chr(196), "yE" => chr(65) . chr(105) . chr(201) . chr(196) . chr(195), "yY" => chr(65) . chr(105) . chr(201) . chr(196) . chr(202), "yo" => chr(65) . chr(105) . chr(201) . chr(198), "yO" => chr(65) . chr(105) . chr(201) . chr(198) . chr(195), "yV" => chr(65) . chr(105) . chr(192) . chr(105) . chr(203), #}}} #{{{ra "rf" => chr(103) . chr(239), "r" => chr(103) . chr(192), "rA" => chr(103) . chr(193), "ri" => chr(106), "rI" => chr(106) . chr(195), "ru" => chr(103) . chr(192) . chr(196), "rU" => chr(103) . chr(192) . chr(198), "rR" => chr(103) . chr(192) . chr(200), "rRX" => chr(103) . chr(192) . chr(241), "re" => chr(103) . chr(201), "rE" => chr(103) . chr(201) . chr(195), "rY" => chr(103) . chr(201) . chr(202), "ro" => chr(103) . chr(201) . chr(198), "rO" => chr(103) . chr(201) . chr(198) . chr(195), "rV" => chr(103) . chr(203), #}}} #{{{RA "rXf" => chr(190) . chr(245) . chr(239), "rX" => chr(190), "rXA" => chr(190) . chr(245) . chr(193), "rXi" => chr(190) . chr(194), "rXI" => chr(190) . chr(194) . chr(195), "rXu" => chr(190) . chr(196), "rXU" => chr(190) . chr(198), "rXR" => chr(190) . chr(200), "rXRX" => chr(190) . chr(241), "rXe" => chr(190) . chr(245) . chr(201), "rXE" => chr(190) . chr(245) . chr(201) . chr(195), "rXY" => chr(190) . chr(245) . chr(201) . chr(202), "rXo" => chr(190) . chr(245) . chr(201) . chr(198), "rXO" => chr(190) . chr(245) . chr(201) . chr(198) . chr(195), "rXV" => chr(190) . chr(245) . chr(203), #}}} #{{{la "lf" => chr(175) . chr(239), "l" => chr(174), "lA" => chr(175) . chr(193), "li" => chr(176), "lI" => chr(176) . chr(195), "lu" => chr(174) . chr(196), "lU" => chr(174) . chr(198), "lR" => chr(174) . chr(200), "lRX" => chr(174) . chr(241), "le" => chr(175) . chr(201), "lE" => chr(175) . chr(201) . chr(195), "lY" => chr(175) . chr(201) . chr(202), "lo" => chr(175) . chr(201) . chr(198), "lO" => chr(175) . chr(201) . chr(198) . chr(195), "lV" => chr(175) . chr(203), #}}} #{{{va "vf" => chr(170) . chr(239), "v" => chr(170) . chr(192), "vA" => chr(170) . chr(193), "vi" => chr(171), "vI" => chr(171) . chr(195), "vu" => chr(170) . chr(192) . chr(197), "vU" => chr(170) . chr(192) . chr(199), "vR" => chr(170) . chr(192) . chr(200), "vRX" => chr(170) . chr(192) . chr(241), "ve" => chr(170) . chr(201), "vE" => chr(170) . chr(201) . chr(195), "vY" => chr(170) . chr(201) . chr(202), "vo" => chr(170) . chr(201) . chr(199), "vO" => chr(170) . chr(201) . chr(199) . chr(195), "vV" => chr(170) . chr(203), #}}} #{{{sha - shankara "Sf" => chr(177) . chr(239), "S" => chr(177) . chr(192), "SA" => chr(177) . chr(193), "Si" => chr(178), "SI" => chr(178) . chr(195), "Su" => chr(177) . chr(192) . chr(196), "SU" => chr(177) . chr(192) . chr(198), "SR" => chr(177) . chr(192) . chr(200), "SRX" => chr(177) . chr(192) . chr(241), "Se" => chr(177) . chr(201), "SE" => chr(177) . chr(201) . chr(195), "SY" => chr(177) . chr(201) . chr(202), "So" => chr(177) . chr(201) . chr(198), "SO" => chr(177) . chr(201) . chr(198) . chr(195), "SV" => chr(177) . chr(203), #}}} #{{{Sha - Shanmuga "xf" => chr(181) . chr(239), "x" => chr(181) . chr(192), "xA" => chr(181) . chr(193), "xi" => chr(182), "xI" => chr(182) . chr(195), "xu" => chr(181) . chr(192) . chr(196), "xU" => chr(181) . chr(192) . chr(198), "xR" => chr(181) . chr(192) . chr(200), "xRX" => chr(181) . chr(192) . chr(241), "xe" => chr(181) . chr(201), "xE" => chr(181) . chr(201) . chr(195), "xY" => chr(181) . chr(201) . chr(202), "xo" => chr(181) . chr(201) . chr(198), "xO" => chr(181) . chr(201) . chr(198) . chr(195), "xV" => chr(181) . chr(203), #}}} #{{{sa "sf" => chr(184) . chr(239), "s" => chr(184) . chr(192), "sA" => chr(184) . chr(193), "si" => chr(185), "sI" => chr(185) . chr(195), "su" => chr(184) . chr(192) . chr(196), "sU" => chr(184) . chr(192) . chr(198), "sR" => chr(184) . chr(192) . chr(200), "sRX" => chr(184) . chr(192) . chr(241), "se" => chr(184) . chr(201), "sE" => chr(184) . chr(201) . chr(195), "sY" => chr(184) . chr(201) . chr(202), "so" => chr(184) . chr(201) . chr(198), "sO" => chr(184) . chr(201) . chr(198) . chr(195), "sV" => chr(184) . chr(203), #}}} #{{{ha "hf" => chr(186) . chr(239), "h" => chr(186) . chr(192), "hA" => chr(186) . chr(193), "hi" => chr(187), "hI" => chr(187) . chr(195), "hu" => chr(186) . chr(192) . chr(196), "hU" => chr(186) . chr(192) . chr(198), "hR" => chr(186) . chr(192) . chr(200), "hRX" => chr(186) . chr(192) . chr(241), "he" => chr(186) . chr(201), "hE" => chr(186) . chr(201) . chr(195), "hY" => chr(186) . chr(201) . chr(202), "ho" => chr(186) . chr(201) . chr(198), "hO" => chr(186) . chr(201) . chr(198) . chr(195), "hV" => chr(186) . chr(203), #}}} #{{{La "Lf" => chr(188) . chr(239), # La "L" => chr(188) . chr(192), "LA" => chr(188) . chr(193), "Li" => chr(189), "LI" => chr(189) . chr(195), "Lu" => chr(188) . chr(192) . chr(196), "LU" => chr(188) . chr(192) . chr(198), "LR" => chr(188) . chr(192) . chr(200), "LRX" => chr(188) . chr(192) . chr(241), "Le" => chr(188) . chr(201), "LE" => chr(188) . chr(201) . chr(195), "LY" => chr(188) . chr(201) . chr(202), "Lo" => chr(188) . chr(201) . chr(198), "LO" => chr(188) . chr(201) . chr(198) . chr(195), "LV" => chr(188) . chr(203), #}}} #{{{LA "LXf" => chr(191) . chr(245) . chr(239), "LX" => chr(191), "LXA" => chr(191) . chr(245) . chr(193), "LXi" => chr(191) . chr(194), "LXI" => chr(191) . chr(194) . chr(195), "LXu" => chr(191) . chr(196), "LXU" => chr(191) . chr(198), "LXR" => chr(191) . chr(200), "LXRX" => chr(191) . chr(241), "LXe" => chr(191) . chr(245) . chr(201), "LXE" => chr(191) . chr(245) . chr(201) . chr(195), "LXY" => chr(191) . chr(245) . chr(201) . chr(202), "LXo" => chr(191) . chr(245) . chr(201) . chr(198), "LXO" => chr(191) . chr(245) . chr(201) . chr(198) . chr(195), "LXV" => chr(191) . chr(245) . chr(203), #}}} #{{{ Ottaksharagalu # "fk" => chr(204), "fK" => chr(205), "fg" => chr(206), "fG" => chr(207), "fZ" => chr(208), "fc" => chr(209), "fC" => chr(210), "fj" => chr(211), "fJ" => chr(212), "fz" => chr(213), "fq" => chr(214), "fQ" => chr(215), "fw" => chr(216), "fW" => chr(217), "fN" => chr(218), "ft" => chr(219), "fT" => chr(220), "fd" => chr(221), "fD" => chr(222), "fn" => chr(223), "fp" => chr(224), "fP" => chr(225), "fb" => chr(226), "fB" => chr(227), "fm" => chr(228), "fy" => chr(229), "fr" => chr(230), "fl" => chr(232), "fv" => chr(233), "fS" => chr(234), "fx" => chr(235), "fs" => chr(236), "fh" => chr(237), "fL" => chr(238), "F" => chr(240), # arkavottu "|" => chr(231), # ra 2ne ottakshara #}}} #{{{ Special # "sX" => chr(132), # avagraha "nX" => chr(242), # nagarapollu "_X" => chr(133), # anudatta "'X" => chr(134), # svarita '"X' => chr(135) # dirgha svarita ); #}}} #}}} #{{{ en2kgp function ################# sub en2kgp { ################# (my $input) = @_ ; #{{{word splitter, analyser and transliterator my @toks = split(//, $input) ; my $ptr = 0 ; my $char = 0 ; my @wrd = () ; my $kgpwrd = "" ; my $count = 0 ; while ($ptr < @toks) { # Is the character not an alphabet if ($toks[$ptr] =~ /[^A-Za-z]/) { $kgpwrd .= $toks[$ptr] ; $ptr++ ; next ; } # Is the character a svara? if ($toks[$ptr] =~ /[aAiIuUReEYoOV]/) { $wrd[$char] = $toks[$ptr] ; $ptr++ ; # Yes. Check for additional chars for RU if (($toks[$ptr-1] eq 'R') and ($toks[$ptr] eq 'U')) { $wrd[$char] .= $toks[$ptr] ; $ptr++ ; } $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; # 'and' bareyalu bekaguva jodane if (($toks[$ptr-1] eq 'A') and ($toks[$ptr] eq 'f') and ($toks[$ptr+1] eq 'y')) { $wrd[$char] = $toks[$ptr] . $toks[$ptr+1] ; $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; $ptr += 2 ; } } # svara mugiyitu # vyanjanave? if ($toks[$ptr] =~ /[kKgGzcCjJZqQwWNtTdDnpPbBmyrlvSxshL]/) { $wrd[$char] = $toks[$ptr] ; $ptr++ ; # Special chars : za, pha, LA, RA, avagraha, nagarapollu if (($toks[$ptr-1] =~ /[jPrLsn]/) and ($toks[$ptr] eq 'X')) { $wrd[$char] .= $toks[$ptr] ; $ptr++ ; } # next 2 chars are ff? if (($toks[$ptr] eq 'f') and ($toks[$ptr+1] eq 'f')) { $wrd[$char] .= $toks[$ptr] ; $ptr += 2 ; $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; } elsif ($toks[$ptr] =~ /[AiIuUReEYoOV]/) { # gunitakshara $wrd[$char] .= $toks[$ptr] ; $ptr++ ; if (($toks[$ptr-1] eq "R") and ($toks[$ptr] eq "X")) { $wrd[$char] .= $toks[$ptr] ; $ptr++ ; } $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; } elsif ($toks[$ptr] eq 'f') { # ottakshara(galu) irabeku my $mnwrd = $toks[$ptr-1] eq 'X' ? $toks[$ptr-2] . $toks[$ptr-1] : $toks[$ptr-1] ; my $o1 = "" ; my $o2 = "" ; my $xx = "" ; my $zz = "" ; # modala ottakshara $o1 = $toks[$ptr] . $toks[$ptr+1] ; $ptr +=2 ; # eradaneyadu if ($toks[$ptr] eq 'f') { if ($toks[$ptr+1] eq 'f') { $mnwrd .= $toks[$ptr+1] ; } elsif ($toks[$ptr+1] eq "r") { # 2nd glyph should be kerned forward a bit $o2 = chr(246) . $asc_varnamala{"|"} ; } else { # 2nd glyph should be kerned forward a bit more $o2 = "f" . $toks[$ptr+1] ; $o2 = chr(247) . $asc_varnamala{$o2} ; } $ptr +=2 ; } # ottaksharakke gunita if ($toks[$ptr] =~/[AiIuUReEYoOV]/) { if ($toks[$ptr] =~ /[AiuUeoV]/) { $mnwrd .= $toks[$ptr] ; $ptr++ ; } else { if ($toks[$ptr] =~ /([IEO])/) { $xx = lc($1) ; $zz = chr(195) ; } if ($toks[$ptr] eq 'R') { # 2nd glyph should be kerned forward a bit $xx = "" ; $zz = chr(246) . chr(248) ; } if ($toks[$ptr] eq 'Y') { # 2nd glyph should be kerned forward a bit $xx = "e" ; $zz = chr(246) . chr(202) ; } $ptr++ ; } } $kgpwrd .= $asc_varnamala{$mnwrd . $xx} . $asc_varnamala{$o1} . $o2 . $zz ; $char++ ; } else { # plain vyanjana ; ottu/gunita illadiruvudu $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; } } if ($toks[$ptr] =~ /[MHF]/) { $wrd[$char] = $toks[$ptr] ; $kgpwrd .= $asc_varnamala{$wrd[$char]} ; $char++ ; $ptr++ ; } elsif ($toks[$ptr] eq "\\") { $kgpwrd .= $toks[$ptr] . $toks[$ptr+1] ; $char++ ; $ptr += 2 ; } # Check for vedic notations if (($toks[$ptr] =~ /['"_]/) and ($toks[$ptr+1] =~ /X/)) { $kgpwrd .= $asc_varnamala{$toks[$ptr].$toks[$ptr+1]} ; $char++ ; $ptr += 2 ; } } #}}} return $kgpwrd ; } #}}} #{{{ utf_varnamala map definitions my $HAL = chr(0x0CCD) ; my $ZWJ = chr(0x200D) ; my $ZWNJ = chr(0x200C) ; my $NUKTA = chr(0x0CBC) ; my %utf_varnamala = ( #{{{svaragalu "M" => chr(0x0C82), # anusvara "H" => chr(0x0C83), # visarga "a" => chr(0x0C85), # svaragalu "A" => chr(0x0C86), "i" => chr(0x0C87), "I" => chr(0x0C88), "u" => chr(0x0C89), "U" => chr(0x0C8A), "R" => chr(0x0C8B), "RU" => chr(0x0CE0), "e" => chr(0x0C8E), "E" => chr(0x0C8F), "Y" => chr(0x0C90), "o" => chr(0x0C92), "O" => chr(0x0C93), "V" => chr(0x0C94), #}}} # #vyanjanagalu # #{{{ ka "kf" => chr(0x0C95) . $HAL, "k" => chr(0x0C95), "kA" => chr(0x0C95) . chr(0x0CBE), "ki" => chr(0x0C95) . chr(0x0CBF), "kI" => chr(0x0C95) . chr(0x0CC0), "ku" => chr(0x0C95) . chr(0x0CC1), "kU" => chr(0x0C95) . chr(0x0CC2), "kR" => chr(0x0C95) . chr(0x0CC3), "kRX" => chr(0x0C95) . chr(0x0CC4), "ke" => chr(0x0C95) . chr(0x0CC6), "kE" => chr(0x0C95) . chr(0x0CC7), "kY" => chr(0x0C95) . chr(0x0CC8), "ko" => chr(0x0C95) . chr(0x0CCA), "kO" => chr(0x0C95) . chr(0x0CCB), "kV" => chr(0x0C95) . chr(0x0CCC), #}}} #{{{Ka "Kf" => chr(0x0C96) . $HAL, "K" => chr(0x0C96), "KA" => chr(0x0C96) . chr(0x0CBE), "Ki" => chr(0x0C96) . chr(0x0CBF), "KI" => chr(0x0C96) . chr(0x0CC0), "Ku" => chr(0x0C96) . chr(0x0CC1), "KU" => chr(0x0C96) . chr(0x0CC2), "KR" => chr(0x0C96) . chr(0x0CC3), "KRX" => chr(0x0C96) . chr(0x0CC4), "Ke" => chr(0x0C96) . chr(0x0CC6), "KE" => chr(0x0C96) . chr(0x0CC7), "KY" => chr(0x0C96) . chr(0x0CC8), "Ko" => chr(0x0C96) . chr(0x0CCA), "KO" => chr(0x0C96) . chr(0x0CCB), "KV" => chr(0x0C96) . chr(0x0CCC), #}}} #{{{ga "gf" => chr(0x0C97) . $HAL, "g" => chr(0x0C97), "gA" => chr(0x0C97) . chr(0x0CBE), "gi" => chr(0x0C97) . chr(0x0CBF), "gI" => chr(0x0C97) . chr(0x0CC0), "gu" => chr(0x0C97) . chr(0x0CC1), "gU" => chr(0x0C97) . chr(0x0CC2), "gR" => chr(0x0C97) . chr(0x0CC3), "gRX" => chr(0x0C97) . chr(0x0CC4), "ge" => chr(0x0C97) . chr(0x0CC6), "gE" => chr(0x0C97) . chr(0x0CC7), "gY" => chr(0x0C97) . chr(0x0CC8), "go" => chr(0x0C97) . chr(0x0CCA), "gO" => chr(0x0C97) . chr(0x0CCB), "gV" => chr(0x0C97) . chr(0x0CCC), #}}} #{{{Ga "Gf" => chr(0x0C98) . $HAL, "G" => chr(0x0C98), "GA" => chr(0x0C98) . chr(0x0CBE), "Gi" => chr(0x0C98) . chr(0x0CBF), "GI" => chr(0x0C98) . chr(0x0CC0), "Gu" => chr(0x0C98) . chr(0x0CC1), "GU" => chr(0x0C98) . chr(0x0CC2), "GR" => chr(0x0C98) . chr(0x0CC3), "GRX" => chr(0x0C98) . chr(0x0CC4), "Ge" => chr(0x0C98) . chr(0x0CC6), "GE" => chr(0x0C98) . chr(0x0CC7), "GY" => chr(0x0C98) . chr(0x0CC8), "Go" => chr(0x0C98) . chr(0x0CCA), "GO" => chr(0x0C98) . chr(0x0CCB), "GV" => chr(0x0C98) . chr(0x0CCC), #}}} #{{{Z - kavargada anunAsika "Zf" => chr(0x0C99) . $HAL, "Z" => chr(0x0C99), "ZA" => chr(0x0C99) . chr(0x0CBE), "Zi" => chr(0x0C99) . chr(0x0CBF), "ZI" => chr(0x0C99) . chr(0x0CC0), "Zu" => chr(0x0C99) . chr(0x0CC1), "ZU" => chr(0x0C99) . chr(0x0CC2), "ZR" => chr(0x0C99) . chr(0x0CC3), "ZRX" => chr(0x0C99) . chr(0x0CC4), "Ze" => chr(0x0C99) . chr(0x0CC6), "ZE" => chr(0x0C99) . chr(0x0CC7), "ZY" => chr(0x0C99) . chr(0x0CC8), "Zo" => chr(0x0C99) . chr(0x0CCA), "ZO" => chr(0x0C99) . chr(0x0CCB), "ZV" => chr(0x0C99) . chr(0x0CCC), #}}} #{{{ca "cf" => chr(0x0C9A) . $HAL, "c" => chr(0x0C9A), "cA" => chr(0x0C9A) . chr(0x0CBE), "ci" => chr(0x0C9A) . chr(0x0CBF), "cI" => chr(0x0C9A) . chr(0x0CC0), "cu" => chr(0x0C9A) . chr(0x0CC1), "cU" => chr(0x0C9A) . chr(0x0CC2), "cR" => chr(0x0C9A) . chr(0x0CC3), "cRX" => chr(0x0C9A) . chr(0x0CC4), "ce" => chr(0x0C9A) . chr(0x0CC6), "cE" => chr(0x0C9A) . chr(0x0CC7), "cY" => chr(0x0C9A) . chr(0x0CC8), "co" => chr(0x0C9A) . chr(0x0CCA), "cO" => chr(0x0C9A) . chr(0x0CCB), "cV" => chr(0x0C9A) . chr(0x0CCC), #}}} #{{{Ca "Cf" => chr(0x0C9B) . $HAL, "C" => chr(0x0C9B), "CA" => chr(0x0C9B) . chr(0x0CBE), "Ci" => chr(0x0C9B) . chr(0x0CBF), "CI" => chr(0x0C9B) . chr(0x0CC0), "Cu" => chr(0x0C9B) . chr(0x0CC1), "CU" => chr(0x0C9B) . chr(0x0CC2), "CR" => chr(0x0C9B) . chr(0x0CC3), "CRX" => chr(0x0C9B) . chr(0x0CC4), "Ce" => chr(0x0C9B) . chr(0x0CC6), "CE" => chr(0x0C9B) . chr(0x0CC7), "CY" => chr(0x0C9B) . chr(0x0CC8), "Co" => chr(0x0C9B) . chr(0x0CCA), "CO" => chr(0x0C9B) . chr(0x0CCB), "CV" => chr(0x0C9B) . chr(0x0CCC), #}}} #{{{ja "jf" => chr(0x0C9c) . $HAL, "j" => chr(0x0C9c), "jA" => chr(0x0C9c) . chr(0x0CBE), "ji" => chr(0x0C9c) . chr(0x0CBF), "jI" => chr(0x0C9c) . chr(0x0CC0), "ju" => chr(0x0C9c) . chr(0x0CC1), "jU" => chr(0x0C9c) . chr(0x0CC2), "jR" => chr(0x0C9c) . chr(0x0CC3), "jRX" => chr(0x0C9c) . chr(0x0CC4), "je" => chr(0x0C9c) . chr(0x0CC6), "jE" => chr(0x0C9c) . chr(0x0CC7), "jY" => chr(0x0C9c) . chr(0x0CC8), "jo" => chr(0x0C9c) . chr(0x0CCA), "jO" => chr(0x0C9c) . chr(0x0CCB), "jV" => chr(0x0C9c) . chr(0x0CCC), #}}} #{{{zha "jXf" => chr(0x0C9c) . $ZWJ . $NUKTA . $HAL, "jX" => chr(0x0C9c) . $ZWJ . $NUKTA, "jXA" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CBE), "jXi" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CBF), "jXI" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC0), "jXu" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC1), "jXU" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC2), "jXR" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC3), "jXRX" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC4), "jXe" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC6), "jXE" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC7), "jXY" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CC8), "jXo" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CCA), "jXO" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CCB), "jXV" => chr(0x0C9c) . $ZWJ . $NUKTA . chr(0x0CCC), #}}} #{{{Ja "Jf" => chr(0x0C9D) . $HAL, "J" => chr(0x0C9D), "JA" => chr(0x0C9D) . chr(0x0CBE), "Ji" => chr(0x0C9D) . chr(0x0CBF), "JI" => chr(0x0C9D) . chr(0x0CC0), "Ju" => chr(0x0C9D) . chr(0x0CC1), "JU" => chr(0x0C9D) . chr(0x0CC2), "JR" => chr(0x0C9D) . chr(0x0CC3), "JRX" => chr(0x0C9D) . chr(0x0CC4), "Je" => chr(0x0C9D) . chr(0x0CC6), "JE" => chr(0x0C9D) . chr(0x0CC7), "JY" => chr(0x0C9D) . chr(0x0CC8), "Jo" => chr(0x0C9D) . chr(0x0CCA), "JO" => chr(0x0C9D) . chr(0x0CCB), "JV" => chr(0x0C9D) . chr(0x0CCC), #}}} #{{{z - cavargada anunAsika "zf" => chr(0x0C9E) . $HAL, "z" => chr(0x0C9E), "zA" => chr(0x0C9E) . chr(0x0CBE), "zi" => chr(0x0C9E) . chr(0x0CBF), "zI" => chr(0x0C9E) . chr(0x0CC0), "zu" => chr(0x0C9E) . chr(0x0CC1), "zU" => chr(0x0C9E) . chr(0x0CC2), "zR" => chr(0x0C9E) . chr(0x0CC3), "zRX" => chr(0x0C9E) . chr(0x0CC4), "ze" => chr(0x0C9E) . chr(0x0CC6), "zE" => chr(0x0C9E) . chr(0x0CC7), "zY" => chr(0x0C9E) . chr(0x0CC8), "zo" => chr(0x0C9E) . chr(0x0CCA), "zO" => chr(0x0C9E) . chr(0x0CCB), "zV" => chr(0x0C9E) . chr(0x0CCC), #}}} #{{{Ta "qf" => chr(0x0C9F) . $HAL, "q" => chr(0x0C9F), "qA" => chr(0x0C9F) . chr(0x0CBE), "qi" => chr(0x0C9F) . chr(0x0CBF), "qI" => chr(0x0C9F) . chr(0x0CC0), "qu" => chr(0x0C9F) . chr(0x0CC1), "qU" => chr(0x0C9F) . chr(0x0CC2), "qR" => chr(0x0C9F) . chr(0x0CC3), "qRX" => chr(0x0C9F) . chr(0x0CC4), "qe" => chr(0x0C9F) . chr(0x0CC6), "qE" => chr(0x0C9F) . chr(0x0CC7), "qY" => chr(0x0C9F) . chr(0x0CC8), "qo" => chr(0x0C9F) . chr(0x0CCA), "qO" => chr(0x0C9F) . chr(0x0CCB), "qV" => chr(0x0C9F) . chr(0x0CCC), #}}} #{{{Tha "Qf" => chr(0x0CA0) . $HAL, "Q" => chr(0x0CA0), "QA" => chr(0x0CA0) . chr(0x0CBE), "Qi" => chr(0x0CA0) . chr(0x0CBF), "QI" => chr(0x0CA0) . chr(0x0CC0), "Qu" => chr(0x0CA0) . chr(0x0CC1), "QU" => chr(0x0CA0) . chr(0x0CC2), "QR" => chr(0x0CA0) . chr(0x0CC3), "QRX" => chr(0x0CA0) . chr(0x0CC4), "Qe" => chr(0x0CA0) . chr(0x0CC6), "QE" => chr(0x0CA0) . chr(0x0CC7), "QY" => chr(0x0CA0) . chr(0x0CC8), "Qo" => chr(0x0CA0) . chr(0x0CCA), "QO" => chr(0x0CA0) . chr(0x0CCB), "QV" => chr(0x0CA0) . chr(0x0CCC), #}}} #{{{Da "wf" => chr(0x0CA1) . $HAL, "w" => chr(0x0CA1), "wA" => chr(0x0CA1) . chr(0x0CBE), "wi" => chr(0x0CA1) . chr(0x0CBF), "wI" => chr(0x0CA1) . chr(0x0CC0), "wu" => chr(0x0CA1) . chr(0x0CC1), "wU" => chr(0x0CA1) . chr(0x0CC2), "wR" => chr(0x0CA1) . chr(0x0CC3), "wRX" => chr(0x0CA1) . chr(0x0CC4), "we" => chr(0x0CA1) . chr(0x0CC6), "wE" => chr(0x0CA1) . chr(0x0CC7), "wY" => chr(0x0CA1) . chr(0x0CC8), "wo" => chr(0x0CA1) . chr(0x0CCA), "wO" => chr(0x0CA1) . chr(0x0CCB), "wV" => chr(0x0CA1) . chr(0x0CCC), #}}} #{{{Dha "Wf" => chr(0x0CA2) . $HAL, "W" => chr(0x0CA2), "WA" => chr(0x0CA2) . chr(0x0CBE), "Wi" => chr(0x0CA2) . chr(0x0CBF), "WI" => chr(0x0CA2) . chr(0x0CC0), "Wu" => chr(0x0CA2) . chr(0x0CC1), "WU" => chr(0x0CA2) . chr(0x0CC2), "WR" => chr(0x0CA2) . chr(0x0CC3), "WRX" => chr(0x0CA2) . chr(0x0CC4), "We" => chr(0x0CA2) . chr(0x0CC6), "WE" => chr(0x0CA2) . chr(0x0CC7), "WY" => chr(0x0CA2) . chr(0x0CC8), "Wo" => chr(0x0CA2) . chr(0x0CCA), "WO" => chr(0x0CA2) . chr(0x0CCB), "WV" => chr(0x0CA2) . chr(0x0CCC), #}}} #{{{Na "Nf" => chr(0x0CA3) . $HAL, "N" => chr(0x0CA3), "NA" => chr(0x0CA3) . chr(0x0CBE), "Ni" => chr(0x0CA3) . chr(0x0CBF), "NI" => chr(0x0CA3) . chr(0x0CC0), "Nu" => chr(0x0CA3) . chr(0x0CC1), "NU" => chr(0x0CA3) . chr(0x0CC2), "NR" => chr(0x0CA3) . chr(0x0CC3), "NRX" => chr(0x0CA3) . chr(0x0CC4), "Ne" => chr(0x0CA3) . chr(0x0CC6), "NE" => chr(0x0CA3) . chr(0x0CC7), "NY" => chr(0x0CA3) . chr(0x0CC8), "No" => chr(0x0CA3) . chr(0x0CCA), "NO" => chr(0x0CA3) . chr(0x0CCB), "NV" => chr(0x0CA3) . chr(0x0CCC), #}}} #{{{ta "tf" => chr(0x0CA4) . $HAL, "t" => chr(0x0CA4), "tA" => chr(0x0CA4) . chr(0x0CBE), "ti" => chr(0x0CA4) . chr(0x0CBF), "tI" => chr(0x0CA4) . chr(0x0CC0), "tu" => chr(0x0CA4) . chr(0x0CC1), "tU" => chr(0x0CA4) . chr(0x0CC2), "tR" => chr(0x0CA4) . chr(0x0CC3), "tRX" => chr(0x0CA4) . chr(0x0CC4), "te" => chr(0x0CA4) . chr(0x0CC6), "tE" => chr(0x0CA4) . chr(0x0CC7), "tY" => chr(0x0CA4) . chr(0x0CC8), "to" => chr(0x0CA4) . chr(0x0CCA), "tO" => chr(0x0CA4) . chr(0x0CCB), "tV" => chr(0x0CA4) . chr(0x0CCC), #}}} #{{{tha "Tf" => chr(0x0CA5) . $HAL, "T" => chr(0x0CA5), "TA" => chr(0x0CA5) . chr(0x0CBE), "Ti" => chr(0x0CA5) . chr(0x0CBF), "TI" => chr(0x0CA5) . chr(0x0CC0), "Tu" => chr(0x0CA5) . chr(0x0CC1), "TU" => chr(0x0CA5) . chr(0x0CC2), "TR" => chr(0x0CA5) . chr(0x0CC3), "TRX" => chr(0x0CA5) . chr(0x0CC4), "Te" => chr(0x0CA5) . chr(0x0CC6), "TE" => chr(0x0CA5) . chr(0x0CC7), "TY" => chr(0x0CA5) . chr(0x0CC8), "To" => chr(0x0CA5) . chr(0x0CCA), "TO" => chr(0x0CA5) . chr(0x0CCB), "TV" => chr(0x0CA5) . chr(0x0CCC), #}}} #{{{da "df" => chr(0x0CA6) . $HAL, "d" => chr(0x0CA6), "dA" => chr(0x0CA6) . chr(0x0CBE), "di" => chr(0x0CA6) . chr(0x0CBF), "dI" => chr(0x0CA6) . chr(0x0CC0), "du" => chr(0x0CA6) . chr(0x0CC1), "dU" => chr(0x0CA6) . chr(0x0CC2), "dR" => chr(0x0CA6) . chr(0x0CC3), "dRX" => chr(0x0CA6) . chr(0x0CC4), "de" => chr(0x0CA6) . chr(0x0CC6), "dE" => chr(0x0CA6) . chr(0x0CC7), "dY" => chr(0x0CA6) . chr(0x0CC8), "do" => chr(0x0CA6) . chr(0x0CCA), "dO" => chr(0x0CA6) . chr(0x0CCB), "dV" => chr(0x0CA6) . chr(0x0CCC), #}}} #{{{dha "Df" => chr(0x0CA7) . $HAL, "D" => chr(0x0CA7), "DA" => chr(0x0CA7) . chr(0x0CBE), "Di" => chr(0x0CA7) . chr(0x0CBF), "DI" => chr(0x0CA7) . chr(0x0CC0), "Du" => chr(0x0CA7) . chr(0x0CC1), "DU" => chr(0x0CA7) . chr(0x0CC2), "DR" => chr(0x0CA7) . chr(0x0CC3), "DRX" => chr(0x0CA7) . chr(0x0CC4), "De" => chr(0x0CA7) . chr(0x0CC6), "DE" => chr(0x0CA7) . chr(0x0CC7), "DY" => chr(0x0CA7) . chr(0x0CC8), "Do" => chr(0x0CA7) . chr(0x0CCA), "DO" => chr(0x0CA7) . chr(0x0CCB), "DV" => chr(0x0CA7) . chr(0x0CCC), #}}} #{{{na "nf" => chr(0x0CA8) . $HAL, "n" => chr(0x0CA8), "nA" => chr(0x0CA8) . chr(0x0CBE), "ni" => chr(0x0CA8) . chr(0x0CBF), "nI" => chr(0x0CA8) . chr(0x0CC0), "nu" => chr(0x0CA8) . chr(0x0CC1), "nU" => chr(0x0CA8) . chr(0x0CC2), "nR" => chr(0x0CA8) . chr(0x0CC3), "nRX" => chr(0x0CA8) . chr(0x0CC4), "ne" => chr(0x0CA8) . chr(0x0CC6), "nE" => chr(0x0CA8) . chr(0x0CC7), "nY" => chr(0x0CA8) . chr(0x0CC8), "no" => chr(0x0CA8) . chr(0x0CCA), "nO" => chr(0x0CA8) . chr(0x0CCB), "nV" => chr(0x0CA8) . chr(0x0CCC), #}}} #{{{pa "pf" => chr(0x0CAA) . $HAL, "p" => chr(0x0CAA), "pA" => chr(0x0CAA) . chr(0x0CBE), "pi" => chr(0x0CAA) . chr(0x0CBF), "pI" => chr(0x0CAA) . chr(0x0CC0), "pu" => chr(0x0CAA) . chr(0x0CC1), "pU" => chr(0x0CAA) . chr(0x0CC2), "pR" => chr(0x0CAA) . chr(0x0CC3), "pRX" => chr(0x0CAA) . chr(0x0CC4), "pe" => chr(0x0CAA) . chr(0x0CC6), "pE" => chr(0x0CAA) . chr(0x0CC7), "pY" => chr(0x0CAA) . chr(0x0CC8), "po" => chr(0x0CAA) . chr(0x0CCA), "pO" => chr(0x0CAA) . chr(0x0CCB), "pV" => chr(0x0CAA) . chr(0x0CCC), #}}} #{{{Pa "Pf" => chr(0x0CAB) . $HAL, "P" => chr(0x0CAB), "PA" => chr(0x0CAB) . chr(0x0CBE), "Pi" => chr(0x0CAB) . chr(0x0CBF), "PI" => chr(0x0CAB) . chr(0x0CC0), "Pu" => chr(0x0CAB) . chr(0x0CC1), "PU" => chr(0x0CAB) . chr(0x0CC2), "PR" => chr(0x0CAB) . chr(0x0CC3), "PRX" => chr(0x0CAB) . chr(0x0CC4), "Pe" => chr(0x0CAB) . chr(0x0CC6), "PE" => chr(0x0CAB) . chr(0x0CC7), "PY" => chr(0x0CAB) . chr(0x0CC8), "Po" => chr(0x0CAB) . chr(0x0CCA), "PO" => chr(0x0CAB) . chr(0x0CCB), "PV" => chr(0x0CAB) . chr(0x0CCC), #}}} #{{{pha "PXf" => chr(0x0CAB) . $NUKTA . $HAL, "PX" => chr(0x0CAB) . $NUKTA, "PXA" => chr(0x0CAB) . $NUKTA . chr(0x0CBE), "PXi" => chr(0x0CAB) . $NUKTA . chr(0x0CBF), "PXI" => chr(0x0CAB) . $NUKTA . chr(0x0CC0), "PXu" => chr(0x0CAB) . $NUKTA . chr(0x0CC1), "PXU" => chr(0x0CAB) . $NUKTA . chr(0x0CC2), "PXR" => chr(0x0CAB) . $NUKTA . chr(0x0CC3), "PXRX" => chr(0x0CAB) . $NUKTA . chr(0x0CC4), "PXe" => chr(0x0CAB) . $NUKTA . chr(0x0CC6), "PXE" => chr(0x0CAB) . $NUKTA . chr(0x0CC7), "PXY" => chr(0x0CAB) . $NUKTA . chr(0x0CC8), "PXo" => chr(0x0CAB) . $NUKTA . chr(0x0CCA), "PXO" => chr(0x0CAB) . $NUKTA . chr(0x0CCB), "PXV" => chr(0x0CAB) . $NUKTA . chr(0x0CCC), #}}} #{{{ba "bf" => chr(0x0CAC) . $HAL, "b" => chr(0x0CAC), "bA" => chr(0x0CAC) . chr(0x0CBE), "bi" => chr(0x0CAC) . chr(0x0CBF), "bI" => chr(0x0CAC) . chr(0x0CC0), "bu" => chr(0x0CAC) . chr(0x0CC1), "bU" => chr(0x0CAC) . chr(0x0CC2), "bR" => chr(0x0CAC) . chr(0x0CC3), "bRX" => chr(0x0CAC) . chr(0x0CC4), "be" => chr(0x0CAC) . chr(0x0CC6), "bE" => chr(0x0CAC) . chr(0x0CC7), "bY" => chr(0x0CAC) . chr(0x0CC8), "bo" => chr(0x0CAC) . chr(0x0CCA), "bO" => chr(0x0CAC) . chr(0x0CCB), "bV" => chr(0x0CAC) . chr(0x0CCC), #}}} #{{{Ba "Bf" => chr(0x0CAD) . $HAL, "B" => chr(0x0CAD), "BA" => chr(0x0CAD) . chr(0x0CBE), "Bi" => chr(0x0CAD) . chr(0x0CBF), "BI" => chr(0x0CAD) . chr(0x0CC0), "Bu" => chr(0x0CAD) . chr(0x0CC1), "BU" => chr(0x0CAD) . chr(0x0CC2), "BR" => chr(0x0CAD) . chr(0x0CC3), "BRX" => chr(0x0CAD) . chr(0x0CC4), "Be" => chr(0x0CAD) . chr(0x0CC6), "BE" => chr(0x0CAD) . chr(0x0CC7), "BY" => chr(0x0CAD) . chr(0x0CC8), "Bo" => chr(0x0CAD) . chr(0x0CCA), "BO" => chr(0x0CAD) . chr(0x0CCB), "BV" => chr(0x0CAD) . chr(0x0CCC), #}}} #{{{ma "mf" => chr(0x0CAE) . $HAL, "m" => chr(0x0CAE), "mA" => chr(0x0CAE) . chr(0x0CBE), "mi" => chr(0x0CAE) . chr(0x0CBF), "mI" => chr(0x0CAE) . chr(0x0CC0), "mu" => chr(0x0CAE) . chr(0x0CC1), "mU" => chr(0x0CAE) . chr(0x0CC2), "mR" => chr(0x0CAE) . chr(0x0CC3), "mRX" => chr(0x0CAE) . chr(0x0CC4), "me" => chr(0x0CAE) . chr(0x0CC6), "mE" => chr(0x0CAE) . chr(0x0CC7), "mY" => chr(0x0CAE) . chr(0x0CC8), "mo" => chr(0x0CAE) . chr(0x0CCA), "mO" => chr(0x0CAE) . chr(0x0CCB), "mV" => chr(0x0CAE) . chr(0x0CCC), #}}} #{{{ya "yf" => chr(0x0CAF) . $HAL, "y" => chr(0x0CAF), "yA" => chr(0x0CAF) . chr(0x0CBE), "yi" => chr(0x0CAF) . chr(0x0CBF), "yI" => chr(0x0CAF) . chr(0x0CC0), "yu" => chr(0x0CAF) . chr(0x0CC1), "yU" => chr(0x0CAF) . chr(0x0CC2), "yR" => chr(0x0CAF) . chr(0x0CC3), "yRX" => chr(0x0CAF) . chr(0x0CC4), "ye" => chr(0x0CAF) . chr(0x0CC6), "yE" => chr(0x0CAF) . chr(0x0CC7), "yY" => chr(0x0CAF) . chr(0x0CC8), "yo" => chr(0x0CAF) . chr(0x0CCA), "yO" => chr(0x0CAF) . chr(0x0CCB), "yV" => chr(0x0CAF) . chr(0x0CCC), #}}} #{{{ra "rf" => chr(0x0CB0) . $HAL, "r" => chr(0x0CB0), "rA" => chr(0x0CB0) . chr(0x0CBE), "ri" => chr(0x0CB0) . chr(0x0CBF), "rI" => chr(0x0CB0) . chr(0x0CC0), "ru" => chr(0x0CB0) . chr(0x0CC1), "rU" => chr(0x0CB0) . chr(0x0CC2), "rR" => chr(0x0CB0) . chr(0x0CC3), "rRX" => chr(0x0CB0) . chr(0x0CC4), "re" => chr(0x0CB0) . chr(0x0CC6), "rE" => chr(0x0CB0) . chr(0x0CC7), "rY" => chr(0x0CB0) . chr(0x0CC8), "ro" => chr(0x0CB0) . chr(0x0CCA), "rO" => chr(0x0CB0) . chr(0x0CCB), "rV" => chr(0x0CB0) . chr(0x0CCC), #}}} #{{{Ra "rXf" => chr(0x0CB1) . $HAL, "rX" => chr(0x0CB1), "rXA" => chr(0x0CB1) . chr(0x0CBE), "rXi" => chr(0x0CB1) . chr(0x0CBF), "rXI" => chr(0x0CB1) . chr(0x0CC0), "rXu" => chr(0x0CB1) . chr(0x0CC1), "rXU" => chr(0x0CB1) . chr(0x0CC2), "rXR" => chr(0x0CB1) . chr(0x0CC3), "rXRX" => chr(0x0CB1) . chr(0x0CC4), "rXe" => chr(0x0CB1) . chr(0x0CC6), "rXE" => chr(0x0CB1) . chr(0x0CC7), "rXY" => chr(0x0CB1) . chr(0x0CC8), "rXo" => chr(0x0CB1) . chr(0x0CCA), "rXO" => chr(0x0CB1) . chr(0x0CCB), "rXV" => chr(0x0CB1) . chr(0x0CCC), #}}} #{{{la "lf" => chr(0x0CB2) . $HAL, "l" => chr(0x0CB2), "lA" => chr(0x0CB2) . chr(0x0CBE), "li" => chr(0x0CB2) . chr(0x0CBF), "lI" => chr(0x0CB2) . chr(0x0CC0), "lu" => chr(0x0CB2) . chr(0x0CC1), "lU" => chr(0x0CB2) . chr(0x0CC2), "lR" => chr(0x0CB2) . chr(0x0CC3), "lRX" => chr(0x0CB2) . chr(0x0CC4), "le" => chr(0x0CB2) . chr(0x0CC6), "lE" => chr(0x0CB2) . chr(0x0CC7), "lY" => chr(0x0CB2) . chr(0x0CC8), "lo" => chr(0x0CB2) . chr(0x0CCA), "lO" => chr(0x0CB2) . chr(0x0CCB), "lV" => chr(0x0CB2) . chr(0x0CCC), #}}} #{{{va "vf" => chr(0x0CB5) . $HAL, "v" => chr(0x0CB5), "vA" => chr(0x0CB5) . chr(0x0CBE), "vi" => chr(0x0CB5) . chr(0x0CBF), "vI" => chr(0x0CB5) . chr(0x0CC0), "vu" => chr(0x0CB5) . chr(0x0CC1), "vU" => chr(0x0CB5) . chr(0x0CC2), "vR" => chr(0x0CB5) . chr(0x0CC3), "vRX" => chr(0x0CB5) . chr(0x0CC4), "ve" => chr(0x0CB5) . chr(0x0CC6), "vE" => chr(0x0CB5) . chr(0x0CC7), "vY" => chr(0x0CB5) . chr(0x0CC8), "vo" => chr(0x0CB5) . chr(0x0CCA), "vO" => chr(0x0CB5) . chr(0x0CCB), "vV" => chr(0x0CB5) . chr(0x0CCC), #}}} #{{{sha (shankara) "Sf" => chr(0x0CB6) . $HAL, "S" => chr(0x0CB6), "SA" => chr(0x0CB6) . chr(0x0CBE), "Si" => chr(0x0CB6) . chr(0x0CBF), "SI" => chr(0x0CB6) . chr(0x0CC0), "Su" => chr(0x0CB6) . chr(0x0CC1), "SU" => chr(0x0CB6) . chr(0x0CC2), "SR" => chr(0x0CB6) . chr(0x0CC3), "SRX" => chr(0x0CB6) . chr(0x0CC4), "Se" => chr(0x0CB6) . chr(0x0CC6), "SE" => chr(0x0CB6) . chr(0x0CC7), "SY" => chr(0x0CB6) . chr(0x0CC8), "So" => chr(0x0CB6) . chr(0x0CCA), "SO" => chr(0x0CB6) . chr(0x0CCB), "SV" => chr(0x0CB6) . chr(0x0CCC), #}}} #{{{Sa (shanmuga) "xf" => chr(0x0CB7) . $HAL, "x" => chr(0x0CB7), "xA" => chr(0x0CB7) . chr(0x0CBE), "xi" => chr(0x0CB7) . chr(0x0CBF), "xI" => chr(0x0CB7) . chr(0x0CC0), "xu" => chr(0x0CB7) . chr(0x0CC1), "xU" => chr(0x0CB7) . chr(0x0CC2), "xR" => chr(0x0CB7) . chr(0x0CC3), "xRX" => chr(0x0CB7) . chr(0x0CC4), "xe" => chr(0x0CB7) . chr(0x0CC6), "xE" => chr(0x0CB7) . chr(0x0CC7), "xY" => chr(0x0CB7) . chr(0x0CC8), "xo" => chr(0x0CB7) . chr(0x0CCA), "xO" => chr(0x0CB7) . chr(0x0CCB), "xV" => chr(0x0CB7) . chr(0x0CCC), #}}} #{{{sa "sf" => chr(0x0CB8) . $HAL, "s" => chr(0x0CB8), "sA" => chr(0x0CB8) . chr(0x0CBE), "si" => chr(0x0CB8) . chr(0x0CBF), "sI" => chr(0x0CB8) . chr(0x0CC0), "su" => chr(0x0CB8) . chr(0x0CC1), "sU" => chr(0x0CB8) . chr(0x0CC2), "sR" => chr(0x0CB8) . chr(0x0CC3), "sRX" => chr(0x0CB8) . chr(0x0CC4), "se" => chr(0x0CB8) . chr(0x0CC6), "sE" => chr(0x0CB8) . chr(0x0CC7), "sY" => chr(0x0CB8) . chr(0x0CC8), "so" => chr(0x0CB8) . chr(0x0CCA), "sO" => chr(0x0CB8) . chr(0x0CCB), "sV" => chr(0x0CB8) . chr(0x0CCC), #}}} #{{{ha "hf" => chr(0x0CB9) . $HAL, "h" => chr(0x0CB9), "hA" => chr(0x0CB9) . chr(0x0CBE), "hi" => chr(0x0CB9) . chr(0x0CBF), "hI" => chr(0x0CB9) . chr(0x0CC0), "hu" => chr(0x0CB9) . chr(0x0CC1), "hU" => chr(0x0CB9) . chr(0x0CC2), "hR" => chr(0x0CB9) . chr(0x0CC3), "hRX" => chr(0x0CB9) . chr(0x0CC4), "he" => chr(0x0CB9) . chr(0x0CC6), "hE" => chr(0x0CB9) . chr(0x0CC7), "hY" => chr(0x0CB9) . chr(0x0CC8), "ho" => chr(0x0CB9) . chr(0x0CCA), "hO" => chr(0x0CB9) . chr(0x0CCB), "hV" => chr(0x0CB9) . chr(0x0CCC), #}}} #{{{La "Lf" => chr(0x0CB3) . $HAL, "L" => chr(0x0CB3), "LA" => chr(0x0CB3) . chr(0x0CBE), "Li" => chr(0x0CB3) . chr(0x0CBF), "LI" => chr(0x0CB3) . chr(0x0CC0), "Lu" => chr(0x0CB3) . chr(0x0CC1), "LU" => chr(0x0CB3) . chr(0x0CC2), "LR" => chr(0x0CB3) . chr(0x0CC3), "LRX" => chr(0x0CB3) . chr(0x0CC4), "Le" => chr(0x0CB3) . chr(0x0CC6), "LE" => chr(0x0CB3) . chr(0x0CC7), "LY" => chr(0x0CB3) . chr(0x0CC8), "Lo" => chr(0x0CB3) . chr(0x0CCA), "LO" => chr(0x0CB3) . chr(0x0CCB), "LV" => chr(0x0CB3) . chr(0x0CCC), #}}} #{{{LA "LXf" => chr(0x0CDE) . $HAL, "LX" => chr(0x0CDE), "LXA" => chr(0x0CDE) . chr(0x0CBE), "LXi" => chr(0x0CDE) . chr(0x0CBF), "LXI" => chr(0x0CDE) . chr(0x0CC0), "LXu" => chr(0x0CDE) . chr(0x0CC1), "LXU" => chr(0x0CDE) . chr(0x0CC2), "LXR" => chr(0x0CDE) . chr(0x0CC3), "LXRX" => chr(0x0CDE) . chr(0x0CC4), "LXe" => chr(0x0CDE) . chr(0x0CC6), "LXE" => chr(0x0CDE) . chr(0x0CC7), "LXY" => chr(0x0CDE) . chr(0x0CC8), "LXo" => chr(0x0CDE) . chr(0x0CCA), "LXO" => chr(0x0CDE) . chr(0x0CCB), "LXV" => chr(0x0CDE) . chr(0x0CCC), #}}} #{{{Ottaksharagalu "fk" => $HAL . chr(0x0C95), #}}} #{{{ special "sX" => chr(0x0CBD), # avagraha #}}} ); #}}} #{{{ kgp2utf function ################# sub kgp2utf { ################# (my $input) = @_ ; #{{{word splitter, analyser and translator my @toks = split(//, $input) ; my $ptr = 0 ; my $char = 0 ; my $wrd = "" ; my $kgpwrd = "" ; my $count = 0 ; while ($ptr < @toks) { # Is the character not an alphabet if ($toks[$ptr] =~ /[^A-EG-Za-z]/) { if ($toks[$ptr] eq '|') { if ($toks[$ptr+1] eq '|') { $kgpwrd .= chr(0x0965) ; $ptr++ ; } else { $kgpwrd .= chr(0x0964) ; } } elsif ($toks[$ptr] ne 'F') { $kgpwrd .= $toks[$ptr] ; } else { $count = $ptr+1 ; print STDERR $input . " : arkavottu via 'F' at position $count is not supported.\n" ; } $ptr++ ; next ; } # Is the character a svara? if ($toks[$ptr] =~ /[aAiIuUReEYoOV]/) { $wrd = $toks[$ptr] ; $ptr++ ; # Yes. Check for additional chars for RU if (($toks[$ptr-1] eq 'R') and ($toks[$ptr] eq 'U')) { $wrd .= $toks[$ptr] ; $ptr++ ; } $kgpwrd .= $utf_varnamala{$wrd} ; } # svara mugiyitu # vyanjanave? my $mnwrd = "" ; if ($toks[$ptr] =~ /[kKgGzcCjJZqQwWNtTdDnpPbBmyrlvSxshL]/) { $mnwrd = $toks[$ptr] ; $ptr++ ; # Special chars : za, pha, LA, RA, avagraha if (($toks[$ptr-1] =~ /[jPrLs]/) and ($toks[$ptr] eq 'X')) { $mnwrd .= $toks[$ptr] ; $ptr++ ; } my $o1 = "" ; my $o2 = "" ; my $motaku = "" ; # next 2 chars are ff ? if (($toks[$ptr] eq 'f') and ($toks[$ptr+1] eq 'f')) { $mnwrd .= 'f' ; $kgpwrd .= $utf_varnamala{$mnwrd} ; $ptr += 2 ; # padada koneyalli ardhakshara bandare, EnU mAdabAradu # illavadare, ZWNJ hakabekagutte $kgpwrd .= $ptr != @toks ? $ZWNJ : "" ; } elsif ($toks[$ptr] =~ /[AiIuUReEYoOV]/) { # gunitakshara $mnwrd .= $toks[$ptr] ; $ptr++ ; if (($toks[$ptr-1] eq "R") and ($toks[$ptr] eq "X")) { $mnwrd .= $toks[$ptr] ; $ptr++ ; } $kgpwrd .= $utf_varnamala{$mnwrd} ; } elsif ($toks[$ptr] eq 'f') { # ottakshara $mnwrd .= 'f' ; $o1 = $toks[$ptr+1] ; # modala ottu $ptr += 2 ; if ($toks[$ptr] eq 'f') { # eradaneya ottakshara $o1 .= "f" ; $ptr++ ; if ($toks[$ptr] eq 'f') { $motaku = $ptr != @toks ? $ZWNJ : "" ; } else { $o2 = $toks[$ptr] ; } $ptr++ ; } # ottaksharakke gunita? if ($toks[$ptr] =~ /[AiIuUReEYoOV]/) { $o2 eq "" ? ($o1 .= $toks[$ptr]) : ($o2 .= $toks[$ptr]) ; $ptr++ ; if (($toks[$ptr-1] eq "R") and ($toks[$ptr] eq "X")) { $o2 eq "" ? ($o1 .= $toks[$ptr]) : ($o2 .= $toks[$ptr]) ; $ptr++ ; } } $kgpwrd .= $utf_varnamala{$mnwrd} . $utf_varnamala{$o1} . $motaku . $utf_varnamala{$o2} ; } else {# ottu/gunita illadiruva vyanjana $kgpwrd .= $utf_varnamala{$mnwrd} ; } } if ($toks[$ptr] =~ /[MH]/) { $kgpwrd .= $utf_varnamala{$toks[$ptr]} ; $ptr++ ; } } #}}} return $kgpwrd ; } #}}} #{{{ Generate ascii_varnamale ################# sub varngen { ################# my @sufx = ("ff", "", "A", "i", "I", "u", "U", "R", "RX", "e", "E", "Y", "o", "O", "V", "M", "H") ; my @lets = ("k", "K", "g", "G", "Z", "c", "C", "j", "jX", "J", "z", "q", "Q", "w", "W", "N", "t", "T", "d", "D", "n", "p", "P", "PX", "b", "B", "m", "y", "r", "rX", "l", "v", "S", "x", "s", "h", "L", "LX") ; foreach (qw/a A i I u U R RU e E Y o O V aM aH/) { print "\\textrm{" . $_ . "} \$\\mapsto\$ " . en2kgp($_) . " \\par\n " ; } print "\n" ; foreach my $l (@lets) { foreach (@sufx) { print "\\textrm{" . $l.$_ . "} \$\\mapsto\$ " . en2kgp($l.$_) . " \\par\n" ; } print "\n" ; } my $l = "viSEx" ; print "\\textrm{Special} (" . en2kgp($l) . ")\\par\n" ; $l = "sX" ; my $s = "avgfrh" ; print "\\textrm{sX} \$\\mapsto\$ " . en2kgp($l) . "(" . en2kgp($s) . ") \\par\n" ; $l = "nX" ; $s = "nAgrpoLfLu" ; print "\\textrm{nX} \$\\mapsto\$ " . en2kgp($l) . "(" . en2kgp($s) . ") \\par\n\n" ; } #}}} #{{{ Generate utf_varnamale ################# sub utf_varngen { ################# my @sufx = ("f", "", "A", "i", "I", "u", "U", "R", "RX", "e", "E", "Y", "o", "O", "V", "M", "H") ; my @lets = ("k", "K", "g", "G", "Z", "c", "C", "j", "jX", "J", "z", "q", "Q", "w", "W", "N", "t", "T", "d", "D", "n", "p", "P", "PX", "b", "B", "m", "y", "r", "rX", "l", "v", "S", "x", "s", "h", "L", "LX") ; foreach (qw/a A i I u U R RU e E Y o O V/) { print $utf_varnamala{$_} . " " ; } print $utf_varnamala{"a"} . $utf_varnamala{"M"} . " " . $utf_varnamala{"a"} . $utf_varnamala{"H"} ; print "\n" ; foreach my $l (@lets) { foreach (@sufx) { #print $l.$_ . " => " . $utf_varnamala{$l.$_} . "\n" ; print $utf_varnamala{$l.$_} . " " ; } print "\n" ; } } #}}} # THE MAIN PROGRAM STARTS HERE #{{{ Help # We will reset the LANG to en_US $ENV{"LANG"} = "en_US" ; my $ver = "0.6" ; my $Usage =<<'HELP' ; linek The program reads a sequence of characters from the standard input. The end of stream is indicated by EOF character (^D on Linux systems). The program converts words between the tags and to Kannada and writes to the standard output. The keyboard is mostly as per the Nudi/KGP format. Words not between the tags and are written out as is. Switches: -h : Print this screen -v : Version info -u : Output is in utf format (default is ascii format). Note : Not all features are available in utf mode. Please see the file 'manual.pdf' for detailed instructions about the usage of the program. HELP # Any help has been sought? if ($ARGV[0] =~ /-h/) { print $Usage ; exit ; } my $bld_date = "Tue Jun 19 12:01:23 IST 2007" ; # Version info if ($ARGV[0] =~ /-v/) { print "linek (v$ver) (C) Sridhar M.A. (mas AT mylug DOT org)\n" ; print "Build date : $bld_date\n" ; exit ; } my $good_looking = $ARGV[0] eq "-u" ? 0 : 1 ; if (!$good_looking) { shift(@ARGV) ; } #}}} #{{{Input and translation # Let us read kannada-in-english input my @input = <> ; my $input = join "", @input ; # Find the positions of the tags in the input stream my $i = 0 ; my @bpos = () ; while ($input =~ //g) { $bpos[$i] = pos($input) ; $i++ ; } # Find the positions of the tags in the input stream $i = 0 ; my @epos = () ; while ($input =~ /<\/kn>/g) { $epos[$i] = pos($input) ; $i++ ; } my @kgpstr = "" ; for ($i=0;$i < @bpos; $i++) { # extract the string to be converted to kannada my $toconv = substr($input,$bpos[$i],$epos[$i]-5-$bpos[$i]) ; # i am replacing the \n with something funny; hopefully no one # will use this sequence :-) # If some one knows how to handle \n in split, please patch this line $toconv =~ s/\n/~\\\\\\~/g ; # split the string into words my @z = split " ", $toconv ; $kgpstr[$i] = "" ; foreach my $z (@z) { $kgpstr[$i] .= $good_looking ? (en2kgp($z) . " ") : (kgp2utf($z) . " ") ; } # Replace the funny sequence with \n $kgpstr[$i] =~ s/~\\\\\\~/\n/g ; } # Reconstuct the original input if ($bpos[0] != 4) { print STDOUT substr($input,0,$bpos[0]-4) ; } # replaced with the kannada characters (where tagged) for ($i=0;$i < @bpos; $i++) { print STDOUT $kgpstr[$i] ; $i == @bpos-1 ? print STDOUT substr($input,$epos[$i]) : print STDOUT substr($input,$epos[$i],$bpos[$i+1]-$epos[$i]-4) ; } #}}} __END__ # vim:fdm=marker:tw=72:et:ts=2:sw=2: