diff --git a/dat.h b/dat.h index 2a80a46..fc52ab3 100644 --- a/dat.h +++ b/dat.h @@ -13,6 +13,7 @@ enum LangJP = 0x0e, LangJPK = 0x0b, LangKO = 0x13, + LangEMOJI = 0x05, Fontsz = 32, Fontbase = 4, diff --git a/map/emoji.dict b/map/emoji.dict new file mode 100644 index 0000000..5658ae0 --- /dev/null +++ b/map/emoji.dict @@ -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 ζ diff --git a/map/emoji.map b/map/emoji.map new file mode 100644 index 0000000..43e24ce --- /dev/null +++ b/map/emoji.map @@ -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 ζ diff --git a/map/emoji.src b/map/emoji.src new file mode 100644 index 0000000..13b44fc --- /dev/null +++ b/map/emoji.src @@ -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 ζ diff --git a/map/mkemoji b/map/mkemoji new file mode 100755 index 0000000..c3bba1b --- /dev/null +++ b/map/mkemoji @@ -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 diff --git a/strans.c b/strans.c index 3b05661..fadeb3a 100644 --- a/strans.c +++ b/strans.c @@ -7,6 +7,7 @@ Lang langs[] = { {LangJP, "hira", "kanji", nil, nil}, {LangJPK, "kata", "kanji", nil, nil}, {LangKO, "hangul", nil, nil, nil}, + {LangEMOJI, "emoji", "emoji", nil, nil}, }; int nlang = nelem(langs); @@ -36,7 +37,10 @@ show(void) int i; 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.sel = im.sel; for(i = 0; i < dc.nkouho; i++) @@ -44,6 +48,14 @@ show(void) chansend(drawc, &dc); } +static void +reset(void) +{ + sclear(&im.pre); + clearkouho(); + show(); +} + static void dictq(void) { @@ -78,6 +90,10 @@ commit(Str *com) { Str kana; + if(im.l == nil){ + sclear(&im.pre); + return; + } if(mapget(im.l->map, &im.pre, &kana)) sappend(com, &kana); sclear(&im.pre); @@ -165,14 +181,6 @@ flush: return e; } -static void -reset(void) -{ - sclear(&im.pre); - clearkouho(); - show(); -} - static int keystroke(u32int ks, u32int mod, Str *com) { @@ -244,13 +252,14 @@ keystroke(u32int ks, u32int mod, Str *com) } if(im.l == nil) return 0; - if(ks > 0x7f || !isalpha(ks)){ + if(ks > 0x7f || ks == ' '){ commit(com); sputr(com, ks); reset(); return 1; } - return dotrans(ks, com); + dotrans(ks, com); + return 1; } static void