github.com/rusq/gomojimoji@v0.0.1/tables.go (about) 1 package gomojimoji 2 3 // Character tables are taken from the original mojimoji python library. 4 var ( 5 ASCII_ZENKAKU_CHARS = []rune{'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', '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', '!', '”', '#', '$', '%', '&', '’', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '¥', ']', '^', '_', '‘', '{', '|', '}', '~', '\u3000'} 6 ASCII_HANKAKU_CHARS = []rune{'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', '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', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '¥', ']', '^', '_', '`', '{', '|', '}', '~', ' '} 7 tabASCIIzh, tabASCIIhz = indexRunes(ASCII_ZENKAKU_CHARS, ASCII_HANKAKU_CHARS) 8 9 KANA_ZENKAKU_CHARS = []rune{'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ッ', 'ャ', 'ュ', 'ョ', '。', '、', '・', '゛', '゜', '「', '」', 'ー'} 10 KANA_HANKAKU_CHARS = []rune{'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ッ', 'ャ', 'ュ', 'ョ', '。', '、', '・', '゙', '゚', '「', '」', 'ー'} 11 tabKANAzh, tabKanaHz = indexRunes(KANA_ZENKAKU_CHARS, KANA_HANKAKU_CHARS) 12 13 DIGIT_ZENKAKU_CHARS = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} 14 DIGIT_HANKAKU_CHARS = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} 15 tabDIGITzh, tabDigitHz = indexRunes(DIGIT_ZENKAKU_CHARS, DIGIT_HANKAKU_CHARS) 16 17 KANA_TEN_MAP = map[rune]rune{ 18 'ガ': 'カ', 'ギ': 'キ', 'グ': 'ク', 'ゲ': 'ケ', 'ゴ': 'コ', 19 'ザ': 'サ', 'ジ': 'シ', 'ズ': 'ス', 'ゼ': 'セ', 'ゾ': 'ソ', 20 'ダ': 'タ', 'ヂ': 'チ', 'ヅ': 'ツ', 'デ': 'テ', 'ド': 'ト', 21 'バ': 'ハ', 'ビ': 'ヒ', 'ブ': 'フ', 'ベ': 'ヘ', 'ボ': 'ホ', 22 'ヴ': 'ウ', 23 } 24 tabKANATENzh, tabKanaTenHz = inverse(KANA_TEN_MAP) 25 26 KANA_MARU_MAP = map[rune]rune{ 27 'パ': 'ハ', 'ピ': 'ヒ', 'プ': 'フ', 'ペ': 'ヘ', 'ポ': 'ホ', 28 } 29 tabKANAMARUzh, tabKanaMaruHz = inverse(KANA_MARU_MAP) 30 ) 31 32 // indexRunes maps runes from rune-set a to rune-set b and vice versa. a and 33 // b should be of equal size, otherwise the function panics. 34 func indexRunes(a []rune, b []rune) (ab map[rune]rune, ba map[rune]rune) { 35 if len(a) != len(b) { 36 panic("slices of unequal sizes") 37 } 38 ab, ba = make(map[rune]rune, len(a)), make(map[rune]rune, len(b)) 39 for i := range a { 40 ab[a[i]] = b[i] 41 ba[b[i]] = a[i] 42 } 43 return 44 } 45 46 // inverse inverts the mapping in abIn, and returns both inverted and 47 // non-inverted maps. 48 func inverse(abIn map[rune]rune) (ab map[rune]rune, ba map[rune]rune) { 49 ab = abIn 50 ba = make(map[rune]rune, len(ab)) 51 for k, v := range ab { 52 ba[v] = k 53 } 54 return 55 }