From d4535fe0bad708e606bb01cae50c05f7f2f69431 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 7 Mar 2024 20:13:57 +0100 Subject: [PATCH 1/2] feat: Add kaomoji support #6 --- README.md | 32 +- lua/cmp_emoji/init.lua | 5 +- lua/{emoji => data}/emojis.json | 0 lua/data/kaomojis.json | 2338 +++++++++++++++++++++++++++ lua/emoji/config.lua | 5 + lua/emoji/emoji.lua | 54 +- lua/emoji/init.lua | 28 +- lua/emoji/kaomoji.lua | 23 + lua/emoji/ui.lua | 53 +- lua/emoji/utils.lua | 48 + lua/telescope/_extensions/emoji.lua | 4 +- plugin/emoji.vim | 2 + tests/emoji/test_emoji.lua | 28 +- 13 files changed, 2502 insertions(+), 118 deletions(-) rename lua/{emoji => data}/emojis.json (100%) create mode 100644 lua/data/kaomojis.json create mode 100644 lua/emoji/kaomoji.lua diff --git a/README.md b/README.md index 993be8c..3f9e77e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ ## ❓ Why -This plugin allows you to easily search and insert emojis in your current buffer. +This plugin allows you to easily search and insert emojis and kaomojis in your current buffer. Though there are a couple of plugins (see [Similar plugins and inspiration](#similar-plugins-and-inspiration)), I decided to make a [15th plugin](https://xkcd.com/927/). 😉 @@ -30,13 +30,13 @@ Jokes aside, I could not find a plugin that fulfills my wish for both telescope - Automatic updates of available emojis via GitHub actions ([emojisource.app](https://emojisource.app/) as source). - No dependencies (relies on `vim.ui.select`). -- (Optional) [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) integration. -- (Optional) [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) integration. +- (Optional) [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) integration (emojis only). +- (Optional) [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) integration (emojis only). ## Screenshots
-vim.uiemojis via vim.ui
-telescopekaomojis via vin.ui + +
+telescope (emojis)
-cmpcmp (emojis)", + "<(._.)>", + "m(_ _)m", + "mUTェTUm", + "m(¬0¬)m", + "へ(´д`へ)", + "o(_ _)o", + "(シ_ _)シ", + "(o_ _)o", + "<(_ _)>", + "<(_ _)>", + "m(._.)m", + "(o。_。)o", + "ヾ(_ _。)", + "m(;∇;)m", + "m(_ _)m", + "≦(._.)≧", + "m(._.)m" + ], + "Bunny/Rabbit": [ + "˚ᆺ˚", + "(′⅄‵)", + "U・x・U", + "(•ㅅ•)", + "(ㅇㅅㅇ❀)", + "( ・×・)", + "( ÒㅅÓ)", + "(⁎˃ᆺ˂)", + "(๏ᆺ๏υ)", + "(๑╹ᆺ╹)", + "/(・x・)\", + "⌒(・x・)⌒", + "U。・.・。U", + "U╹ x ╹U", + "/(=∵=)\", + "U(•ㅅ•)U", + "(´・×・`)", + "○(・x・)○", + "(=‘x‘=)", + "⁽˙̄˟˙̄⁾", + "(๑òᆺó๑)", + "⁽⁽˙˟˙⁾⁾", + "(´・×・`)", + "⌒(•ㅅ•)⌒", + "(乂☉ェ☉=)", + "(╹ૅ×╹ૅ)", + " ̄(•ㅅ•) ̄", + "⌒(=∵=)⌒", + "/(•ㅅ•)\\", + "U(ㅇㅅㅇ❀)U" + ], + "Bye/Hi/Hello": [ + "ヾ(^∇^)", + "\( ̄O ̄)", + "(¬_¬)ノ", + "(ノ^∇^)", + "ヾ(☆▽☆)", + "(/・0・)", + "(^o^)/", + "( ̄▽ ̄)ノ", + "(≧∇≦)/", + "\(-o- )", + "(。・∀・)ノ", + "\(°o°;)", + "川o・-・)ノ", + "( ・_・)ノ", + "( ・ω・)ノ", + "( ^_^)/", + "( ゜ρ゜)ノ", + "( ゚▽゚)/", + "(;-_-)ノ", + "(。-ω-)ノ", + "(。^_・)ノ", + "(。´∀`)ノ", + "(*^▽^)/", + "(* ̄O ̄)ノ", + "ヾ(^-^)ノ", + "(^-^*)/", + "\(-_- )", + "ヾ(´¬`)ノ", + "ヾ(・ω・o)", + "(=゚ω゚)ノ" + ], + "Cat": [ + "ὃ⍜ὅ", + "ㅇㅅㅇ", + "චᆽච", + "ऴिाी", + "(ꀄꀾꀄ)", + "ฅ•ω•ฅ", + "(ꅈꇅꅈ)", + "(ꀂǒꀂ)", + "(ꃪꄳꃪ)", + "=ටᆼට=", + "ʘ̥ꀾʘ̥", + "=ộ⍛ộ=", + "^ↀᴥↀ^", + "โ๏∀๏ใ", + "(ΦωΦ)", + "ミ๏v๏彡", + "ि०॰०ॢी", + "(ฅ'ω'ฅ)", + "(=ↀωↀ=)", + "=^∇^*=", + "(⁎˃ᆺ˂)", + "(ㅇㅅㅇ❀)", + "ฅ(≚ᄌ≚)", + "(^・ェ・^)", + "§ꊘ⃑٥ꊘ⃐§", + "(=‘x‘=)", + "(^-人-^)", + "(=①ω①=)", + "(=TェT=)", + "(=xェx=)" + ], + "Confused": [ + "ఠ_ఠ", + "◔_◔", + "●.◉", + "(^^ゞ", + "ಠ_ರೃ", + "℃ↂ_ↂ", + "عربى", + "ɾ◉⊆◉ɹ", + "(。ヘ°)", + "(⊙_☉)", + "(^^;)", + "(☉_☉)", + "(♠_♦)", + "(゚ー゚;", + "(C_C)", + "(⊙_◎)", + "(゜-゜)", + "(◑○◑)", + "(・・;)", + "⁀⊙﹏☉⁀", + "(゜。゜)", + "(・・)", + "(´エ`;)", + "(‘◇’)", + "(・∩・)", + "(・∧‐)ゞ", + "(⊙_⊙)", + "(◎_◎;)", + "(●__●)", + "(゚ペ)" + ], + "Crying": [ + "أ‿أ", + "╥﹏╥", + "(;﹏;)", + "(ToT)", + "(┳Д┳)", + "(ಥ﹏ಥ)", + "(;へ:)", + "(T_T)", + "(πーπ)", + "(T▽T)", + "(⋟﹏⋞)", + "(iДi)", + "(´Д⊂ヽ", + "(;Д;)", + "(>﹏<)", + "(TдT)", + "(つ﹏⊂)", + "༼☯﹏☯༽", + "(ノ﹏ヽ)", + "(ノAヽ)", + "(╥_╥)", + "(T⌓T)", + "(༎ຶ⌑༎ຶ)", + "(☍﹏⁰)。", + "(ಥ_ʖಥ)", + "(つд⊂)", + "(≖͞_≖̥)", + "(இ﹏இ`。)", + "༼ಢ_ಢ༽", + "༼ ༎ຶ ෴ ༎ຶ༽" + ], + "Cute/Kawaii": [ + "ʕ→ᴥ←ʔ", + "٩◔̯◔۶", + "U^エ^U", + "ʕ·ᴥ·ʔ", + "ʕ•ᴥ•ʔ", + "(ˇ⊖ˇ)", + "༼☯﹏☯༽", + "^ↀᴥↀ^", + "(◕ᴥ◕)", + "ʕ⊙ᴥ⊙ʔ", + "(´﹃`)", + "༼ꉺɷꉺ༽", + "(✿ヘᴥヘ)", + "ʕ→ᴥ← ʔ", + "(✿╹◡╹)", + "(▰∀◕)ノ", + "(人◕ω◕)", + "(ㆁᴗㆁ✿)", + "(ノ≧ڡ≦)", + "ʕ ·ᴥ·ʔ", + "(≖ᴗ≖✿)", + "(◕‿◕✿)", + "(๑♜д♜)", + "(✾♛‿♛)", + "(*бωб)", + "(ᇴ‿ฺᇴ)", + "(๑→ܫ←)", + "(❍ᴥ❍ʋ)", + "ʕ·ᴥ· ʔ", + "(✪‿✪)ノ" + ], + "Dancing": [ + "└|∵┌|", + "|┐∵|┘", + "(ノ‥)ノ", + "|o∵|o", + "ح˚௰˚づ", + "o|∵o|", + "(/・・)ノ", + "ヾ(^ ^ゞ", + "(o^^)o", + "o(^^o)", + "ヾ(^^ゞ)", + "(ノ・・)ノ", + "(ノ^o^)ノ", + "(ノ ̄ー ̄)ノ", + "(ノ ̄ω ̄)ノ", + "⌎⌈╹우╹⌉⌍", + "(ノ・o・)ノ", + "(ノ・ェ・)ノ", + "┌(☆o★)┘", + "└|゚ε゚|┐", + "(ノ≧∀≦)ノ", + "(ノ゚▽゚)ノ", + "┌|゚з゚|┘", + "┌(メ▼▼)┘", + "(〜^∇^)〜", + "⌌⌈╹므╹⌉⌏", + "\(^ω^\)", + "१|˚–˚|५", + "(〜 ̄△ ̄)〜", + "〜(꒪꒳꒪)〜" + ], + "Depressed": [ + "(◞‸◟)", + "(´∵`)", + "|ω・`)", + "|ω・`)", + "(-д-;)", + "从´_υ`从", + "(ノд`@)", + "(ノε`◎)", + "(ノω・`o)", + "(ー○ー)=3", + "(・´з`・)", + "(´・ω・`)", + "(´・ω・`)", + "(∥ ̄■ ̄∥)", + "(´-ω-`)", + "(o´_`o)", + "(´・仝・`)", + "(*ノз`*)", + "(っ´ω`c)", + "( ̄σ・・ ̄)", + "…φ(。。*)", + "(´・_・`)", + "(´゚ω゚`)", + "(lll-ω-)", + "(_ _|||)", + "(*´Д`)=з", + "(´‐ω‐)=з", + "( ◢д◣)", + "(* _ω_)…", + "…ρ(・ω`・、)" + ], + "Determined": [ + "(・∀・)", + "(`ω´)", + "(´ー+`)", + "( ̄・ω・ ̄)", + "(*^∀゚)ъ", + "(ฅ`ω´ฅ)", + "(`・ω・´)", + "ヾ(゚ェ゚ゞ)", + "(`・ω・´)", + "(๑ÒωÓ๑)", + "(`・ω・´)", + "|`・ω・)9", + "o(`*ω*´)", + "( ー`дー´)", + "(+・`⊇・)b", + "( ・`ω・´)", + "(`・ω・´)+", + "(`・ω・´)b", + "( +・`ω・)b", + "ヾ(`・ω・´)ノ", + "(。+・`ω・´)", + "(`・ω・´) b", + "(・`ω´・ ●)", + "d( ・ω´・+)", + "(。+・`ω・´)", + "(σ`・∀・´)σ", + "m9っ`・ω・´)", + "( ・`ー・´) +", + "o.(+・`ω・+).o", + ".*:゚(`・ω・´)ゝ゚:*." + ], + "Devil": [ + "ಠﭛಠ", + "(`∀´)Ψ", + "(◣∀◢)ψ", + "ψ(`∇´)ψ", + "Ψ(☆w☆)Ψ", + "(`㊥益㊥)Ψ", + "`(^▼^)´↑", + "Ψ(`∀´#)ノ", + "↑_(ΦwΦ;)Ψ", + "ψ(^Ф∀Ф^)ψ", + "^(`ω´ )^ψ", + "^(#`∀´)_Ψ", + "◥(ฅº₩ºฅ)◤", + "Ψ( `▽´ )Ψ", + "ƪ(`▿▿▿▿´ƪ)", + "⁞⁝•ֱ̀␣̍•́⁝⁞", + "←~∋(。Ψ▼ー▼)∈", + "Ψ(`_´ # )↝", + "↜(╰ •ω•)╯ψ", + "Ψ(Φ皿Φ)))~††", + "←~(o `▽´ )oΨ", + "Ψ (‘益’# )↝", + "∋━━o(`∀´oメ)~→", + "↜(͛ ꒪͒৫͏̈́꒪͒)͛⌰", + "∋━━o(`∀´oメ)~→━━", + "((( ←~(o `▽´ )oΨ", + "(◞≼◉ื≽◟ ;益;◞≼◉ื≽◟)Ψ", + "━━╋⊂( ´ー`)彡Ψ(ΦД| |Φ;)Ψ", + "^(#`∀´)_Ψ・・・・・・†_(゚ー゚*)β", + "†_(・”・*)β((  )β ^(#`∀´)_Ψ" + ], + "Disappointed": [ + "orz", + "(´Д⊂", + "(πーπ)", + "('A`)", + "(ન_੦)", + "(´д`)", + "(;_;)", + "(´ω`)", + "(´ж`;)", + "つ´Д`)つ", + "(ノд`@)", + "从´_υ`从", + "ヽ(冫、)ノ", + "(i々i)]", + "(;´д`)", + "(ノ_<。)", + "( p_q)", + "(´・ω・`)", + "o(;△;)o", + "( iдi )", + "(´・ω・`)", + "(*ノ_<*)", + "(´;ω;`)", + "ヽ(´Д`;)ノ", + "(;一ω一||)", + "(_ _|||)", + "Σ( ̄ロ ̄lll)", + "_ノ乙(、ン、)_", + "///orz///", + "((((T-T*))))" + ], + "Eating/Drinking": [ + "―●○◎-", + "―⊂ZZZ⊃", + "( ̄w ̄)Ψ", + "◥█̆̈◤࿉∥", + "(^-^)_日", + "(。・・)_且", + "(#´ー´)旦", + "且_(・_・ )", + "( ゚Д゚)⊃旦", + "( -_-)旦~", + "(*^◇^)_旦", + "(*・∀・)_Ω~", + "~旦_(^O^ )", + "(  ゜Д゜)⊃旦", + "~~旦⊂(・∀・ )", + "ー(  ̄▽)_皿~~", + "(*`▽´)_旦~~", + "~~旦_(・o・;)", + "~(=^‥^)_旦~", + "且_(゚◇゚;)ノ゙", + "(*´ェ`*)っ旦~", + "( ・・)つ-●●●", + "( ^-^)_旦””", + "((((´∀`)_旦~", + "( ´・ω・`)_且~", + "(*´-ω)o旦~┏┓", + "(*´・ω)o旦~┏┓", + "~~匸Pヽ(・ω・`)", + "(○^ω^)_旦~~♪", + "~~旦_(-ω-`。)" + ], + "Evil": [ + "ಠﭛಠ", + "(`ε´)", + "(`ー´)", + "` ͜ʖ´", + "(☼Д☼)", + "(`▽´)", + "(`∀´)Ψ", + "( `ハ´)", + "(`Д´*)", + "| `Д´|", + "ψ`ー´)ノ", + "ヘ(`▽´*)", + "p(`ε´q)", + "ψ(`∇´)ψ", + "(ʃƪ¬‿¬)", + "ლ(`∀´ლ)", + "Ψ(`▽´)Ψ", + "(=`〜´=)", + "(=`ω´=)", + "ρ(`.´)ρ", + "ψ(`Д´)ψ", + "(メ`ロ´)/", + "()`艸´()", + "Ψ( ̄∀ ̄)Ψ", + "(・`ω´・)", + "(=`ェ´=)", + "(屮`∀´)屮", + "Ψ(`◇´)Ψ", + "o(`ω´*)o", + "(ц`ω´ц*)" + ], + "Excited": [ + "≧ω≦", + "୧⍢⃝୨", + "(⊙ᗜ⊙)", + "โ๏∀๏ใ", + "(≧∀≦)", + "۹⌤_⌤۹", + "୧☉□☉୨", + "(⊙ꇴ⊙)", + "(´∀`)", + "(・w・)", + "(ᗒᗨᗕ)", + "ʘ ͜ʖ ʘ", + "(≧∇≦*)", + "(*≧▽≦)", + "۹(ÒہÓ)۶", + "(ノ・ェ・)ノ", + "٩(^ᴗ^)۶", + "б(>ε<)∂", + "(⌬̀⌄⌬́)", + "٩(θ‿θ)۶", + "ヽ(^Д^)ノ", + "(★^O^★)", + "(๑✧∀✧๑)", + "(*≧∀≦*)", + "٩(●ᴗ●)۶", + "⸍⚙̥ꇴ⚙̥⸌", + "(๑>ᴗ<๑)", + "۹(˒௰˓)۶", + "(* >ω<)", + "\(T∇T)/" + ], + "Fall": [ + "_(:3」∠)_", + "(_□_:)", + "(_Å_)", + "(o;_ω_)o", + "(o_□_)o", + "(o ><)o", + "ヘ(_ _ヘ)", + "o(>< o)", + "(ヘ_ _)ヘ", + "(o_0_)o))", + "(o_ _)o", + "(o_ _)o", + "_(。_°/", + "o(_ _o)", + "ヽ(_ _ヽ)彡", + "_(・_.)/", + "_:(´ཀ`」 ∠):_", + "o(_ _o)ノ☆", + "☆ヽ(o_ _)o", + "ミ(ノ_ _)ノ", + "o(_ _o)", + "ε=(。_ _)。", + "ヽ(_ _ヽ)", + "。。。(ノ_ _)ノ", + "。(_ _。)=3", + "εミ(ο_ _)ο", + "ο(_ _ο)彡3", + "* ・・(o_ _)o", + "o(_ _o)・・ *", + "ε=ε=┏( >_<)┛ (ノ_ _)ノ" + ], + "Feminine": [ + "ಠ_ಠ", + "ʕ•ᴥ•ʔ", + "ʕ→ᴥ←ʔ", + "(•ө•)♡", + "( ′~‵)", + "(ꐦ°д°)", + "(☝◞‸◟)☞", + "(○´―`)ゞ", + "(⌍་д་⌌)", + "(๑´ㅂ`๑)", + "(ฅΦωΦ)ฅ", + "(๑°⌓°๑)", + "( ・ὢ・ )", + "(・◡ु‹ )", + "(ง `ω´)۶", + "ԅ( ˘ω˘ԅ)", + "(๑•̆૩•̆)", + "(๑•́ω•̀)", + "꒰✩’ω`ૢ✩꒱", + "ヽ( ε∀ε )ノ", + "(๑˃̵ᴗ˂̵)و", + "(๑˃́ꇴ˂̀๑)", + "(∩`ω´)⊃))", + "(* >ω<)=3", + "((⊂(`ω´∩)", + "ω・)و ̑̑༉⑩", + "(´・ε・̥ˋ๑)", + "٩(๑`н´๑)۶", + "(♡ >ω< ♡)", + "_(┐「ε:)_❤" + ], + "Flower": [ + "≧❀‿❀≦", + "(◕︿◕✿)", + "(ʘ‿ʘ✿)", + "(◕ㅁ◕✿)", + "(◕д◕✿)", + "(〃‿〃✿)", + "(≖︿≖✿)", + "(◕▿◕✿)", + "(◕ㅅ◕✿)", + "(◡‿◡✿)", + "(◕ω◕✿)", + "(◕ᴗ◕✿)", + "(/‿\✿)", + "(✿◠‿◠)", + "(❁▿❁*)", + "(◠‿◠✿)", + "(◕‿◕✿)", + "(✿ヘᴥヘ)", + "❁◕ ‿ ◕❁", + "✿◕ ‿ ◕✿", + "(◕__◕✿)", + "(◕‸ ◕✿)", + "(◕⍸ ◕✿)", + "❀◕ ‿ ◕❀", + "✾◕ ‿ ◕✾", + "(✿☯‿☯✿)", + "(ʘ‿ʘ)ノ✿", + "(˶◕‿◕˶✿)", + "(◕◞౪◟◕✿)", + "乁༼☯‿☯✿༽ㄏ" + ], + "Funny": [ + "〓D", + "❐‿❑", + "ರ_ರ", + "ಥ◡ಥ", + "ಥ_ಥ", + "ತಎತ", + "ಠ益ಠ", + "ಠoಠ", + "ಠ◡ಠ", + "ಠ▃ಠ", + "☉_☉", + "ಠ~ಠ", + "ಠ.ಠ", + "◮_◮", + "ಠ_ಠ", + "ಠ_๏", + "◪_◪", + "ఠ_ఠ", + "ↁ_ↁ", + "◜㍕◝", + "◙‿◙", + "◘_◘", + "இ_இ", + "ਉ_ਉ", + "◔̯◔", + "◔_◔", + "●_●", + "◉︵◉", + "أ‿أ", + "◉_◉" + ], + "Glasses/Sunglasses": [ + "▼ω▼", + "ಠ_ರೃ", + "(▼▼)", + "(▼∀▼)", + "凸(◆◆メ", + "(⌐■_■)", + "(メ▼_▼)", + "(▼O▼メ)", + "(‡▼益▼)", + "|*▼皿▼)", + "(▼-▼*)", + "(╭ರ_⊙)", + "(♯▼皿▼)", + "(⌐▨_▨)", + "(▼皿▼#)", + "(■Д■*)", + "Σ(▼□▼メ)", + "(キ▼O▼)/", + "(。▼皿▼)σ", + "ヽ(▼皿▼ヽ)", + "(ノ▼皿▼)ノ", + "ヾ(●ε●)ノ", + "ヾ(▼ヘ▼;)", + "щ(▼ロ▼щ)", + "ヽ(▼ー▼キ)", + "(つ▀¯▀)つ", + "┌(メ▼▼)┘", + "┌(▼▼メ)┘", + "༼⌐■ل͟■༽", + "(キ▼⊿▼)ノ" + ], + "Grin": [ + "(´υ`)", + "( ̄▼ ̄)", + "(゚ー゚)", + "(´v`)", + "(・∀・)", + "(☆∀☆)", + "( ̄ー ̄)", + "(・∀・)", + "(`ω´)", + "(  ̄ー)", + "┫ ̄旦 ̄┣", + "U^皿^U", + "(_ー_)", + "(▼∀▼)", + "(■皿■)", + "( ̄ー+ ̄)", + "(☆>⊇<)", + "|* ̄∇ ̄|", + "( ̄▼ ̄*)", + "(。-∀-)", + "(*゚ー゚)", + "v( ̄∇ ̄)", + "(_ー+_)", + "( ̄+ー ̄)", + "(´、ゝ`)", + "(´-`)ノ", + "(・∀・`;)", + "( ´_ゝ`)", + "(#~皿~#)", + "( ̄ ̄ー ̄ ̄)" + ], + "Gross": [ + "(咒)", + "ʕథ౪థʔ", + "༼ꉺɷꉺ༽", + "(亝ω亝。)", + "( ՞ਊ ՞)", + "(✧≖‿ゝ≖)", + "(⊙◞౪◟⊙)", + "(´◑ω◐`)", + "(´༎ຶ༎ຶ)", + "( ´థ౪థ)", + "( ఠൠఠ )", + "(╬♛ 益♛ )", + "(⑅∫°ਊ°)∫", + "(;; @益@)", + "(́◉◞౪◟◉)", + "ʅ( ‾⊖◝)ʃ", + "(。☉౪ ⊙。)", + "✌(◔౪◔ )✌", + "(΄◞ิ౪◟ิ‵)", + "( ≖ิ‿≖ิ )", + "༽΄◞ิ౪◟ิ‵༼", + "(´≝◞⊖◟≝`)", + "(☄ฺ♛ฺ3♛ฺ)", + "(´゚◞౪◟゚`)", + "ʅ(◔౪◔ ) ʃ", + "( ☞◔ ౪◔)☞", + "༼;´༎ຶ ༎ຶ༽", + "\(´◓Д◔`)/", + "( ≖ิൠ≖ิ )", + "(´⊙◞⊱◟⊙`)" + ], + "Happy": [ + "ɷ◡ɷ", + "꒡ꆚ꒡", + "⊙▽⊙", + "ʘ‿ʘ", + "മ◡മ", + "◉‿◉", + "≖‿≖", + "◙‿◙", + "ȏ.̮ȏ", + "(≧▽≦)", + "(ꉺᗜꉺ)", + "(^ω^)", + "(^v^)", + "( ̄个 ̄)", + "〔´∇`〕", + "(´∀`)", + "⊂◉‿◉つ", + "(^ω^)", + "ヽ(ヅ)ノ", + "(ꉺ౪ꉺ)", + "(¬‿¬)", + "(-‿◦)", + "(•‿•)", + "(─‿─)", + "(◑‿◐)", + "ღවꇳවღ", + "。^‿^。", + "´・ᴗ・`", + "(ᗒᗨᗕ)", + "(^▽^)" + ], + "Heart": [ + "♱♡‿♡♰", + "♡^▽^♡", + "✿♥‿♥✿", + "♡ඩ⌔ඩ♡", + "༼♥ل͜♥༽", + "(♡´艸`)", + "⊆♥_㇁♥⊇", + "(♥ω♥*)", + "(•ө•)♡", + "(●♡∀♡)", + "˅ɞ♡⃛ʚ˅", + "⊂(♡⌂♡)⊃", + "(✿ ♥‿♥)", + "(‘∀’●)♡", + "ヽ(o♡o)/", + "(。♥‿♥。)", + "(●´□`)♡", + "ღゝ◡╹)ノ♡", + "(♡´౪`♡)", + "(人・㉨・)♡", + "(๑♡⌓♡๑)", + "ƪ(♥ﻬ♥)ʃ", + "(๑♡3♡๑)", + "♥(ˆ⌣ˆԅ)", + "(灬♥ω♥灬)", + "♡(ŐωŐ人)", + "(´・` )♡", + "(⺣◡⺣)♡*", + "♡´・ᴗ・`♡", + "(♥→o←♥)" + ], + "Helpless": [ + "(ㆆᴗㆆ)", + "-`д´-", + "(゚⊿゚)", + "(´c_`)", + "(´_ゝ`)", + "( ◜◡‾)", + "(‾◡◝ )", + "(´・_・`)", + "╮(╯_╰)╭", + "( º﹃º )", + "( ˘・з・)", + "(´゚д゚`)", + "┐(´д`)┌", + "(´,_ゝ`)", + "_(┐「ε:)_", + "Σ(`L_` )", + "_ノ乙(、ン、)_", + "(๑•́ ₃ •̀๑)", + "(´-ι_-`)", + "|   ´ω`|φ", + "(・ε・`*) …", + "凹(´・ω・`)凹", + "(o´・ε・`o)", + "ο(´・ω・`o)", + "ρ(´-_-`●)", + "(o´・ω・`)ノ", + "↓↓(%;´п`Ⅲ)", + "…_φ(・ω・` )", + "(・ω・`)………..", + "(´・ω・)…。oо○" + ], + "Hide": [ + "|д・)", + "|ω・)", + "|。・)", + "|o゜)", + "|ω`)", + "|ョз☆)", + "|⁰⊖⁰)", + "|ω・`)", + "(⊃‿⊂)", + "|ョд゚)", + "┃(・ω┃", + "|_-。)", + "|Д´)/", + "ヘ(・_|", + "|Д`|┛", + ")ु੭ु⁾", + ")Д⊙`)", + "|∀・)ジ", + "|−・;)", + "|x・`)", + "|エ)・)⊃", + "|´∀`●)", + "|д꒪ͧ)…", + "|ʘ‿ʘ)╯", + "|・ω・`)", + "|ω´・;)", + "|・x・`)", + "|ω-o)゚", + "|ω・`)ノ", + "|*▼皿▼)" + ], + "Hit": [ + "o(≧▼≦○〃", + "o(・_・)9", + "σ~ (`´メ", + "@=(--@v)", + "o(・Θ・)○☆", + "o( ̄ー ̄)○☆", + "o( ̄ ◇ ̄)○", + "o( -_-)9@", + "o(メ・・)=日☆", + "|c==(-T )", + "☆○(*σ。σ)o", + "( ・ω・)っ≡つ", + "(゚o゚C=(__;", + "(°o°C=(_ _;", + "∑(゚o゚C=(__;", + "(((c=(゚ロ゚;q", + "α~(´`d)", + "(;´0`)ツ))□`)", + "(=゚ω゚)つ)゚∀゚)", + "(p_・q)(p・_q)", + "C≡(・。・C≡)≡≡≡", + "☆(゜o°(○=(-_-;", + "(*'Д')ノシ)゚ロ゚)", + "ヘ(。。ヘ)☆ヽ(^^;)", + "(p゚ロ゚)==p)`д)", + "☆(゚o゚(○=(-_-○", + "o(・ロ・)○()o×)/", + "(*゚ー゚)=○)゚O゚)", + "( ‘д‘⊂彡☆))Д´)", + "○(`・ω・)==○ノД)" + ], + "Hug": [ + "⊂(♡⌂♡)⊃", + "⊂(◉‿◉)つ", + "ლ(・ヮ・ლ)", + "(つ◉益◉)つ", + "⊂(・﹏・⊂)", + "⊂(・ヮ・⊂)", + "⊂(・▽・⊂)", + "(っಠ‿ಠ)っ", + "ʕっ•ᴥ•ʔっ", + "(っ・∀・)っ", + "(っ⇀⑃↼)っ", + "\(^o^)/", + "(つ´∀`)つ", + "(つ▀¯▀)つ", + "(っ´▽`)っ", + "ლ(・﹏・ლ)", + "⊂(・ω・*⊂)", + "ლ(・ω・*ლ)", + "(づ ̄ ³ ̄)づ", + "ლ(´ ❥ `ლ)", + "c⌒っ╹v╹ )っ", + "d=(´▽`)=b", + "⊂( ◜◒◝ )⊃", + "(.づ◡﹏◡)づ.", + "(っ*´∀`*)っ", + "(っ⇀`皿′↼)っ", + "(.づσ▿σ)づ.", + "⊂(´・ω・`⊂)", + "(* ̄-(-*)ゝ", + "⊂((・▽・))⊃" + ], + "Hurry": [ + "(^^;)", + "( ̄ー ̄;", + "(⌒_⌒;", + "(>△<Uu", + "(;・∀・)", + "( ´д`)", + "(; ̄ー ̄A", + "(;´艸`)", + "(;゜○゜)", + "(´∀`;A", + "| ̄ω ̄A;", + "(;・д・)", + "(´Д`ι)", + "ヽ(´o`;", + "(; ̄Д ̄)", + "(´ヘ`;)", + "(┼д┼;)", + "(-Ⅱ-;)", + "(x□x`;)", + "(;′Д`)ノ", + "( ̄ー ̄;)ゞ", + "σ( ̄∇ ̄;)", + "(≧mm≦;)", + "(*ノω<*)", + "ε('∞'*)", + "ε-(´・`)", + "ヾ( ̄o ̄;)", + "ヾ(°∇°*)", + "(●'Д'●)", + "(;´д`)ゞ" + ], + "Kiss": [ + "ㄖꏁㄖ", + "ᴓᴈᴓ", + "|°з°|", + "(ΦзΦ)", + "˶⚈Ɛ⚈˵", + "(_ε_)", + "(‘ε’)", + "⁽˙³˙⁾", + "(-ε- )", + "•́ε•̀٥", + "(☆´3`)", + "(・ε・`)", + " Ⴀ͡კႠ͡", + "(ΘεΘ;)", + "(≡ε≡;)", + "( ̄ε ̄@)", + "(´ε`*)", + "(*^3^)", + "(* ̄з ̄)", + "(○゚ε^○)", + "(。ˇ ⊖ˇ)", + "(○゜ε^○)", + "|( ̄3 ̄)|", + "ヾ(´〓`)ノ", + "(~ ̄³ ̄)~", + "(ΘεΘʃƪ)", + "( ̄ε ̄ʃƪ)", + "(@ーεー@)", + "(*-(  )", + "(๑♡3♡๑)" + ], + "Laughing": [ + "(खਉख)", + "(ಡ艸ಡ)", + "(⌒▽⌒)", + "(^v^)", + "(>y<)", + "(^艸^)", + "(Ŏ艸Ŏ)", + "(亝艸亝)", + "(♡´艸`)", + "(●´艸`)", + "(≧艸≦*)", + "(*>艸<)", + "( ਊдਊ)", + "( ´艸`)", + "(。ˇ艸ˇ)", + "(o>艸<)", + "(^ц^ )", + "(☆Θ艸Θ)", + "(○´艸`)", + "(*´艸`)", + "(≧y≦*)", + "(*・艸・)", + "( ´∀`)", + "(*≧艸≦)", + "( ╹ਊ╹)", + "( ՞ਊ՞)", + "(*´∀`)", + "(✪ฺܫ✪ฺ)", + "( 〃´艸`)", + "(❤ฺ→艸←)" + ], + "Lenny face": [ + "( ͡ ͜ʖ ͡ )", + "( ͡~ ͜ʖ ͡°)", + "( ͡ʘ╭͜ʖ╮͡ʘ)", + "( ͡☉ ͜ʖ ͡☉)", + "( ͡⚆ ͜ʖ ͡⚆)", + "( ͡~ ͜ʖ ͡~)", + "( ͡ຈ ͜ʖ ͡ຈ)", + "( ͡° ʖ̯ ͡°)", + "( ͡ಠ ʖ̯ ͡ಠ)", + "( ͠° ͟ʖ ͡°)", + "( ͡° ͜ʖ ͡°)", + "( ͡°╭͜ʖ╮͡° )", + "( ͡^ ͜ʖ ͡^ )", + "( ͡ຈ╭͜ʖ╮͡ຈ )", + "( ͡ᵔ ͜ʖ ͡ᵔ )", + "( ͝סּ ͜ʖ͡סּ)", + "ヽ( ͝° ͜ʖ͡°)ノ", + "(ง ° ͜ ʖ °)ง", + "(つ ͡° ͜ʖ ͡°)つ", + "(☞ ͡° ͜ʖ ͡°)☞", + "ᕦ( ͡° ͜ʖ ͡°)ᕤ", + "ᕕ( ͡° ͜ʖ ͡°)ᕗ", + "( ʘ̆ ╭͜ʖ╮ ʘ̆ )", + "( ͡° ͜ʖ ͡°)=ε✄", + "╚═( ͡° ͜ʖ ͡°)═╝", + "┴┬┴┤( ͡° ͜ʖ├┬┴┬", + "(ノ͡° ͜ʖ ͡°)ノ︵┻┻", + "¯\\_( ͠° ͟ʖ °͠ )_/¯", + "╰( ͡° ͜ʖ ͡° )つ──☆*:・゚", + "(∩ ͡ ° ʖ ͡ °) ⊃-(===>" + ], + "Love": [ + "♡^▽^♡", + "✿♥‿♥✿", + "♡ඩ⌔ඩ♡", + "♱♡‿♡♰", + "˖◛⁺⑅♡", + "(•ө•)♡", + "༼♥ل͜♥༽", + "˅ɞ♡⃛ʚ˅", + "(♥ω♥*)", + "(´∀`)♡", + "(●♡∀♡)", + "⊆♥_㇁♥⊇", + "(♡´艸`)", + "♥(ノ´∀`)", + "(๑♡⌓♡๑)", + "(´⌣`ʃƪ)", + "(‘∀’●)♡", + "(♡´౪`♡)", + "( ˘ ³˘)", + "(´ε` )♡", + "(⺣◡⺣)♡*", + "ღゝ◡╹)ノ♡", + "ヽ(o♡o)/", + "(人・㉨・)♡", + "(๑♡3♡๑)", + "(ღ˘⌣˘ღ)", + "ƪ(♥ﻬ♥)ʃ", + "(灬♥ω♥灬)", + "⊂(♡⌂♡)⊃", + "♡(ŐωŐ人)" + ], + "Magic": [ + "(`・Д・)ノ=☆", + "(*`□)<炎炎炎炎", + "★≡≡\(`△´\)", + "彡゚◉ω◉ )つー☆*", + "(∩^o^)⊃━☆゜.*", + "(ノ◕ヮ◕)ノ*:・゚✧", + "(☆_・)・‥…━━━★", + "(∩`-´)⊃━炎炎炎炎炎", + "ପ(⚈᷉ʙ⚈᷉)੭̸୫൦⃛", + "✩°。⋆⸜(ू。•ω•。)", + "炎炎炎炎☆┣o(・ω・ )", + "✩°。⋆⸜(ू˙꒳​˙ )", + "੭•̀ω•́)੭̸*✩⁺˚", + "( °-°)シ ミ★ ミ☆", + "(σ'∀')σ*。・゜+.*", + "(っ・ω・)っ≡≡≡≡≡≡☆", + "(ノ≧∀≦)ノ・‥…━━━★", + "(੭•̀ω•́)੭̸*✩⁺˚", + "(∩`-´)⊃━✿✿✿✿✿✿", + "ヽ༼ຈل͜ຈ༽⊃─☆*:・゚", + "( ◔ ౪◔)⊃━☆゚.*・", + "£(*’ο’)/☆*。;+,", + "(੭ˊ͈ ꒵ˋ͈)੭̸*✧⁺˚", + "(*’▽’)ノ^—==ΞΞΞ☆", + "(∩。・o・。)っ.゚☆。'`", + "(∩^o^)⊃━☆゚.*・。゚", + "༼つಠ益ಠ༽つ ─=≡ΣO))", + "(つ◕౪◕)つ━☆゚.*・。゚", + "(*゚ー^)/'`*:;,.★", + "(∩`-´)⊃━☆゚.*・。゚" + ], + "Middle finger": [ + "凸ಠ益ಠ)凸", + "t(=n=)", + "凸(¬‿¬)", + "凸(>皿<)凸", + "凸(`0´)凸", + "凸(`△´+)", + "凸(⊙▂⊙ )", + "凸(-0-メ)", + "༼凸 ◉_◔༽凸", + "凸(`⌒´メ)凸", + "凸༼ຈل͜ຈ༽凸", + "t(- n -)t", + "凸(`ι _´メ)", + "凸(^▼ェ▼メ^)", + "༼✿◕ᗜ◕༽┌∩┐", + "୧༼ಠ益ಠ╭∩╮༽", + "╭∩╮(⋋‿⋌)ᕗ", + "୧༼◔益◔╭∩╮༽", + "( ︶︿︶)_╭∩╮", + "t( -_- t )", + "┌П┐(►˛◄’!)", + "┌∩┐(◕◡◉)┌∩┐", + "╭∩╮(ಠ۝ಠ)╭∩╮", + "╭∩╮༼☯۝☯༽╭∩╮", + "╭∩╮(︶︿︶)╭∩╮", + "╭∩╮◕ل͜◕)╭∩╮", + "凸〳 ಥ ڡ ಥ 〵凸", + "╭∩╮ʕ•ᴥ•ʔ╭∩╮", + "凸( •̀_•́ )凸", + "╭∩╮(-_-)╭∩╮" + ], + "Monkey": [ + "⊆◍益◍⊇", + "@・ꈊ・@", + "₢ຈ▿ຈꀣ", + "☾ठ ੁठ☽", + "⊆(⌒◎⌒)⊇", + "@(・●・)@", + "Ⴚტ◕‿◕ტჂ", + "₢⦿͡㍕⦿͡ꀣ", + "@(・-・)@", + "⊆ಠ ω ಠ⊇", + "@(・o・)@", + "@(ᵕ.ᵕ)@", + "@(・ェ・)@", + "└@(・ェ・)@┐", + "@( o・ェ・)@", + "@( o・ꎴ・)@", + "⊂((・⊥・))⊃", + "@( oóꎴò)@", + "⊂((υ⊥υ))⊃", + "⊂((*>⊥σ))⊃", + "⊂((。・o・))⊃", + "⊂((≧⊥≦))⊃", + "₢⦿͡ ˒̫̮ ⦿͡ꀣ", + "Ϛ⃘๑•͡ .̫•๑꒜", + "Ϛ⃘๑•͡ .̫•๑꒜", + "○Oo。.@(-ェ-)@ノ", + "✧.*◌·͡˔·ོ◌*·✧", + "Ϛ⃘๑•͡ .̫•๑꒜ღ⃛", + "Ϛ⃘๑•͡ .̫•๑꒜♬♫", + "⸉ᘓ◎⃝ᆺ◎⃝ᘐ⸊" + ], + "Music": [ + "(o・★)", + "(☆¬o)q", + "(^_^♪)", + "(´△`)♪", + "ρ(o<★)", + "ρ(o^★)", + "(☆ ̄o)q", + "(☆∩o)q", + "(☆≧o)q", + "(☆Θo)q", + "(´0`)q", + "ρ(oμ★)", + "(^O^☆♪", + "(^3^)~♪", + "(*´▽`*)", + "ρ(ーoー)♪", + "(^O^)~♪", + "ρ(o δ★)", + "ρ(^o^)♪", + "ρ(^o^)♪", + "ρ(^o^)♪", + "♫꒰・◡・๑꒱", + "(o^^o)♪", + "♫♪˙‿˙♫♪", + "♪(ノε`●)", + "ρ(^^ )♭", + "♪~( ̄ε ̄)", + "♪(´ε` )", + "(*^ω^)♪", + "≧(´▽`)≦" + ], + "Nervous": [ + "◑.◑", + "⚆ᗝ⚆", + "●﹏●", + "⊙﹏⊙", + "⊙△⊙", + "˚▱˚", + "ଵ˛̼ଵ", + "( ̄□ ̄)", + "(-。-;", + "(ーー;)", + "(/.\)", + "(/。\)", + "(゚д゚)", + "(O∆O)", + "ゞ◎Д◎ヾ", + ")Д⊙`)", + "(ΩДΩ)", + "(/。\)", + "(⊃д⊂)", + "(☍﹏⁰)", + "(・д・)", + "(ⅈ▱ⅈ)", + "(๏д๏)", + "(¤﹏¤)", + "《゚Д゚》", + "๑ΘдΘ๑", + "ミ●﹏☉ミ", + "(⊃‿⊂)", + "(ノдヽ)", + "(꒪⌓꒪)" + ], + "Peace sign": [ + "|-^)v", + "(^^)v", + "(^_^)v", + "(^_-)v", + "(^-^)v", + "(^ー^)v", + "(^コ^)V", + "(-_☆)V", + "(*^^)v", + "✌('ω')", + "(^o^)v", + "v( ̄ー ̄)v", + "y(^ー^)y", + "( ̄▽ ̄)V", + "y( ̄ー ̄)y", + "(= ̄▽ ̄=)V", + "Λ(_Δ_)Λ", + "( v ̄▽ ̄)", + "v(。・・。)", + "(*^-゚)v", + "v(´∀`*v)", + "(○゚ε^○)v", + "v(。・ω・。)", + "v(*'-^*)b", + "( = ̄+∇ ̄=)v", + "♪v('∇'*)⌒☆", + "✌三✌('ω')✌三✌", + "✌三(✌'ω')✌三✌", + "v(⌒o⌒)v", + "v(≧∇≦v)三(v≧∇≦)v" + ], + "Poop": [ + "ξ\"( ̄ *)", + "( ж)..ξ", + "Σo(TξT)o", + "ヽ( ・∀・)ノ●", + "●ヽ(゚∀゚)ノ●", + "(・・*)ノ ⌒ξ", + "(・・*)ノ ⌒ξ", + "-=≡~ξ-_-*)", + "(゜д゜(:*:)=з", + "~ξヾ( ^-x-^)", + "●ヽ(´・д・`)ノ●", + "(ノ・∀・)ノ = ●", + "(; ̄y ̄)-----cξ~~", + "( ・∀・)つ=≡≡ξ)Д`)", + "ヽ(・∀・)ノヽ(・∀・)ノ●●", + "( ̄y ̄)o――――――∞Cξ~", + "~ξ..・((ヾ( ^-x-^)", + "●_(゚∀゚ )≡ ヽ(A`)ノ≡", + "●ヽ(゚∀゚ヽ)♪♪(ノ゚∀゚)ノ●", + "( ;・_・)ノXXXXXXXX=Cξ", + "━━━━━━━ ~~~ξ-\ξ(・_\)", + "ξ━‥・・・☆\_(゜▽゜*彡*゜ー゜)_/", + "ξ━‥・・・☆\_(゚▽゚*彡*゚ー゚)_/", + "/ー ̄)/D・・・・・------ξ゜⊿゜)", + "ξ\(゚ー゚*)(*゚▽゚)ノ⌒ξ゚Д゚)ノノ", + "/ー ̄)/D・・・・・------ξ゚⊿゚)ノ", + "ξ\(゜ー゜*)(*゜▽゜)ノ⌒ξ゜Д゜)ノノ", + "~ξ(*--)(*・・)ノ v⌒v⌒v⌒v⌒ξ~", + "ヽ(・∀・)ノ●ヽ(・∀・)ノ●ヽ(・∀・)ノ●", + "( ̄~ ̄;)ξ~ ((((  ̄∇ ̄)_ξ゚□゚)" + ], + "Roger": [ + "(≧∀≦ゞ", + "(-ω-ゞ", + "(≧ω≦)ゞ", + "(`-´)>", + "∠(`∪´)", + "|`Д´)>", + "(≧∇≦)b", + "(・∀-d)", + "(`Д´)ゞ", + "|▼皿▼)b", + "(・∧‐)ゞ", + "(●・ω・)b", + "d(´▽`*)", + "(*゜-^)ゞ", + "(°∀°)ゝ”", + "(*`Ω´)b", + "(>Д<)ゝ”", + "(=゚▽゚)/", + "('∀`)ゝ”", + "( `д´)b", + "d( ̄▽ ̄o)", + "(*>ω<)b", + "(`∀´)ゝ”", + "d(´・ω・`)", + "(*´ω`*)ノ", + "(★´ω`★)ゞ", + "(●´・∀・)b", + "d(*゚ー゚*)", + "☆(・ω・*)ゞ", + "(●⌒∇⌒●)b" + ], + "Roll": [ + "(o_△_)o", + "/(_-_)l", + "(:3_ヽ)_", + "_(:3」∠)_", + "_(┐「ε:)_", + "_(:3」∠)_", + "(:3 _ )=", + "_(┐「ε:)_♡", + "ヽ(:3ノ ヽ)ノ", + "ヾ(:3ノシヾ)ノシ", + "_(:3 」∠ )_", + "_/ ̄|(冫、)-c", + "( ( (((_⊿_)", + "_(:D」┌)⁼³₌₃", + "((└(:3」┌)┘))", + "(:3っ)っ -=三[]", + "○)))ヘ(^・・^=)~", + "((o_△_)o)^▽^;)", + "( ̄∇ ̄;)))( ((((;_⊿_)", + "(o°▽°)o(o_△_)o(o°▽°)o", + "(((.-.)(:I )(゚‐゚)( I:)", + "((((((‥)(: )(¨)( :)(*‥)", + "(┐「ε:)_三┌(.ω.)┐三_(:3 」∠)_", + "(..)(・.)(: )(¨)( :)(.・)(..)", + "o_ _)o(o- -)o(o°▽°)o(o_△_)o(o_ _)o.。o○", + "(°o°)(°o。)(。o。)(。o°)(°o°)(°o。)(。o。)(。o°)", + "(.-.)(:I )(゜-゜)( I:) (.-.)(:I )(゜-゜)( I:)", + "(((((;___▲___))(((((;___▲___))(( ̄▼ ̄ ;)))))", + "三('ω')三( ε: )三(.ω.)三( :3 )三('ω')三( ε: )三(.ω.)三( :3 )", + "('ω') 三 ( ε: ) 三 (. .) 三 ( :з ) 三 ('ω') 三 ( ε: ) 三 (. .) 三 。・*・:≡( ε:)" + ], + "Running": [ + "┗(^0^)┓", + "ᕕ┌◕ᗜ◕┐ᕗ", + "┏┃*・д┃┛", + "ᕕ( ᐛ )ᕗ", + "ᕕ(ಥʖ̯ಥ)ᕗ", + "ᕕ( ಠ‿ಠ)ᕗ", + "ᕕ༼✪ل͜✪༽ᕗ", + "┌( ಠ‿ಠ)┘", + "ღ(◔ڼ◔ღ)ミ", + "ᕕ( ◎_◎)ᕗ", + "ᕕ(╯°□°)ᕗ", + "「(◔ω◔「)三", + "┌( ಠ_ಠ)┘", + "٩(•౪•٩)三", + "ᕕ༼ຈل͜ຈ༽ᕗ", + "ᕕ(◉Д◉ )ᕗ", + "ᕕ( ◔3◔)ᕗ", + "┗(^o^ )┓三", + "┌(・Σ・)┘≡З", + "。。゛(ノ><)ノ", + "ε=(ノ゚д゚)ノ", + "「(⑅◔ω◔「)三", + "┏( ゜)ਊ゜)┛", + "ε=┏(・ω・)┛", + "ᕕ(⌐□ل͜□)ᕗ", + "⊂(゚Д゚;⊂⌒`つ", + "ᕕ༼✿•̀︿•́༽ᕗ", + "ε=٩(●❛ö❛)۶", + "ε≡(ノ´_ゝ`)ノ", + "ε=(。ノ・ω・)ノ" + ], + "Sad": [ + "⊙︿⊙", + "ಠ⌣ಠ", + "╥﹏╥", + "ಥ_ಥ", + "●︿●", + "⊛ठ̯⊛", + "ಠ╭╮ಠ", + "(ㄒoㄒ)", + "(T▽T)", + "(︶︹︺)", + "(iДi)", + "(;へ:)", + "(╥_╥)", + "(T⌓T)", + "(´_`)", + "(T_T)", + "(;﹏;)", + "(ToT)", + "(┳◇┳)", + "(T_T)", + "(ಥ﹏ಥ)", + "(个_个)", + "(⋟﹏⋞)", + "(ノ﹏ヽ)", + "(┳Д┳)", + "༶ඬ༝ඬ༶", + "(‘A`)", + "(πーπ)", + "(◕︿◕✿)", + "(つ﹏<。)" + ], + "Saliva": [ + "^p^", + "(^p^)", + "(^q^)", + "(‘u’)", + "( ̄¬ ̄)", + "(^q^)", + "(º﹃º)", + "(゚¬゚)", + "(´ρ`)", + "(゜¬゜)", + "(^¬^)", + "(゜ρ゜)", + "(。・ρ・)", + "(º﹃º )", + "(¯﹃¯*)", + "(・゚ρ゚)", + "(。・ρ・)", + "(*´﹃`)", + "(゚ρ゚*)", + "(’┓`*)", + "( ̄¬ ̄*)", + "(。・ρ・)", + "(⌒¬⌒*)", + "(´┓`*)", + "ԅ(♡﹃♡ԅ)", + "(@ ̄ρ ̄@)", + "(*´﹃`*)", + "ԅ(º﹃ºԅ)", + "ԅ(¯﹃¯ԅ)", + "(@ ̄¬ ̄@)" + ], + "Salute": [ + "(-ω-ゞ", + "(`∇´ゞ", + "(´∀`ゞ", + "(≧∀≦ゞ", + "( ̄ー ̄)ゞ", + "く(@Д@)", + "(‾-ƪ‾)", + "(‘-‘*ゞ", + "∠(´д`)", + "(>Д<)ゝ", + "(`д´)ゝ", + "( ̄^ ̄)ゞ", + "(-ω-)ゝ", + "(・д・ゝ)", + "(`Д´)ゞ", + "∠(^ー^)", + "( ̄▽ ̄)ゞ", + "(゜◇゜)ゞ", + "(・∧‐)ゞ", + "(>ロ<)ゝ", + "(≧ω≦)ゞ", + "(^-^)ゝ", + "(‘∀`)ゞ", + "(─∀─)ゞ", + "('-'*ゞ", + "(^∀^)ゞ", + "(・∀・)ゞ", + "(’◇’)ゞ", + "ヾ(≧∇≦)ゞ", + "ヽ|・◇・|ゞ" + ], + "Scared": [ + "(ΩДΩ)", + "(O∆O)", + "ゞ◎Д◎ヾ", + "(⊃д⊂)", + "(ノдヽ)", + "(⊃‿⊂)", + "(/ω\)", + "(/。\)", + "(/。\)", + "(/.\)", + "(/_\)", + "(゜Д゜*)", + "(゚Д゚;)", + "§;゚ロ゚§", + "(꒪ȏ꒪;)", + "(☼Д☼)", + "( ノД`)", + "(-@Д@)", + "(゚Д゚;∬", + "⊂(゜Д゜⊂", + "⊃゜Д゜)⊃", + "(´皿`;)", + "(@O@;)", + "( ⁰д⁰)", + ") ゜o゜(", + "(ノ′Дヾ)", + "( 〇□〇)", + "(/;◇;)/", + "џ(ºДºџ)", + "ヽ(゚Д゚)ノ" + ], + "Shake": [ + "((´д`))", + "((;゚Д゚)", + "((;゚Д゚))", + "(llФwФ`)", + "((゚Д゚;))", + "((;゚ェ゚;))", + ":(´◦ω◦`):", + "(((^ω^)))", + "(((゜Д゜;)))", + "(((・×・;)))", + "(((・Α・川)))", + "((( ;゚Д゚)))", + "((,,´Θ`,,))", + "((o(´∀`)o))", + "《《(゚c_゚;)》》", + ":;(∩´﹏`∩);:", + "((((;゚Д゚)))", + "||lll´Д`)))", + "((((;゚Д゚))))", + "((゚゚((Д))゚゚))", + "((((;´・ω・`)))", + "(((( ˙-˙ ))))", + "(・(・(・∀・)・)・)", + "(((;゚;Д;゚;)))", + "(((゚Д゚Д゚Д゚)))", + "(|||´□`;)))))", + "(((ノ)゚Д゚(ヽ))))", + "((((´・ω・;`))))", + "((-ω-。)(。-ω-))", + "(((((;^ω^)))))" + ], + "Sheep": [ + "Ꮚ⌀ꈊ⍉Ꮚ", + "@^ェ^@", + "Ꮚ⁰ꈊ⁰Ꮚ", + "(・エ・@", + "Ꮚ`ꈊ´Ꮚ", + "§・ω・§", + "Ꮚ’ꈊ’Ꮚ", + "@・*・@", + "Ꮚ`ꈊ´Ꮚ", + "ᏊˊꈊˋᏊ", + "Ꮚ⁼ꈊ⁼Ꮚ", + "Ꮚ˟ꈊ˟Ꮚ", + "@・ω・@", + "@・ェ・@", + "Ꮚ^ꈊ^Ꮚ", + "Ꮚ❛ꈊ❛Ꮚ", + "ᏊᵋꈊᵋᏊ", + "ᏊꈍꈊꈍᏊ", + "Ꮚ˘ꍓ˘Ꮚ", + "Ꮚ•ꈊ•Ꮚ", + "{ @ˊꈊˋ@ }", + "{ @⁼ꈊ⁼@ }", + "{ @ᵕꈊᵕ@ }", + "Ꮚᵒ̴̶̷ꈊ˂̤Ꮚ", + "{ @˟ꈊ˟@ }", + "{ @⁰ꈊ⁰@ }", + "{ @^ꈊ^@ }", + "{ @❛ꈊ❛@ }", + "{ @`ꈊ´@ }", + "{ @’ꈊ’@ }" + ], + "Shocked": [ + "(゜ロ゜)", + "; ̄ロ ̄)", + "( ̄□ ̄;)", + "(゚ω゚;)", + "Σ(・口・)", + "Σ(T□T)", + "(゚д゚;)", + "(●Ω●;)", + "( ̄■ ̄;)", + "(_□_;)", + "(ʘᗩʘ’)", + "(∂△∂;)", + "(◯Δ◯∥)", + "(ʘ言ʘ╬)", + "Σ(゚Å゚)", + "(゜Д゜;)", + "Σ(゚Д゚)", + "(ー∀ー;)", + "Σ(TωT)", + "�(゚□゚*川", + "(;Ⅲ□Ⅲ;)", + "( ̄□||||", + "(* ̄□ ̄*;", + "Σ(‐△‐●)", + "Σ(▼□▼メ)", + "(∩╹□╹∩)", + "ΣΣ(゚Д゚;)", + "Σ(`・ω・Ⅲ)", + "∑(ΦдΦlll", + "=( ̄□ ̄;)⇒" + ], + "Shrug": [ + "┐(´д`)┌", + "┐(´~`)┌", + "┐(´ー`)┌", + "┐( ̄ヘ ̄)┌", + "╮(╯∀╰)╭", + "╮(╯_╰)╭", + "┐(´д`)┌", + "┐(´∀`)┌", + "ʅ(́◡◝)ʃ", + "ლ(゚д゚ლ)", + "┐(゚~゚)┌", + "┐('д')┌", + "ლ|^Д^ლ|", + "ლ(╹ε╹ლ)", + "ლ(ಠ益ಠ)ლ", + "┐(‘~`;)┌", + "ヘ(´-`;)ヘ", + "┐( -“-)┌", + "乁༼☯‿☯✿༽ㄏ", + "ʅ(´◔౪◔)ʃ", + "ლ(•ω •ლ)", + "ヽ(゜~゜o)ノ", + "ヽ(~~~ )ノ", + "┐(~ー~;)┌", + "┐(-。ー;)┌", + "¯\\_(ツ)_/¯", + "¯\\_(⊙_ʖ⊙)_/¯", + "乁ʕ •̀ ۝ •́ ʔㄏ", + "¯\\_༼ ಥ ‿ ಥ ༽_/¯", + "乁( ⁰͡ Ĺ̯ ⁰͡ ) ㄏ" + ], + "Shy/Embarrassed": [ + "(^^ゞ", + "(〃▽〃)", + "(ノ▽〃)", + "(/。\)", + "(/ω\)", + "(Ŏ艸Ŏ)", + "(^^;)", + "(〃ー〃)", + "(〃ω〃)", + "(〃艸〃)", + "(´つヮ⊂)", + "(♡´艸`)", + "(/≧ω\)", + "ʕ*ノᴥノʔ", + "(/へ\*)", + "(*ノ▽ノ)", + "(*ノωノ)", + "(*ノдノ)", + "(´~`ヾ)", + "(ノ∇≦*)", + "(‘-’*)", + "(^◇^;)", + "|▽//)ゝ", + "(〃´∀`)", + "ꈍ .̮ ꈍ", + "(〃∀〃)ゞ", + "( 〃..)", + "(。・・。)", + "|´∀`●)", + "6(\"ー )" + ], + "Sleep": [ + "【:εω", + "(冫༵、)", + "(ᴗ˳ᴗ)", + "(´~`)", + "( ⓥωⓥ)", + "(:˒[ ̄]", + "(*-ω-)", + "(︶。︶✽)", + "(:3ぅ )", + "(¦ꒉ[▓▓]", + "(¦ꀦ[▓▓]", + "⌈▓͟⌉ꆟ)ꍞ", + "(;´_ヘ;)", + "(´○`)~ゝ", + "(¦ꃎ[▓▓]", + "(¦ꎌ[▓▓]", + "(¦ꃆ[▓▓]", + "(¦ꄰ[▓▓]", + "⌈▒͟⌉ꅼ)ꍞ", + "\(´O`)/", + "(◎´〇`◎)", + "(´-εヾ )", + "(。し_し。)", + "(。´-д-)", + "(*´ο`*)", + "川。μ_μ)σ", + "(。v_v。)", + "(๑ᵕ⌓ᵕ̤)", + "(¦ꃩ[▓▓]", + "꒰◍ᐡᐤᐡ◍꒱" + ], + "Smiling": [ + "^ω^", + "▼ω▼", + "(´∀`)", + "(^∀^)", + "(^○^)", + "(`▽´)", + "米^-^米", + "(∩_∩)", + "(⌒∇⌒)", + "(☆▽☆)", + "( ̄∇ ̄)", + "( ̄ー+ ̄)", + "σ(^○^)", + "(^■^*)", + "(*^-^)", + "d(^^*)", + "(´w`*)", + "|* ̄ー ̄|", + "{*≧∀≦}", + "(o^^o)", + "(o^∀^)", + "(*´ー`)", + "o(^▽^)o", + "o(^-^)o", + "(*´∇`*)", + "(*´▽`*)", + "(=^_^=)", + "σ(゚ー^*)", + "(●>ω<●)", + "y(^ヮ^)y" + ], + "Smug": [ + "(咒)", + "(⌤⌗)", + "( ̄^ ̄)", + "(-、-)", + "(꒵꜅꒵)", + "(`へ′)", + "(’へ’)", + "╭⚈¬⚈╮", + "( ̄ω ̄)", + "(`ڼ´)", + "⚈ ̫ ⚈", + "( ̄へ ̄)", + "( ̄^ ̄)", + "(´꒳`)", + "(꒡ꜙ꒡)", + "(^~^)", + "(´Å`)", + "§ԾᴗԾ§", + "( ̄ー ̄)", + "(`^´)", + "(・―・)", + "( ̄‥ ̄)", + "( ̄ー ̄)", + "(`ー´)", + "( ̄⊿ ̄)", + "(-∀-)", + "( ´ー`)", + "(; ̄︶ ̄)", + "( ̄︶ ̄;)", + "( ⊙‿⊙)" + ], + "Sparkles/Stars": [ + "(☆ω☆*)", + "☆=(ゝω・)/", + "(。・艸-。)-☆", + "(★≧▽^))★☆", + "\(★^∀^★)/", + "(*○’3`)★+゚", + "(*>v<)ゞ*゜+", + "(艸′v'★*)。+", + "+.(*'v`*)+", + "(〇*>∀<)ゞ★☆", + ".+(´^ω^`)+.", + "(☆uεu☆)ZZzz", + "(★O∀O*)◇+。", + "・+(*゜∀゜*)+・", + "゚*。(・∀・)゚*。", + "°+(*´∀`)b°+°", + "☆*ヾ(-∀・*)*+☆", + "゚.+(〃ノωノ)゚.+°", + "(n’∀’)η゚*。:*!", + "+。゜~”(゜∀゜)゜。+", + "ミ☆( *uωu人)+゚.", + "。゚+.(・∀・)゚+.゚", + "ヾ(*′○`)゚.+:。゚☆", + "+。゚φ(ゝω・`○)+。゚", + "ヾ(‘∀`=ヽ)※.;,゜☆", + "。+゚.。+。(´ω`*)♪♪", + "(●o’∪`o)ノ―♪`*.+", + "☆*。★゚*♪ヾ(☆ゝз・)ノ", + "(人´∀`).☆.。.:*・°", + "(*○゜∀。)/☆*。*.・+★" + ], + "Spin": [ + "( ・ω)( ・)( )(・ )(ω・ )(・ω・)", + "(・∀・)( ・∀)( ・)( )(・ )(∀・ )(・∀・)", + "(・▽・)( ・▽)( ・)(  )(・ )(▽・ )(・▽・)", + "(^▽^)( ^▽)( ^)(  )(^ )(▽^ )(^▽^)", + "(^◇^)( ^◇)( ^)(  )(^ )(◇^ )(^◇^)", + "(^ー^)( ^ー)( ^)(  )(^ )(ー^ )(^ー^)", + "(^_^)( ^_)( ^)(  )(^ )(_^ )(^_^)", + "(゚ー゚)( ゚ー)( ゚)(  )(゚ )(ー゚ )(゚ー゚)", + "(^_^)( ^_)( ^)(  )(^ )(_^ )(^_^)", + "(・_・)( ・_)( ・)(  )(・ )(_・ )(・_・)", + "(^∇^)( ^∇)( ^)(  )(^ )(∇^ )(^∇^)", + "(・∀・)( ・∀)( ・)(  )(・ )(∀・ )(・∀・)", + "(゚◇゚)( ゚◇)( ゚)(  )(゚ )(◇゚ )(゚◇゚)", + "(^∀^)( ^∀)( ^)(  )(^ )(∀^ )(^∀^)", + "(・◇・)( ・◇)( ・)(  )(・ )(◇・ )(・◇・)", + "(゚▽゚)( ゚▽)( ゚)(  )(゚ )(▽゚ )(゚▽゚)", + "(゚∇゚)( ゚∇)( ゚)(  )(゚ )(∇゚ )(゚∇゚)", + "(゚∀゚)( ゚∀)( ゚)(  )(゚ )(∀゚ )(゚∀゚)", + "(゚_゚)( ゚_)( ゚)(  )(゚ )(_゚ )(゚_゚)", + "(゚_゚)( ゚_)( ゚)(  )(゚ )(_゚ )(゚_゚)  ", + "(・∇・)( ・∇)( ・)(  )(・ )(∇・ )(・∇・)  ", + "(・_・)( ・_)( ・)(  )(・ )(_・ )(・_・)  ", + "‹‹\\(´ω` )/››‹‹\\(  ´)/››‹‹\\( ´ω`)/››", + "‹‹ヽ( ・ω・ )/››‹‹ヽ( ・)/›› ‹‹ヽ( ・ω・ )/››", + "(°o°)(°o。)(。o。)(。o°)(°o°)(°o。)(。o。)(。o°)", + "ヽ(・∀・)ノ━(∀・ノ)━(・ノ )━ヽ( )ノ━( ヽ・)━(ヽ・∀)━ヽ(・∀・)ノ", + "⊂⌒~⊃。Д。)⊃━⊂⌒O。Д。)⊃━O(。Д。)O━⊂(。Д。O⌒⊃━⊂(。Д。⊂~⌒⊃", + "(=゚ω゚)ノ━( =゚ω)━(  =゚)━(  )━(゚= ノ )━(ω゚=ノ)━(=゚ω゚)ノ", + "<丶`∀´>━<丶`∀>━< 丶`>━<  丶>━<   >━<´   >━<∀´  >━<丶`∀´>", + "(´・ω・`)━( ´・ω・)━(  ´・ω)━(   )━(   )━(ω・´ )━(・ω・´)━(`・ω・´)" + ], + "Sulk": [ + "( ̄s ̄;", + "( ̄ε ̄)", + "(  ̄^ ̄)", + "(´゚з゚)", + "(;´д`)", + "(>μ<#)", + "(´・з・)", + "('ε'*)", + "(ー ー;)", + "(´・・`)", + "(ó﹏ò。)", + "(・ε・`*)", + "(´・д・`)", + "…φ(。。*)", + "(。・ε・。)", + "(´・_・`)", + "( *`з´)", + "(*・ε・*)", + "( *゚з゚)", + "(´-ε-`)", + "(´・ε・`)", + "(-公- ;)", + "(・´з`・)", + "(・ε・`*)", + "(*・ε・*)", + "(・ε・` )", + "(=`.´=)", + "( ̄ε(# ̄)", + "(´・ェ・`)", + "(●´^`●)" + ], + "Surprised": [ + "⊙0⊙", + "(¨!", + "⊙▂⊙", + "꒪ꄱ꒪", + "◎ܫ◎", + "(◎0◎)", + "(○A○)", + "(´〇`)", + "(゚o゚)", + "⑉ႣỏႣ⑉", + "(゜◇゜)", + "(இ௦இ)", + "(・о・)", + "(☼Д☼)", + "(ФоФ)", + "(☉∀☉)", + "(○o○)", + "(○□○)", + "Σ(゜゜)", + "(〇o〇;)", + "(ʘ言ʘ╬)", + "༼⁰o⁰;༽", + "(・□・;)", + "(°o°;)", + "( ゚o゚)", + "Σ(꒪ȏ꒪)", + "(⑉⊙ȏ⊙)", + "(#´O`)", + "Σ(T□T)", + "(°o°:)" + ], + "Sweat": [ + "(・・;)", + "( ̄ー ̄;", + "(@Д@;", + "Σ(゚Д゚;", + "(;´瓜`)", + "(;・∀・)", + "(;゚Д゚)", + "( ̄Д ̄;;", + "(´∀`;)", + "(;^_^A", + "(゚A゚;)", + "(υ´Д`)", + "(゚Д゚;)", + "(-∧-;)", + "(´ε`;)", + "(;´Д`)", + "(;゚д゚)", + "(゚д゚;)", + "(;^ω^)", + "(´ж`;)", + "(;´д`)", + "(-。-;)", + "(・Θ・;)", + "(; ̄ー ̄川", + "(;~〓~)", + "(; ̄ー ̄A", + "(^▽^;)", + "(;´∀`)", + "(-”-;A", + "(;´Д`)" + ], + "Table flip": [ + "(ノ;;)ノ~┻━┻", + "┬─┬ノ(ಠ_ಠノ)", + "(/-o-)/ ⌒ ┤", + "┻━┻ミ\(≧ロ≦\)", + "(ノ○Д○)ノ===┠", + "(ノ`□´)ノ⌒┻━┻", + "(/‵Д′)/~ ╧╧", + "(╯°▽°)╯ ┻━┻", + "(╯ಠ_ಠ)╯︵ ┳━┳", + "(ノಠ益ಠ)ノ彡┻━┻", + "(┛◉Д◉)┛彡┻━┻", + "(╯ಠ‿ಠ)╯︵┻━┻", + "(ノ#--)ノ\。゜。", + "(╯=▃=)╯︵┻━┻", + "༼ノ◕ヮ◕༽ノ︵┻━┻", + "(┛ಠДಠ)┛彡┻━┻", + "(ノಠдಠ)ノ︵┻━┻", + "(╯°Д°)╯ ┻━┻", + "(ノ-_-)ノ~┻━┻", + "┳━┳ノ( OωOノ)", + "(╯‵□′)╯︵┴─┴", + "(ノToT)ノ ~┻┻", + "┬───┬ ノ༼ຈل͜ຈノ༽", + "(ノ͡° ͜ʖ ͡°)ノ︵┻┻", + "ʕノ•ᴥ•ʔノ ︵ ┻━┻", + "ヽ༼ ツ ༽ノ ︵┻━┻", + "ヽ༼ຈل͜ຈ༽ノ︵┻━┻", + "༼ノຈل͜ຈ༽ノ︵┻━┻", + "┬━┬ノ(▀̿̿Ĺ̯̿̿▀̿ ̿ノ)", + "┻━┻ ︵ ¯\\_༼ᴼل͜ᴼ༽_/¯ ︵ ┻━┻" + ], + "That's it": [ + "σ゚ロ゚)σ", + "(´ー`)σ", + "(☞◑ω◑)☞", + "(σ・ω・)σ", + "(σ≧∀≦)σ", + "(☞^o^)☞", + "(σ゚∀゚)σ", + "(m9^ω')", + "m9っ`・ω・´)", + "(  ̄ー ̄)σ", + "(´-ω-)σ", + "☜(゚∀゚☜)", + "(つ >ω●)つ", + "(σ*'3`)σ", + "_(┐「ε:)_", + "( ◑ω◑☞)☞", + "(σ`・∀・)σ", + "( ミΦﻌΦ)╭☞", + "(σ´-ω-`)σ", + "(╭☞'ω')╭☞", + "(╭☞•́•̀)╭☞", + "(╭☞•́ロ•̀)╭☞", + "(╭☞• ⍛• )╭☞", + "☜╮(´ิ∀´ิ☜╮)", + "(╭☞•́⍛•̀)╭☞", + "(╭☞•́⍛•̀)╭☞", + "(╭☞•̀o•́)╭☞", + "( ━☞´◔‿ゝ◔`)━☞", + "(☞ ͡° ͜ʖ ͡°)☞", + "(つ ͡° ͜ʖ ͡°)つ" + ], + "Thumbs up": [ + "(^^)b", + "(^^)b", + "d(-_^)", + "d(⌒ー⌒)", + "d(-_☆)", + "(・ω・)b", + "(´∀`)b", + "( ̄ー ̄)b", + "(b~_^)b", + "(b^_^)b", + "d(>_・ )", + "d(>_< )", + "(*TーT)b", + "b(~_^)d", + "d(・∀・○)", + "(*TーT)b", + "( ̄ε ̄〃)b", + "d(゚ー゚@)", + "d(>_・ )", + "(o^-’)b", + "( ゚Д゚)b", + "d(* ̄o ̄)", + "d( ̄◇ ̄)b", + "(o^-')b", + "(*^-゚)b", + "b( ̄▽ ̄*)", + "(* ̄▽ ̄)d", + "( ´∀`)b", + "(o'v`b)b", + "╭( ・ㅂ・)و" + ], + "Tired": [ + "OTL", + "orz", + "_ノフ○", + "( ̄Д ̄", + "(´Д⊂", + "(--;", + "(´。`)", + "( ̄Ω ̄)", + "(A´Å`", + "A^-^)", + "(∋д∈)", + "(・。-;", + "(´・`)", + "(*Q*)", + "(/0 ̄)", + "_| ̄|○", + "(-。-;", + "(´Д`)", + "(;´Д`)", + "(^。^;)", + "(´_`;)", + "(; ̄д ̄)", + "(´ヘ`;)", + "(´Д`)ヾ", + "( 〇□〇)", + "(´ヘ`;)", + "(;・・;)", + "(○o●;)", + "(´皿`;)", + "(*ノω-)" + ], + "Try my best": [ + "(・ω・)v", + "(*ゝ∀・)v", + "ヽ(゚∀。)ノ", + "(●≧ω≦)9", + "o(`^´*)", + "(★uдu)σ", + "(〃-ー-)ノ", + "(*・`д・)", + "(●`・皿・)", + "(´_¨`)9", + "( ̄`Д´ ̄)9", + "(★-皿-★)9", + "(`・ω・´)9", + "v(●´皿`)o", + "(9`・ω・)9", + "╭( ・ㅂ・)و", + "(`•ω•´๑)", + "(。o´д`)o", + "┗(`・∀・´●)", + "(๑•̀ㅁ•́ฅ✧", + "o(-ε´・+)b", + "(๑˃̵ᴗ˂̵)و", + "(○`・Д・´)9", + "┗(`・ω・´)┛", + "【★´┏Д┓`】ノ", + "(ง •̀ω•́)ง✧", + "( •̀ᄇ• ́)ﻭ✧", + "( • ̀ω•́ )✧", + "୧(๑❛ั⌔❛ั๑)୨ ॢ", + "\\\٩( 'ω' )و ///" + ], + "Unicode": [ + "గ౬గ", + "♥‿♥", + "ಠ_ಠ", + "ʘ‿ʘ", + "^̮^", + "◕‿◕", + "இ௰இ", + "ઊઠઊ", + "ꉨڡꉨ", + "ꈿ۝ꈿ", + "ஞ౩ஞ", + "ب_ب", + "ꆨ❥ꆨ", + "ꆧεꆧ", + "ꆤॄꆤ", + "°Д°", + "ઊહઊ", + "ஞଲஞ", + "⊙﹏⊙", + "ʚ(•", + "꒰⍨꒱", + "(ت)", + "(ق)", + "༼⍨༽", + "ఠ౬ఠ", + "తꀧత", + "චᆽච", + "ಥ_ಥ", + "◔̯◔", + "◕‿↼" + ], + "Vomit": [ + "(хдх)", + "(´*`)", + "(≧m≦)", + "(^~^)", + "(´π`)", + "('A`)", + "(*Л*)", + "(●≧艸≦", + "(>3<)三", + "(;´Д`)", + "( -.-)", + "( ̄x ̄;)", + "( ×m×)", + "(・□・)川", + "(´艸`*)", + "_| ̄|○、;", + "(。-<>ー。)", + "( ´З`)=3", + "(~Д~)***", + "σ( ' ┰ ̄)", + "( ゚ 3゚)≡@", + "(((○∀○)))", + "(;-з-)=゜。", + "((〇<*`_、′", + "ΣΣΣΣΣ(0<)", + "(;゚;艸;゚;)", + "`.゜∵(゜∀゜)", + "_(´ཀ`」 ∠)_", + "(*●艸ЗU$)◆◇", + "(o'ェ゚):;*." + ], + "Weird": [ + "〠_〠", + "༎ຶ‿༎ຶ", + "(ΘLΘ)", + "•✞_✞•", + "ᕦ⊙෴⊙ᕤ", + "ლↂ‿‿ↂლ", + "(☉౪ ⊙)", + "(╬⓪益⓪)", + "( ఠൠఠ )", + "☜Ҩↂ⼼ↂҨ☞", + "(*☻-☻*)", + "☁ ☝ˆ~ˆ☂", + "༽つ۞﹏۞༼つ", + "(´༎ຶ༎ຶ)", + "( ´థ౪థ)", + "(╬ಠิ益ಠิ)", + "( ◉◞౪◟◉)", + "༼▃ Ĺ̯ ▃༽", + "(༎ຶꈊ༎ຶ╬)", + "(╬゚◥益◤゚)", + "(☄ฺ♛ฺ3♛ฺ", + "(☝ ՞ਊ ՞)☝", + "( ༎ຶŎ༎ຶ )", + "(´≝◞⊖◟≝`)", + "✌.ʕʘ‿ʘʔ.✌", + "☾ ♛ ◡ ♛ ☽", + "(╯⊙ ⊱ ⊙╰ )", + "(ლ ^ิ౪^ิ)ლ", + "( ´థ,_‥థ`)", + ";´༎ຶਊ ༎ຶ`;" + ], + "Wink": [ + "^.~", + "ಠ‿↼", + "(・ェ-)", + "(・_+)", + "(・ω<)", + "(^_-)", + "{・ω-*}", + "(v^ー°)", + "(*^∀゜)", + "(^_−)☆", + "(・ω<)☆", + "(๑◕ㅂ▰)", + "d(-_^)", + "(◕ฺー≦)ノ", + "(*^-°)v", + "(ノ・_-)☆", + "く(^ー゚)ノ", + "(*^∀゚)ъ", + "(⌒.−)=★", + "(^_-)-☆", + "(^_<)~☆", + "(๑ゝڡ◕๑)", + "(・ωー)~☆", + "(*^-゚)v", + "(*・∀-)☆", + "(⌒.-)=★", + "(○゚ε^○)", + "(o'u≦o)", + "(*ゝω・)ノ", + "(゚ロ^o)o" + ] +} diff --git a/lua/emoji/config.lua b/lua/emoji/config.lua index 8ab51dc..73a2497 100644 --- a/lua/emoji/config.lua +++ b/lua/emoji/config.lua @@ -4,6 +4,11 @@ local defaults = { enable_cmp_integration = false, plugin_path = vim.fn.stdpath( M.options = {} +M.paths = { + emoji = "emoji.nvim/lua/data/emojis.json", + kaomoji = "emoji.nvim/lua/data/kaomojis.json", +} + function M.setup(options) M.options = vim.tbl_deep_extend("force", {}, defaults, options or {}) end diff --git a/lua/emoji/emoji.lua b/lua/emoji/emoji.lua index 4b0333a..74e1ae9 100644 --- a/lua/emoji/emoji.lua +++ b/lua/emoji/emoji.lua @@ -4,57 +4,9 @@ local utils = require("emoji.utils") ---@field slug string ---@field character string ---@field unicode_name string ----@field code_point string ---@field group string ----@field subgroup string -local Emoji = {} +local EmojiData ----load emoji data from JSON ----@param file_path string ----@return EmojiData -Emoji.load_emojis_from_json = function(file_path) - local file, err = io.open(file_path, "r") - if not file then - utils.error("cannot open emoji data file at '" .. file_path .. "' with error: " .. err) - return {} - end +local M = {} - local content = file:read("a") - file:close() - - local emoji = vim.json.decode(content, {}) - if emoji == {} or emoji == nil then - error("empty json decoded") - return {} - end - return emoji -end - ----filter emojis based on their group ----@param emojis EmojiData ----@param group string ----@return EmojiData -Emoji.filter_emojis_by_group = function(emojis, group) - ---@type EmojiData - ---@diagnostic disable-next-line: missing-fields - local filtered_emojis = {} - for _, e in ipairs(emojis) do - if e.group == group then - table.insert(filtered_emojis, e) - end - end - return filtered_emojis -end - ----creates a list of unique emoji groups ----@param emojis EmojiData ----@return table -Emoji.get_groups = function(emojis) - local groups = {} - for _, e in ipairs(emojis) do - groups[e.group] = 1 - end - return groups -end - -return Emoji +return M diff --git a/lua/emoji/init.lua b/lua/emoji/init.lua index d72e0ca..9a76fc1 100644 --- a/lua/emoji/init.lua +++ b/lua/emoji/init.lua @@ -1,9 +1,9 @@ local utils = require("emoji.utils") local config = require("emoji.config") -local Emoji = {} +local Main = {} -function Emoji.setup(opts) +function Main.setup(opts) if not utils.is_neovim_version_satisfied(9) then utils.error("Emoji needs Neovim >= 0.9.0") return @@ -19,11 +19,25 @@ function Emoji.setup(opts) end end -Emoji.insert = function() - require("emoji.ui").select_and_insert_emoji() +Main.insert = function() + local data = utils.load_from_json(config.options.plugin_path .. config.paths.emoji) + require("emoji.ui").select_and_insert(data) end -Emoji.insert_by_group = function() - require("emoji.ui").select_and_insert_emoji_by_group() +Main.insert_by_group = function() + local data = utils.load_from_json(config.options.plugin_path .. config.paths.emoji) + local groups = utils.get_groups(data) + require("emoji.ui").select_and_insert_by_group(data, groups) end -return Emoji +Main.insert_kaomoji = function() + local data = require("emoji.kaomoji").normalized_data(config.options.plugin_path .. config.paths.kaomoji) + require("emoji.ui").select_and_insert(data) +end + +Main.insert_kaomoji_by_group = function() + local data = require("emoji.kaomoji").normalized_data(config.options.plugin_path .. config.paths.kaomoji) + local groups = utils.get_groups(data) + require("emoji.ui").select_and_insert_by_group(data, groups) +end + +return Main diff --git a/lua/emoji/kaomoji.lua b/lua/emoji/kaomoji.lua new file mode 100644 index 0000000..d432407 --- /dev/null +++ b/lua/emoji/kaomoji.lua @@ -0,0 +1,23 @@ +local utils = require("emoji.utils") + +local M = {} + +---creates normalized data structure for Kaomojis +---@param file_path string +---@return table +M.normalized_data = function(file_path) + ---@type table + local normalized_data = {} + local data = utils.load_from_json(file_path) + if data == nil then + return normalized_data + end + for group, chars in pairs(data) do + for _, char in pairs(chars) do + table.insert(normalized_data, { group = group, character = char }) + end + end + return normalized_data +end + +return M diff --git a/lua/emoji/ui.lua b/lua/emoji/ui.lua index e718ac1..cf55138 100644 --- a/lua/emoji/ui.lua +++ b/lua/emoji/ui.lua @@ -1,49 +1,29 @@ local utils = require("emoji.utils") -local plugin_path = require("emoji.config").options.plugin_path - -local emojis = require("emoji.emoji").load_emojis_from_json(plugin_path .. "emoji.nvim/lua/emoji/emojis.json") -local groups = require("emoji.emoji").get_groups(emojis) local UI = {} ----creates a vim.ui.select window and inserts the choosen emoji at the current cursor ----@param e EmojiData -local function emoji_select(e) - local emoji_options = {} - -- Prepare the list of emoji options - for _, emoji in pairs(e) do - table.insert(emoji_options, emoji.character .. " : " .. emoji.unicode_name) - end - - -- Show the selection UI - vim.ui.select(emoji_options, { - prompt = "Select an emoji:", - kind = "emoji_select", - }, function(choice, index) - if choice then - utils.insert_string_at_current_cursor(e[index].character) - else - print("No emoji selected.") - end - end) -end - ---creates a vim.ui.select window with all emojis to select one ---pastes the selected emoji at the current cursor position -UI.select_and_insert_emoji = function() +UI.select_and_insert = function(emojis) local emoji_options = {} for _, e in ipairs(emojis) do - table.insert(emoji_options, e.character .. " " .. e.unicode_name) + -- handle emojis + if e.unicode_name ~= nil then + table.insert(emoji_options, e.character .. " " .. e.unicode_name) + end + -- handle kaomojis + if e.group ~= nil then + table.insert(emoji_options, e.character .. " " .. e.group) + end end - vim.ui.select(emoji_options, { - prompt = "Select an emoji:", + prompt = "Select an entry:", kind = "emoji_select", }, function(choice, index) if choice then utils.insert_string_at_current_cursor(emojis[index].character) else - print("No emoji selected.") + vim.api.nvim_notify("Nothing selected", 0, {}) end end) end @@ -51,21 +31,20 @@ end ---creates a vim.ui.select window with all emoji groups to select one ---creates another vim.ui.select window with emojis from the previous selected group ---pastes the selected emoji at the current cursor position -UI.select_and_insert_emoji_by_group = function() +UI.select_and_insert_by_group = function(emojis, groups) local group_options = {} for k, _ in pairs(groups) do table.insert(group_options, k) end - vim.ui.select(group_options, { - prompt = "Select an emoji group:", + prompt = "Select a group:", kind = "emoji_group_select", }, function(choice, index) if choice then - local filtered_emojis = require("emoji.emoji").filter_emojis_by_group(emojis, group_options[index]) - emoji_select(filtered_emojis) + local filtered = utils.filter_by_group(emojis, group_options[index]) + UI.select_and_insert(filtered) else - print("No emoji group selected.") + vim.api.nvim_notify("Nothing selected", 0, {}) end end) end diff --git a/lua/emoji/utils.lua b/lua/emoji/utils.lua index c79a263..30bd3f7 100644 --- a/lua/emoji/utils.lua +++ b/lua/emoji/utils.lua @@ -48,6 +48,54 @@ M.is_neovim_version_satisfied = function(version) return version <= tonumber(vim.version().minor) end +---load emoji data from JSON +---@param file_path string +---@return table +M.load_from_json = function(file_path) + local file, err = io.open(file_path, "r") + if not file then + M.error("cannot open data file at '" .. file_path .. "' with error: " .. err) + return {} + end + + local content = file:read("a") + file:close() + + local json_data = vim.json.decode(content, {}) + if json_data == {} or json_data == nil then + error("empty json decoded") + return {} + end + return json_data +end + +---creates a list of unique emoji groups +---@param emojis EmojiData +---@return table +M.get_groups = function(emojis) + local groups = {} + for _, e in ipairs(emojis) do + groups[e.group] = 1 + end + return groups +end + +---filter emojis based on their group +---@param emojis EmojiData +---@param group string +---@return EmojiData +M.filter_by_group = function(emojis, group) + ---@type EmojiData + ---@diagnostic disable-next-line: missing-fields + local filtered_emojis = {} + for _, e in ipairs(emojis) do + if e.group == group then + table.insert(filtered_emojis, e) + end + end + return filtered_emojis +end + M.insert_string_at_current_cursor = function(text) local buf = vim.api.nvim_get_current_buf() table.unpack = table.unpack or unpack -- 5.1 compatibility diff --git a/lua/telescope/_extensions/emoji.lua b/lua/telescope/_extensions/emoji.lua index 762217c..15f01a9 100644 --- a/lua/telescope/_extensions/emoji.lua +++ b/lua/telescope/_extensions/emoji.lua @@ -1,4 +1,3 @@ -local emoji = require("emoji.emoji") local utils = require("emoji.utils") local pickers = require("telescope.pickers") @@ -29,7 +28,8 @@ end function M.finder() local plugin_path = require("emoji.config").options.plugin_path - local emojis = require("emoji.emoji").load_emojis_from_json(plugin_path .. "emoji.nvim/lua/emoji/emojis.json") + local emoji_path = require("emoji.config").paths.emoji + local emojis = utils.load_from_json(plugin_path .. emoji_path) local results = {} for _, e in ipairs(emojis) do table.insert(results, { name = e.unicode_name, character = e.character, group = e.group }) diff --git a/plugin/emoji.vim b/plugin/emoji.vim index f5cebb2..3704cd8 100644 --- a/plugin/emoji.vim +++ b/plugin/emoji.vim @@ -14,3 +14,5 @@ let g:loaded_emoji = 1 " Exposes the plugin's functions for use as commands in Neovim. command! -nargs=0 InsertEmoji lua require("emoji").insert() command! -nargs=0 InsertEmojiByGroup lua require("emoji").insert_by_group() +command! -nargs=0 InsertKaomoji lua require("emoji").insert_kaomoji() +command! -nargs=0 InsertKaomojiByGroup lua require("emoji").insert_kaomoji_by_group() diff --git a/tests/emoji/test_emoji.lua b/tests/emoji/test_emoji.lua index c3adaba..b243b30 100644 --- a/tests/emoji/test_emoji.lua +++ b/tests/emoji/test_emoji.lua @@ -2,10 +2,10 @@ local new_set = MiniTest.new_set local expect, eq, neq = MiniTest.expect, MiniTest.expect.equality, MiniTest.expect.no_equality local T = new_set() -local emoji = require("emoji.emoji") +local utils = require("emoji.utils") T["load emoji from json"] = function() - local get = emoji.load_emojis_from_json("tests/emoji/test_data/test.json") + local get = utils.load_from_json("tests/emoji/test_data/test.json") local want = { { character = "😀", @@ -29,7 +29,7 @@ end -- TODO how to suppress error notification? T["load non existe json"] = function() - expect.error(emoji.load_emojis_from_json("foobar.json"), nil) + expect.error(utils.load_from_json("foobar.json"), nil) end -- FIXME does not "pass" @@ -38,32 +38,34 @@ end -- end T["get emoji groups"] = function() - local emojis = emoji.load_emojis_from_json("tests/emoji/test_data/test.json") - local get = emoji.get_groups(emojis) + local emojis = utils.load_from_json("tests/emoji/test_data/test.json") + local get = utils.get_groups(emojis) local want = { flags = 1, - ["smileys-emotion"] = 1 + ["smileys-emotion"] = 1, } eq(want, get) end T["filter emoji by group"] = function() - local emojis = emoji.load_emojis_from_json("tests/emoji/test_data/test.json") - local get = emoji.filter_emojis_by_group(emojis, "flags") - local want = { { + local emojis = utils.load_from_json("tests/emoji/test_data/test.json") + local get = utils.filter_by_group(emojis, "flags") + local want = { + { character = "😃", code_point = "1F603", group = "flags", slug = "grinning-face-with-big-eyes", subgroup = "face-smiling", - unicode_name = "grinning face with big eyes" - } } + unicode_name = "grinning face with big eyes", + }, + } eq(want, get) end T["filter emoji with missing group"] = function() - local emojis = emoji.load_emojis_from_json("tests/emoji/test_data/test.json") - local get = emoji.filter_emojis_by_group(emojis, "foo") + local emojis = utils.load_from_json("tests/emoji/test_data/test.json") + local get = utils.filter_by_group(emojis, "foo") local want = {} eq(want, get) end From a4e8d3543453b21407dcc48a7f72f38fdc5e2266 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 7 Mar 2024 20:14:11 +0100 Subject: [PATCH 2/2] chore: Add selene configuration --- selene.toml | 5 +++++ vim.toml | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 selene.toml create mode 100644 vim.toml diff --git a/selene.toml b/selene.toml new file mode 100644 index 0000000..6a317df --- /dev/null +++ b/selene.toml @@ -0,0 +1,5 @@ +# https://github.com/Kampfkarren/selene/issues/284 +std="lua52+vim" + +[rules] +mixed_table = "allow" diff --git a/vim.toml b/vim.toml new file mode 100644 index 0000000..0fa5c4f --- /dev/null +++ b/vim.toml @@ -0,0 +1,2 @@ +[vim] +any = true