# General compose rules:
#
#   ‘C X’ means ‘Compose + X’
#   U+22C6 STAR OPERATOR (‘⋆’) represents an arbitrary key
#
#   C ⋆ '    A letter with an acute
#   C ⋆ u    A letter with a breve
#   C ⋆ v    A letter with a caron
#   C ⋆ ,    A letter with a cedilla
#   C ⋆ ^    A letter with a circumflex
#   C ⋆ :    A letter with a diaeresis
#   C ⋆ .    A letter with a dot
#   C ⋆ "    A letter with a double-acute
#   C ⋆ `    A letter with a grave
#   C ⋆ -    A letter with a macron
#   C ⋆ ;    A letter with an ogonek
#   C ⋆ o    A letter with a ring
#   C ⋆ /    A letter with a slash or strikethrough
#   C ⋆ ~    A letter with a tilde
#   C ⋆ *    The Greek letter ‘⋆’
#   C _ ⋆    Subscript ‘⋆’
#   C ^ ⋆    Superscript ‘⋆’
#   C l ⋆    Propositional logic operators
#
#   Ligatures or other glyphs that are compose of multiple characters are
#   straight forwards.  For example ‘C I J’ produces ‘IJ’.
#
#   Math symbols typically use programming counterparts if they exist,
#   for example ‘C ! =’ produces ‘≠’.  Other symbols that look similar to
#   ASCII symbols are formed via repetition, for example ‘C * *’ produces
#   ‘⋆’.
#
#   NOTE: System config at /usr/share/X11/locale/en_US.UTF-8/Compose
#

# Propositional Logic
<Multi_key> <l> <a> : "∧" U2227 # [L]ogical [A]nd
<Multi_key> <l> <e> : "⇔" U21D4 # [L]ogical [E]quivalence
<Multi_key> <l> <i> : "⇒" U21D2 # [L]ogical [I]mplication
<Multi_key> <l> <n> : "¬" U00AC # [L]ogical [N]ot
<Multi_key> <l> <o> : "∨" U2228 # [L]ogical [O]r
<Multi_key> <l> <x> : "⊕" U2295 # [L]ogical [X]or

# Math
<Multi_key> <asterisk> <asterisk>     : "⋆" U22C6
<Multi_key> <exclam> <equal>          : "≠" U2260
<Multi_key> <greater> <equal>         : "≥" U2265
<Multi_key> <less> <equal>            : "≤" U2264
<Multi_key> <minus> <colon>           : "÷" division
<Multi_key> <parenleft> <parenleft>   : "⟮" U27EE
<Multi_key> <parenright> <parenright> : "⟯" U27EF
<Multi_key> <period> <period>         : "⋅" U22C5
<Multi_key> <plus> <minus>            : "±" plusminus
<Multi_key> <x> <x>                   : "×" multiply

# Typographical Symbols
<Multi_key> <greater> <greater> : "»" U00BB
<Multi_key> <less> <less>       : "«" U00AB
<Multi_key> <less> <minus>      : "←" U2190
<Multi_key> <minus> <greater>   : "→" U2192
<Multi_key> <minus> <m>         : "—" U2014
<Multi_key> <minus> <n>         : "–" U2013
<Multi_key> <o> <c>             : "℃" U2103
<Multi_key> <o> <f>             : "℉" U2109
<Multi_key> <o> <o>             : "°" U00B0

# Latin Alphabet — Acute
<Multi_key> <a> <apostrophe> : "á" aacute
<Multi_key> <A> <apostrophe> : "Á" Aacute
<Multi_key> <C> <apostrophe> : "Ć" U0106
<Multi_key> <c> <apostrophe> : "ć" U0107
<Multi_key> <e> <apostrophe> : "é" eacute
<Multi_key> <E> <apostrophe> : "É" Eacute
<Multi_key> <G> <apostrophe> : "Ǵ" U01F4
<Multi_key> <g> <apostrophe> : "ǵ" U01F5
<Multi_key> <i> <apostrophe> : "í" iacute
<Multi_key> <I> <apostrophe> : "Í" Iacute
<Multi_key> <K> <apostrophe> : "Ḱ" U1E30
<Multi_key> <k> <apostrophe> : "ḱ" U1E31
<Multi_key> <L> <apostrophe> : "Ĺ" U0139
<Multi_key> <l> <apostrophe> : "ĺ" U013A
<Multi_key> <M> <apostrophe> : "Ḿ" U1E3E
<Multi_key> <m> <apostrophe> : "ḿ" U1E3F
<Multi_key> <N> <apostrophe> : "Ń" U0143
<Multi_key> <n> <apostrophe> : "ń" U0144
<Multi_key> <o> <apostrophe> : "ó" oacute
<Multi_key> <O> <apostrophe> : "Ó" Oacute
<Multi_key> <P> <apostrophe> : "Ṕ" U1E54
<Multi_key> <p> <apostrophe> : "ṕ" U1E55
<Multi_key> <R> <apostrophe> : "Ŕ" U0154
<Multi_key> <r> <apostrophe> : "ŕ" U0155
<Multi_key> <S> <apostrophe> : "Ś" U015A
<Multi_key> <s> <apostrophe> : "ś" U015B
<Multi_key> <u> <apostrophe> : "ú" uacute
<Multi_key> <U> <apostrophe> : "Ú" Uacute
<Multi_key> <W> <apostrophe> : "Ẃ" U1E82
<Multi_key> <w> <apostrophe> : "ẃ" U1E83
<Multi_key> <y> <apostrophe> : "ý" yacute
<Multi_key> <Y> <apostrophe> : "Ý" Yacute
<Multi_key> <Z> <apostrophe> : "Ź" U0179
<Multi_key> <z> <apostrophe> : "ź" U017A

# Latin Alphabet — Breve
<Multi_key> <a> <u> : "ă" abreve
<Multi_key> <A> <u> : "Ă" Abreve
<Multi_key> <E> <u> : "Ĕ" U0114
<Multi_key> <e> <u> : "ĕ" U0115
<Multi_key> <g> <u> : "ğ" gbreve
<Multi_key> <G> <u> : "Ğ" Gbreve
<Multi_key> <i> <u> : "ĭ" ibreve
<Multi_key> <I> <u> : "Ĭ" Ibreve
<Multi_key> <O> <u> : "Ŏ" U014E
<Multi_key> <o> <u> : "ŏ" U014F
<Multi_key> <u> <u> : "ŭ" ubreve
<Multi_key> <U> <u> : "Ŭ" Ubreve

# Latin Alphabet — Caron
<Multi_key> <A> <v> : "Ǎ" U01CD
<Multi_key> <a> <v> : "ǎ" U01CE
<Multi_key> <c> <v> : "č" ccaron
<Multi_key> <C> <v> : "Č" Ccaron
<Multi_key> <d> <v> : "ď" dcaron
<Multi_key> <D> <v> : "Ď" Dcaron
<Multi_key> <e> <v> : "ě" ecaron
<Multi_key> <E> <v> : "Ě" Ecaron
<Multi_key> <g> <v> : "ǧ" gcaron
<Multi_key> <G> <v> : "Ǧ" Gcaron
<Multi_key> <H> <v> : "Ȟ" U021E
<Multi_key> <h> <v> : "ȟ" U021F
<Multi_key> <I> <v> : "Ǐ" U01CF
<Multi_key> <i> <v> : "ǐ" U01D0
<Multi_key> <j> <v> : "ǰ" U01F0 # NOTE: No uppercase in Unicode
<Multi_key> <K> <v> : "Ǩ" U01E8
<Multi_key> <k> <v> : "ǩ" U01E9
<Multi_key> <l> <v> : "ľ" lcaron
<Multi_key> <L> <v> : "Ľ" Lcaron
<Multi_key> <n> <v> : "ň" ncaron
<Multi_key> <N> <v> : "Ň" Ncaron
<Multi_key> <o> <v> : "ǒ" ocaron
<Multi_key> <O> <v> : "Ǒ" Ocaron
<Multi_key> <r> <v> : "ř" rcaron
<Multi_key> <R> <v> : "Ř" Rcaron
<Multi_key> <s> <v> : "š" scaron
<Multi_key> <S> <v> : "Š" Scaron
<Multi_key> <t> <v> : "ť" tcaron
<Multi_key> <T> <v> : "Ť" Tcaron
<Multi_key> <U> <v> : "Ǔ" U01D3
<Multi_key> <u> <v> : "ǔ" U01D4
<Multi_key> <z> <v> : "ž" zcaron
<Multi_key> <Z> <v> : "Ž" Zcaron

# Latin Alphabet — Cedilla
<Multi_key> <c> <comma> : "ç" ccedilla
<Multi_key> <C> <comma> : "Ç" ccedilla
<Multi_key> <D> <comma> : "Ḑ" U1E10
<Multi_key> <d> <comma> : "ḑ" U1E11
<Multi_key> <E> <comma> : "Ȩ" U0228
<Multi_key> <e> <comma> : "ȩ" U0229
<Multi_key> <g> <comma> : "ģ" U0121
<Multi_key> <G> <comma> : "Ģ" U0122
<Multi_key> <H> <comma> : "Ḩ" U1E28
<Multi_key> <h> <comma> : "ḩ" U1E29
<Multi_key> <K> <comma> : "Ķ" U0136
<Multi_key> <k> <comma> : "ķ" U0137
<Multi_key> <L> <comma> : "Ļ" U012C
<Multi_key> <l> <comma> : "ļ" U013C
<Multi_key> <N> <comma> : "Ņ" U0145
<Multi_key> <n> <comma> : "ņ" U0146
<Multi_key> <R> <comma> : "Ŗ" U0156
<Multi_key> <r> <comma> : "ŗ" U0157
<Multi_key> <S> <comma> : "Ş" U015E
<Multi_key> <s> <comma> : "ş" U015F
<Multi_key> <T> <comma> : "Ţ" U0162
<Multi_key> <t> <comma> : "ţ" U0163

# Latin Alphabet - Circumflex
<Multi_key> <a> <asciicircum> : "â" acircumflex
<Multi_key> <A> <asciicircum> : "Â" Acircumflex
<Multi_key> <C> <asciicircum> : "Ĉ" U0108
<Multi_key> <c> <asciicircum> : "ĉ" U0109
<Multi_key> <e> <asciicircum> : "ê" ecircumflex
<Multi_key> <E> <asciicircum> : "Ê" Ecircumflex
<Multi_key> <g> <asciicircum> : "Ĝ" U011C
<Multi_key> <g> <asciicircum> : "ĝ" U011D
<Multi_key> <H> <asciicircum> : "Ĥ" U0124
<Multi_key> <h> <asciicircum> : "ĥ" U0125
<Multi_key> <i> <asciicircum> : "î" icircumflex
<Multi_key> <I> <asciicircum> : "Î" Icircumflex
<Multi_key> <J> <asciicircum> : "Ĵ" U0134
<Multi_key> <j> <asciicircum> : "ĵ" U0135
<Multi_key> <o> <asciicircum> : "ô" ocircumflex
<Multi_key> <O> <asciicircum> : "Ô" Ocircumflex
<Multi_key> <S> <asciicircum> : "Ŝ" U015C
<Multi_key> <s> <asciicircum> : "ŝ" U015D
<Multi_key> <u> <asciicircum> : "û" ucircumflex
<Multi_key> <U> <asciicircum> : "Û" Ucircumflex
<Multi_key> <W> <asciicircum> : "Ŵ" U0174
<Multi_key> <w> <asciicircum> : "ŵ" U0175
<Multi_key> <Y> <asciicircum> : "Ŷ" U0176
<Multi_key> <y> <asciicircum> : "ŷ" U0177
<Multi_key> <Z> <asciicircum> : "Ẑ" U1E90
<Multi_key> <z> <asciicircum> : "ẑ" U1E91

# Latin Alphabet — Dot
# TODO

# Latin Alphabet — Diaeresis
<Multi_key> <a> <colon> : "ä" adiaeresis
<Multi_key> <A> <colon> : "Ä" Adiaeresis
<Multi_key> <e> <colon> : "ë" adiaeresis
<Multi_key> <E> <colon> : "Ë" Ediaeresis
<Multi_key> <H> <colon> : "Ḧ" U1E26
<Multi_key> <h> <colon> : "ḧ" U1E27
<Multi_key> <i> <colon> : "ï" adiaeresis
<Multi_key> <I> <colon> : "Ï" Idiaeresis
<Multi_key> <o> <colon> : "ö" adiaeresis
<Multi_key> <O> <colon> : "Ö" Odiaeresis
<Multi_key> <t> <colon> : "ẗ" U1E97 # NOTE: No uppercase in Unicode
<Multi_key> <u> <colon> : "ü" adiaeresis
<Multi_key> <U> <colon> : "Ü" Udiaeresis
<Multi_key> <W> <colon> : "Ẅ" U1E84
<Multi_key> <w> <colon> : "ẅ" U1E85
<Multi_key> <X> <colon> : "Ẍ" U1E8C
<Multi_key> <x> <colon> : "ẍ" U1E8D
<Multi_key> <Y> <colon> : "Ÿ" U0178
<Multi_key> <y> <colon> : "ÿ" ydiaeresis


# Latin Alphabet — Double-Acute
<Multi_key> <o> <quotedbl> : "ő" odoubleacute
<Multi_key> <O> <quotedbl> : "Ő" Odoubleacute
<Multi_key> <u> <quotedbl> : "ű" udoubleacute
<Multi_key> <U> <quotedbl> : "Ű" Udoubleacute

# Latin Alphabet — Grave
# TODO

# Latin Alphabet — Macron
# TODO

# Latin Alphabet — Ogonek
<Multi_key> <a> <semicolon> : "ą" aogonek
<Multi_key> <A> <semicolon> : "Ą" Aogonek
<Multi_key> <e> <semicolon> : "ę" eogonek
<Multi_key> <E> <semicolon> : "Ę" Eogonek
<Multi_key> <i> <semicolon> : "į" iogonek
<Multi_key> <I> <semicolon> : "Į" Iogonek
<Multi_key> <o> <semicolon> : "ǫ" U01EB
<Multi_key> <O> <semicolon> : "Ǫ" U01EA
<Multi_key> <u> <semicolon> : "ų" uogonek
<Multi_key> <U> <semicolon> : "Ų" Uogonek

# Latin Alphabet — Ring
<Multi_key> <a> <o> : "å" aring
<Multi_key> <A> <o> : "Å" Aring
<Multi_key> <U> <o> : "Ů" U016E
<Multi_key> <u> <o> : "ů" U016F
<Multi_key> <w> <o> : "ẘ" U1E98 # NOTE: No uppercase in Unicode
<Multi_key> <y> <o> : "ẙ" U1E99 # NOTE: No uppercase in Unicode

# Latin Alphabet — Slash & Strikethrough
# NOTE: Eth and D-Stroke conflict, but ð is more curvy than đ, so use
# slash for the former and minus for the latter.
<Multi_key> <d> <minus> : "đ" dstroke
<Multi_key> <D> <minus> : "Đ" Dstroke
<Multi_key> <d> <slash> : "ð" eth
<Multi_key> <D> <slash> : "Ð" ETH
<Multi_key> <h> <slash> : "ħ" U0126
<Multi_key> <H> <slash> : "Ħ" U0126
<Multi_key> <L> <slash> : "Ł" U0141
<Multi_key> <l> <slash> : "ł" U0142
<Multi_key> <o> <slash> : "ø" oslash
<Multi_key> <O> <slash> : "Ø" Oslash

# Latin Alphabet — Tilde
# TODO

# Latin Alphabet — Ligatures & Multiglyphs
<Multi_key> <a> <e>               : "æ" ae
<Multi_key> <A> <E>               : "Æ" AE
<Multi_key> <D> <Z>               : "DŽ" U01C4
<Multi_key> <D> <z>               : "Dž" U01C5
<Multi_key> <d> <z>               : "dž" U01C6
<Multi_key> <exclam> <exclam>     : "¡" exclamdown
<Multi_key> <exclam> <question>   : "‽" U203D
<Multi_key> <f> <f> <f>           : "ff" UFB00
<Multi_key> <f> <f> <i>           : "ffi" UFB03
<Multi_key> <f> <f> <l>           : "ffl" UFB04
<Multi_key> <f> <i>               : "fi" UFB01
<Multi_key> <f> <l>               : "fl" UFB02
<Multi_key> <I> <J>               : "IJ" U0132
<Multi_key> <i> <j>               : "ij" U0133
<Multi_key> <L> <J>               : "LJ" U01C7
<Multi_key> <L> <j>               : "Lj" U01C8
<Multi_key> <l> <j>               : "lj" U01C9
<Multi_key> <N> <J>               : "NJ" U01CA
<Multi_key> <N> <j>               : "Nj" U01CB
<Multi_key> <n> <j>               : "nj" U01CC
<Multi_key> <N> <o>               : "№" numerosign
<Multi_key> <o> <e>               : "œ" oe
<Multi_key> <O> <E>               : "Œ" OE
<Multi_key> <question> <exclam>   : "⸘" U2E18
<Multi_key> <question> <question> : "¿" questiondown
<Multi_key> <s> <l>               : "ſ" U017F # [s]-[l]ong
<Multi_key> <s> <t>               : "st" UFB06

# Latin Alphabet — Extended
<Multi_key> <s> <s> : "ß" ssharp # [s]harp [s]
<Multi_key> <S> <S> : "ẞ" U1E9E  # [S]HARP [S]
<Multi_key> <t> <h> : "þ" thorn  # [t][h]orn
<Multi_key> <T> <H> : "Þ" THORN  # [T][H]ORN

# Greek Alphabet
<Multi_key> <A> <asterisk> : "Α" U0391
<Multi_key> <a> <asterisk> : "α" U03B1
<Multi_key> <B> <asterisk> : "Β" U0392
<Multi_key> <b> <asterisk> : "β" U03B2
<Multi_key> <D> <asterisk> : "Δ" U0394
<Multi_key> <d> <asterisk> : "δ" U03B4
<Multi_key> <E> <asterisk> : "Ε" U0395
<Multi_key> <e> <asterisk> : "ε" U03B5
<Multi_key> <F> <asterisk> : "Φ" U03A6
<Multi_key> <f> <asterisk> : "φ" U03C6
<Multi_key> <G> <asterisk> : "Γ" U0393
<Multi_key> <g> <asterisk> : "γ" U03B3
<Multi_key> <H> <asterisk> : "Η" U0397
<Multi_key> <h> <asterisk> : "η" U03B7
<Multi_key> <I> <asterisk> : "Ι" U0399
<Multi_key> <i> <asterisk> : "ι" U03B9
<Multi_key> <J> <asterisk> : "Θ" U0398
<Multi_key> <j> <asterisk> : "θ" U03B8
<Multi_key> <K> <asterisk> : "Κ" U039A
<Multi_key> <k> <asterisk> : "κ" U03BA
<Multi_key> <L> <asterisk> : "Λ" U039B
<Multi_key> <l> <asterisk> : "λ" U03BB
<Multi_key> <M> <asterisk> : "Μ" U039C
<Multi_key> <m> <asterisk> : "μ" U03BC
<Multi_key> <N> <asterisk> : "Ν" U039D
<Multi_key> <n> <asterisk> : "ν" U03BD
<Multi_key> <O> <asterisk> : "Ο" U039F
<Multi_key> <o> <asterisk> : "ο" U03BF
<Multi_key> <P> <asterisk> : "Π" U03A0
<Multi_key> <p> <asterisk> : "π" U03C0
<Multi_key> <Q> <asterisk> : "Χ" U03A7
<Multi_key> <q> <asterisk> : "χ" U03C7
<Multi_key> <R> <asterisk> : "Ρ" U03A1
<Multi_key> <r> <asterisk> : "ρ" U03C1
<Multi_key> <S> <asterisk> : "Σ" U03A3
<Multi_key> <s> <asterisk> : "σ" U03C3
<Multi_key> <T> <asterisk> : "Τ" U03A4
<Multi_key> <t> <asterisk> : "τ" U03C4
<Multi_key> <U> <asterisk> : "Υ" U03A5
<Multi_key> <u> <asterisk> : "υ" U03C5
<Multi_key> <W> <asterisk> : "Ω" U03A9
<Multi_key> <w> <asterisk> : "ω" U03C9
<Multi_key> <X> <asterisk> : "Ξ" U039E
<Multi_key> <x> <asterisk> : "ξ" U03BE
<Multi_key> <Y> <asterisk> : "Ψ" U03A8
<Multi_key> <y> <asterisk> : "ψ" U03C8
<Multi_key> <Z> <asterisk> : "Ζ" U0396
<Multi_key> <z> <asterisk> : "ζ" U03B6
<Multi_key> <asterisk> <s> : "ς" U03C2 # NOTE: Special case for final sigma

# Superscript
<Multi_key> <asciicircum> <0>          : "⁰" U2070
<Multi_key> <asciicircum> <1>          : "¹" U00B9
<Multi_key> <asciicircum> <2>          : "²" U00B2
<Multi_key> <asciicircum> <3>          : "³" U00B3
<Multi_key> <asciicircum> <4>          : "⁴" U2074
<Multi_key> <asciicircum> <5>          : "⁵" U2075
<Multi_key> <asciicircum> <6>          : "⁶" U2076
<Multi_key> <asciicircum> <7>          : "⁷" U2077
<Multi_key> <asciicircum> <8>          : "⁸" U2078
<Multi_key> <asciicircum> <9>          : "⁹" U2079
<Multi_key> <asciicircum> <i>          : "ⁱ" U2071
<Multi_key> <asciicircum> <minus>      : "⁻" U207B
<Multi_key> <asciicircum> <n>          : "ⁿ" U207F
<Multi_key> <asciicircum> <parenleft>  : "⁽" U207D
<Multi_key> <asciicircum> <parenright> : "⁾" U207E
<Multi_key> <asciicircum> <plus>       : "⁺" U207A

# Subscript
<Multi_key> <underscore> <0>          : "₀" U2080
<Multi_key> <underscore> <1>          : "₁" U2081
<Multi_key> <underscore> <2>          : "₂" U2082
<Multi_key> <underscore> <3>          : "₃" U2083
<Multi_key> <underscore> <4>          : "₄" U2084
<Multi_key> <underscore> <5>          : "₅" U2085
<Multi_key> <underscore> <6>          : "₆" U2086
<Multi_key> <underscore> <7>          : "₇" U2087
<Multi_key> <underscore> <8>          : "₈" U2088
<Multi_key> <underscore> <9>          : "₉" U2089
<Multi_key> <underscore> <a>          : "ₐ" U2090
<Multi_key> <underscore> <e>          : "ₑ" U2090
<Multi_key> <underscore> <h>          : "ₕ" U2095
<Multi_key> <underscore> <i>          : "ᵢ" U1D62
<Multi_key> <underscore> <j>          : "ⱼ" U2C7C
<Multi_key> <underscore> <k>          : "ₖ" U2089
<Multi_key> <underscore> <l>          : "ₗ" U2097
<Multi_key> <underscore> <minus>      : "₋" U2089
<Multi_key> <underscore> <m>          : "ₘ" U2098
<Multi_key> <underscore> <n>          : "ₙ" U2099
<Multi_key> <underscore> <o>          : "ₒ" U2092
<Multi_key> <underscore> <parenleft>  : "₍" U2089
<Multi_key> <underscore> <parenright> : "₎" U2089
<Multi_key> <underscore> <plus>       : "₊" U2089
<Multi_key> <underscore> <p>          : "ₚ" U209A
<Multi_key> <underscore> <r>          : "ᵣ" U1D63
<Multi_key> <underscore> <s>          : "ₛ" U209B
<Multi_key> <underscore> <t>          : "ₜ" U209C
<Multi_key> <underscore> <u>          : "ᵤ" U1D64
<Multi_key> <underscore> <v>          : "ᵥ" U1D65
<Multi_key> <underscore> <x>          : "ₓ" U2093