sarumaj/go-kakasi

View on GitHub
internal/properties/convert_tables.go

Summary

Maintainability
C
1 day
Test Coverage
package properties

// convertTables is a set of conversion tables.
// It is used to generate symbol tables.
// It is also used to generate alphabet tables.
// It is based on Original KAKASI's EUC_JP - alphabet converter table.
var ConvertTables = convertTables{}

type convertTables struct{}

// Alpha1
//  !"#$%&'()*+,-./0123456789:;<=>?@
// Ideographic space and punctuation
func (c convertTables) AlphaTable1() map[rune]string {
    return map[rune]string{
        ' ':  "\u3000",
        '!':  "\uFF01",
        '"':  "\uFF02",
        '#':  "\uFF03",
        '$':  "\uFF04",
        '%':  "\uFF05",
        '&':  "\uFF06",
        '\'': "\uFF07",
        '(':  "\uFF08",
        ')':  "\uFF09",
        '*':  "\uFF0A",
        '+':  "\uFF0B",
        ',':  "\uFF0C",
        '-':  "\uFF0D",
        '.':  "\uFF0E",
        '/':  "\uFF0F",
        '0':  "\uFF10",
        '1':  "\uFF11",
        '2':  "\uFF12",
        '3':  "\uFF13",
        '4':  "\uFF14",
        '5':  "\uFF15",
        '6':  "\uFF16",
        '7':  "\uFF17",
        '8':  "\uFF18",
        '9':  "\uFF19",
        ':':  "\uFF1A",
        ';':  "\uFF1B",
        '<':  "\uFF1C",
        '=':  "\uFF1D",
        '>':  "\uFF1E",
        '?':  "\uFF1F",
        '@':  "\uFF20",
    }
}

// Alpha2
// [\]^_`
func (c convertTables) AlphaTable2() map[rune]string {
    return map[rune]string{
        '[':  "\uFF3B",
        '\\': "\uFF3C",
        ']':  "\uFF3D",
        '^':  "\uFF3E",
        '_':  "\uFF3F",
        '`':  "\uFF40",
    }
}

// Alpha3
// {|}~
func (c convertTables) AlphaTable3() map[rune]string {
    return map[rune]string{
        '{': "\uFF5B",
        '|': "\uFF5C",
        '}': "\uFF5D",
        '~': "\uFF5E",
    }
}

// Cyrillic
// АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
// абвгдеёжзийклмнопрстуфхцчшщъыьэюяѐё
func (convertTables) CyrillicTable() map[rune]string {
    return map[rune]string{
        0x0400: "E",   // Ѐ
        0x0401: "E",   // Ё
        0x0402: "Dj",  // Ђ
        0x0403: "G",   // Ѓ
        0x0404: "E",   // Є
        0x0405: "Dz",  // Ѕ
        0x0406: "I",   // І
        0x0407: "Yi",  // Ї
        0x0408: "J",   // Ј
        0x0409: "Lj",  // Љ
        0x040A: "Nj",  // Њ
        0x040B: "Tsh", // Ћ
        0x040C: "Kj",  // Ќ
        0x040D: "I",   // Ѝ
        0x040E: "U",   // Ў
        0x040F: "Dz",  // Џ
        0x0410: "A",   // А
        0x0411: "B",   // Б
        0x0412: "V",   // В
        0x0413: "G",   // Г
        0x0414: "D",   // Д
        0x0415: "E",   // Е
        0x0416: "Zh",  // Ж
        0x0417: "Z",   // З
        0x0418: "I",   // И
        0x0419: "Y",   // Й
        0x041A: "K",   // К
        0x041B: "L",   // Л
        0x041C: "M",   // М
        0x041D: "N",   // Н
        0x041E: "O",   // О
        0x041F: "P",   // П
        0x0420: "R",   // Р
        0x0421: "S",   // С
        0x0422: "T",   // Т
        0x0423: "U",   // У
        0x0424: "F",   // Ф
        0x0425: "H",   // Х
        0x0426: "Ts",  // Ц
        0x0427: "Ch",  // Ч
        0x0428: "Sh",  // Ш
        0x0429: "Sch", // Щ
        0x042A: "",    // Ъ
        0x042B: "Y",   // Ы
        0x042C: "",    // Ь
        0x042D: "E",   // Э
        0x042E: "Yu",  // Ю
        0x042F: "Ya",  // Я
        0x0430: "a",   // а
        0x0431: "b",   // б
        0x0432: "v",   // в
        0x0433: "g",   // г
        0x0434: "d",   // д
        0x0435: "e",   // е
        0x0436: "zh",  // ж
        0x0437: "z",   // з
        0x0438: "i",   // и
        0x0439: "y",   // й
        0x043A: "k",   // к
        0x043B: "l",   // л
        0x043C: "m",   // м
        0x043D: "n",   // н
        0x043E: "o",   // о
        0x043F: "p",   // п
        0x0440: "r",   // р
        0x0441: "s",   // с
        0x0442: "t",   // т
        0x0443: "u",   // у
        0x0444: "f",   // ф
        0x0445: "h",   // х
        0x0446: "ts",  // ц
        0x0447: "ch",  // ч
        0x0448: "sh",  // ш
        0x0449: "sch", // щ
        0x044A: "",    // ъ
        0x044B: "y",   // ы
        0x044C: "",    // ь
        0x044D: "e",   // э
        0x044E: "yu",  // ю
        0x044F: "ya",  // я
        0x0450: "e",   // ѐ
        0x0451: "e",   // ё
    }
}

// Latin1
// ¡¢£¤¥¦§¨©ª«¬­®¯
// °±²³´µ¶·¸¹º»¼½¾¿
// ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ
// ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
// àáâãäåæçèéêëìíîï
// ðñòóôõö÷øùúûüýþÿ
func (c convertTables) Latin1Table() map[rune]string {
    return map[rune]string{
        0x00A1: "!",        // inverted exclamation mark
        0x00A2: "cent",     // cent mark
        0x00A3: "GBP",      // pound mark
        0x00A4: "currency", // currency mark
        0x00A5: "yen",      // yen mark
        0x00A6: "|",        // broken bar
        0x00A7: "ss",       // section sign
        0x00A8: "..",       // diaeresis
        0x00A9: "(c)",      // copyright
        0x00AA: "a",        // feminine ordinal indicator
        0x00AB: "<<",       // left-pointing double angle quotation mark
        0x00AC: "not",      // not sign
        0x00AD: "-",        // soft hyphen
        0x00AE: "(R)",      // registered sign
        0x00AF: "~",        // macron
        0x00B0: ".",        // degree sign
        0x00B1: "+-",       // plus-minus sign
        0x00B2: "^2",       // superscript two
        0x00B3: "^3",       // superscript three
        0x00B4: "`",        // acute accent
        0x00B5: "u",        // micro sign
        0x00B6: "D",        // pilcrow sign
        0x00B7: ".",        // middle dot
        0x00B8: ",",        // cedilla
        0x00B9: "^1",       // superscript one
        0x00BA: "",         // masculine ordinal indicator
        0x00BB: ">>",       // right-pointing double angle quotation mark
        0x00BC: "1/4",      // vulgar fraction one quarter
        0x00BD: "1/2",      // vulgar fraction one half
        0x00BE: "3/4",      // vulgar fraction three quarters
        0x00BF: "?",        // inverted question mark
        0x00C0: "A",        // latin capital letter A with grave
        0x00C1: "A",        // latin capital letter A with acute
        0x00C2: "A",        // latin capital letter A with circumflex
        0x00C3: "A",        // latin capital letter A with tilde
        0x00C4: "A",        // latin capital letter A with diaeresis
        0x00C5: "A",        // latin capital letter A with ring above
        0x00C6: "AE",       // latin capital letter AE
        0x00C7: "C",        // latin capital letter C with cedilla
        0x00C8: "E",        // latin capital letter E with grave
        0x00C9: "E",        // latin capital letter E with acute
        0x00CA: "E",        // latin capital letter E with circumflex
        0x00CB: "E",        // latin capital letter E with diaeresis
        0x00CC: "I",        // latin capital letter I with grave
        0x00CD: "I",        // latin capital letter I with acute
        0x00CE: "I",        // latin capital letter I with circumflex
        0x00CF: "I",        // latin capital letter I with diaeresis
        0x00D0: "Eth",      // latin capital letter ETH
        0x00D1: "N",        // latin capital letter N with tilde
        0x00D2: "O",        // latin capital letter O with grave
        0x00D3: "O",        // latin capital letter O with acute
        0x00D4: "O",        // latin capital letter O with circumflex
        0x00D5: "O",        // latin capital letter O with tilde
        0x00D6: "O",        // latin capital letter O with diaeresis
        0x00D7: "x",        // multiplication sign
        0x00D8: "O",        // latin capital letter O with stroke
        0x00D9: "U",        // latin capital letter U with grave
        0x00DA: "U",        // latin capital letter U with acute
        0x00DB: "U",        // latin capital letter U with circumflex
        0x00DC: "U",        // latin capital letter U with diaeresis
        0x00DD: "Y",        // latin capital letter Y with acute
        0x00DE: "",         // latin capital letter THORN
        0x00DF: "s",        // latin small letter sharp s
        0x00E0: "a",        // latin small letter a with grave
        0x00E1: "a",        // latin small letter a with acute
        0x00E2: "a",        // latin small letter a with circumflex
        0x00E3: "a",        // latin small letter a with tilde
        0x00E4: "a",        // latin small letter a with diaeresis
        0x00E5: "a",        // latin small letter a with ring above
        0x00E6: "ae",       // latin small letter ae
        0x00E7: "c",        // latin small letter c with cedilla
        0x00E8: "e",        // latin small letter e with grave
        0x00E9: "e",        // latin small letter e with acute
        0x00EA: "e",        // latin small letter e with circumflex
        0x00EB: "e",        // latin small letter e with diaeresis
        0x00EC: "i",        // latin small letter i with grave
        0x00ED: "i",        // latin small letter i with acute
        0x00EE: "i",        // latin small letter i with circumflex
        0x00EF: "i",        // latin small letter i with diaeresis
        0x00F0: "eth",      // latin small letter eth
        0x00F1: "n",        // latin small letter n with tilde
        0x00F2: "o",        // latin small letter o with grave
        0x00F3: "o",        // latin small letter o with acute
        0x00F4: "o",        // latin small letter o with circumflex
        0x00F5: "o",        // latin small letter o with tilde
        0x00F6: "o",        // latin small letter o with diaeresis
        0x00F7: "/",        // division sign
        0x00F8: "o",        // latin small letter o with stroke
        0x00F9: "u",        // latin small letter u with grave
        0x00FA: "u",        // latin small letter u with acute
        0x00FB: "u",        // latin small letter u with circumflex
        0x00FC: "u",        // latin small letter u with diaeresis
        0x00FD: "y",        // latin small letter y with acute
        0x00FE: "",         // latin small letter thorn
        0x00FF: "y",        // latin small letter y with diaeresis
    }
}

// U3000 - 301F
//  、。〃〄々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟
// Ideographic space and punctuation
func (convertTables) SymbolTable1() map[rune]string {
    return map[rune]string{
        0x3000: " ",
        0x3001: ",",
        0x3002: ".",
        0x3003: "\"",
        0x3004: "(kigou)",
        0x3005: "(kurikaesi)",
        0x3006: "(sime)",
        0x3007: "(maru)",
        0x3008: "<",
        0x3009: ">",
        0x300A: "<<",
        0x300B: ">>",
        0x300C: "(",
        0x300D: ")",
        0x300E: "(",
        0x300F: ")",
        0x3010: "(",
        0x3011: ")",
        0x3012: "(kigou)",
        0x3013: "(geta)",
        0x3014: "(",
        0x3015: ")",
        0x3016: "(",
        0x3017: ")",
        0x3018: "(",
        0x3019: ")",
        0x301A: "(",
        0x301B: ")",
        0x301C: "~",
        0x301D: "(kigou)",
        0x301E: "\"",
        0x301F: "(kigou)",
        0x3020: "(kigou)",
    }
}

// U3030 - 3040
// 〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾〿぀
// Wavy dash and punctuation
func (convertTables) SymbolTable2() map[rune]string {
    return map[rune]string{
        0x3030: "-",
        0x3031: "(kurikaesi)",
        0x3032: "(kurikaesi)",
        0x3033: "(kurikaesi)",
        0x3034: "(kurikaesi)",
        0x3035: "(kurikaesi)",
        0x3036: "(kigou)",
        0x3037: "XX",
        0x3038: "",
        0x3039: "",
        0x303A: "",
        0x303B: "",
        0x303C: "(masu)",
        0x303D: "(kurikaesi)",
        0x303E: " ",
        0x303F: " ",
        0x3040: " ",
    }
}

// U0391 - 03A9
// ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
// Greek capital letters
func (convertTables) SymbolTable3() map[rune]string {
    return map[rune]string{
        0x0391: "Alpha",
        0x0392: "Beta",
        0x0393: "Gamma",
        0x0394: "Delta",
        0x0395: "Epsilon",
        0x0396: "Zeta",
        0x0397: "Eta",
        0x0398: "Theta",
        0x0399: "Iota",
        0x039A: "Kappa",
        0x039B: "Lambda",
        0x039C: "Mu",
        0x039D: "Nu",
        0x039E: "Xi",
        0x039F: "Omicron",
        0x03A0: "Pi",
        0x03A1: "Rho",
        0x03A2: "", // not used
        0x03A3: "Sigma",
        0x03A4: "Tau",
        0x03A5: "Upsilon",
        0x03A6: "Phi",
        0x03A7: "Chi",
        0x03A8: "Psi",
        0x03A9: "Omega",
    }
}

// U03B1 - 03C9
// αβγδεζηθικλμνξοπρστυφχψω
// Greek small letters
func (convertTables) SymbolTable4() map[rune]string {
    return map[rune]string{
        0x03B1: "alpha",
        0x03B2: "beta",
        0x03B3: "gamma",
        0x03B4: "delta",
        0x03B5: "epsilon",
        0x03B6: "zeta",
        0x03B7: "eta",
        0x03B8: "theta",
        0x03B9: "iota",
        0x03BA: "kappa",
        0x03BB: "lambda",
        0x03BC: "mu",
        0x03BD: "nu",
        0x03BE: "xi",
        0x03BF: "omicron",
        0x03C0: "pi",
        0x03C1: "rho",
        0x03C2: "final sigma",
        0x03C3: "sigma",
        0x03C4: "tau",
        0x03C5: "upsilon",
        0x03C6: "phi",
        0x03C7: "chi",
        0x03C8: "psi",
        0x03C9: "omega",
    }
}

// UFF01-FF0F
// !"#$%&'()*+,-./
func (convertTables) SymbolTable5() map[rune]string {
    return map[rune]string{
        0xFF01: "!",
        0xFF02: "\"",
        0xFF03: "#",
        0xFF04: "$",
        0xFF05: "%",
        0xFF06: "&",
        0xFF07: "'",
        0xFF08: "(",
        0xFF09: ")",
        0xFF0A: "*",
        0xFF0B: "+",
        0xFF0C: ",",
        0xFF0D: "-",
        0xFF0E: ".",
        0xFF0F: "/",
    }
}