#!perl
use 5.005_62;
use strict;
use warnings; no warnings qw/utf8/;
use Lingua::TT::Yanalif;
use open IN => ":raw", OUT => ":raw";

our $CP1259;
our $CP1254;
our $src_convertor = sub{};
our $out_convertor = sub{};

if (grep m/^--sbcs-in$/, @ARGV)
{
	if ($] > 5.007)
	{
		require Encode;
		$src_convertor = sub{
		$_ = Encode::decode('cp1251', $_);
		tr	[\x{402}\x{409}\x{40A}\x{40C}\x{40B}\x{40F}\x{452}\x{459}\x{45A}\x{45C}\x{45B}\x{45F}]
			[\x{4D8}\x{4E8}\x{4AE}\x{496}\x{4A2}\x{4BA}\x{4D9}\x{4E9}\x{4AF}\x{497}\x{4A3}\x{4BB}];
		};
	}
	else
	{
    	$src_convertor = eval sprintf "sub(){ tr/ \\x80-\\xff/ %s/CU }",
    	join '', map{ "\\x{$_}" } map{ $_||'20' }
    	$CP1259 =~ /^0x[0-9a-f]{2} \s+ (?: 0x([0-9a-f]{4}) )? /mxgi;
	}
	@ARGV = grep{ !m/^--sbcs-in$/ }@ARGV;
}else{
	$src_convertor = sub{ Encode::_utf8_on($_) } if $] > 5.007;
}

if (grep m/^--sbcs-out$/, @ARGV)
{
	if ($] > 5.007)
	{
		binmode STDOUT, ":encoding(cp1254)";
	}
	else
	{
    	$out_convertor = eval sprintf "sub(){ tr/ %s/ \\x80-\\xff/UC }",
		join '', map{ "\\x{$_}" } map{ $_||'20' }
		$CP1254 =~ /^0x[0-9a-f]{2} \s+ (?: 0x([0-9a-f]{4}) )? /mxgi;
	}
	@ARGV = grep{ !m/^--sbcs-out$/ }@ARGV;
}else{
	binmode STDOUT, ":utf8" if $] > 5.007;
}

while( <> )
{
    &$src_convertor();
    &cyr2lat();
    &$out_convertor();
    print;
}



BEGIN{
our $CP1259 = <<'TXT';
0x80	0x04D8	#CYRILLIC CAPITAL LETTER SCHWA
0x81	0x0403	#CYRILLIC CAPITAL LETTER GJE
0x82	0x201A	#SINGLE LOW-9 QUOTATION MARK
0x83	0x0453	#CYRILLIC SMALL LETTER GJE
0x84	0x201E	#DOUBLE LOW-9 QUOTATION MARK
0x85	0x2026	#HORIZONTAL ELLIPSIS
0x86	0x2020	#DAGGER
0x87	0x2021	#DOUBLE DAGGER
0x88	0x20AC	#EURO SIGN
0x89	0x2030	#PER MILLE SIGN
0x8A	0x04E8	#CYRILLIC CAPITAL LETTER BARRED O
0x8B	0x2039	#SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C	0x04AE	#CYRILLIC CAPITAL LETTER STRAIGHT U
0x8D	0x0496	#CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
0x8E	0x04A2	#CYRILLIC CAPITAL LETTER EN WITH HOOK
0x8F	0x04BA	#CYRILLIC CAPITAL LETTER SHHA
0x90	0x04D9	#CYRILLIC SMALL LETTER SCHWA
0x91	0x2018	#LEFT SINGLE QUOTATION MARK
0x92	0x2019	#RIGHT SINGLE QUOTATION MARK
0x93	0x201C	#LEFT DOUBLE QUOTATION MARK
0x94	0x201D	#RIGHT DOUBLE QUOTATION MARK
0x95	0x2022	#BULLET
0x96	0x2013	#EN DASH
0x97	0x2014	#EM DASH
0x98	      	#UNDEFINED
0x99	0x2122	#TRADE MARK SIGN
0x9A	0x04E9	#CYRILLIC SMALL LETTER BARRED O
0x9B	0x203A	#SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C	0x04AF	#CYRILLIC SMALL LETTER STRAIGHT U
0x9D	0x0497	#CYRILLIC SMALL LETTER ZHE WITH DESCENDER
0x9E	0x04A3	#CYRILLIC SMALL LETTER EN WITH HOOK
0x9F	0x04BB	#CYRILLIC SMALL LETTER SHHA
0xA0	0x00A0	#NO-BREAK SPACE
0xA1	0x040E	#CYRILLIC CAPITAL LETTER SHORT U
0xA2	0x045E	#CYRILLIC SMALL LETTER SHORT U
0xA3	0x0408	#CYRILLIC CAPITAL LETTER JE
0xA4	0x00A4	#CURRENCY SIGN
0xA5	0x0490	#CYRILLIC CAPITAL LETTER GHE WITH UPTURN
0xA6	0x00A6	#BROKEN BAR
0xA7	0x00A7	#SECTION SIGN
0xA8	0x0401	#CYRILLIC CAPITAL LETTER IO
0xA9	0x00A9	#COPYRIGHT SIGN
0xAA	0x0404	#CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xAB	0x00AB	#LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC	0x00AC	#NOT SIGN
0xAD	0x00AD	#SOFT HYPHEN
0xAE	0x00AE	#REGISTERED SIGN
0xAF	0x0407	#CYRILLIC CAPITAL LETTER YI
0xB0	0x00B0	#DEGREE SIGN
0xB1	0x00B1	#PLUS-MINUS SIGN
0xB2	0x0406	#CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
0xB3	0x0456	#CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0xB4	0x0491	#CYRILLIC SMALL LETTER GHE WITH UPTURN
0xB5	0x00B5	#MICRO SIGN
0xB6	0x00B6	#PILCROW SIGN
0xB7	0x00B7	#MIDDLE DOT
0xB8	0x0451	#CYRILLIC SMALL LETTER IO
0xB9	0x2116	#NUMERO SIGN
0xBA	0x0454	#CYRILLIC SMALL LETTER UKRAINIAN IE
0xBB	0x00BB	#RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC	0x0458	#CYRILLIC SMALL LETTER JE
0xBD	0x0405	#CYRILLIC CAPITAL LETTER DZE
0xBE	0x0455	#CYRILLIC SMALL LETTER DZE
0xBF	0x0457	#CYRILLIC SMALL LETTER YI
0xC0	0x0410	#CYRILLIC CAPITAL LETTER A
0xC1	0x0411	#CYRILLIC CAPITAL LETTER BE
0xC2	0x0412	#CYRILLIC CAPITAL LETTER VE
0xC3	0x0413	#CYRILLIC CAPITAL LETTER GHE
0xC4	0x0414	#CYRILLIC CAPITAL LETTER DE
0xC5	0x0415	#CYRILLIC CAPITAL LETTER IE
0xC6	0x0416	#CYRILLIC CAPITAL LETTER ZHE
0xC7	0x0417	#CYRILLIC CAPITAL LETTER ZE
0xC8	0x0418	#CYRILLIC CAPITAL LETTER I
0xC9	0x0419	#CYRILLIC CAPITAL LETTER SHORT I
0xCA	0x041A	#CYRILLIC CAPITAL LETTER KA
0xCB	0x041B	#CYRILLIC CAPITAL LETTER EL
0xCC	0x041C	#CYRILLIC CAPITAL LETTER EM
0xCD	0x041D	#CYRILLIC CAPITAL LETTER EN
0xCE	0x041E	#CYRILLIC CAPITAL LETTER O
0xCF	0x041F	#CYRILLIC CAPITAL LETTER PE
0xD0	0x0420	#CYRILLIC CAPITAL LETTER ER
0xD1	0x0421	#CYRILLIC CAPITAL LETTER ES
0xD2	0x0422	#CYRILLIC CAPITAL LETTER TE
0xD3	0x0423	#CYRILLIC CAPITAL LETTER U
0xD4	0x0424	#CYRILLIC CAPITAL LETTER EF
0xD5	0x0425	#CYRILLIC CAPITAL LETTER HA
0xD6	0x0426	#CYRILLIC CAPITAL LETTER TSE
0xD7	0x0427	#CYRILLIC CAPITAL LETTER CHE
0xD8	0x0428	#CYRILLIC CAPITAL LETTER SHA
0xD9	0x0429	#CYRILLIC CAPITAL LETTER SHCHA
0xDA	0x042A	#CYRILLIC CAPITAL LETTER HARD SIGN
0xDB	0x042B	#CYRILLIC CAPITAL LETTER YERU
0xDC	0x042C	#CYRILLIC CAPITAL LETTER SOFT SIGN
0xDD	0x042D	#CYRILLIC CAPITAL LETTER E
0xDE	0x042E	#CYRILLIC CAPITAL LETTER YU
0xDF	0x042F	#CYRILLIC CAPITAL LETTER YA
0xE0	0x0430	#CYRILLIC SMALL LETTER A
0xE1	0x0431	#CYRILLIC SMALL LETTER BE
0xE2	0x0432	#CYRILLIC SMALL LETTER VE
0xE3	0x0433	#CYRILLIC SMALL LETTER GHE
0xE4	0x0434	#CYRILLIC SMALL LETTER DE
0xE5	0x0435	#CYRILLIC SMALL LETTER IE
0xE6	0x0436	#CYRILLIC SMALL LETTER ZHE
0xE7	0x0437	#CYRILLIC SMALL LETTER ZE
0xE8	0x0438	#CYRILLIC SMALL LETTER I
0xE9	0x0439	#CYRILLIC SMALL LETTER SHORT I
0xEA	0x043A	#CYRILLIC SMALL LETTER KA
0xEB	0x043B	#CYRILLIC SMALL LETTER EL
0xEC	0x043C	#CYRILLIC SMALL LETTER EM
0xED	0x043D	#CYRILLIC SMALL LETTER EN
0xEE	0x043E	#CYRILLIC SMALL LETTER O
0xEF	0x043F	#CYRILLIC SMALL LETTER PE
0xF0	0x0440	#CYRILLIC SMALL LETTER ER
0xF1	0x0441	#CYRILLIC SMALL LETTER ES
0xF2	0x0442	#CYRILLIC SMALL LETTER TE
0xF3	0x0443	#CYRILLIC SMALL LETTER U
0xF4	0x0444	#CYRILLIC SMALL LETTER EF
0xF5	0x0445	#CYRILLIC SMALL LETTER HA
0xF6	0x0446	#CYRILLIC SMALL LETTER TSE
0xF7	0x0447	#CYRILLIC SMALL LETTER CHE
0xF8	0x0448	#CYRILLIC SMALL LETTER SHA
0xF9	0x0449	#CYRILLIC SMALL LETTER SHCHA
0xFA	0x044A	#CYRILLIC SMALL LETTER HARD SIGN
0xFB	0x044B	#CYRILLIC SMALL LETTER YERU
0xFC	0x044C	#CYRILLIC SMALL LETTER SOFT SIGN
0xFD	0x044D	#CYRILLIC SMALL LETTER E
0xFE	0x044E	#CYRILLIC SMALL LETTER YU
0xFF	0x044F	#CYRILLIC SMALL LETTER YA
TXT

our $CP1254 = <<'TXT';
0x80	      	#UNDEFINED
0x81	      	#UNDEFINED
0x82    0x201A  #SINGLE LOW-9 QUOTATION MARK
0x83    0x0192  #LATIN SMALL LETTER F WITH HOOK
0x84    0x201E  #DOUBLE LOW-9 QUOTATION MARK
0x85    0x2026  #HORIZONTAL ELLIPSIS
0x86    0x2020  #DAGGER
0x87    0x2021  #DOUBLE DAGGER
0x88    0x02C6  #MODIFIER LETTER CIRCUMFLEX ACCENT
0x89    0x2030  #PER MILLE SIGN
0x8A    0x0160  #LATIN CAPITAL LETTER S WITH CARON
0x8B    0x2039  #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
0x8C    0x0152  #LATIN CAPITAL LIGATURE OE
0x8D	      	#UNDEFINED
0x8E	      	#UNDEFINED
0x8F	      	#UNDEFINED
0x90	      	#UNDEFINED
0x91    0x2018  #LEFT SINGLE QUOTATION MARK
0x92    0x2019  #RIGHT SINGLE QUOTATION MARK
0x93    0x201C  #LEFT DOUBLE QUOTATION MARK
0x94    0x201D  #RIGHT DOUBLE QUOTATION MARK
0x95    0x2022  #BULLET
0x96    0x2013  #EN DASH
0x97    0x2014  #EM DASH
0x98    0x02DC  #SMALL TILDE
0x99    0x2122  #TRADE MARK SIGN
0x9A    0x0161  #LATIN SMALL LETTER S WITH CARON
0x9B    0x203A  #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
0x9C    0x0153  #LATIN SMALL LIGATURE OE
0x9D	      	#UNDEFINED
0x9E	      	#UNDEFINED
0x9F    0x0178  #LATIN CAPITAL LETTER Y WITH DIAERESIS
0xA0    0x00A0  #NO-BREAK SPACE
0xA1    0x00A1  #INVERTED EXCLAMATION MARK
0xA2    0x00A2  #CENT SIGN
0xA3    0x00A3  #POUND SIGN
0xA4    0x00A4  #CURRENCY SIGN
0xA5    0x00A5  #YEN SIGN
0xA6    0x00A6  #BROKEN BAR
0xA7    0x00A7  #SECTION SIGN
0xA8    0x00A8  #DIAERESIS
0xA9    0x00A9  #COPYRIGHT SIGN
0xAA    0x00AA  #FEMININE ORDINAL INDICATOR
0xAB    0x00AB  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC    0x00AC  #NOT SIGN
0xAD    0x00AD  #SOFT HYPHEN
0xAE    0x00AE  #REGISTERED SIGN
0xAF    0x00AF  #MACRON
0xB0    0x00B0  #DEGREE SIGN
0xB1    0x00B1  #PLUS-MINUS SIGN
0xB2    0x00B2  #SUPERSCRIPT TWO
0xB3    0x00B3  #SUPERSCRIPT THREE
0xB4    0x00B4  #ACUTE ACCENT
0xB5    0x00B5  #MICRO SIGN
0xB6    0x00B6  #PILCROW SIGN
0xB7    0x00B7  #MIDDLE DOT
0xB8    0x00B8  #CEDILLA
0xB9    0x00B9  #SUPERSCRIPT ONE
0xBA    0x00BA  #MASCULINE ORDINAL INDICATOR
0xBB    0x00BB  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xBC    0x00BC  #VULGAR FRACTION ONE QUARTER
0xBD    0x00BD  #VULGAR FRACTION ONE HALF
0xBE    0x00BE  #VULGAR FRACTION THREE QUARTERS
0xBF    0x00BF  #INVERTED QUESTION MARK
0xC0    0x00C0  #LATIN CAPITAL LETTER A WITH GRAVE
0xC1    0x00C1  #LATIN CAPITAL LETTER A WITH ACUTE
0xC2    0x00C2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
0xC3    0x00C3  #LATIN CAPITAL LETTER A WITH TILDE
0xC4    0x00C4  #LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5    0x00C5  #LATIN CAPITAL LETTER A WITH RING ABOVE
0xC6    0x00C6  #LATIN CAPITAL LETTER AE
0xC7    0x00C7  #LATIN CAPITAL LETTER C WITH CEDILLA
0xC8    0x00C8  #LATIN CAPITAL LETTER E WITH GRAVE
0xC9    0x00C9  #LATIN CAPITAL LETTER E WITH ACUTE
0xCA    0x00CA  #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
0xCB    0x00CB  #LATIN CAPITAL LETTER E WITH DIAERESIS
0xCC    0x00CC  #LATIN CAPITAL LETTER I WITH GRAVE
0xCD    0x00CD  #LATIN CAPITAL LETTER I WITH ACUTE
0xCE    0x00CE  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
0xCF    0x00CF  #LATIN CAPITAL LETTER I WITH DIAERESIS
0xD0    0x011E  #LATIN CAPITAL LETTER G WITH BREVE
0xD1    0x00D1  #LATIN CAPITAL LETTER N WITH TILDE
0xD2    0x00D2  #LATIN CAPITAL LETTER O WITH GRAVE
0xD3    0x00D3  #LATIN CAPITAL LETTER O WITH ACUTE
0xD4    0x00D4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
0xD5    0x00D5  #LATIN CAPITAL LETTER O WITH TILDE
0xD6    0x00D6  #LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7    0x00D7  #MULTIPLICATION SIGN
0xD8    0x00D8  #LATIN CAPITAL LETTER O WITH STROKE
0xD9    0x00D9  #LATIN CAPITAL LETTER U WITH GRAVE
0xDA    0x00DA  #LATIN CAPITAL LETTER U WITH ACUTE
0xDB    0x00DB  #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
0xDC    0x00DC  #LATIN CAPITAL LETTER U WITH DIAERESIS
0xDD    0x0130  #LATIN CAPITAL LETTER I WITH DOT ABOVE
0xDE    0x015E  #LATIN CAPITAL LETTER S WITH CEDILLA
0xDF    0x00DF  #LATIN SMALL LETTER SHARP S (German)
0xE0    0x00E0  #LATIN SMALL LETTER A WITH GRAVE
0xE1    0x00E1  #LATIN SMALL LETTER A WITH ACUTE
0xE2    0x00E2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
0xE3    0x00E3  #LATIN SMALL LETTER A WITH TILDE
0xE4    0x00E4  #LATIN SMALL LETTER A WITH DIAERESIS
0xE5    0x00E5  #LATIN SMALL LETTER A WITH RING ABOVE
0xE6    0x00E6  #LATIN SMALL LETTER AE
0xE7    0x00E7  #LATIN SMALL LETTER C WITH CEDILLA
0xE8    0x00E8  #LATIN SMALL LETTER E WITH GRAVE
0xE9    0x00E9  #LATIN SMALL LETTER E WITH ACUTE
0xEA    0x0119  #LATIN SMALL LETTER E WITH OGONEK
0xEB    0x00EB  #LATIN SMALL LETTER E WITH DIAERESIS
0xEC    0x0117  #LATIN SMALL LETTER E WITH DOT ABOVE
0xED    0x00ED  #LATIN SMALL LETTER I WITH ACUTE
0xEE    0x00EE  #LATIN SMALL LETTER I WITH CIRCUMFLEX
0xEF    0x012B  #LATIN SMALL LETTER I WITH MACRON
0xF0    0x011F  #LATIN SMALL LETTER G WITH BREVE
0xF1    0x00F1  #LATIN SMALL LETTER N WITH TILDE
0xF2    0x00F2  #LATIN SMALL LETTER O WITH GRAVE
0xF3    0x00F3  #LATIN SMALL LETTER O WITH ACUTE
0xF4    0x00F4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
0xF5    0x00F5  #LATIN SMALL LETTER O WITH TILDE
0xF6    0x00F6  #LATIN SMALL LETTER O WITH DIAERESIS
0xF7    0x00F7  #DIVISION SIGN
0xF8    0x00F8  #LATIN SMALL LETTER O WITH STROKE
0xF9    0x00F9  #LATIN SMALL LETTER U WITH GRAVE
0xFA    0x00FA  #LATIN SMALL LETTER U WITH ACUTE
0xFB    0x00FB  #LATIN SMALL LETTER U WITH CIRCUMFLEX
0xFC    0x00FC  #LATIN SMALL LETTER U WITH DIAERESIS
0xFD    0x0131  #LATIN SMALL LETTER DOTLESS I
0xFE    0x015F  #LATIN SMALL LETTER S WITH CEDILLA
0xFF    0x00FF  #LATIN SMALL LETTER Y WITH DIAERESIS
TXT
}
