aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--baserefresh.pl27
-rwxr-xr-xchecklines.py34
-rw-r--r--dotXCompose90
-rw-r--r--emoji-base257
-rwxr-xr-xemojitrans2.pl22
-rwxr-xr-xscan4dups.py74
-rwxr-xr-xtreeprint.py36
8 files changed, 390 insertions, 126 deletions
diff --git a/Makefile b/Makefile
index 48602d3..80ed052 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,8 @@
-all: emoji.compose modletters.compose tags.compose maths.compose
+COMPOSED=emoji.compose modletters.compose tags.compose maths.compose
+all: $(COMPOSED)
%.compose: %-base emojitrans2.pl
./emojitrans2.pl < $< > $@
+
+clean:
+ rm -f $(COMPOSED)
diff --git a/baserefresh.pl b/baserefresh.pl
new file mode 100644
index 0000000..f684569
--- /dev/null
+++ b/baserefresh.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -n
+my $last;
+
+# The whole "base" file format took shape kind of sloppily, just getting a
+# list of likely-looking characters and all, which is why it's sort of a
+# mess. It also didn't really have good ways of updating it with new
+# emoji. This file is _part_ of such a solution: it takes in a "base" file
+# and adds the "<MM>" line after just those "#-" lines which are not
+# followed by a line that starts with "##" or with NO #-signs.
+
+BEGIN {binmode(STDOUT, ":utf8");
+ binmode(STDIN, ":utf8");
+}
+
+while (/^#- /) {
+ $last = $_;
+ print;
+ $_ = <>;
+ if (/^[^#]/ or /^##/) {
+ last;
+ }
+ $last = substr($last, 3);
+ @_ = split /;/, $last;
+ printf qq(<MM> \{%s\} : "%s" U%s\t# %s\n), lc($_[1]),chr(hex($_[0])), $_[0], $_[1];
+}
+print;
+
diff --git a/checklines.py3 b/checklines.py3
index dcc88e9..4551f0d 100755
--- a/checklines.py3
+++ b/checklines.py3
@@ -6,10 +6,12 @@ from unicodedata import name
import re
import sys
+linecount = 0
for line in sys.stdin:
line=line.strip()
if not line or line[0]=="#":
continue
+ linecount += 1
match=re.match(r'\s*(.*):\s*"(.*?)"\s*(\S*)\s*(#.*)?', line)
if not match:
print("({0})".format(line))
@@ -32,3 +34,5 @@ for line in sys.stdin:
print("\tNumber gives character: {0} ({1})".format(c, name(c)))
except Exception as e:
print("{0}\n\t{1}".format(line, e))
+
+print("Done. Checked %d lines."%linecount)
diff --git a/dotXCompose b/dotXCompose
index 1071d82..66dd940 100644
--- a/dotXCompose
+++ b/dotXCompose
@@ -98,13 +98,16 @@ include "%L"
# Already present for me:
# <Multi_key> <space> <space> : " " U00A0 # NO-BREAK SPACE
# Narrow no-break space, needed for some Latin languages like French
-<Multi_key> <space> <n> : " " U202f # NARROW NO-BREAK SPACE
-# Do we want/need these?
-<Multi_key> <d> <a> <g> : "†" U2020 # DAGGER
-<Multi_key> <d> <d> <a> <g> : "‡" U2021 # DOUBLE DAGGER
+<Multi_key> <space> <n> : " " U202f # NARROW NO-BREAK SPACE
+# Technically, NO-BREAK SPACE is not supposed to be fixed-width. This is:
+<Multi_key> <space> <numbersign> : " " U2007 # FIGURE SPACE
# We used to have THIN SPACE as <space> <apostrophe>, but now that’s remapped
# to " ‘", for conveniently enclosing things in proper single-quotes.
<Multi_key> <backslash> <comma> : " " U2009 # THIN SPACE
+# (heh, heh... space bar)
+<Multi_key> <space> <bar> : " " U200A # HAIR SPACE
+<Multi_key> <d> <a> <g> : "†" U2020 # DAGGER
+<Multi_key> <d> <d> <a> <g> : "‡" U2021 # DOUBLE DAGGER
<Multi_key> <s> <e> <c> : "§" U00A7 # SECTION SIGN
# It's in the Asian section, but it's a general-purpose punctuation:
<Multi_key> <quotedbl> <quotedbl> : "〃" U3003 # DITTO MARK
@@ -145,6 +148,7 @@ include "%L"
<Multi_key> <Up> <minus> : "⇡" U21E1 # UPWARDS DASHED ARROW
<Multi_key> <Right> <minus> : "⇢" U21E2 # RIGHTWARDS DASHED ARROW
<Multi_key> <Down> <minus> : "⇣" U21E3 # DOWNWARDS DASHED ARROW
+<Multi_key> <z> <z> <greater> : "↯" U21AF # DOWNWARDS ZIGZAG ARROW
# Arrow keys don't always work: some apps trap them for cursor control and
# other boring things. The arrow symbols have alternate keystrokes. Do
@@ -201,9 +205,14 @@ include "%L"
<Multi_key> <P> <less> : "ꟼ" UA7FC # LATIN EPIGRAPHIC LETTER REVERSED P
<Multi_key> <F> <BackSpace> : "ꟻ" UA7FB # LATIN EPIGRAPHIC LETTER REVERSED F
<Multi_key> <P> <BackSpace> : "ꟼ" UA7FC # LATIN EPIGRAPHIC LETTER REVERSED P
+<Multi_key> <F> <F> : "Ⅎ" U2132 # TURNED CAPITAL F
+<Multi_key> <F> <f> : "ⅎ" U214E # TURNED SMALL F
<Multi_key> <M> <W> : "ꟽ" UA7FD # LATIN EPIGRAPHIC LETTER INVERTED M
+<Multi_key> <M> <M> : "Ɯ" U019C # LATIN CAPITAL LETTER TURNED M
<Multi_key> <I> <bar> : "ꟾ" UA7FE # LATIN EPIGRAPHIC LETTER I LONGA
<Multi_key> <M> <slash> : "ꟿ" UA7FF # LATIN EPIGRAPHIC LETTER ARCHAIC M
+<Multi_key> <2> <2> : "↊" U218A # TURNED DIGIT TWO
+<Multi_key> <3> <3> : "↋" U218B # TURNED DIGIT THREE
# I'd been avoiding this because we already have ∃...
# Hey, these, being *letters* can be used as identifiers in some languages...
<Multi_key> <E> <less> : "Ǝ" U018E # LATIN CAPITAL LETTER REVERSED E
@@ -268,7 +277,6 @@ include "%L"
<Multi_key> <R> <O> : "Ꝛ" UA75A # LATIN CAPITAL LETTER R ROTUNDA
# something, anyway.
<Multi_key> <R> <0> : "Ꝛ" UA75A # LATIN CAPITAL LETTER R ROTUNDA
-
# Custom additions: Mathematical symbols
<Multi_key> <exclam> <equal> : "≠" U2260 # NOT EQUAL TO
<Multi_key> <slash> <equal> : "≠" U2260 # NOT EQUAL TO
@@ -286,6 +294,9 @@ include "%L"
<Multi_key> <i> <n> : "∈" U2208 # ELEMENT OF
<Multi_key> <exclam> <i> <n> : "∉" U2209 # NOT AN ELEMENT OF
<Multi_key> <U2208> <slash> : "∉" U2209 # NOT AN ELEMENT OF (I have ∈ on my keyboard...)
+<Multi_key> <period> <U2208> : "∊" U220A # SMALL ELEMENT OF
+<Multi_key> <period> <U220B> : "∍" U220D # SMALL CONTAINS AS MEMBER
+# For the above for people without ∈/∋ on their kbds? {♫i/n} and {♫n/i}?
<Multi_key> <n> <i> : "∋" U220B # CONTAINS AS MEMBER (I hope this doesn't conflict)
<Multi_key> <slash> <n> <i> : "∌" U220C # DOES NOT CONTAIN AS MEMBER
# <exclam><n><i> would conflict, with <exclam> <n> for N WITH UNDERDOT, etc.
@@ -297,6 +308,9 @@ include "%L"
<Multi_key> <equal> <equal> : "≡" U2261 # IDENTICAL TO
<Multi_key> <colon> <equal> : "≔" U2254 # COLON EQUALS
<Multi_key> <equal> <colon> : "≕" U2255 # EQUALS COLON
+<Multi_key> <2> <equal> : "⩵" U2A75 # TWO CONSECUTIVE EQUALS SIGNS
+<Multi_key> <equal> <ampersand> <equal> : "⩵" U2A75 # TWO CONSECUTIVE EQUALS SIGNS
+<Multi_key> <3> <equal> : "⩶" U2A76 # THREE CONSECUTIVE EQUALS SIGNS
# Using <slash> conflicts.
<Multi_key> <equal> <bar> <equal> : "≢" U2262 # NOT IDENTICAL TO
# We already have ±
@@ -325,6 +339,8 @@ include "%L"
<Multi_key> <braceleft> <equal> <parenleft> : "⊆" U2286 # SUBSET OF OR EQUAL TO
<Multi_key> <exclam> <braceleft> <parenleft> : "⊄" U2284 # NOT A SUBSET OF
<Multi_key> <slash> <braceleft> <parenleft> : "⊄" U2284 # NOT A SUBSET OF
+<Multi_key> <exclam> <braceleft> <parenright> : "⊅" U2285 # NOT A SUPERSET OF
+<Multi_key> <slash> <braceleft> <parenright> : "⊅" U2285 # NOT A SUPERSET OF
<Multi_key> <braceleft> <parenright> : "⊃" U2283 # SUPERSET OF
<Multi_key> <braceleft> <equal> <parenright> : "⊇" U2287 # SUPERSET OF OR EQUAL TO
<Multi_key> <E> <E> : "∃" U2203 # THERE EXISTS
@@ -346,6 +362,7 @@ include "%L"
# )- conflicts with system for }.
<Multi_key> <parenright> <underscore> : "⟌" U27CC # LONG DIVISION
<Multi_key> <period> <quotedbl> : "∴" U2234 # THEREFORE
+<Multi_key> <Multi_key> <t> <h> <e> <r> <e> <4> : "∴" U2234 # THEREFORE
<Multi_key> <quotedbl> <period> : "∵" U2235 # BECAUSE
<Multi_key> <Multi_key> <b> <e> <c> <a> <u> <s> <e> : "∵" U2235 # BECAUSE
<Multi_key> <percent> <percent> : "‱" U2031 # PER TEN THOUSAND (basis points)
@@ -365,8 +382,8 @@ include "%L"
<Multi_key> <Multi_key> <i> <i> <i> <n> <t> : "∭" U222D # TRIPLE INTEGRAL
<Multi_key> <Multi_key> <i> <i> <i> <i> <n> <t> : "⨌" U2A0C # QUADRUPLE INTEGRAL
<Multi_key> <Multi_key> <o> <i> <n> <t> : "∮" U222E # CONTOUR INTEGRAL
-<Multi_key> <Multi_key> <p> <i> <n> <t> : "⨕" U2A15 # SEMICIRCULAR POLE INTEGRAL
-<Multi_key> <Multi_key> <c> <P> <i> <n> <t> : "⨓" U2A13 # INTEGRAL AROUND POINT
+<Multi_key> <Multi_key> <p> <i> <n> <t> : "⨕" U2A15 # INTEGRAL AROUND A POINT OPERATOR
+<Multi_key> <Multi_key> <c> <P> <i> <n> <t> : "⨓" U2A13 # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
<Multi_key> <Multi_key> <o> <i> <i> <n> <t> : "∯" U222F # SURFACE INTEGRAL
<Multi_key> <Multi_key> <o> <i> <i> <i> <n> <t> : "∰" U2230 # VOLUME INTEGRAL
<Multi_key> <Multi_key> <g> <i> <n> <t> : "⨘" U2A18 # GEOMETRIC INTEGRAL
@@ -385,7 +402,6 @@ include "%L"
<Multi_key> <w> <p> : "℘" U2118 # SCRIPT CAPITAL P
# Would we prefer 20D1 COMBINING RIGHT HARPOON ABOVE?
<Multi_key> <asciicircum> <greater> : "⃗" U20D7 # COMBINING RIGHT ARROW ABOVE (vector)
-# There's a whole passel of these guys starting at U+1D538 but I have no fonts for those.
<Multi_key> <bar> <C> : "ℂ" U2102 # DOUBLE-STRUCK CAPITAL C (set of complex numbers)
<Multi_key> <bar> <N> : "ℕ" U2115 # DOUBLE-STRUCK CAPITAL N (natural number)
<Multi_key> <bar> <P> : "ℙ" U2119 # DOUBLE-STRUCK CAPITAL P
@@ -453,8 +469,15 @@ include "%L"
# These are actually quotes, hence the mnemonic.
<Multi_key> <7> <apostrophe> : "「" UFF62 # HALFWIDTH LEFT CORNER BRACKET
<Multi_key> <L> <apostrophe> : "」" UFF63 # HALFWIDTH RIGHT CORNER BRACKET
+# Why am I using halfwidth though, I wonder? And I'd also like ⌜⌝⌞⌟
<Multi_key> <7> <quotedbl> : "『" U300E # LEFT WHITE CORNER BRACKET
<Multi_key> <L> <quotedbl> : "』" U300F # RIGHT WHITE CORNER BRACKET
+# How about these for the "corners"? Confusing with {L[} etc?
+# and don't forget about {L_[} which we have for ⸤
+<Multi_key> <7> <parenleft> : "⌜" U231C # TOP LEFT CORNER
+<Multi_key> <7> <parenright> : "⌝" U231D # TOP RIGHT CORNER
+<Multi_key> <L> <parenleft> : "⌞" U231E # BOTTOM LEFT CORNER
+<Multi_key> <L> <parenright> : "⌟" U231F # BOTTOM RIGHT CORNER
<Multi_key> <parenleft> <ampersand> <parenright> : "≬" U226C # BETWEEN
<Multi_key> <l> <l> : "ℓ" U2113 # SCRIPT SMALL L
<Multi_key> <bracketleft> <bracketleft> : "⊏" U228F # SQUARE IMAGE OF
@@ -683,6 +706,7 @@ include "%L"
<Multi_key> <percent> <X> : "Ⅹ" U2169 # ROMAN NUMERAL TEN
<Multi_key> <percent> <L> : "Ⅼ" U216C # ROMAN NUMERAL FIFTY
<Multi_key> <percent> <C> : "Ⅽ" U216D # ROMAN NUMERAL ONE HUNDRED
+<Multi_key> <percent> <less> <C> : "Ↄ" U2183 # ROMAN NUMERAL REVERSED ONE HUNDRED
<Multi_key> <percent> <D> : "Ⅾ" U216E # ROMAN NUMERAL FIVE HUNDRED
<Multi_key> <percent> <M> : "Ⅿ" U216F # ROMAN NUMERAL ONE THOUSAND
<Multi_key> <percent> <0> <C> <D> : "ↀ" U2180 # ROMAN NUMERAL ONE THOUSAND C D
@@ -728,7 +752,6 @@ include "%L"
<Multi_key> <semicolon> <BackSpace> : "⁏" U204F # REVERSED SEMICOLON
# Keep looking into big hunks of Latin Extended-D, A720- et seq.
<Multi_key> <less> <3> : "♥" U2665 # BLACK HEART SUIT
-<Multi_key> <3> <3> : "♣" U2663 # BLACK CLUB SUIT
<Multi_key> <o> <8> : "♣" U2663 # BLACK CLUB SUIT
<Multi_key> <c> <3> : "♣" U2663 # BLACK CLUB SUIT
<Multi_key> <less> <greater> : "♢" U2662 # WHITE DIAMOND SUIT
@@ -792,6 +815,38 @@ include "%L"
<Multi_key> <bracketleft> <6> <bracketright> : "⚅" U2685 # DIE FACE-6
# 267B BLACK UNIVERSAL RECYCLING SYMBOL
+<Multi_key> <parenleft> <C> <C> <parenright> : "🅭" U1F16D # CIRCLED CC
+<Multi_key> <C> <parenleft> <C> <C> <parenright> : "🅭" U1F16D # CIRCLED CC
+<Multi_key> <parenleft> <backslash> <C> <parenright> : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH
+<Multi_key> <parenleft> <slash> <C> <parenright> : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH
+<Multi_key> <C> <parenleft> <backslash> <C> <parenright> : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH
+<Multi_key> <C> <parenleft> <slash> <C> <parenright> : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH
+<Multi_key> <C> <parenleft> <B> <Y> <parenright> : "🅯" U1F16F # CIRCLED HUMAN FIGURE
+<Multi_key> <C> <parenleft> <S> <A> <parenright> : "🄎" U1F10E # CIRCLED ANTICLOCKWISE ARROW
+## ugh, this doesn't (usually) match the style of the others. They're practically emoji; ⊜ is a math symbol.
+<Multi_key> <C> <parenleft> <N> <D> <parenright> : "⊜" U229C # CIRCLED EQUALS
+<Multi_key> <C> <parenleft> <equal> <parenright> : "⊜" U229C # CIRCLED EQUALS
+<Multi_key> <C> <parenleft> <N> <C> <parenright> : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+<Multi_key> <C> <parenleft> <slash> <dollar> <parenright> : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+<Multi_key> <C> <parenleft> <backslash> <dollar> <parenright> : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+## Not actually Creative Commons, but related. Too many options?
+<Multi_key> <parenleft> <C> <Left> <parenright> : "🄯" U1F12F # COPYLEFT SYMBOL
+<Multi_key> <parenleft> <C> <less> <parenright> : "🄯" U1F12F # COPYLEFT SYMBOL
+<Multi_key> <C> <parenleft> <C> <Left> <parenright> : "🄯" U1F12F # COPYLEFT SYMBOL
+<Multi_key> <C> <parenleft> <C> <less> <parenright> : "🄯" U1F12F # COPYLEFT SYMBOL
+
+## Segmented digits?
+<Multi_key> <numbersign> <0> : "🯰" U1FBF0 # SEGMENTED DIGIT ZERO
+<Multi_key> <numbersign> <1> : "🯱" U1FBF1 # SEGMENTED DIGIT ONE
+<Multi_key> <numbersign> <2> : "🯲" U1FBF2 # SEGMENTED DIGIT TWO
+<Multi_key> <numbersign> <3> : "🯳" U1FBF3 # SEGMENTED DIGIT THREE
+<Multi_key> <numbersign> <4> : "🯴" U1FBF4 # SEGMENTED DIGIT FOUR
+<Multi_key> <numbersign> <5> : "🯵" U1FBF5 # SEGMENTED DIGIT FIVE
+<Multi_key> <numbersign> <6> : "🯶" U1FBF6 # SEGMENTED DIGIT SIX
+<Multi_key> <numbersign> <7> : "🯷" U1FBF7 # SEGMENTED DIGIT SEVEN
+<Multi_key> <numbersign> <8> : "🯸" U1FBF8 # SEGMENTED DIGIT EIGHT
+<Multi_key> <numbersign> <9> : "🯹" U1FBF9 # SEGMENTED DIGIT NINE
+
# Keystrokes okay?
<Multi_key> <Multi_key> <f> <d> <l> : "⚜" U269C # FLEUR-DE-LIS
<Multi_key> <Multi_key> <a> <t> <o> <m> : "⚛" U269B # ATOM SYMBOL
@@ -852,6 +907,12 @@ include "%L"
<Multi_key> <asterisk> <asterisk> :"★" U2605 # BLACK STAR
<Multi_key> <asterisk> <0> :"☆" U2606 # WHITE STAR
<Multi_key> <asterisk> <minus> :"✪" U272A # CIRCLED WHITE STAR
+## Did not have great luck with keystrokes for these. L/ conflicts with ł,
+## and </ conflicts with \. */ of course is ϛ.
+<Multi_key> <Left> <slash> <2> <asterisk> : "⯨" U2BE8 # LEFT HALF BLACK STAR
+<Multi_key> <Right> <slash> <2> <asterisk> : "⯩" U2BE9 # RIGHT HALF BLACK STAR
+<Multi_key> <asterisk> <Left> <slash> <2> <asterisk> : "⯪" U2BEA # STAR WITH LEFT HALF BLACK
+<Multi_key> <asterisk> <Right> <slash> <2> <asterisk> : "⯫" U2BEB # STAR WITH RIGHT HALF BLACK
<Multi_key> <asterisk> <3> :"⁂" U2042 # ASTERISM
<Multi_key> <3> <asterisk> :"⁂" U2042 # ASTERISM
<Multi_key> <2> <asterisk> :"⁑" U2051 # TWO ASTERISKS ALIGNED VERTICALLY
@@ -878,6 +939,9 @@ include "%L"
<Multi_key> <space> <M> : " " U2003 # EM SPACE
<Multi_key> <space> <3> <M> : " " U2004 # THREE-PER-EM SPACE
<Multi_key> <space> <4> <M> : " " U2005 # FOUR-PER-EM SPACE
+<Multi_key> <space> <6> <M> : " " U2006 # SIX-PER-EM SPACE
+<Multi_key> <space> <comma> : " " U2008 # PUNCTUATION SPACE
+<Multi_key> <space> <plus> : " " U205F # MEDIUM MATHEMATICAL SPACE
<Multi_key> <parenleft> <parenright>: "◌" U25CC # DOTTED CIRCLE
<Multi_key> <bracketleft> <bracketright>: "⬚" U2B1A # DOTTED SQUARE
<Multi_key> <asterisk> <parenleft> : "﴾" UFD3E # ORNATE LEFT PARENTHESIS
@@ -900,7 +964,7 @@ include "%L"
<Multi_key> <asciicircum> <asciicircum> <t> : "ᵗ" U1D57 # MODIFIER LETTER SMALL T
# Abbreviation for "that":
<Multi_key> <U00FE> <t> : "ꝥ" UA765 # LATIN SMALL LETTER THORN WITH STROKE
-#Maybe add: ˀˁ˃˂ Need to be able to talk about ʔˁ...
+#Maybe add: ˃˂ Need to be able to talk about ʔˁ...
<Multi_key> <asciicircum> <question> <period> : "ˀ" U02C0 # MODIFIER LETTER GLOTTAL STOP
<Multi_key> <asciicircum> <question> <parenleft> : "ˁ" U02C1 # MODIFIER LETTER REVERSED GLOTTAL STOP
<Multi_key> <asciicircum> <minus> : "⁻" U207B # SUPERSCRIPT MINUS
@@ -917,6 +981,7 @@ include "%L"
<Multi_key> <question> <parenleft> : "ʕ" U0295 # LATIN LETTER PHARYNGEAL VOICED FRICATIVE
# Not great keystrokes...
<Multi_key> <question> <v> : "ʖ" U0296 # LATIN LETTER INVERTED GLOTTAL STOP
+<Multi_key> <question> <at> : "ʖ" U0296 # LATIN LETTER INVERTED GLOTTAL STOP
<Multi_key> <question> <minus> : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
<Multi_key> <question> <braceleft> : "ʢ" U02A2 # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
# How about ɸ? φ isn’t the IPA glyph.
@@ -1005,6 +1070,9 @@ include "%L"
<Multi_key> <numbersign> <o> <slash> : "♪" U266a # EIGHTH NOTE
<Multi_key> <numbersign> <o> <o> : "♫" U266b # BEAMED EIGHTH NOTES
<Multi_key> <numbersign> <percent> : "♫" U266b # BEAMED EIGHTH NOTES
+<Multi_key> <numbersign> <q> : "♩" U2669 # QUARTER NOTE
+<Multi_key> <numbersign> <h> : "𝅗𝅥" U0001d15e # MUSICAL SYMBOL HALF NOTE
+<Multi_key> <numbersign> <w> : "𝅝" U0001d15d # MUSICAL SYMBOL WHOLE NOTE
# Combining accents, for making things you don't have precomposed chars or keystrokes for:
@@ -1129,7 +1197,7 @@ include "%L"
<Multi_key> <n> <grave> : "ɴ" U0274 # LATIN LETTER SMALL CAPITAL N
<Multi_key> <o> <grave> : "ᴏ" U1D0F # LATIN LETTER SMALL CAPITAL O
<Multi_key> <p> <grave> : "ᴘ" U1D18 # LATIN LETTER SMALL CAPITAL P
-# There is no SMALL CAPITAL Q (yet)!
+<Multi_key> <q> <grave> : "ꞯ" UA7AF # LATIN LETTER SMALL CAPITAL Q
<Multi_key> <r> <grave> : "ʀ" U0280 # LATIN LETTER SMALL CAPITAL R
<Multi_key> <s> <grave> : "ꜱ" UA731 # LATIN LETTER SMALL CAPITAL S
<Multi_key> <t> <grave> : "ᴛ" U1D1B # LATIN LETTER SMALL CAPITAL T
diff --git a/emoji-base b/emoji-base
index 8f39373..13ac649 100644
--- a/emoji-base
+++ b/emoji-base
@@ -21,17 +21,18 @@
#- 26D3;CHAINS;So;0;ON;;;;;N;;;;;
<MM> {chains} : "⛓" U26D3 # CHAINS
#- 2700;BLACK SAFETY SCISSORS;So;0;ON;;;;;N;;;;;
-### <MM> {black safety scissors} : "✀" U2700 # BLACK SAFETY SCISSORS
+<MM> {BS8<} : "✀" U2700 # BLACK SAFETY SCISSORS
#- 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-### <MM> {upper blade scissors} : "✁" U2701 # UPPER BLADE SCISSORS
+<MM> {^8<} : "✁" U2701 # UPPER BLADE SCISSORS
#- 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
-### <MM> {black scissors} : "✂" U2702 # BLACK SCISSORS
+<MM> {B8<} : "✂" U2702 # BLACK SCISSORS
#- 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
-### <MM> {lower blade scissors} : "✃" U2703 # LOWER BLADE SCISSORS
+<MM> {_8<} : "✃" U2703 # LOWER BLADE SCISSORS
#- 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
-### <MM> {white scissors} : "✄" U2704 # WHITE SCISSORS
+<MM> {W8<} : "✄" U2704 # WHITE SCISSORS
#- 2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-### <MM> {white heavy check mark} : "✅" U2705 # WHITE HEAVY CHECK MARK
+## ♫@@/ is the black HEAVY CHECKMARK ✔ already
+<MM> {W@@/} : "✅" U2705 # WHITE HEAVY CHECK MARK
#- 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
### <MM> {telephone location sign} : "✆" U2706 # TELEPHONE LOCATION SIGN
#- 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
@@ -59,14 +60,17 @@
#- 2712;BLACK NIB;So;0;ON;;;;;N;;;;;
### <MM> {black nib} : "✒" U2712 # BLACK NIB
#- 2713;CHECK MARK;So;0;ON;;;;;N;;;;;
-### <MM> {check mark} : "✓" U2713 # CHECK MARK
+## Should we also match the single-♫ versions?
+### <MM> {check mark} : "✓" U2713 # CHECK MARK
#- 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
-### <MM> {heavy check mark} : "✔" U2714 # HEAVY CHECK MARK
+### <MM> {heavy check mark} : "✔" U2714 # HEAVY CHECK MARK
#- 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-### <MM> {multiplication x} : "✕" U2715 # MULTIPLICATION X
+## Just ♫xx is MULTIPLICATION SIGN.
+<MM> {xx} : "✕" U2715 # MULTIPLICATION X
#- 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
-### <MM> {heavy multiplication x} : "✖" U2716 # HEAVY MULTIPLICATION X
+<MM> {@xx} : "✖" U2716 # HEAVY MULTIPLICATION X
#- 2717;BALLOT X;So;0;ON;;;;;N;;;;;
+## These are already ♫@X and ♫@@X
### <MM> {ballot x} : "✗" U2717 # BALLOT X
#- 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
### <MM> {heavy ballot x} : "✘" U2718 # HEAVY BALLOT X
@@ -88,6 +92,7 @@
### <MM> {maltese cross} : "✠" U2720 # MALTESE CROSS
#- 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
<MM> {*david} : "✡" U2721 # STAR OF DAVID
+## So many stars and asterisks! And even Xs! How to distinguish?
#- 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
### <MM> {four teardrop-spoked asterisk} : "✢" U2722 # FOUR TEARDROP-SPOKED ASTERISK
#- 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
@@ -174,11 +179,11 @@
#- 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
### <MM> {heavy eight teardrop-spoked propeller asterisk} : "❋" U274B # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
#- 274C;CROSS MARK;So;0;ON;;;;;N;;;;;
-### <MM> {cross mark} : "❌" U274C # CROSS MARK
+<MM> {XX} : "❌" U274C # CROSS MARK
#- 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
### <MM> {shadowed white circle} : "❍" U274D # SHADOWED WHITE CIRCLE
#- 274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;;
-### <MM> {negative squared cross mark} : "❎" U274E # NEGATIVE SQUARED CROSS MARK
+<MM> {[XX]} : "❎" U274E # NEGATIVE SQUARED CROSS MARK
#- 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
### <MM> {lower right drop-shadowed white square} : "❏" U274F # LOWER RIGHT DROP-SHADOWED WHITE SQUARE
#- 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
@@ -188,15 +193,15 @@
#- 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
### <MM> {upper right shadowed white square} : "❒" U2752 # UPPER RIGHT SHADOWED WHITE SQUARE
#- 2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {black question mark ornament} : "❓" U2753 # BLACK QUESTION MARK ORNAMENT
+<MM> {@B?} : "❓" U2753 # BLACK QUESTION MARK ORNAMENT
#- 2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {white question mark ornament} : "❔" U2754 # WHITE QUESTION MARK ORNAMENT
+<MM> {@W?} : "❔" U2754 # WHITE QUESTION MARK ORNAMENT
#- 2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {white exclamation mark ornament} : "❕" U2755 # WHITE EXCLAMATION MARK ORNAMENT
+<MM> {@W!} : "❕" U2755 # WHITE EXCLAMATION MARK ORNAMENT
#- 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
### <MM> {black diamond minus white x} : "❖" U2756 # BLACK DIAMOND MINUS WHITE X
#- 2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;;
-### <MM> {heavy exclamation mark symbol} : "❗" U2757 # HEAVY EXCLAMATION MARK SYMBOL
+<MM> {@B!} : "❗" U2757 # HEAVY EXCLAMATION MARK SYMBOL
#- 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
### <MM> {light vertical bar} : "❘" U2758 # LIGHT VERTICAL BAR
#- 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
@@ -204,17 +209,17 @@
#- 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
### <MM> {heavy vertical bar} : "❚" U275A # HEAVY VERTICAL BAR
#- 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy single turned comma quotation mark ornament} : "❛" U275B # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+<MM> {@6'} : "❛" U275B # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
#- 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy single comma quotation mark ornament} : "❜" U275C # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+<MM> {@9'} : "❜" U275C # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
#- 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy double turned comma quotation mark ornament} : "❝" U275D # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+<MM> {@6"} : "❝" U275D # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
#- 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy double comma quotation mark ornament} : "❞" U275E # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+<MM> {@9"} : "❞" U275E # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
#- 275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy low single comma quotation mark ornament} : "❟" U275F # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
+<MM> {@1,} : "❟" U275F # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
#- 2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
-### <MM> {heavy low double comma quotation mark ornament} : "❠" U2760 # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+<MM> {@2,} : "❠" U2760 # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
#- 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
### <MM> {curved stem paragraph sign ornament} : "❡" U2761 # CURVED STEM PARAGRAPH SIGN ORNAMENT
#- 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
@@ -258,6 +263,7 @@
#- 2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
### <MM> {medium right curly bracket ornament} : "❵" U2775 # MEDIUM RIGHT CURLY BRACKET ORNAMENT
#- 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+<MM> {dingbat negative circled digit one} : "❶" U2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE
#- 1F300;CYCLONE;So;0;ON;;;;;N;;;;;
<MM> {cyclone} : "🌀" U1F300 # CYCLONE
#- 1F301;FOGGY;So;0;ON;;;;;N;;;;;
@@ -329,7 +335,7 @@
#- 1F321;THERMOMETER;So;0;ON;;;;;N;;;;;
<MM> {thermom} : "🌡" U1F321 # THERMOMETER
#- 1F322;BLACK DROPLET;So;0;ON;;;;;N;;;;;
-<MM> {black droplet} : "🌢" U1F322 # BLACK DROPLET
+<MM> {Bdrop} : "🌢" U1F322 # BLACK DROPLET
#- 1F323;WHITE SUN;So;0;ON;;;;;N;;;;;
<MM> {white sun} : "🌣" U1F323 # WHITE SUN
#- 1F324;WHITE SUN WITH SMALL CLOUD;So;0;ON;;;;;N;;;;;
@@ -783,7 +789,7 @@
#- 1F3F5;ROSETTE;So;0;ON;;;;;N;;;;;
<MM> {Rosette} : "🏵" U1F3F5 # ROSETTE
#- 1F3F6;BLACK ROSETTE;So;0;ON;;;;;N;;;;;
-### <MM> {black rosette} : "🏶" U1F3F6 # BLACK ROSETTE
+<MM> {BRosett} : "🏶" U1F3F6 # BLACK ROSETTE
#- 1F3F7;LABEL;So;0;ON;;;;;N;;;;;
<MM> {label} : "🏷" U1F3F7 # LABEL
#- 1F3F8;BADMINTON RACQUET AND SHUTTLECOCK;So;0;ON;;;;;N;;;;;
@@ -1083,7 +1089,7 @@
<MM> {Lipstic} : "💄" U1F484 # LIPSTICK
<MM> {Lipstck} : "💄" U1F484 # LIPSTICK
#- 1F485;NAIL POLISH;So;0;ON;;;;;N;;;;;
-### <MM> {nail polish} : "💅" U1F485 # NAIL POLISH
+<MM> {nailpol} : "💅" U1F485 # NAIL POLISH
#- 1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;;
### <MM> {face massage} : "💆" U1F486 # FACE MASSAGE
#- 1F487;HAIRCUT;So;0;ON;;;;;N;;;;;
@@ -1221,19 +1227,21 @@
#- 1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;;
### <MM> {page facing up} : "📄" U1F4C4 # PAGE FACING UP
#- 1F4C5;CALENDAR;So;0;ON;;;;;N;;;;;
-### <MM> {calendar} : "📅" U1F4C5 # CALENDAR
+<MM> {calenda} : "📅" U1F4C5 # CALENDAR
+<MM> {calendr} : "📅" U1F4C5 # CALENDAR
+<MM> {calndar} : "📅" U1F4C5 # CALENDAR
#- 1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;;
-### <MM> {tear-off calendar} : "📆" U1F4C6 # TEAR-OFF CALENDAR
+<MM> {date} : "📆" U1F4C6 # TEAR-OFF CALENDAR
#- 1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;;
### <MM> {card index} : "📇" U1F4C7 # CARD INDEX
#- 1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;;
-### <MM> {chart with upwards trend} : "📈" U1F4C8 # CHART WITH UPWARDS TREND
+<MM> {upchart} : "📈" U1F4C8 # CHART WITH UPWARDS TREND
#- 1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;;
-### <MM> {chart with downwards trend} : "📉" U1F4C9 # CHART WITH DOWNWARDS TREND
+<MM> {dnchart} : "📉" U1F4C9 # CHART WITH DOWNWARDS TREND
#- 1F4CA;BAR CHART;So;0;ON;;;;;N;;;;;
<MM> {barchar} : "📊" U1F4CA # BAR CHART
#- 1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;;
-### <MM> {clipboard} : "📋" U1F4CB # CLIPBOARD
+<MM> {clipboa} : "📋" U1F4CB # CLIPBOARD
#- 1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;;
<MM> {pushpin} : "📌" U1F4CC # PUSHPIN
#- 1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;;
@@ -1277,7 +1285,7 @@
#- 1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;;
### <MM> {fax machine} : "📠" U1F4E0 # FAX MACHINE
#- 1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;;
-### <MM> {satellite antenna} : "📡" U1F4E1 # SATELLITE ANTENNA
+<MM> {satdish} : "📡" U1F4E1 # SATELLITE ANTENNA
#- 1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;;
### <MM> {public address loudspeaker} : "📢" U1F4E2 # PUBLIC ADDRESS LOUDSPEAKER
#- 1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;;
@@ -1318,7 +1326,7 @@
#- 1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;;
### <MM> {mobile phone off} : "📴" U1F4F4 # MOBILE PHONE OFF
#- 1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;;
-### <MM> {no mobile phones} : "📵" U1F4F5 # NO MOBILE PHONES
+<MM> {nophone} : "📵" U1F4F5 # NO MOBILE PHONES
#- 1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;;
### <MM> {antenna with bars} : "📶" U1F4F6 # ANTENNA WITH BARS
#- 1F4F7;CAMERA;So;0;ON;;;;;N;;;;;
@@ -1346,9 +1354,9 @@
#- 1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;;
<MM> {1repeat} : "🔂" U1F502 # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY
#- 1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
-### <MM> {clockwise downwards and upwards open circle arrows} : "🔃" U1F503 # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+<MM> {↑repeat} : "🔃" U1F503 # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
#- 1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;;
-### <MM> {anticlockwise downwards and upwards open circle arrows} : "🔄" U1F504 # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+<MM> {↓repeat} : "🔄" U1F504 # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
#- 1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
<MM> {dim} : "🔅" U1F505 # LOW BRIGHTNESS SYMBOL
#- 1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;;
@@ -1444,9 +1452,9 @@
#- 1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;;
### <MM> {trident emblem} : "🔱" U1F531 # TRIDENT EMBLEM
#- 1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;;
-### <MM> {black square button} : "🔲" U1F532 # BLACK SQUARE BUTTON
+<MM> {Bbutton} : "🔲" U1F532 # BLACK SQUARE BUTTON
#- 1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;;
-### <MM> {white square button} : "🔳" U1F533 # WHITE SQUARE BUTTON
+<MM> {Wbutton} : "🔳" U1F533 # WHITE SQUARE BUTTON
#- 1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;;
### <MM> {large red circle} : "🔴" U1F534 # LARGE RED CIRCLE
#- 1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;;
@@ -1542,7 +1550,9 @@
#- 1F578;SPIDER WEB;So;0;ON;;;;;N;;;;;
<MM> {web} : "🕸" U1F578 # SPIDER WEB
#- 1F579;JOYSTICK;So;0;ON;;;;;N;;;;;
-### <MM> {joystick} : "🕹" U1F579 # JOYSTICK
+<MM> {joystic} : "🕹" U1F579 # JOYSTICK
+#- 1F57A;MAN DANCING;So;0;ON;;;;;N;;;;;
+<MM> {man dancing} : "🕺" U1F57A # MAN DANCING
#- 1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
### <MM> {left hand telephone receiver} : "🕻" U1F57B # LEFT HAND TELEPHONE RECEIVER
#- 1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;;
@@ -1628,6 +1638,8 @@
### <MM> {black up pointing backhand index} : "🖢" U1F5A2 # BLACK UP POINTING BACKHAND INDEX
#- 1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
### <MM> {black down pointing backhand index} : "🖣" U1F5A3 # BLACK DOWN POINTING BACKHAND INDEX
+#- 1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;;
+<MM> {black heart} : "🖤" U1F5A4 # BLACK HEART
#- 1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;;
### <MM> {desktop computer} : "🖥" U1F5A5 # DESKTOP COMPUTER
#- 1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;;
@@ -1681,7 +1693,7 @@
#- 1F5BE;FRAME WITH AN X;So;0;ON;;;;;N;;;;;
### <MM> {frame with an x} : "🖾" U1F5BE # FRAME WITH AN X
#- 1F5BF;BLACK FOLDER;So;0;ON;;;;;N;;;;;
-### <MM> {black folder} : "🖿" U1F5BF # BLACK FOLDER
+<MM> {Bfolder} : "🖿" U1F5BF # BLACK FOLDER
#- 1F5C0;FOLDER;So;0;ON;;;;;N;;;;;
<MM> {folder} : "🗀" U1F5C0 # FOLDER
#- 1F5C1;OPEN FOLDER;So;0;ON;;;;;N;;;;;
@@ -1789,16 +1801,17 @@
### <MM> {ballot box with ballot} : "🗳" U1F5F3 # BALLOT BOX WITH BALLOT
#- 1F5F4;BALLOT SCRIPT X;So;0;ON;;;;;N;;;;;
### <MM> {ballot script x} : "🗴" U1F5F4 # BALLOT SCRIPT X
+## We already have ♫[x] for ☒
#- 1F5F5;BALLOT BOX WITH SCRIPT X;So;0;ON;;;;;N;;;;;
-### <MM> {ballot box with script x} : "🗵" U1F5F5 # BALLOT BOX WITH SCRIPT X
+<MM> {[x]} : "🗵" U1F5F5 # BALLOT BOX WITH SCRIPT X
#- 1F5F6;BALLOT BOLD SCRIPT X;So;0;ON;;;;;N;;;;;
### <MM> {ballot bold script x} : "🗶" U1F5F6 # BALLOT BOLD SCRIPT X
#- 1F5F7;BALLOT BOX WITH BOLD SCRIPT X;So;0;ON;;;;;N;;;;;
-### <MM> {ballot box with bold script x} : "🗷" U1F5F7 # BALLOT BOX WITH BOLD SCRIPT X
+<MM> {[@x]} : "🗷" U1F5F7 # BALLOT BOX WITH BOLD SCRIPT X
#- 1F5F8;LIGHT CHECK MARK;So;0;ON;;;;;N;;;;;
### <MM> {light check mark} : "🗸" U1F5F8 # LIGHT CHECK MARK
#- 1F5F9;BALLOT BOX WITH BOLD CHECK;So;0;ON;;;;;N;;;;;
-### <MM> {ballot box with bold check} : "🗹" U1F5F9 # BALLOT BOX WITH BOLD CHECK
+<MM> {[@/]} : "🗹" U1F5F9 # BALLOT BOX WITH BOLD CHECK
#- 1F5FA;WORLD MAP;So;0;ON;;;;;N;;;;;
<MM> {world} : "🗺" U1F5FA # WORLD MAP
#- 1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;;
@@ -1911,8 +1924,9 @@
<MM> {()fearf} : "😨" U1F628 # FEARFUL FACE
#- 1F629;WEARY FACE;So;0;ON;;;;;N;;;;;
<MM> {()weary} : "😩" U1F629 # WEARY FACE
+## sleepY vs sleepING... use zzz for the latter.
#- 1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;;
-### <MM> {sleepy face} : "😪" U1F62A # SLEEPY FACE
+<MM> {()sleep} : "😪" U1F62A # SLEEPY FACE
#- 1F62B;TIRED FACE;So;0;ON;;;;;N;;;;;
<MM> {()tired} : "😫" U1F62B # TIRED FACE
#- 1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;;
@@ -1934,7 +1948,7 @@
<MM> {()blush} : "😳" U1F633 # FLUSHED FACE
<MM> {()flush} : "😳" U1F633 # FLUSHED FACE
#- 1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;;
-### <MM> {sleeping face} : "😴" U1F634 # SLEEPING FACE
+<MM> {()zzz} : "😴" U1F634 # SLEEPING FACE
#- 1F635;DIZZY FACE;So;0;ON;;;;;N;;;;;
<MM> {()dizzy} : "😵" U1F635 # DIZZY FACE
#- 1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;;
@@ -2179,7 +2193,7 @@
#- 1F6AA;DOOR;So;0;ON;;;;;N;;;;;
<MM> {door} : "🚪" U1F6AA # DOOR
#- 1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;;
-### <MM> {no entry sign} : "🚫" U1F6AB # NO ENTRY SIGN
+<MM> {noentry} : "🚫" U1F6AB # NO ENTRY SIGN
#- 1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
<MM> {smoke} : "🚬" U1F6AC # SMOKING SYMBOL
#- 1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;;
@@ -2200,7 +2214,7 @@
#- 1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;;
<MM> {!bicycl} : "🚳" U1F6B3 # NO BICYCLES
#- 1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;;
-### <MM> {bicyclist} : "🚴" U1F6B4 # BICYCLIST
+<MM> {cyclist} : "🚴" U1F6B4 # BICYCLIST
#- 1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;;
### <MM> {mountain bicyclist} : "🚵" U1F6B5 # MOUNTAIN BICYCLIST
#- 1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;;
@@ -2244,6 +2258,9 @@
<MM> {noway} : "🛇" U1F6C7 # PROHIBITED SIGN
#- 1F6C8;CIRCLED INFORMATION SOURCE;So;0;ON;;;;;N;;;;;
<MM> {(info)} : "🛈" U1F6C8 # CIRCLED INFORMATION SOURCE
+## Sorry, this one is out of order.
+#- 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+<MM> {info} : "ℹ" U2139 # INFORMATION SOURCE
## careful for conflicts with {boy} and {girl}
#- 1F6C9;BOYS SYMBOL;So;0;ON;;;;;N;;;;;
<MM> {BOYS} : "🛉" U1F6C9 # BOYS SYMBOL
@@ -2262,8 +2279,20 @@
<MM> {bed} : "🛏" U1F6CF # BED
#- 1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;;
<MM> {shrine} : "🛐" U1F6D0 # PLACE OF WORSHIP
+#- 1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;;
+<MM> {[STOP]} : "🛑" U1F6D1 # OCTAGONAL SIGN
+#- 1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;;
+<MM> {shopping trolley} : "🛒" U1F6D2 # SHOPPING TROLLEY
+#- 1F6D3;STUPA;So;0;ON;;;;;N;;;;;
+<MM> {stupa} : "🛓" U1F6D3 # STUPA
+#- 1F6D4;PAGODA;So;0;ON;;;;;N;;;;;
+<MM> {pagoda} : "🛔" U1F6D4 # PAGODA
#- 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
<MM> {hindu temple} : "🛕" U1F6D5 # HINDU TEMPLE
+#- 1F6D6;HUT;So;0;ON;;;;;N;;;;;
+<MM> {hut} : "🛖" U1F6D6 # HUT
+#- 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
+<MM> {elevator} : "🛗" U1F6D7 # ELEVATOR
#- 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
<MM> {tools} : "🛠" U1F6E0 # HAMMER AND WRENCH
#- 1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
@@ -2271,9 +2300,9 @@
#- 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
<MM> {oildrum} : "🛢" U1F6E2 # OIL DRUM
#- 1F6E3;MOTORWAY;So;0;ON;;;;;N;;;;;
-### <MM> {motorway} : "🛣" U1F6E3 # MOTORWAY
+<MM> {highway} : "🛣" U1F6E3 # MOTORWAY
#- 1F6E4;RAILWAY TRACK;So;0;ON;;;;;N;;;;;
-### <MM> {railway track} : "🛤" U1F6E4 # RAILWAY TRACK
+<MM> {RRtrack} : "🛤" U1F6E4 # RAILWAY TRACK
#- 1F6E5;MOTOR BOAT;So;0;ON;;;;;N;;;;;
### <MM> {motor boat} : "🛥" U1F6E5 # MOTOR BOAT
#- 1F6E6;UP-POINTING MILITARY AIRPLANE;So;0;ON;;;;;N;;;;;
@@ -2298,8 +2327,24 @@
### <MM> {diesel locomotive} : "🛲" U1F6F2 # DIESEL LOCOMOTIVE
#- 1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;;
### <MM> {passenger ship} : "🛳" U1F6F3 # PASSENGER SHIP
+#- 1F6F4;SCOOTER;So;0;ON;;;;;N;;;;;
+<MM> {scooter} : "🛴" U1F6F4 # SCOOTER
+#- 1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;;
+<MM> {motor scooter} : "🛵" U1F6F5 # MOTOR SCOOTER
+#- 1F6F6;CANOE;So;0;ON;;;;;N;;;;;
+<MM> {canoe} : "🛶" U1F6F6 # CANOE
+#- 1F6F7;SLED;So;0;ON;;;;;N;;;;;
+<MM> {sled} : "🛷" U1F6F7 # SLED
+#- 1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
+<MM> {flying saucer} : "🛸" U1F6F8 # FLYING SAUCER
+#- 1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
+<MM> {skateboard} : "🛹" U1F6F9 # SKATEBOARD
#- 1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;;
<MM> {auto rickshaw} : "🛺" U1F6FA # AUTO RICKSHAW
+#- 1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;;
+<MM> {pickup truck} : "🛻" U1F6FB # PICKUP TRUCK
+#- 1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;;
+<MM> {roller skate} : "🛼" U1F6FC # ROLLER SKATE
#- 1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;;
<MM> {large orange circle} : "🟠" U1F7E0 # LARGE ORANGE CIRCLE
#- 1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;;
@@ -2365,6 +2410,8 @@
<MM> {handsha} : "🤝" U1F91D # HANDSHAKE
#- 1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;;
<MM> {fingerX} : "🤞" U1F91E # HAND WITH INDEX AND MIDDLE FINGERS CROSSED
+#- 1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;;
+<MM> {ILY} : "🤟" U1F91F # I LOVE YOU HAND SIGN
#- 1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;;
### <MM> {face with cowboy hat} : "🤠" U1F920 # FACE WITH COWBOY HAT
#- 1F921;CLOWN FACE;So;0;ON;;;;;N;;;;;
@@ -2386,7 +2433,7 @@
<MM> {()':-)} : "🤨" U1F928 # FACE WITH ONE EYEBROW RAISED
<MM> {()spock} : "🤨" U1F928 # FACE WITH ONE EYEBROW RAISED
#- 1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;;
-<MM> {grinning face with star eyes} : "🤩" U1F929 # GRINNING FACE WITH STAR EYES
+<MM> {()*-D} : "🤩" U1F929 # GRINNING FACE WITH STAR EYES
#- 1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;;
<MM> {()oO)} : "🤪" U1F92A # GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE
<MM> {()Oo)} : "🤪" U1F92A # GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE
@@ -2395,7 +2442,7 @@
#- 1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;;
<MM> {():-###} : "🤬" U1F92C # SERIOUS FACE WITH SYMBOLS COVERING MOUTH
#- 1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;;
-<MM> {smiling face with smiling eyes and hand covering mouth} : "🤭" U1F92D # SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH
+<MM> {()):-==} : "🤭" U1F92D # SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH
#- 1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;;
<MM> {()puke} : "🤮" U1F92E # FACE WITH OPEN MOUTH VOMITING
#- 1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;;
@@ -2423,7 +2470,7 @@
#- 1F939;JUGGLING;So;0;ON;;;;;N;;;;;
### <MM> {juggling} : "🤹" U1F939 # JUGGLING
#- 1F93A;FENCER;So;0;ON;;;;;N;;;;;
-### <MM> {fencer} : "🤺" U1F93A # FENCER
+<MM> {fencer} : "🤺" U1F93A # FENCER
#- 1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;;
### <MM> {modern pentathlon} : "🤻" U1F93B # MODERN PENTATHLON
#- 1F93C;WRESTLERS;So;0;ON;;;;;N;;;;;
@@ -2534,6 +2581,8 @@
<MM> {smiling face with smiling eyes and three hearts} : "🥰" U1F970 # SMILING FACE WITH SMILING EYES AND THREE HEARTS
#- 1F971;YAWNING FACE;So;0;ON;;;;;N;;;;;
<MM> {()yawn} : "🥱" U1F971 # YAWNING FACE
+#- 1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;;
+<MM> {smiling face with tear} : "🥲" U1F972 # SMILING FACE WITH TEAR
#- 1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
<MM> {()party} : "🥳" U1F973 # FACE WITH PARTY HORN AND PARTY HAT
#- 1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
@@ -2543,6 +2592,10 @@
<MM> {overheated face} : "🥵" U1F975 # OVERHEATED FACE
#- 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
<MM> {()freez} : "🥶" U1F976 # FREEZING FACE
+#- 1F977;NINJA;So;0;ON;;;;;N;;;;;
+<MM> {ninja} : "🥷" U1F977 # NINJA
+#- 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
+<MM> {disguised face} : "🥸" U1F978 # DISGUISED FACE
#- 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
<MM> {()plead} : "🥺" U1F97A # FACE WITH PLEADING EYES
#- 1F97B;SARI;So;0;ON;;;;;N;;;;;
@@ -2626,6 +2679,10 @@
<MM> {badger} : "🦡" U1F9A1 # BADGER
#- 1F9A2;SWAN;So;0;ON;;;;;N;;;;;
<MM> {swan} : "🦢" U1F9A2 # SWAN
+#- 1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;;
+<MM> {mammoth} : "🦣" U1F9A3 # MAMMOTH
+#- 1F9A4;DODO;So;0;ON;;;;;N;;;;;
+<MM> {dodo} : "🦤" U1F9A4 # DODO
#- 1F9A5;SLOTH;So;0;ON;;;;;N;;;;;
<MM> {sloth} : "🦥" U1F9A5 # SLOTH
#- 1F9A6;OTTER;So;0;ON;;;;;N;;;;;
@@ -2638,6 +2695,12 @@
<MM> {flamingo} : "🦩" U1F9A9 # FLAMINGO
#- 1F9AA;OYSTER;So;0;ON;;;;;N;;;;;
<MM> {oyster} : "🦪" U1F9AA # OYSTER
+#- 1F9AB;BEAVER;So;0;ON;;;;;N;;;;;
+<MM> {beaver} : "🦫" U1F9AB # BEAVER
+#- 1F9AC;BISON;So;0;ON;;;;;N;;;;;
+<MM> {bison} : "🦬" U1F9AC # BISON
+#- 1F9AD;SEAL;So;0;ON;;;;;N;;;;;
+<MM> {seal} : "🦭" U1F9AD # SEAL
#- 1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;;
<MM> {guide dog} : "🦮" U1F9AE # GUIDE DOG
#- 1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;;
@@ -2697,6 +2760,8 @@
<MM> {yerba} : "🧉" U1F9C9 # MATE DRINK
#- 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
<MM> {icecube} : "🧊" U1F9CA # ICE CUBE
+#- 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
+<MM> {bubble tea} : "🧋" U1F9CB # BUBBLE TEA
#- 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
<MM> {stander} : "🧍" U1F9CD # STANDING PERSON
#- 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
@@ -2704,7 +2769,7 @@
#- 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
<MM> {deaf} : "🧏" U1F9CF # DEAF PERSON
#- 1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;
-<MM> {face with monocle} : "🧐" U1F9D0 # FACE WITH MONOCLE
+<MM> {()o.-)} : "🧐" U1F9D0 # FACE WITH MONOCLE
#- 1F9D1;ADULT;So;0;ON;;;;;N;;;;;
<MM> {adult} : "🧑" U1F9D1 # ADULT
#- 1F9D2;CHILD;So;0;ON;;;;;N;;;;;
@@ -2741,7 +2806,7 @@
#- 1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;;
<MM> {orange heart} : "🧡" U1F9E1 # ORANGE HEART
#- 1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;;
-<MM> {billed cap} : "🧢" U1F9E2 # BILLED CAP
+<MM> {BBcap} : "🧢" U1F9E2 # BILLED CAP
#- 1F9E3;SCARF;So;0;ON;;;;;N;;;;;
<MM> {scarf} : "🧣" U1F9E3 # SCARF
#- 1F9E4;GLOVES;So;0;ON;;;;;N;;;;;
@@ -2755,7 +2820,7 @@
#- 1F9E8;FIRECRACKER;So;0;ON;;;;;N;;;;;
<MM> {firecracker} : "🧨" U1F9E8 # FIRECRACKER
#- 1F9E9;JIGSAW PUZZLE PIECE;So;0;ON;;;;;N;;;;;
-<MM> {jigsaw puzzle piece} : "🧩" U1F9E9 # JIGSAW PUZZLE PIECE
+<MM> {puzzle} : "🧩" U1F9E9 # JIGSAW PUZZLE PIECE
#- 1F9EA;TEST TUBE;So;0;ON;;;;;N;;;;;
<MM> {test tube} : "🧪" U1F9EA # TEST TUBE
#- 1F9EB;PETRI DISH;So;0;ON;;;;;N;;;;;
@@ -2808,6 +2873,8 @@
<MM> {briefs} : "🩲" U1FA72 # BRIEFS
#- 1FA73;SHORTS;So;0;ON;;;;;N;;;;;
<MM> {shorts} : "🩳" U1FA73 # SHORTS
+#- 1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;;
+<MM> {thong sandal} : "🩴" U1FA74 # THONG SANDAL
#- 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
<MM> {blood} : "🩸" U1FA78 # DROP OF BLOOD
#- 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
@@ -2820,6 +2887,14 @@
<MM> {kite} : "🪁" U1FA81 # KITE
#- 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
<MM> {parachute} : "🪂" U1FA82 # PARACHUTE
+#- 1FA83;BOOMERANG;So;0;ON;;;;;N;;;;;
+<MM> {boomerang} : "🪃" U1FA83 # BOOMERANG
+#- 1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;;
+<MM> {magic wand} : "🪄" U1FA84 # MAGIC WAND
+#- 1FA85;PINATA;So;0;ON;;;;;N;;;;;
+<MM> {pinata} : "🪅" U1FA85 # PINATA
+#- 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;;
+<MM> {nesting dolls} : "🪆" U1FA86 # NESTING DOLLS
#- 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;
<MM> {ringed planet} : "🪐" U1FA90 # RINGED PLANET
#- 1FA91;CHAIR;So;0;ON;;;;;N;;;;;
@@ -2832,3 +2907,79 @@
<MM> {diya} : "🪔" U1FA94 # DIYA LAMP
#- 1FA95;BANJO;So;0;ON;;;;;N;;;;;
<MM> {banjo} : "🪕" U1FA95 # BANJO
+#- 1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;;
+<MM> {military helmet} : "🪖" U1FA96 # MILITARY HELMET
+#- 1FA97;ACCORDION;So;0;ON;;;;;N;;;;;
+<MM> {accordion} : "🪗" U1FA97 # ACCORDION
+#- 1FA98;LONG DRUM;So;0;ON;;;;;N;;;;;
+<MM> {long drum} : "🪘" U1FA98 # LONG DRUM
+#- 1FA99;COIN;So;0;ON;;;;;N;;;;;
+<MM> {coin} : "🪙" U1FA99 # COIN
+#- 1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;;
+<MM> {saw} : "🪚" U1FA9A # CARPENTRY SAW
+#- 1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;;
+<MM> {screwdriver} : "🪛" U1FA9B # SCREWDRIVER
+#- 1FA9C;LADDER;So;0;ON;;;;;N;;;;;
+<MM> {ladder} : "🪜" U1FA9C # LADDER
+#- 1FA9D;HOOK;So;0;ON;;;;;N;;;;;
+<MM> {hook} : "🪝" U1FA9D # HOOK
+#- 1FA9E;MIRROR;So;0;ON;;;;;N;;;;;
+<MM> {mirror} : "🪞" U1FA9E # MIRROR
+#- 1FA9F;WINDOW;So;0;ON;;;;;N;;;;;
+<MM> {window} : "🪟" U1FA9F # WINDOW
+#- 1FAA0;PLUNGER;So;0;ON;;;;;N;;;;;
+<MM> {plunger} : "🪠" U1FAA0 # PLUNGER
+#- 1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;;
+<MM> {needle} : "🪡" U1FAA1 # SEWING NEEDLE
+#- 1FAA2;KNOT;So;0;ON;;;;;N;;;;;
+<MM> {knot} : "🪢" U1FAA2 # KNOT
+#- 1FAA3;BUCKET;So;0;ON;;;;;N;;;;;
+<MM> {bucket} : "🪣" U1FAA3 # BUCKET
+#- 1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;;
+<MM> {mouse trap} : "🪤" U1FAA4 # MOUSE TRAP
+#- 1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;;
+<MM> {toothbrush} : "🪥" U1FAA5 # TOOTHBRUSH
+#- 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
+<MM> {headstone} : "🪦" U1FAA6 # HEADSTONE
+#- 1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
+<MM> {placard} : "🪧" U1FAA7 # PLACARD
+### {rock} has prefix conflicts {rocket}, {rockon}
+#- 1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+<MM> {rock♫} : "🪨" U1FAA8 # ROCK
+### {fly} has prefix-conflicts {flying$} etc
+#- 1FAB0;FLY;So;0;ON;;;;;N;;;;;
+<MM> {fly♫} : "🪰" U1FAB0 # FLY
+#- 1FAB1;WORM;So;0;ON;;;;;N;;;;;
+<MM> {worm} : "🪱" U1FAB1 # WORM
+#- 1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
+<MM> {beetle} : "🪲" U1FAB2 # BEETLE
+#- 1FAB3;COCKROACH;So;0;ON;;;;;N;;;;;
+<MM> {cockroach} : "🪳" U1FAB3 # COCKROACH
+#- 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
+<MM> {potted plant} : "🪴" U1FAB4 # POTTED PLANT
+#- 1FAB5;WOOD;So;0;ON;;;;;N;;;;;
+<MM> {wood} : "🪵" U1FAB5 # WOOD
+#- 1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+<MM> {feather} : "🪶" U1FAB6 # FEATHER
+#- 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
+<MM> {anat<3} : "🫀" U1FAC0 # ANATOMICAL HEART
+#- 1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
+<MM> {lungs} : "🫁" U1FAC1 # LUNGS
+#- 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+<MM> {hugging} : "🫂" U1FAC2 # PEOPLE HUGGING
+<MM> {huggers} : "🫂" U1FAC2 # PEOPLE HUGGING
+#- 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
+<MM> {blueberries} : "🫐" U1FAD0 # BLUEBERRIES
+#- 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
+<MM> {bell pepper} : "🫑" U1FAD1 # BELL PEPPER
+#- 1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
+<MM> {olive} : "🫒" U1FAD2 # OLIVE
+#- 1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;;
+<MM> {flatbread} : "🫓" U1FAD3 # FLATBREAD
+#- 1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
+<MM> {tamale} : "🫔" U1FAD4 # TAMALE
+#- 1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
+<MM> {fondue} : "🫕" U1FAD5 # FONDUE
+#- 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+<MM> {Teapot} : "🫖" U1FAD6 # TEAPOT
+### prefix-conflict with {tea}
diff --git a/emojitrans2.pl b/emojitrans2.pl
index e3eec7c..4f70288 100755
--- a/emojitrans2.pl
+++ b/emojitrans2.pl
@@ -38,8 +38,28 @@ BEGIN { binmode(STDOUT, ":utf8");
'*' => 'asterisk',
'&' => 'ampersand',
'♫' => 'Multi_key',
+ '←' => 'Left',
+ '→' => 'Right',
+ '↑' => 'Up',
+ '↓' => 'Down',
+ '⇐' => 'BackSpace',
+ '⇤' => 'Home',
+ '⇥' => 'End',
+ '⇑' => 'Prior', # PageUp
+ '⇓' => 'Next', # PageDown
+ '↵' => 'Return',
+ '∇' => 'Delete', # Del, get it?
+ '˅' => 'Insert', # it'll do.
+ '˃' => 'Control_R',
+ '˂' => 'Control_L',
+ # Function-keys? ¹ ²..ˣ ᵉ ᵗ?
);
+ $specials = join "", keys %specials;
+ # Because of reasons
+ $specials =~ s/[]\\-]/\\$&/g;
+ $RE = qr{([[:alnum:]$specials]+)};
+
sub splitup {
my $arg=shift;
local $_;
@@ -61,7 +81,7 @@ unless (/^#/) {
my $hold=$_;
s/<M_>/<Multi_key>/;
s/<MM>/<Multi_key> <Multi_key>/;
- s({([][[:alnum:] _+:;%@>=`<,.^\$+#()?&!/|'"\\~*{}♫-]+)})(splitup($1))e;
+ s({($RE)})(splitup($1))e;
if (length($1) > 7) {
$_=$hold;
s/^<M([M_])>/### <M$1>/;
diff --git a/scan4dups.py b/scan4dups.py
index 9ce6193..a80bf94 100755
--- a/scan4dups.py
+++ b/scan4dups.py
@@ -6,42 +6,40 @@ import re
listing={}
-try:
+for line in sys.stdin:
+ # print "((%s))"%line
+ startpos=0
+ name=''
+ dupsfound=[]
while True:
- line=sys.stdin.next()
- # print "((%s))"%line
- startpos=0
- name=''
- dupsfound=[]
- while True:
- m=re.match("\s*<(\w+)>",line[startpos:])
- if not m:
- break
- word=m.group(1)
- name+=' '+word
- startpos+=m.end()
- if startpos<=0:
- continue
- m=re.match(r'[^"]*"(.+)"',line)
+ m=re.match("\s*<(\w+)>",line[startpos:])
if not m:
- # shouldn't happen, but just in case
- val='???'
- print "couldn't make sense of line: "+line
- else:
- val=m.group(1)
- if listing.has_key(name):
- if val != listing[name]:
- print "Exact conflict found: (%s )[%s][%s]"%(name,
- listing[name], val)
- else: # It's easier to read if lines have different indentations
- print "\tRedundant definition: (%s )[%s]"%(name, val)
- else:
- listing[name]=val
-except StopIteration:
- print "hit end"
+ break
+ word=m.group(1)
+ name+=' '+word
+ startpos+=m.end()
+ if startpos<=0:
+ continue
+ m=re.match(r'[^"]*"(.+)"',line)
+ if not m:
+ # shouldn't happen, but just in case
+ val='???'
+ print("couldn't make sense of line: "+line)
+ else:
+ val=m.group(1)
+ if name in listing:
+ if val != listing[name]:
+ print("Exact conflict found: (%s )[%s][%s]"%(name,
+ listing[name], val))
+ else: # It's easier to read if lines have different indentations
+ print("\tRedundant definition: (%s )[%s]"%(name, val))
+ else:
+ listing[name]=val
+
+print("hit end")
# NOW check for prefix conflicts:
-print "Checking prefixes."
-for key in listing.keys():
+print("Checking prefixes.")
+for key in listing:
# print "Key: (%s)"%key
pref=''
# Careful when splitting. The key always starts with a space.
@@ -51,9 +49,9 @@ for key in listing.keys():
continue
pref+=" "+word
# print "checking (%s)"%pref
- if listing.has_key(pref):
- print "Prefix conflict found: " \
- "(%s )[%s] vs (%s )[%s]"%(pref, listing[pref],
- key, listing[key])
+ if pref in listing:
+ print("Prefix conflict found: "
+ "(%s )[%s] vs (%s )[%s]"%(pref, listing[pref],
+ key, listing[key]))
+
-
diff --git a/treeprint.py b/treeprint.py
index bba74a3..987fcb3 100755
--- a/treeprint.py
+++ b/treeprint.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import sys
import re
@@ -31,8 +31,8 @@ def showdict(data, indent):
if first:
first=False
else:
- print
- print " "*max(indent,0) + "("+key,
+ print()
+ print(" "*max(indent,0) + "("+key, end=" ")
# Sneaky trick: we don't want to go newline-indent over and
# over for long sequences, i.e. cases where there is only
# one possible follower. So we skip the newlines in those
@@ -45,25 +45,24 @@ def showdict(data, indent):
# but then the {C|L} are not unique after the O.
if type(value)==dict:
if len(value)>1:
- print ""
+ print()
showdict(value, abs(indent)+4),
else:
- showdict(value, -(abs(indent)+4)),
+ showdict(value, -abs(indent+4)),
else:
- print " "+value.encode('utf-8'),
+ print(" "+value, end=" ")
if "-n" in sys.argv:
try:
- print unicodedata.name(value),
+ print(unicodedata.name(value.decode('utf-8')),end=" ")
except:
pass
- print ")",
+ print(")",end=" ")
listing={}
try:
while True:
- line=sys.stdin.next().decode('utf-8')
- # print "((%s))"%line
+ line=sys.stdin.__next__()
startpos=0
name=[]
dupsfound=[]
@@ -72,7 +71,7 @@ try:
if not m:
break
word=m.group(1)
- name.append(str(word)) # The keys are ordinary strings, not unicode
+ name.append(word)
startpos+=m.end()
if startpos<=0:
continue
@@ -80,13 +79,13 @@ try:
if not m:
# shouldn't happen, but just in case
val='???'
- print "couldn't make sense of line: "+line
+ print("couldn't make sense of line: "+line)
else:
val=m.group(1)
cur=listing
for elt in name[:-1]:
if type(cur)==dict:
- if not cur.has_key(elt):
+ if not elt in cur:
cur[elt]={}
cur=cur[elt] # This will fail for prefix conflicts
else:
@@ -98,15 +97,8 @@ try:
# fail. Prefix conflict. Let's ignore it.
pass
except StopIteration:
- # print "hit end"
- pass
+ print("hit end")
-# Actually, you could get almost as nice a listing just by using yaml,
-# but now that we have special no-newlines-for-singletons handling,
-# showdict looks nicer.
showdict(listing,0)
-# #print "\n\n-=- YAML -=-"
-# import yaml
-# print yaml.dump(listing, default_style=r'"', allow_unicode=True)
-# # Huh. Yaml "allow_unicode=True" still escapes non-BMP chars.
+