add eomji(ctrl+e)

TODO: Some emojis can't be displayed. A font fallback or font merge is required.
This commit is contained in:
Hojun-Cho 2025-12-28 16:49:26 +09:00
parent 436a49c3ca
commit 97ae9b1709
6 changed files with 517 additions and 11 deletions

1
dat.h
View File

@ -13,6 +13,7 @@ enum
LangJP = 0x0e, LangJP = 0x0e,
LangJPK = 0x0b, LangJPK = 0x0b,
LangKO = 0x13, LangKO = 0x13,
LangEMOJI = 0x05,
Fontsz = 32, Fontsz = 32,
Fontbase = 4, Fontbase = 4,

179
map/emoji.dict Normal file
View File

@ -0,0 +1,179 @@
! ⚠ ≠
!! ⚠
!= ≠
* ★
** ★
+ ±
+- ±
- →
-> →
. · … ÷
.. · …
... …
./ ÷
: ☹ ☺
:( ☹
:) ☺
< ← ≤ ≠ ♥
<- ←
<= ≤
<> ≠
= ≡ ⇒
== ≡
=> ⇒
> ≥
>= ≥
^ ⁽ ⁾ ⁺ ⁻ ⁼ ⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁱ ⁿ
^( ⁽
^) ⁾
^+ ⁺
^- ⁻
^= ⁼
_ ₍ ₎ ₊ ₋ ₌ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₐ ₑ ₒ ₓ
_( ₍
_) ₎
_+ ₊
_- ₋
_= ₌
~ ≈
~= ≈
^0 ⁰
_0 ₀
^1 ¹
_1 ₁
^2 ²
_2 ₂
<3 ♥
^3 ³
_3 ₃
^4 ⁴
_4 ₄
^5 ⁵
_5 ₅
^6 ⁶
_6 ₆
^7 ⁷
_7 ₇
^8 ⁸
_8 ₈
^9 ⁹
_9 ₉
_a ₐ
a α
al α
alp α
alph α
alpha α
b β
be β
bet β
beta β
c χ
ch χ
chi χ
d ° δ ↓
D Δ
de ° δ
De Δ
deg °
del δ
delt δ
delta δ
dn ↓
_e ₑ
e ε η
ep ε
eps ε
et η
eta η
g γ
G Γ
ga γ
Ga Γ
gam γ
gamm γ
gamma γ
^i ⁱ
i ∞ ι
I ∫
II ∫
in ∞
inf ∞
io ι
iot ι
iota ι
k κ
ka κ
kap κ
kapp κ
kappa κ
l λ
L Λ
la λ
La Λ
lam λ
lamb λ
lambd λ
lambda λ
m × μ
mu × μ
mul ×
^n ⁿ
n ν
nu ν
_o ₒ
o ω ●
O Ω
om ω
Om Ω
ome ω
omeg ω
omega ω
oo ●
p φ π ψ
P Φ Π ∏ Ψ
ph φ
Ph Φ
phi φ
pi π
Pi Π
PP ∏
ps ψ
Ps Ψ
psi ψ
r ρ
rh ρ
rho ρ
s σ
S Σ ∑
si σ
Si Σ
sig σ
sigm σ
sigma σ
sq √
SS ∑
t τ θ
T Θ
ta τ
tau τ
th θ
Th Θ
the θ
thet θ
theta θ
u ↑ υ
up ↑ υ
ups υ
v ✓
vv ✓
_x ₓ
x ξ ✗
X Ξ
xi ξ
Xi Ξ
xx ✗
z ζ
ze ζ
zet ζ
zeta ζ

179
map/emoji.map Normal file
View File

@ -0,0 +1,179 @@
! !
!! ⚠
!= ≠
* *
** ★
+ +
+- ±
- -
-> →
. .
.. ·
... …
./ ÷
: :
:( ☹
:) ☺
< <
<- ←
<= ≤
<> ≠
= =
== ≡
=> ⇒
> >
>= ≥
^ ^
^( ⁽
^) ⁾
^+ ⁺
^- ⁻
^= ⁼
_ _
_( ₍
_) ₎
_+ ₊
_- ₋
_= ₌
~ ~
~= ≈
^0 ⁰
_0 ₀
^1 ¹
_1 ₁
^2 ²
_2 ₂
<3 ♥
^3 ³
_3 ₃
^4 ⁴
_4 ₄
^5 ⁵
_5 ₅
^6 ⁶
_6 ₆
^7 ⁷
_7 ₇
^8 ⁸
_8 ₈
^9 ⁹
_9 ₉
_a ₐ
a a
al al
alp alp
alph alph
alpha α
b b
be be
bet bet
beta β
c c
ch ch
chi χ
d d
D D
de de
De Δ
deg °
del del
delt delt
delta δ
dn ↓
_e ₑ
e e
ep ep
eps ε
et et
eta η
g g
G G
ga ga
Ga Γ
gam gam
gamm gamm
gamma γ
^i ⁱ
i i
I I
II ∫
in in
inf ∞
io io
iot iot
iota ι
k k
ka ka
kap kap
kapp kapp
kappa κ
l l
L L
la la
La Λ
lam lam
lamb lamb
lambd lambd
lambda λ
m m
mu μ
mul ×
^n ⁿ
n n
nu ν
_o ₒ
o o
O O
om om
Om Ω
ome ome
omeg omeg
omega ω
oo ●
p p
P P
ph ph
Ph Φ
phi φ
pi π
Pi Π
PP ∏
ps ps
Ps Ψ
psi ψ
r r
rh rh
rho ρ
s s
S S
si si
Si Σ
sig sig
sigm sigm
sigma σ
sq √
SS ∑
t t
T T
ta ta
tau τ
th th
Th Θ
the the
thet thet
theta θ
u u
up ↑
ups υ
v v
vv ✓
_x ₓ
x x
X X
xi ξ
Xi Ξ
xx ✗
z z
ze ze
zet zet
zeta ζ

99
map/emoji.src Normal file
View File

@ -0,0 +1,99 @@
!! ⚠
!= ≠
** ★
+- ±
-> →
.. ·
... …
./ ÷
:( ☹
:) ☺
<- ←
<= ≤
<> ≠
== ≡
=> ⇒
>= ≥
^( ⁽
^) ⁾
^+ ⁺
^- ⁻
^= ⁼
_( ₍
_) ₎
_+ ₊
_- ₋
_= ₌
~= ≈
^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 η
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 ζ

39
map/mkemoji Executable file
View File

@ -0,0 +1,39 @@
#!/bin/sh
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
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

View File

@ -7,6 +7,7 @@ Lang langs[] = {
{LangJP, "hira", "kanji", nil, nil}, {LangJP, "hira", "kanji", nil, nil},
{LangJPK, "kata", "kanji", nil, nil}, {LangJPK, "kata", "kanji", nil, nil},
{LangKO, "hangul", nil, nil, nil}, {LangKO, "hangul", nil, nil, nil},
{LangEMOJI, "emoji", "emoji", nil, nil},
}; };
int nlang = nelem(langs); int nlang = nelem(langs);
@ -36,7 +37,10 @@ show(void)
int i; int i;
sclear(&dc.preedit); sclear(&dc.preedit);
mapget(im.l->map, &im.pre, &dc.preedit); if(im.l == nil)
return;
if(!mapget(im.l->map, &im.pre, &dc.preedit))
dc.preedit = im.pre;
dc.nkouho = im.nkouho; dc.nkouho = im.nkouho;
dc.sel = im.sel; dc.sel = im.sel;
for(i = 0; i < dc.nkouho; i++) for(i = 0; i < dc.nkouho; i++)
@ -44,6 +48,14 @@ show(void)
chansend(drawc, &dc); chansend(drawc, &dc);
} }
static void
reset(void)
{
sclear(&im.pre);
clearkouho();
show();
}
static void static void
dictq(void) dictq(void)
{ {
@ -78,6 +90,10 @@ commit(Str *com)
{ {
Str kana; Str kana;
if(im.l == nil){
sclear(&im.pre);
return;
}
if(mapget(im.l->map, &im.pre, &kana)) if(mapget(im.l->map, &im.pre, &kana))
sappend(com, &kana); sappend(com, &kana);
sclear(&im.pre); sclear(&im.pre);
@ -165,14 +181,6 @@ flush:
return e; return e;
} }
static void
reset(void)
{
sclear(&im.pre);
clearkouho();
show();
}
static int static int
keystroke(u32int ks, u32int mod, Str *com) keystroke(u32int ks, u32int mod, Str *com)
{ {
@ -244,13 +252,14 @@ keystroke(u32int ks, u32int mod, Str *com)
} }
if(im.l == nil) if(im.l == nil)
return 0; return 0;
if(ks > 0x7f || !isalpha(ks)){ if(ks > 0x7f || ks == ' '){
commit(com); commit(com);
sputr(com, ks); sputr(com, ks);
reset(); reset();
return 1; return 1;
} }
return dotrans(ks, com); dotrans(ks, com);
return 1;
} }
static void static void