;; -*- Mode: lisp; outline-tree: user-regexp-lisp-dots; Encoding: UTF-8N; -*-

(in-package "editor")

;; キーバインドの最初の1文字
;; (setq *character-keymap-key* #\DEL) ;; #\DEL == C-?

;; (``関数名'' ``挿入文字'' ``キーバインド'' ``リージョンの置換用正規表現兼abbrev用コマンド'') のリスト
;; 第3・第4列は省略可
(setq *character-key-definition*
      '(
	(insert-line                        "----------------------------------------------------\n" (#\DEL #\-))

	;; subscript / supscript
	(insert-subscript0                  "₀" (#\0)               "_0")
	(insert-subscript1                  "₁" (#\1)               "_1")
	(insert-subscript2                  "₂" (#\2)               "_2")
	(insert-subscript3                  "₃" (#\3)               "_3")
	(insert-subscript4                  "₄" (#\4)               "_4")
	(insert-subscript5                  "₅" (#\5)               "_5")
	(insert-subscript6                  "₆" (#\6)               "_6")
	(insert-subscript7                  "₇" (#\7)               "_7")
	(insert-subscript8                  "₈" (#\8)               "_8")
	(insert-subscript9                  "₉" (#\9)               "_9")
	(insert-subscript+                  "₊" nil                 "_+")
	(insert-subscript-                  "₋" nil                 "_-")
	(insert-subscript=                  "₌" nil                 "_=")
	(insert-subscriptl                  "₍" nil                 "_(")
	(insert-subscriptr                  "₎" nil                 "_)")
	(insert-supscript0                  "º" (#\^ #\0)           "^0")
	(insert-supscript1                  "¹" (#\^ #\1)           "^1")
	(insert-supscript2                  "²" (#\^ #\2)           "^2")
	(insert-supscript3                  "³" (#\^ #\3)           "^3")
	(insert-supscript4                  "⁴" (#\^ #\4)           "^4")
	(insert-supscript5                  "⁵" (#\^ #\5)           "^5")
	(insert-supscript6                  "⁶" (#\^ #\6)           "^6")
	(insert-supscript7                  "⁷" (#\^ #\7)           "^7")
	(insert-supscript8                  "⁸" (#\^ #\8)           "^8")
	(insert-supscript9                  "⁹" (#\^ #\9)           "^9")
	(insert-supscript+                  "⁺" (#\^ #\+)           "^+")
	(insert-supscript-                  "⁻" (#\^ #\-)           "^-")
	(insert-supscript=                  "⁼" (#\^ #\=)           "^=")
	(insert-supscriptlp                 "⁽" (#\^ #\()           "^(")
	(insert-supscriptrp                 "⁾" (#\^ #\))           "^)")
	(latin1-supscripta  		    "ª" (#\^ #\a)           "^a")
	(insert-supscriptn                  "ⁿ" (#\^ #\n)           "^n")
	(insert-supscriptr                  "ʳ" (#\^ #\r)           "^r")

	;; ギリシャ文字
	(insert-alpha                       "α"  (#\a)              "\\\\alpha\\>")
	(insert-beta                        "β"  (#\b)              "\\\\beta\\>")
	(insert-gamma                       "γ"  (#\g)              "\\\\gamma\\>")
	(insert-delta                       "δ"  (#\d)              "\\\\delta\\>")
	(insert-epsilon                     "ε"  (#\e)              "\\\\epsilon\\>")
	(insert-zeta                        "ζ"  nil                "\\\\zeta\\>")
	(insert-eta                         "η"  nil                "\\\\eta\\>")
	(insert-theta                       "θ"  (#\h)              "\\\\theta\\>")
	(insert-iota                        "ι"  nil                "\\\\iota\\>")
	(insert-kappa                       "κ"  nil                "\\\\kappa\\>")
	(insert-lambda                      "λ"  (#\l)              "\\\\lambda\\>")
	(insert-mu                          "μ"  (#\m)              "\\\\mu\\>")
	(insert-nu                          "ν"  nil                "\\\\nu\\>")
	(insert-xi                          "ξ"  nil                "\\\\xi\\>")
	(insert-pi                          "π"  nil                "\\\\pi\\>")
	(insert-rho                         "ρ"  (#\r)              "\\\\rho\\>")
	(insert-sigma                       "σ"  (#\s)              "\\\\sigma\\>")
	(insert-varsigma                    "ς"  nil                "\\\\varsigma\\>")
	(insert-tau                         "τ"  (#\t)              "\\\\tau\\>")
	(insert-upsilon                     "υ"  nil                "\\\\upsilon\\>")
	(insert-phi                         "φ"  (#\p)              "\\\\phi\\>")
	(insert-chi                         "χ"  nil                "\\\\chi\\>")
	(insert-psi                         "ψ"  (#\q)              "\\\\psi\\>")
	(insert-omega                       "ω"  (#\w)              "\\\\omega\\>")

	(insert-Gamma                       "Γ"  (#\G)              "\\\\Gamma\\>")
	(insert-Delta                       "Δ"  (#\D)              "\\\\Delta\\>")
	(insert-Sigma                       "∑" (#\S)              "\\\\Sigma\\>")
	(insert-Phi                         "Φ"  (#\P)              "\\\\Phi\\>")
	(insert-Psi                         "Ψ"  (#\Q)              "\\\\Psi\\>")
	(insert-Omega                       "Ω"  (#\O)              "\\\\Omega\\>")
	(insert-Theta                       "Θ"  nil                "\\\\Theta\\>")
	(insert-Xi                          "Ξ"  nil                "\\\\Xi\\>")
	(insert-Lambda                      "Λ"  nil                "\\\\Lambda\\>")
	(insert-Pi                          "Π"  nil                "\\\\Pi\\>")
	(insert-Chi                         "Χ"  nil                "\\\\Chi\\>")

	(insert-alpha-acute                 "ά"         (#\' #\8)   "\\\\'alpha\\>")
	(insert-epsilon-acute               "έ"         (#\' #\3)   "\\\\'epsilon\\>")
	(insert-eta-acute                   "ή"         (#\' #\7)   "\\\\'eta\\>")
	(insert-iota-acute                  "ί"         (#\' #\1)   "\\\\'iota\\>")
	(insert-omega-acute                 "ώ"         nil         "\\\\'omega\\>")
	(insert-upsilon-acute               "ύ"         nil         "\\\\'upsilon\\>")

	;; 数学記号
	(insert-pound                       "￡" #\L)
	(insert-negation                    "￢" #\!                "\\\\not\\>")
	(insert-land                        "∧" #\&                "\\\\land\\>")
	(insert-land                        "∧" #\&                "/\\\\")
	(insert-land                        "∧" #\&                "\\\\wedge\\>")
	(insert-lor                         "∨" #\|                "\\\\lor\\>")
	(insert-lor                         "∨" #\|                "\\\\/")
	(insert-lor                         "∨" #\|                "\\\\vee\\>")
	(insert-Leq                         "≦" #\<                "\\\\Leq\\>")
	(insert-Geq                         "≧" #\>                "\\\\Geq\\>")
	(insert-set-in                      "∈" #\i                "\\\\in\\>" t)
	(insert-set-ni                      "∋" nil                "\\\\ni\\>" t)
	(insert-not-equal                   "≠" (#\= #\/)          "\\\\Neq\\>")
	(insert-equiv                       "≡" (#\= #\-)          "\\\\equiv\\>")
	(insert-defeq                       "≝"  (#\= #\d)          "\\\\defeq\\>")
	(insert-triangleq                   "≜"  (#\= #\t)          "\\\\triangleq\\>")
	(insert-neq                         "≢"         nil         "\\\\neq\\>")
	

	(insert-forall                      "∀" #\A                "\\\\forall\\>")
	(insert-exists                      "∃" #\E                "\\\\exists\\>")
	(insert-provable                    "⊢" (#\C-_ #\-)         "\\\\vdash\\>") ;; |-
	(insert-models                      "⊨" (#\C-_ #\=)         "\\\\models\\>") ;; |=
	(insert-therefore                   "∴"       nil          "\\\\therefore\\>")
	(insert-since                       "∵"       nil          "\\\\since\\>")
	(insert-because                     "∵"       nil          "\\\\because\\>")
	(insert-infinite                    "∞"       nil          "\\\\infinite\\>")
	(insert-times                       "×"  (#\DEL #\x)        "\\\\times\\>")
	(insert-circ                        "∘"  (#\DEL #\c)        "\\\\circ\\>")
	;(insert-                       ""         nil         "\\\\\\>")
	(insert-oplus                       "⊕"         nil         "\\\\oplus\\>")
	(insert-ominus                      "⊖"         nil         "\\\\ominus\\>")
	(insert-otimes                      "⊗"         nil         "\\\\otimes\\>")
	(insert-oslash                      "⊘"         nil         "\\\\oslash\\>")
	(insert-odot                        "⊙"         nil         "\\\\odot\\>")
	(insert-ocirc                       "⊚"         nil         "\\\\ocirc\\>")
	(insert-oasterisk                   "⊛"         nil         "\\\\oasterisk\\>")
	(insert-oeq                         "⊜"         nil         "\\\\oeq\\>")
	(insert-boxplus                     "⊞"         nil         "\\\\boxplus\\>")
	(insert-boxminus                    "⊟"         nil         "\\\\boxminus\\>")
	(insert-boxtimes                    "⊠"         nil         "\\\\boxtimes\\>")
	(insert-boxdot                      "⊡"         nil         "\\\\boxdot\\>")
	(insert-colon                       "∶"         nil         "\\\\colon\\>")
	(insert-ccolon                      "∷"         nil         "\\\\ccolon\\>")
	(insert-exclamation2                "‼"         nil         "\\\\!!\\>")
	(insert-dotdiv                      "∸"         nil         "\\\\dotdiv\\>")
	(insert-leq                         "≤"         nil         "\\\\leq\\>")
	(insert-decidable                   "≟"         nil         "\\\\deciable\\>")
	(insert-precapprox                  "≈"         nil         "\\\\precaprox\\>")
	(insert-top                         "⊤"         nil         "\\\\top\\>")
	(insert-bot                         "⊥"        nil         "\\\\bot\\>")
	(insert-notexists                   "∄"         nil         "\\\\\\notexists\\>")
	(insert-dasharrow                   "↦"         nil         "\\\\|->\\>")
	(insert-Ydown                       "⋎"         nil         "\\\\Ydown\\>")
	(insert-Yup                         "⋏"         nil         "\\\\Yup\\>")
	(insert-supscriptbar                "ˡ"         nil         "^|\\>")

	(insert-triangleleft                "⊲"         nil         "\\triangleleft\\>")
	(insert-triangleright               "⊳"         nil         "\\triangleright\\>")
	(insert-trianglelefteq              "⊴"         nil         "\\trianglelefteq\\>")
	(insert-trianglerighteq             "⊵"         nil         "\\trianglerighteq\\>")
	(insert-lhd                         "⊲"         nil         "\\triangleleft\\>")
	(insert-rhd                         "⊳"         nil         "\\triangleright\\>")
	(insert-unlhd                       "⊴"         nil         "\\trianglelefteq\\>")
	(insert-unrhd                       "⊵"         nil         "\\trianglerighteq\\>")
	(insert-intersection                "∩" (#\DEL #\&)        "\\\\cap\\>")
	(insert-union                       "∪" (#\DEL #\|)        "\\\\cup\\>")
	(insert-set-in                      "∈" (#\DEL #\i))
	(insert-subseteq                    "⊆" (#\DEL #\,)        "\\\\subseteq\\>")
	(insert-subset                      "⊂" (#\DEL #\<)        "\\\\subset\\>")
	(insert-supseteq                    "⊇" (#\DEL #\.)        "\\\\supseteq\\>")
	(insert-supset                      "⊃" (#\DEL #\>)        "\\\\supset\\>")
	(insert-sqcap                       "⊓"        nil          "\\\\sqcap\\>")
	(insert-sqcup                       "⊔"        nil          "\\\\sqcup\\>")
	(insert-sqsubset                    "⊏"        nil          "\\\\sqsubset\\>")
	(insert-sqsubset                    "⊑"        nil          "\\\\sqsubseteq\\>")
	(insert-sqsupset                    "⊐"        nil          "\\\\sqsupset\\>")
	(insert-sqsupset                    "⊒"        nil          "\\\\sqsupseteq\\>")
	(insert-udot                        "⊍"  nil                "\\\\udot\\>")
	(insert-uplus                       "⊎"         nil         "\\\\uplus\\>")

	;; arrow
	(insert-leftarrow                   "←"        nil         "\\\\leftarrow\\>")
	(insert-uparrow                     "↑"        nil         "\\\\uparrow\\>")
	(insert-rightarrow                  "→"        nil         "\\\\rightarrow\\>")
	(insert-downarrow                   "↓"        nil         "\\\\downarrow\\>")
	(insert-Leftarrow                   "⇐"        nil          "\\\\Leftarrow\\>")
	(insert-Uparrow                     "⇑"        nil          "\\\\Uparrow\\>")
	(insert-Rightarrow                  "⇒"        nil         "\\\\Rightarrow\\>")
	(insert-Downarrow                   "⇓"        nil          "\\\\Downarrow\\>")
	(insert-Leftrightarrow              "⇔"        nil         "\\\\Leftrightarrow\\>")
	(insert-Updownarrow                 "⇕"        nil          "\\\\Updownarrow\\>")
	(insert-leftharpoonup               "↼"        nil          "\\\\leftharpoonup\\>")
	(insert-upharpoonright              "↾"        nil          "\\\\upharpoonright\\>")
	(insert-righthapoodown              "⇁"        nil          "\\\\rightharpoondown\\>")
	(insert-downharpoonleft             "⇃"        nil          "\\\\downharpoonleft\\>")
	(insert-leftharpoondown             "↽"        nil          "\\\\leftharpoondown\\>")
	(insert-upharpoonleft               "↿"        nil          "\\\\upharpoonleft\\>")
	(insert-rightharpoonup              "⇀"        nil          "\\\\rightharpoonup\\>")
	(insert-downharpoonright            "⇂"        nil          "\\\\downharpoonright\\>")
	
	;; 白抜き文字
	(insert-C                           "ℂ" #\C                 "\\\\C\\>")
	(insert-N                           "ℕ" #\N                 "\\\\N\\>")
	(insert-Z                           "ℤ" #\Z                 "\\\\Z\\>")
	(insert-H                           "ℍ" #\H                 "\\\\H\\>")
	(insert-P                           "ℙ" #\P                 "\\\\P\\>")
	(insert-R                           "ℝ" #\R                 "\\\\R\\>")
	

	;; 記号
	(insert-star                        "⋆"         nil         "\\\\star\\>")
	(insert-box                         "■"         nil        "\\\\box\\>")
	(insert-bullet                      "●"         nil        "\\\\bullet\\>")
	;(insert-                      "●"         nil        "\\\\bullet\\>")


	(insert-double-quote-left           "“"         nil         "``")
	(insert-dobule-quote-right          "”"         nil         "''")

;; 

	(latin1-no-break-space              " " 	nil)
	(latin1-inverted-exclamation-mark   "¡" 	nil)
	(latin1-cent-sign                   "¢" 	nil         "\\\\cent\\>")
	(latin1-pound-sign                  "£" 	nil         "\\\\pound\\>")
	(latin1-currency-sign               "¤" 	nil)
	(latin1-yen-sign                    "¥" 	nil         "\\\\yen\\>")
	(latin1-broken-bar                  "¦" 	nil)
	(latin1-section-sign                "§" 	nil         "\\\\section\\>")
	(latin1-diaeresis                   "¨" 	(#\" #\"))
	(latin1-copyright-sign              "©" 	nil         "\\\\copyright\\>")
	(latin1-feminine-ordinal-indicator  "ª" 	(#\^ #\a)   "^a")
	(latin1-<<                          "«" 	nil         "\\\\llangle\\>")
	(latin1-not-sign                    "¬" 	(#\~ #\~)   "\\\\neg\\>")
	(latin1-soft-hyphen                 "­" 	nil)
	(latin1-registered-sign             "®" 	nil         "\\\\registered\\>")
	(latin1-macron                      "¯" 	nil)
	(latin1-degree-sign                 "°" 	nil         "\\\\degree\\>")
	(latin1-plus-minus-sign             "±" 	nil         "\\\\pm\\>")
	(latin1-minus-plus-sign             "∓" 	nil         "\\\\mp\\>")
	(latin1-superscript-one             "¹" 	(#\^ #\1))
	(latin1-superscript-two             "²" 	(#\^ #\2))
	(latin1-superscript-three           "³" 	(#\^ #\3))
	(latin1-acute-accent                "´" 	(#\' #\'))
	(latin1-micro-sign                  "µ" 	nil         "\\\\micro\\>")
	(latin1-pilcrow-sign                "¶" 	nil         "\\\\paragraph\\>")
	(latin1-middle-dot                  "·" 	nil         "\\\\cdot\\>")
	(latin1-cedilla                     "¸" 	(#\, #\,))
	(latin1-masculine-ordinal-indicator "º" 	(#\^ #\o)   "\\\\^o\\>")
	(latin1->>                          "»" 	nil         "\\\\rrangle\\>")
	(latin1-1/4                         "¼" 	nil         "\\\\quoter\\>")
	(latin1-1/4                         "¼" 	nil         "\\\\14\\>")
	(latin1-3/4                         "¾" 	nil         "\\\\34\\>")
	(latin1-1/2                         "½" 	nil         "\\\\half\\>")
	(latin1-1/2                         "½" 	nil         "\\\\12\\>")
	(latin1-inverted-question-mark      "¿" 	nil)

	(latin1-A-grave                     "À" 	(#\` #\A)   "\\\\\`A")
	(latin1-A-acute                     "Á" 	(#\' #\A)   "\\\\\'A")
	(latin1-A-circumflex                "Â" 	(#\^ #\A)   "\\\\\^A")
	(latin1-A-tilde                     "Ã" 	(#\~ #\A)   "\\\\\~A")
	(latin1-A-diaeresis                 "Ä" 	(#\" #\A)   "\\\\\"A")
	(latin1-A-ring-above                "Å" 	(#\@ #\A)   "\\\\\@A")
	(latin1-AE                          "Æ" 	nil)
	(latin1-C-cedilla                   "Ç" 	(#\, #\C))
	(latin1-E-grave                     "È" 	(#\` #\E)   "\\\\\`E")
	(latin1-E-acute                     "É" 	(#\' #\E)   "\\\\\'E")
	(latin1-E-circumflex                "Ê" 	(#\^ #\E)   "\\\\\^E")
	(latin1-E-diaeresis                 "Ë" 	(#\" #\E)   "\\\\\"E")
	(latin1-I-grave                     "Ì" 	(#\` #\I)   "\\\\\`I")
	(latin1-I-acute                     "Í" 	(#\' #\I)   "\\\\\'I")
	(latin1-I-circumflex                "Î" 	(#\^ #\I)   "\\\\\^I")
	(latin1-I-diaeresis                 "Ï" 	(#\" #\I)   "\\\\\"I")
	(latin1-ETH                         "Ð" 	nil)
	(latin1-N-tilde                     "Ñ" 	(#\~ #\N)   "\\\\\~N")
	(latin1-O-grave                     "Ò" 	(#\` #\O)   "\\\\\`O")
	(latin1-O-acute                     "Ó" 	(#\' #\O)   "\\\\\'O")
	(latin1-O-circumflex                "Ô" 	(#\^ #\O)   "\\\\\^O")
	(latin1-O-tilde                     "Õ" 	(#\~ #\O)   "\\\\\~O")
	(latin1-O-diaeresis                 "Ö" 	(#\" #\O)   "\\\\\"O")
	(latin1-multiplication-sign         "×" 	nil)
	(latin1-O-stroke                    "Ø" 	nil         "\\\\Emptyset\\>")
	(latin1-U-grave                     "Ù" 	(#\` #\U)   "\\\\\`U")
	(latin1-U-acute                     "Ú" 	(#\' #\U)   "\\\\\'U")
	(latin1-U-circumflex                "Û" 	(#\^ #\U)   "\\\\\^U")
	(latin1-U-diaeresis                 "Ü" 	(#\" #\U)   "\\\\\"U")
	(latin1-Y-acute                     "Ý" 	(#\' #\Y)   "\\\\\'Y")
	(latin1-THORN                       "Þ" 	nil)
	(latin1-ss                          "ß" 	nil         "\\\\ss\\>")
	(latin1-a-grave                     "à" 	(#\` #\a)   "\\\\`a")
	(latin1-a-acute                     "á" 	(#\' #\a)   "\\\\\'a")
	(latin1-a-circumflex                "â" 	(#\^ #\a)   "\\\\\^a")
	(latin1-a-tilde                     "ã" 	(#\~ #\a)   "\\\\\~a")
	(latin1-a-diaeresis                 "ä" 	(#\" #\a)   "\\\\\"a")
	(latin1-a-diaeresis                 "ä" 	(#\C-: #\a) "\\\\\"a")
	(latin1-a-ring-above                "å" 	(#\@ #\a)   "\\\\\@a")
	(latin1-ae                          "æ" 	nil)
	(latin1-c-cedilla                   "ç"	        (#\, #\c))
	(latin1-e-grave                     "è" 	(#\` #\e)   "\\\\`e")
	(latin1-e-acute                     "é" 	(#\' #\e)   "\\\\\'e")
	(latin1-e-circumflex                "ê" 	(#\^ #\e)   "\\\\\^e")
	(latin1-e-diaeresis                 "ë" 	(#\" #\e)   "\\\\\"e")
	(latin1-i-grave                     "ì" 	(#\` #\i)   "\\\\\`i")
	(latin1-i-acute                     "í" 	(#\' #\i)   "\\\\\'i")
	(latin1-i-circumflex                "î" 	(#\^ #\i)   "\\\\\^i")
	(latin1-i-diaeresis                 "ï" 	(#\" #\i)   "\\\\\"i")
	(latin1-eth                         "ð" 	nil)
	(latin1-n-tilde                     "ñ" 	(#\~ #\n)   "\\\\\~n")
	(latin1-o-grave                     "ò" 	(#\` #\o)   "\\\\`o")
	(latin1-o-acute                     "ó" 	(#\' #\o)   "\\\\\'o")
	(latin1-o-circumflex                "ô" 	(#\^ #\o)   "\\\\\^o")
	(latin1-o-tilde                     "õ" 	(#\~ #\o)   "\\\\\~o")
	(latin1-o-diaeresis                 "ö" 	(#\" #\o)   "\\\\\"o")
	(latin1-o-diaeresis                 "ö" 	(#\C-: #\o) "\\\\\"o")
	(latin1-division-sign               "÷" 	nil         "\\\\division\\>")
	(latin1-o-stroke                    "ø" 	nil         "\\\\emptyset\\>")
	(latin1-u-grave                     "ù" 	(#\` #\u)   "\\\\\`u")
	(latin1-u-acute                     "ú" 	(#\' #\u)   "\\\\\'u")
	(latin1-u-circumflex                "û" 	(#\^ #\u)   "\\\\\^u")
	(latin1-u-diaeresis                 "ü" 	(#\" #\u)   "\\\\\"u")
	(latin1-y-acute                     "ý" 	(#\' #\y)   "\\\\\`y")
	(latin1-thorn                       "þ" 	nil)
	(latin1-y-diaeresis                 "ÿ" 	(#\" #\y)   "\\\\\"y")
	))

;; (load-insert-character-config)