import OrderedCollections

extension InputTables {
    static let defaultKanaJISPieceMap = InputTables.Helper.constructPieceMap([
        // 数字キー
        "1": "ぬ",
        "2": "ふ",
        "3": "あ",
        "4": "う",
        "5": "え",
        "6": "お",
        "7": "や",
        "8": "ゆ",
        "9": "よ",
        "0": "わ",

        // シフト列
        "＃": "ぁ",
        "＄": "ぅ",
        "％": "ぇ",
        "＆": "ぉ",
        "’": "ゃ",
        "（": "ゅ",
        "）": "ょ",
        // Shift+0は特殊ケースなので下で対応

        // 文字キー（第1列）
        "q": "た",
        "w": "て",
        "e": "い",
        "r": "す",
        "t": "か",
        "y": "ん",
        "u": "な",
        "i": "に",
        "o": "ら",
        "p": "せ",

        // Shift
        "E": "ぃ",

        // 文字キー（第2列）
        "a": "ち",
        "s": "と",
        "d": "し",
        "f": "は",
        "g": "き",
        "h": "く",
        "j": "ま",
        "k": "の",
        "l": "り",

        // 文字キー（第3列）
        "z": "つ",
        "x": "さ",
        "c": "そ",
        "v": "ひ",
        "b": "こ",
        "n": "み",
        "m": "も",

        // Shift
        "Z": "っ",

        // 記号キー
        "ー": "ほ",
        "＾": "へ",
        "；": "れ",
        "：": "け",
        "、": "ね",
        "。": "る",
        "・": "め",
        "＿": "ろ",
        "」": "む",
        // FIXME: ここは設定依存と思われる
        "￥": "ー",
        "＼": "ー",

        // Shift
        "『": "「",
        "』": "」",
        "＜": "、",
        "＞": "。",
        "？": "・",

        // 濁点
        "＠": "゛",
        "う＠": "ゔ",

        "か＠": "が",
        "き＠": "ぎ",
        "く＠": "ぐ",
        "け＠": "げ",
        "こ＠": "ご",

        "さ＠": "ざ",
        "し＠": "じ",
        "す＠": "ず",
        "せ＠": "ぜ",
        "そ＠": "ぞ",

        "た＠": "だ",
        "ち＠": "ぢ",
        "つ＠": "づ",
        "て＠": "で",
        "と＠": "ど",

        "は＠": "ば",
        "ひ＠": "び",
        "ふ＠": "ぶ",
        "へ＠": "べ",
        "ほ＠": "ぼ",

        // 半濁点
        "「": "゜",
        "は「": "ぱ",
        "ひ「": "ぴ",
        "ふ「": "ぷ",
        "へ「": "ぺ",
        "ほ「": "ぽ"
    ], additionalMapping: [
        [.piece(.compositionSeparator)]: [],
        [.piece(.key(intention: "0", input: "0", modifiers: [.shift]))]: [.character("を")]
    ])
}
