モンゴル語とMacOS
モンゴル語を表示させるプログラムを、Perlで作ってみた。
現在のMacOSX(10.4.9)では、モンゴル語のフォントも用意されている・・・みたい。と、云うかSTFangsong,STHelti, STKalti, STSongというフォントにそれぞれ入っている。そして、Unicode3.0からはモンゴル語が対応されている*1。
そういう事で、Unicodeの勉強も兼ねてターミナルで動かす簡単なプログラムをPerlで作ってみた。
使い方もプログラムも(多分)単純な作りになっている。アルファベットを打ち込んだら、適当なモンゴル語を表示させると云う形で動作する。
ただし、あたしは日本人だからモンゴル語の発音を知らないため、モンゴル語のローマ字を入れても期待したモンゴル語が出てくると云う事ではない。
そのアルファベットとモンゴル語の対応は、数字以外はunicode表にある名前から推測して勝手に決めている。例えば、Unicodeの1820「ᠠ」では、名前は「MONGOLIAN LETTER A」となっている。名前にある最後のアルファベットから、「a」を入力すると「ᠠ」と表示する様になっている。
数字はそのままで、「0」が「᠐」となる。
一応、起動した後、dumpと入力すると、「コマンド モンゴル語 意味」といった感じでヘルプみたいなのを表示します。見づらいけど。
現在の所、「᠀」「0x1800」から「´e」「0x180e」までの文字は対応していない。
と云うのも、このあたりのUnicode Character 'MONGOLIAN BIRGA' (U+1800)のフォントとMacOSXのフォントが違うからとりあえず放っておこうというのと、特殊文字なためどう入力するのが自然なのかちょっとわからなかった。
以下使用例。
[negro: ~/perls][17:48] $ ./mn.pl agzh agss aga a e se lha ᢕᢔᢇᠠᠡᡝᡀ
問題としては、モンゴル語の字が小さくて見えにくいんだよなぁ・・・:-(
連続した数字「00」は「᠐᠐」とは表示されません。単なるあたしのずぼらなせいです。
後、どうもこのフォントは縦書き専用みたいだから、首を右に90度傾けないと駄目らしい。そう考えると、入力した順番に処理するんじゃなくて、入力したお尻の方から表示しないと駄目っぽい。
以下、スクリプト
#!/usr/bin/perl -wT use strict; use utf8; binmode(STDOUT, ":utf8"); # Create Map %main::map = (); # 参考サイト:http://www.fileformat.info/info/unicode/ # http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%82%B4%E3%83%AB%E8%AA%9E # http://itako999.blog41.fc2.com/blog-entry-77.html # http://www.rwds.net/kuroita/program/Perl_unicode.html # Deget Key Map my @_degit_array = ('0'..'9'); # Degit create_mn_map(0x1810, @_degit_array); # Letter Code create_mn_map(0x1820, get_mn_letter_code()); # Letter Code ALI(after 1880) create_mn_map(0x1880, get_mn_letter_code_ALI()); # add command add_command(); while (<>) { chop(); s/[\r\n]//g; my @input = split /\W/, $_; while ($#input >= 0) { my $c = shift @input; if (exists($main::map{$c})) { print $main::map{$c}; } } print "\n"; } ########################################################################## sub create_mn_map { my ($start_code,@key) = @_; my $i = 0; for (@key) { my $k = ($_ =~ m{[a-zA-Z]+}x) ? lc $_ : $_; $main::map{$k} = chr($start_code + $i); $i++; } } sub get_mn_letter_code { # Letter Code. # A = 1820 # CHI = 1842 # LVS = 1843 # TDZA = 185C # SE = 185D # SZHA = 1872 # MI = 1873 # MZHA = 1877 return ('A','E','I','O','U','OE', 'UE','EE','NA','ANG','BA','PA','QA','GA', 'MA','LA','SA','SHA','TA','DA','CHA','JA', 'YA','RA','WA','FA','KA','KHA','TSA','ZA', 'HAA','ZRA','LHA','ZHI','CHI', 'LVS',"TE","TI","TO","TU","TOE","TUE","TANG","TBA","TPA", "TQA","TGA","TMA","TTA","TDA","TCHA","TJA","TTSA", "TYA","TWA","TKA","TGAA","THAA","TJIA","TNIA","TDZA", "SE","SI","SIY","SUE","SU","SANG","SKA","SGA", "SHA","SPA","SSHA","STA","SDA","SJA","SFA","SGAA", "SHAA","STSA","SZA","SRAA","SCHA","SZHA", "MI","MKA","MRA","MFA","MZHA", ); } sub get_mn_letter_code_ALI { # AGAO = 1880 # AGAH = 1897 # TAGT = 1898 # AGDAGA = 18a9 return ("AGAO","AGVO","AGD","AGU","AGIU","AGB","AGTB", "AGA","AGI","AGKA","AGN","AGC","AGT","AGTT","AGDD", "AGN","AGTA","AGDA","AgPA","AGPH","AGSS","AGZH","AGZA","AGAH", "TAGT","TAGZ","MAGG","MAGN","MAGC","MAGJ","MAGT","MAGDD","MAGTA", "MAGDHA","MAGSSA","MAGCYA","MAGZHA","MAGZA", "AGHU","AGHY", "MAGB", "AGDAGA" ); } ########################################################################## sub add_command { my %rev_map = reverse %main::map; my $string = "show to mongolian font and keyword\n"; while (<DATA>) { chop; s/[\r\n]//g; my ($mn,$mean) = split /\t/; $mn = chr(hex($mn)); $string .= $rev_map{$mn}." ".$mn." " . $mean."\n" if exists $rev_map{$mn}; } $main::map{dump} = $string; } __DATA__ 1820 MONGOLIAN LETTER A 1821 MONGOLIAN LETTER E 1822 MONGOLIAN LETTER I 1823 MONGOLIAN LETTER O 1824 MONGOLIAN LETTER U 1825 MONGOLIAN LETTER OE 1826 MONGOLIAN LETTER UE 1827 MONGOLIAN LETTER EE 1828 MONGOLIAN LETTER NA 1829 MONGOLIAN LETTER ANG 182A MONGOLIAN LETTER BA 182B MONGOLIAN LETTER PA 182C MONGOLIAN LETTER QA 182D MONGOLIAN LETTER GA 182E MONGOLIAN LETTER MA 182F MONGOLIAN LETTER LA 1830 MONGOLIAN LETTER SA 1831 MONGOLIAN LETTER SHA 1832 MONGOLIAN LETTER TA 1833 MONGOLIAN LETTER DA 1834 MONGOLIAN LETTER CHA 1835 MONGOLIAN LETTER JA 1836 MONGOLIAN LETTER YA 1837 MONGOLIAN LETTER RA 1838 MONGOLIAN LETTER WA 1839 MONGOLIAN LETTER FA 183A MONGOLIAN LETTER KA 183B MONGOLIAN LETTER KHA 183C MONGOLIAN LETTER TSA 183D MONGOLIAN LETTER ZA 183E MONGOLIAN LETTER HAA 183F MONGOLIAN LETTER ZRA 1840 MONGOLIAN LETTER LHA 1841 MONGOLIAN LETTER ZHI 1842 MONGOLIAN LETTER CHI 1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN 1844 MONGOLIAN LETTER TODO E 1845 MONGOLIAN LETTER TODO I 1846 MONGOLIAN LETTER TODO O 1847 MONGOLIAN LETTER TODO U 1848 MONGOLIAN LETTER TODO OE 1849 MONGOLIAN LETTER TODO UE 184A MONGOLIAN LETTER TODO ANG 184B MONGOLIAN LETTER TODO BA 184C MONGOLIAN LETTER TODO PA 184D MONGOLIAN LETTER TODO QA 184E MONGOLIAN LETTER TODO GA 184F MONGOLIAN LETTER TODO MA 1850 MONGOLIAN LETTER TODO TA 1851 MONGOLIAN LETTER TODO DA 1852 MONGOLIAN LETTER TODO CHA 1853 MONGOLIAN LETTER TODO JA 1854 MONGOLIAN LETTER TODO TSA 1855 MONGOLIAN LETTER TODO YA 1856 MONGOLIAN LETTER TODO WA 1857 MONGOLIAN LETTER TODO KA 1858 MONGOLIAN LETTER TODO GAA 1859 MONGOLIAN LETTER TODO HAA 185A MONGOLIAN LETTER TODO JIA 185B MONGOLIAN LETTER TODO NIA 185C MONGOLIAN LETTER TODO DZA 185D MONGOLIAN LETTER SIBE E 185E MONGOLIAN LETTER SIBE I 185F MONGOLIAN LETTER SIBE IY 1860 MONGOLIAN LETTER SIBE UE 1861 MONGOLIAN LETTER SIBE U 1862 MONGOLIAN LETTER SIBE ANG 1863 MONGOLIAN LETTER SIBE KA 1864 MONGOLIAN LETTER SIBE GA 1865 MONGOLIAN LETTER SIBE HA 1866 MONGOLIAN LETTER SIBE PA 1867 MONGOLIAN LETTER SIBE SHA 1868 MONGOLIAN LETTER SIBE TA 1869 MONGOLIAN LETTER SIBE DA 186A MONGOLIAN LETTER SIBE JA 186B MONGOLIAN LETTER SIBE FA 186C MONGOLIAN LETTER SIBE GAA 186D MONGOLIAN LETTER SIBE HAA 186E MONGOLIAN LETTER SIBE TSA 186F MONGOLIAN LETTER SIBE ZA 1870 MONGOLIAN LETTER SIBE RAA 1871 MONGOLIAN LETTER SIBE CHA 1872 MONGOLIAN LETTER SIBE ZHA 1873 MONGOLIAN LETTER MANCHU I 1874 MONGOLIAN LETTER MANCHU KA 1875 MONGOLIAN LETTER MANCHU RA 1876 MONGOLIAN LETTER MANCHU FA 1877 MONGOLIAN LETTER MANCHU ZHA 1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE 1881 MONGOLIAN LETTER ALI GALI VISARGA ONE 1882 MONGOLIAN LETTER ALI GALI DAMARU 1883 MONGOLIAN LETTER ALI GALI UBADAMA 1884 MONGOLIAN LETTER ALI GALI INVERTED UBADAMA 1885 MONGOLIAN LETTER ALI GALI BALUDA 1886 MONGOLIAN LETTER ALI GALI THREE BALUDA 1887 MONGOLIAN LETTER ALI GALI A 1888 MONGOLIAN LETTER ALI GALI I 1889 MONGOLIAN LETTER ALI GALI KA 188A MONGOLIAN LETTER ALI GALI NGA 188B MONGOLIAN LETTER ALI GALI CA 188C MONGOLIAN LETTER ALI GALI TTA 188D MONGOLIAN LETTER ALI GALI TTHA 188E MONGOLIAN LETTER ALI GALI DDA 188F MONGOLIAN LETTER ALI GALI NNA 1890 MONGOLIAN LETTER ALI GALI TA 1891 MONGOLIAN LETTER ALI GALI DA 1892 MONGOLIAN LETTER ALI GALI PA 1893 MONGOLIAN LETTER ALI GALI PHA 1894 MONGOLIAN LETTER ALI GALI SSA 1895 MONGOLIAN LETTER ALI GALI ZHA 1896 MONGOLIAN LETTER ALI GALI ZA 1897 MONGOLIAN LETTER ALI GALI AH 1898 MONGOLIAN LETTER TODO ALI GALI TA 1899 MONGOLIAN LETTER TODO ALI GALI ZHA 189A MONGOLIAN LETTER MANCHU ALI GALI GHA 189B MONGOLIAN LETTER MANCHU ALI GALI NGA 189C MONGOLIAN LETTER MANCHU ALI GALI CA 189D MONGOLIAN LETTER MANCHU ALI GALI JHA 189E MONGOLIAN LETTER MANCHU ALI GALI TTA 189F MONGOLIAN LETTER MANCHU ALI GALI DDHA 18A0 MONGOLIAN LETTER MANCHU ALI GALI TA 18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA 18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA 18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA 18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA 18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA 18A6 MONGOLIAN LETTER ALI GALI HALF U 18A7 MONGOLIAN LETTER ALI GALI HALF YA 18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA 18A9 MONGOLIAN LETTER ALI GALI DAGALGA
*1:全部かどうかは知らない。中の人頑張って:)