Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
136
gaia/apps/keyboard/js/imes/jskanji/dict/jcconv.py
Executable file
136
gaia/apps/keyboard/js/imes/jskanji/dict/jcconv.py
Executable file
|
|
@ -0,0 +1,136 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
__all__ = ['hira2kata', 'kata2hira', 'half2hira', 'hira2half', 'kata2half',
|
||||
'half2kata', 'half2wide', 'wide2half', 'convert',
|
||||
'check_hira', 'check_kata', 'check_half']
|
||||
|
||||
import re
|
||||
|
||||
# convert hiragana to katakana
|
||||
def hira2kata(text, reserved=[]):
|
||||
return convert(text, jcconv.HIRA, jcconv.KATA, reserved)
|
||||
|
||||
# convert katakana to hiragana
|
||||
def kata2hira(text, reserved=[]):
|
||||
return convert(text, jcconv.KATA, jcconv.HIRA, reserved)
|
||||
|
||||
# convert half-width kana to hiragana
|
||||
def half2hira(text, reserved=[]):
|
||||
return convert(text, jcconv.HALF, jcconv.HIRA, reserved)
|
||||
|
||||
# convert hiragana to half-width kana
|
||||
def hira2half(text, reserved=[]):
|
||||
return convert(text, jcconv.HIRA, jcconv.HALF, reserved)
|
||||
|
||||
# convert katakana to half-width kana
|
||||
def kata2half(text, reserved=[]):
|
||||
return convert(text, jcconv.KATA, jcconv.HALF, reserved)
|
||||
|
||||
# convert half-width kana to katakana
|
||||
def half2kata(text, reserved=[]):
|
||||
return convert(text, jcconv.HALF, jcconv.KATA, reserved)
|
||||
|
||||
# expand half width number and alphabet to wide width
|
||||
def half2wide(text, reserved=[]):
|
||||
text = convert(text, jcconv.HNUM, jcconv.WNUM, reserved)
|
||||
text = convert(text, jcconv.HALP, jcconv.WALP, reserved)
|
||||
return convert(text, jcconv.HSYM, jcconv.WSYM, reserved)
|
||||
|
||||
# shrink wide width number and alphabet to half width
|
||||
def wide2half(text, reserved=[]):
|
||||
text = convert(text, jcconv.WNUM, jcconv.HNUM, reserved)
|
||||
text = convert(text, jcconv.WALP, jcconv.HALP, reserved)
|
||||
return convert(text, jcconv.WSYM, jcconv.HSYM, reserved)
|
||||
|
||||
# check if 'text' consists of hiragana
|
||||
def check_hira(text):
|
||||
return check(text, jcconv.HIRA)
|
||||
|
||||
# check if 'text' consists of katakana
|
||||
def check_kata(text):
|
||||
return check(text, jcconv.KATA)
|
||||
|
||||
# check if 'text' consists of half-width kana
|
||||
def check_half(text):
|
||||
return check(text, jcconv.HALF)
|
||||
|
||||
# convert 'frm' charset to 'to' charset
|
||||
# input text must be unicode or str(utf-8)
|
||||
# 'frm' and 'to' can be specified with (HIRA, KATA, HALF, WNUM, HNUM, WALP, HALP, WSYM, HSYM)
|
||||
__regex_storage = {}
|
||||
def convert(text, frm, to, reserved=[]):
|
||||
def _multiple_replace(text, dic):
|
||||
key = '|'.join(map(re.escape, dic))
|
||||
if key in __regex_storage:
|
||||
rx = __regex_storage[key]
|
||||
else:
|
||||
rx = re.compile(key)
|
||||
__regex_storage[key] = rx
|
||||
def proc_one(match):
|
||||
return dic[match.group(0)]
|
||||
return rx.sub(proc_one, text)
|
||||
|
||||
uflag = isinstance(text, unicode)
|
||||
f_set = jcconv.char_sets[frm]
|
||||
t_set = jcconv.char_sets[to]
|
||||
|
||||
text = uflag and text or text.decode('utf-8')
|
||||
if len(f_set[0].split(' ')) == len(t_set[0].split(' ')):
|
||||
for i in range(len(f_set)):
|
||||
conv_table = dict(zip(f_set[i].split(' '), t_set[i].split(' ')))
|
||||
for r in reserved:
|
||||
try:
|
||||
del(conv_table[r])
|
||||
except:
|
||||
pass
|
||||
text = _multiple_replace(text, conv_table)
|
||||
return uflag and text or text.encode('utf-8')
|
||||
else:
|
||||
raise "Invalid Parameter"
|
||||
|
||||
def check(text, char_set_type):
|
||||
uflag = isinstance(text, unicode)
|
||||
text = uflag and text or text.decode('utf-8')
|
||||
char_set = []
|
||||
for set in jcconv.char_sets[char_set_type]:
|
||||
char_set.extend(set.split(' '))
|
||||
return all([text_char in char_set for text_char in text])
|
||||
|
||||
# define character sets used in japanese
|
||||
class jcconv:
|
||||
(HIRA, KATA, HALF, WNUM, HNUM, WALP, HALP, WSYM, HSYM) = (i for i in range(9))
|
||||
hira = [u'が ぎ ぐ げ ご ざ じ ず ぜ ぞ だ ぢ づ で ど ば び ぶ べ ぼ ぱ ぴ ぷ ぺ ぽ',
|
||||
u'あ い う え お か き く け こ さ し す せ そ た ち つ て と ' + \
|
||||
u'な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ ' + \
|
||||
u'わ を ん ぁ ぃ ぅ ぇ ぉ ゃ ゅ ょ っ']
|
||||
kata = [u'ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ',
|
||||
u'ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ' + \
|
||||
u'ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ' + \
|
||||
u'ワ ヲ ン ァ ィ ゥ ェ ォ ャ ュ ョ ッ']
|
||||
half = [u'ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ',
|
||||
u'ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ' + \
|
||||
u'ワ ヲ ン ァ ィ ゥ ェ ォ ャ ュ ョ ッ']
|
||||
wnum = [u'0 1 2 3 4 5 6 7 8 9']
|
||||
hnum = [u'0 1 2 3 4 5 6 7 8 9']
|
||||
walp = [u'a b c d e f g h i j k l m n o p q r s t u v w x y z ' + \
|
||||
u'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z']
|
||||
halp = [u'a b c d e f g h i j k l m n o p q r s t u v w x y z ' + \
|
||||
u'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z']
|
||||
wsym = [u'! ” # $ % & ’ ( ) * + 、 − . / : ; < = > ? @ 「 \ 」 ^ _ ` 『 | 』 〜']
|
||||
hsym = [u'! \" # $ % & \' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~']
|
||||
char_sets = [hira, kata, half, wnum, hnum, walp, halp, wsym, hsym]
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import codecs, sys
|
||||
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
|
||||
|
||||
print convert(u'あいうえお', jcconv.HIRA, jcconv.HALF, [u'う'])
|
||||
print convert(u'ばいおりん', jcconv.HIRA, jcconv.HALF)
|
||||
print convert(u'バイオリン', jcconv.HALF, jcconv.HIRA)
|
||||
print convert(u'12345', jcconv.HNUM, jcconv.WNUM)
|
||||
|
||||
print check_hira(u'ひらがな')
|
||||
print check_hira(u'カタカナ')
|
||||
print check_kata(u'ひらがな')
|
||||
print check_kata(u'カタカナ')
|
||||
Loading…
Reference in a new issue