#!/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: