emoji: add one-shot candidate search
This commit is contained in:
226
map/emoji.dict
226
map/emoji.dict
@@ -0,0 +1,226 @@
|
||||
! ⚠ ≠
|
||||
!! ⚠
|
||||
!= ≠
|
||||
* ★
|
||||
** ★
|
||||
+ ±
|
||||
+- ±
|
||||
- →
|
||||
-> →
|
||||
. · … ÷
|
||||
.. · …
|
||||
... …
|
||||
./ ÷
|
||||
: ☹ ☺
|
||||
:( ☹
|
||||
:) ☺
|
||||
< ← ≤ ≠ ♥
|
||||
<- ←
|
||||
<3 ♥
|
||||
<= ≤
|
||||
<> ≠
|
||||
= ≡ ⇒
|
||||
== ≡
|
||||
=> ⇒
|
||||
> ≥
|
||||
>= ≥
|
||||
^ ⁽ ⁾ ⁺ ⁻ ⁼ ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁱ ⁿ
|
||||
^( ⁽
|
||||
^) ⁾
|
||||
^+ ⁺
|
||||
^- ⁻
|
||||
^0 ⁰
|
||||
^1 ¹
|
||||
^2 ²
|
||||
^3 ³
|
||||
^4 ⁴
|
||||
^5 ⁵
|
||||
^6 ⁶
|
||||
^7 ⁷
|
||||
^8 ⁸
|
||||
^9 ⁹
|
||||
^= ⁼
|
||||
^i ⁱ
|
||||
^n ⁿ
|
||||
_ ₍ ₎ ₊ ₋ ₌ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₐ ₑ ₒ ₓ
|
||||
_( ₍
|
||||
_) ₎
|
||||
_+ ₊
|
||||
_- ₋
|
||||
_0 ₀
|
||||
_1 ₁
|
||||
_2 ₂
|
||||
_3 ₃
|
||||
_4 ₄
|
||||
_5 ₅
|
||||
_6 ₆
|
||||
_7 ₇
|
||||
_8 ₈
|
||||
_9 ₉
|
||||
_= ₌
|
||||
_a ₐ
|
||||
_e ₑ
|
||||
_o ₒ
|
||||
_x ₓ
|
||||
a α
|
||||
al α
|
||||
alp α
|
||||
alph α
|
||||
alpha α
|
||||
b β 😊
|
||||
be β
|
||||
bet β
|
||||
beta β
|
||||
bl 😊
|
||||
blu 😊
|
||||
blus 😊
|
||||
blush 😊
|
||||
c χ
|
||||
ch χ
|
||||
chi χ
|
||||
d ° δ Δ ↓
|
||||
de Δ ° δ
|
||||
deg °
|
||||
del δ
|
||||
delt δ
|
||||
delta δ
|
||||
dn ↓
|
||||
e ε η
|
||||
ep ε
|
||||
eps ε
|
||||
et η
|
||||
eta η
|
||||
f 凸
|
||||
fu 凸
|
||||
fuc 凸
|
||||
fuck 凸
|
||||
g γ Γ 😀
|
||||
ga Γ γ
|
||||
gam γ
|
||||
gamm γ
|
||||
gamma γ
|
||||
gr 😀
|
||||
gri 😀
|
||||
grin 😀
|
||||
h 😄 😊 ❤️
|
||||
ha 😄 😊
|
||||
hap 😄 😊
|
||||
happ 😄 😊
|
||||
happy 😄 😊
|
||||
he ❤️
|
||||
hea ❤️
|
||||
hear ❤️
|
||||
heart ❤️
|
||||
i ∫ ∞ ι
|
||||
ii ∫
|
||||
in ∞
|
||||
inf ∞
|
||||
io ι
|
||||
iot ι
|
||||
iota ι
|
||||
j 😂
|
||||
jo 😂
|
||||
joy 😂
|
||||
k κ
|
||||
ka κ
|
||||
kap κ
|
||||
kapp κ
|
||||
kappa κ
|
||||
l λ Λ 😂 ❤️ 👍
|
||||
la Λ λ
|
||||
lam λ
|
||||
lamb λ
|
||||
lambd λ
|
||||
lambda λ
|
||||
li 👍
|
||||
lik 👍
|
||||
like 👍
|
||||
lo 😂 ❤️
|
||||
lol 😂
|
||||
lov ❤️
|
||||
love ❤️
|
||||
m × μ
|
||||
mu μ ×
|
||||
mul ×
|
||||
n ν
|
||||
nu ν
|
||||
o ω Ω ●
|
||||
om Ω ω
|
||||
ome ω
|
||||
omeg ω
|
||||
omega ω
|
||||
oo ●
|
||||
p φ Φ π Π ∏ ψ Ψ
|
||||
ph Φ φ
|
||||
phi φ
|
||||
pi π Π
|
||||
pp ∏
|
||||
ps Ψ ψ
|
||||
psi ψ
|
||||
r ρ
|
||||
rh ρ
|
||||
rho ρ
|
||||
s σ Σ √ ∑ 😀 😄 😊
|
||||
si Σ σ
|
||||
sig σ
|
||||
sigm σ
|
||||
sigma σ
|
||||
sm 😀 😄 😊
|
||||
smi 😀 😄 😊
|
||||
smil 😀 😄 😊
|
||||
smile 😀 😄 😊
|
||||
sq √
|
||||
ss ∑
|
||||
t τ θ Θ 👍
|
||||
ta τ
|
||||
tau τ
|
||||
th Θ θ 👍
|
||||
the θ
|
||||
thet θ
|
||||
theta θ
|
||||
thu 👍
|
||||
thum 👍
|
||||
thumb 👍
|
||||
thumbs 👍
|
||||
thumbsu 👍
|
||||
thumbsup 👍
|
||||
u ↑ υ
|
||||
up ↑ υ
|
||||
ups υ
|
||||
v ✓
|
||||
vv ✓
|
||||
x ξ Ξ ✗
|
||||
xi ξ Ξ
|
||||
xx ✗
|
||||
z ζ
|
||||
ze ζ
|
||||
zet ζ
|
||||
zeta ζ
|
||||
~ ≈
|
||||
~= ≈
|
||||
따 👍
|
||||
따봉 👍
|
||||
미 😄 😊
|
||||
미소 😄 😊
|
||||
방 😊
|
||||
방긋 😊
|
||||
사 ❤️
|
||||
사랑 ❤️
|
||||
스 😀 😄
|
||||
스마 😀 😄
|
||||
스마일 😀 😄
|
||||
엄 👍
|
||||
엄지 👍
|
||||
웃 😀 😄 😂
|
||||
웃겨 😂
|
||||
웃다 😀
|
||||
웃음 😀 😄 😂
|
||||
좋 👍
|
||||
좋아 👍
|
||||
좋아요 👍
|
||||
찬 👍
|
||||
찬성 👍
|
||||
폭 😂
|
||||
폭소 😂
|
||||
하 ❤️
|
||||
하트 ❤️
|
||||
|
||||
183
map/emoji.map
183
map/emoji.map
@@ -1,183 +0,0 @@
|
||||
! !
|
||||
!! ⚠
|
||||
!= ≠
|
||||
* *
|
||||
** ★
|
||||
+ +
|
||||
+- ±
|
||||
- -
|
||||
-> →
|
||||
. .
|
||||
.. ·
|
||||
... …
|
||||
./ ÷
|
||||
: :
|
||||
:( ☹
|
||||
:) ☺
|
||||
< <
|
||||
<- ←
|
||||
<3 ♥
|
||||
<= ≤
|
||||
<> ≠
|
||||
= =
|
||||
== ≡
|
||||
=> ⇒
|
||||
> >
|
||||
>= ≥
|
||||
D D
|
||||
De Δ
|
||||
G G
|
||||
Ga Γ
|
||||
I I
|
||||
II ∫
|
||||
L L
|
||||
La Λ
|
||||
O O
|
||||
Om Ω
|
||||
P P
|
||||
PP ∏
|
||||
Ph Φ
|
||||
Pi Π
|
||||
Ps Ψ
|
||||
S S
|
||||
SS ∑
|
||||
Si Σ
|
||||
T T
|
||||
Th Θ
|
||||
X X
|
||||
Xi Ξ
|
||||
^ ^
|
||||
^( ⁽
|
||||
^) ⁾
|
||||
^+ ⁺
|
||||
^- ⁻
|
||||
^0 ⁰
|
||||
^1 ¹
|
||||
^2 ²
|
||||
^3 ³
|
||||
^4 ⁴
|
||||
^5 ⁵
|
||||
^6 ⁶
|
||||
^7 ⁷
|
||||
^8 ⁸
|
||||
^9 ⁹
|
||||
^= ⁼
|
||||
^i ⁱ
|
||||
^n ⁿ
|
||||
_ _
|
||||
_( ₍
|
||||
_) ₎
|
||||
_+ ₊
|
||||
_- ₋
|
||||
_0 ₀
|
||||
_1 ₁
|
||||
_2 ₂
|
||||
_3 ₃
|
||||
_4 ₄
|
||||
_5 ₅
|
||||
_6 ₆
|
||||
_7 ₇
|
||||
_8 ₈
|
||||
_9 ₉
|
||||
_= ₌
|
||||
_a ₐ
|
||||
_e ₑ
|
||||
_o ₒ
|
||||
_x ₓ
|
||||
a a
|
||||
al al
|
||||
alp alp
|
||||
alph alph
|
||||
alpha α
|
||||
b b
|
||||
be be
|
||||
bet bet
|
||||
beta β
|
||||
c c
|
||||
ch ch
|
||||
chi χ
|
||||
d d
|
||||
de de
|
||||
deg °
|
||||
del del
|
||||
delt delt
|
||||
delta δ
|
||||
dn ↓
|
||||
e e
|
||||
ep ep
|
||||
eps ε
|
||||
et et
|
||||
eta η
|
||||
f f
|
||||
fu fu
|
||||
fuc fuc
|
||||
fuck 凸
|
||||
g g
|
||||
ga ga
|
||||
gam gam
|
||||
gamm gamm
|
||||
gamma γ
|
||||
i i
|
||||
in in
|
||||
inf ∞
|
||||
io io
|
||||
iot iot
|
||||
iota ι
|
||||
k k
|
||||
ka ka
|
||||
kap kap
|
||||
kapp kapp
|
||||
kappa κ
|
||||
l l
|
||||
la la
|
||||
lam lam
|
||||
lamb lamb
|
||||
lambd lambd
|
||||
lambda λ
|
||||
m m
|
||||
mu μ
|
||||
mul ×
|
||||
n n
|
||||
nu ν
|
||||
o o
|
||||
om om
|
||||
ome ome
|
||||
omeg omeg
|
||||
omega ω
|
||||
oo ●
|
||||
p p
|
||||
ph ph
|
||||
phi φ
|
||||
pi π
|
||||
ps ps
|
||||
psi ψ
|
||||
r r
|
||||
rh rh
|
||||
rho ρ
|
||||
s s
|
||||
si si
|
||||
sig sig
|
||||
sigm sigm
|
||||
sigma σ
|
||||
sq √
|
||||
t t
|
||||
ta ta
|
||||
tau τ
|
||||
th th
|
||||
the the
|
||||
thet thet
|
||||
theta θ
|
||||
u u
|
||||
up ↑
|
||||
ups υ
|
||||
v v
|
||||
vv ✓
|
||||
x x
|
||||
xi ξ
|
||||
xx ✗
|
||||
z z
|
||||
ze ze
|
||||
zet zet
|
||||
zeta ζ
|
||||
~ ~
|
||||
~= ≈
|
||||
208
map/emoji.src
208
map/emoji.src
@@ -1,100 +1,108 @@
|
||||
!! ⚠
|
||||
!= ≠
|
||||
** ★
|
||||
+- ±
|
||||
-> →
|
||||
.. ·
|
||||
... …
|
||||
./ ÷
|
||||
:( ☹
|
||||
:) ☺
|
||||
<- ←
|
||||
<= ≤
|
||||
<> ≠
|
||||
== ≡
|
||||
=> ⇒
|
||||
>= ≥
|
||||
^( ⁽
|
||||
^) ⁾
|
||||
^+ ⁺
|
||||
^- ⁻
|
||||
^= ⁼
|
||||
_( ₍
|
||||
_) ₎
|
||||
_+ ₊
|
||||
_- ₋
|
||||
_= ₌
|
||||
~= ≈
|
||||
^0 ⁰
|
||||
_0 ₀
|
||||
^1 ¹
|
||||
_1 ₁
|
||||
^2 ²
|
||||
_2 ₂
|
||||
<3 ♥
|
||||
^3 ³
|
||||
_3 ₃
|
||||
^4 ⁴
|
||||
_4 ₄
|
||||
^5 ⁵
|
||||
_5 ₅
|
||||
^6 ⁶
|
||||
_6 ₆
|
||||
^7 ⁷
|
||||
_7 ₇
|
||||
^8 ⁸
|
||||
_8 ₈
|
||||
^9 ⁹
|
||||
_9 ₉
|
||||
_a ₐ
|
||||
alpha α
|
||||
beta β
|
||||
chi χ
|
||||
deg °
|
||||
delta δ
|
||||
De Δ
|
||||
dn ↓
|
||||
_e ₑ
|
||||
eps ε
|
||||
eta η
|
||||
fuck 凸
|
||||
gamma γ
|
||||
Ga Γ
|
||||
^i ⁱ
|
||||
II ∫
|
||||
inf ∞
|
||||
iota ι
|
||||
kappa κ
|
||||
lambda λ
|
||||
La Λ
|
||||
mul ×
|
||||
mu μ
|
||||
^n ⁿ
|
||||
nu ν
|
||||
omega ω
|
||||
Om Ω
|
||||
oo ●
|
||||
_o ₒ
|
||||
phi φ
|
||||
Ph Φ
|
||||
pi π
|
||||
Pi Π
|
||||
PP ∏
|
||||
psi ψ
|
||||
Ps Ψ
|
||||
rho ρ
|
||||
sigma σ
|
||||
Si Σ
|
||||
sq √
|
||||
SS ∑
|
||||
tau τ
|
||||
theta θ
|
||||
Th Θ
|
||||
up ↑
|
||||
ups υ
|
||||
vv ✓
|
||||
xi ξ
|
||||
Xi Ξ
|
||||
xx ✗
|
||||
_x ₓ
|
||||
zeta ζ
|
||||
# Result first, followed by one or more TAB-separated aliases.
|
||||
⚠ !!
|
||||
★ **
|
||||
± +-
|
||||
→ ->
|
||||
· ..
|
||||
… ...
|
||||
÷ ./
|
||||
☹ :(
|
||||
☺ :)
|
||||
← <-
|
||||
≤ <=
|
||||
≠ <> !=
|
||||
≡ ==
|
||||
⇒ =>
|
||||
≥ >=
|
||||
⁽ ^(
|
||||
⁾ ^)
|
||||
⁺ ^+
|
||||
⁻ ^-
|
||||
⁼ ^=
|
||||
₍ _(
|
||||
₎ _)
|
||||
₊ _+
|
||||
₋ _-
|
||||
₌ _=
|
||||
≈ ~=
|
||||
⁰ ^0
|
||||
₀ _0
|
||||
¹ ^1
|
||||
₁ _1
|
||||
² ^2
|
||||
₂ _2
|
||||
♥ <3
|
||||
³ ^3
|
||||
₃ _3
|
||||
⁴ ^4
|
||||
₄ _4
|
||||
⁵ ^5
|
||||
₅ _5
|
||||
⁶ ^6
|
||||
₆ _6
|
||||
⁷ ^7
|
||||
₇ _7
|
||||
⁸ ^8
|
||||
₈ _8
|
||||
⁹ ^9
|
||||
₉ _9
|
||||
ₐ _a
|
||||
α alpha
|
||||
β beta
|
||||
χ chi
|
||||
° deg
|
||||
δ delta
|
||||
Δ De
|
||||
↓ dn
|
||||
ₑ _e
|
||||
ε eps
|
||||
η eta
|
||||
凸 fuck
|
||||
γ gamma
|
||||
Γ Ga
|
||||
ⁱ ^i
|
||||
∫ II
|
||||
∞ inf
|
||||
ι iota
|
||||
κ kappa
|
||||
λ lambda
|
||||
Λ La
|
||||
× mul
|
||||
μ mu
|
||||
ⁿ ^n
|
||||
ν nu
|
||||
ω omega
|
||||
Ω Om
|
||||
● oo
|
||||
ₒ _o
|
||||
φ phi
|
||||
Φ Ph
|
||||
π pi
|
||||
Π Pi
|
||||
∏ PP
|
||||
ψ psi
|
||||
Ψ Ps
|
||||
ρ rho
|
||||
σ sigma
|
||||
Σ Si
|
||||
√ sq
|
||||
∑ SS
|
||||
τ tau
|
||||
θ theta
|
||||
Θ Th
|
||||
↑ up
|
||||
υ ups
|
||||
✓ vv
|
||||
ξ xi
|
||||
Ξ Xi
|
||||
✗ xx
|
||||
ₓ _x
|
||||
ζ zeta
|
||||
|
||||
# Small multilingual emoji seed. Shared aliases intentionally produce choices.
|
||||
😀 웃음 웃다 스마일 smile grin
|
||||
😄 웃음 미소 스마일 smile happy
|
||||
😂 웃음 폭소 웃겨 joy lol
|
||||
😊 미소 방긋 smile blush happy
|
||||
❤️ 사랑 하트 heart love
|
||||
👍 좋아요 찬성 따봉 엄지 thumbsup like
|
||||
|
||||
106
map/mkemoji
106
map/mkemoji
@@ -1,39 +1,71 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/env python3
|
||||
"""Write emoji.dict to stdout from a result-first UTF-8 TSV file."""
|
||||
|
||||
awk '
|
||||
BEGIN { FS = "\t" }
|
||||
/^$/ { next }
|
||||
{
|
||||
key = $1
|
||||
val = $2
|
||||
map[key] = val
|
||||
for(i = 1; i < length(key); i++){
|
||||
p = substr(key, 1, i)
|
||||
if(!(p in map))
|
||||
map[p] = p
|
||||
}
|
||||
}
|
||||
END {
|
||||
for(k in map)
|
||||
print k "\t" map[k]
|
||||
}
|
||||
' $1 | sort -k1,1 > emoji.map
|
||||
import sys
|
||||
import unicodedata
|
||||
from pathlib import Path
|
||||
|
||||
awk '
|
||||
BEGIN { FS = "\t" }
|
||||
/^$/ { next }
|
||||
{
|
||||
key = $1
|
||||
val = $2
|
||||
for(i = 1; i <= length(key); i++){
|
||||
p = substr(key, 1, i)
|
||||
dict[p] = dict[p] " " val
|
||||
}
|
||||
}
|
||||
END {
|
||||
for(p in dict){
|
||||
sub(/^ /, "", dict[p])
|
||||
print p "\t" dict[p]
|
||||
}
|
||||
}
|
||||
' $1 | sort -k1,1 > emoji.dict
|
||||
|
||||
SOURCE = Path(__file__).with_name("emoji.src")
|
||||
|
||||
|
||||
def fold(s):
|
||||
s = "".join(chr(ord(c) + 32) if "A" <= c <= "Z" else c for c in s)
|
||||
return unicodedata.normalize("NFC", s)
|
||||
|
||||
|
||||
def read(path):
|
||||
entries = []
|
||||
with path.open(encoding="utf-8") as src:
|
||||
for lineno, raw in enumerate(src, 1):
|
||||
line = raw.rstrip("\r\n")
|
||||
if not line.strip() or line.lstrip().startswith("#"):
|
||||
continue
|
||||
fields = line.split("\t")
|
||||
if len(fields) < 2:
|
||||
raise ValueError(f"{path}:{lineno}: need a result and an alias")
|
||||
result = unicodedata.normalize("NFC", fields[0])
|
||||
if not result or any(c.isspace() for c in result):
|
||||
raise ValueError(f"{path}:{lineno}: bad result")
|
||||
for field in fields[1:]:
|
||||
alias = fold(field)
|
||||
if not alias or alias != alias.strip():
|
||||
raise ValueError(f"{path}:{lineno}: bad alias")
|
||||
entries.append((result, alias))
|
||||
return entries
|
||||
|
||||
|
||||
def add(table, key, result):
|
||||
values = table.setdefault(key, [])
|
||||
if result not in values:
|
||||
values.append(result)
|
||||
|
||||
|
||||
def build(entries):
|
||||
exact = {}
|
||||
prefix = {}
|
||||
for result, alias in entries:
|
||||
for n in range(1, len(alias) + 1):
|
||||
add(exact if n == len(alias) else prefix, alias[:n], result)
|
||||
for key in sorted(exact.keys() | prefix.keys()):
|
||||
values = exact.get(key, []) + prefix.get(key, [])
|
||||
values = list(dict.fromkeys(values))
|
||||
yield f"{key}\t{' '.join(values)}"
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) > 2:
|
||||
print(f"usage: {sys.argv[0]} [emoji.src]", file=sys.stderr)
|
||||
return 2
|
||||
path = Path(sys.argv[1]) if len(sys.argv) == 2 else SOURCE
|
||||
try:
|
||||
for line in build(read(path)):
|
||||
print(line)
|
||||
except (OSError, UnicodeError, ValueError) as error:
|
||||
print(error, file=sys.stderr)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
|
||||
Reference in New Issue
Block a user