You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
404 KiB

package main
import (
"regexp"
"strconv"
)
type emojiData struct {
Name string
Description string
Unicode string
Alias []string
}
func emojiUnicodeConvert(s string) string {
re := regexp.MustCompile(`:(\w+|([+-]\d)):`)
return re.ReplaceAllStringFunc(s, renderUnicodeEmoji)
}
func resolveRootEmojis(s string) string {
re := regexp.MustCompile(`:(\w+|([+-]\d)):`)
return re.ReplaceAllStringFunc(s, emojiRootLookup)
}
func emojiRootLookup(s string) string {
if temp, ok := emojiMap[s]; ok {
return temp.Name
} else {
return s
}
}
func renderUnicodeEmoji(source string) string {
if data, ok := emojiMap[source]; ok {
emj, err := strconv.ParseInt(data.Unicode, 16, 32)
if err != nil {
// because not all of them are parseable (like keycaps \u0031-FE0F-20E3)
return source
} else {
return string(emj)
}
} else {
return source
}
}
var emojiMap = map[string]emojiData{":+1:": emojiData{Name: ":+1:", Description: "Thumbs Up Sign", Unicode: "1F44D", Alias: []string{"thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like"}}, ":-1:": emojiData{Name: ":-1:", Description: "Thumbs Down Sign", Unicode: "1F44E", Alias: []string{"thumbsdown", "no", "dislike", "hand"}}, ":-_-:": emojiData{Name: ":expressionless:", Description: "Expressionless Face", Unicode: "1F611", Alias: []string{"face", "indifferent", "-_-", "meh", "deadpan"}}, ":0:": emojiData{Name: ":zero:", Description: "Keycap 0", Unicode: "0030-FE0F-20E3", Alias: []string{"0", "numbers", "blue-square", "null"}}, ":100:": emojiData{Name: ":100:", Description: "Hundred Points Symbol", Unicode: "1F4AF", Alias: []string{"score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred"}}, ":101:": emojiData{Name: ":poodle:", Description: "Poodle", Unicode: "1F429", Alias: []string{"dog", "animal", "101", "nature", "pet"}}, ":10:": emojiData{Name: ":keycap_ten:", Description: "Keycap Ten", Unicode: "1F51F", Alias: []string{"numbers", "10", "blue-square"}}, ":1234:": emojiData{Name: ":1234:", Description: "Input Symbol for Numbers", Unicode: "1F522", Alias: []string{"numbers", "blue-square"}}, ":18:": emojiData{Name: ":underage:", Description: "No One Under Eighteen Symbol", Unicode: "1F51E", Alias: []string{"18", "drink", "pub", "night", "minor", "circle"}}, ":1:": emojiData{Name: ":one:", Description: "Keycap 1", Unicode: "0031-FE0F-20E3", Alias: []string{"blue-square", "numbers", "1"}}, ":2:": emojiData{Name: ":two:", Description: "Keycap 2", Unicode: "0032-FE0F-20E3", Alias: []string{"numbers", "2", "prime", "blue-square"}}, ":3:": emojiData{Name: ":three:", Description: "Keycap 3", Unicode: "0033-FE0F-20E3", Alias: []string{"3", "numbers", "prime", "blue-square"}}, ":4:": emojiData{Name: ":four:", Description: "Keycap 4", Unicode: "0034-FE0F-20E3", Alias: []string{"4", "numbers", "blue-square"}}, ":5:": emojiData{Name: ":five:", Description: "Keycap 5", Unicode: "0035-FE0F-20E3", Alias: []string{"5", "numbers", "blue-square", "prime"}}, ":6:": emojiData{Name: ":six:", Description: "Keycap 6", Unicode: "0036-FE0F-20E3", Alias: []string{"6", "numbers", "blue-square"}}, ":7:": emojiData{Name: ":seven:", Description: "Keycap 7", Unicode: "0037-FE0F-20E3", Alias: []string{"7", "numbers", "blue-square", "prime"}}, ":80s:": emojiData{Name: ":floppy_disk:", Description: "Floppy Disk", Unicode: "1F4BE", Alias: []string{"oldschool", "technology", "save", "90s", "80s"}}, ":8:": emojiData{Name: ":eight:", Description: "Keycap 8", Unicode: "0038-FE0F-20E3", Alias: []string{"8", "blue-square", "numbers"}}, ":8ball:": emojiData{Name: ":8ball:", Description: "Billiards", Unicode: "1F3B1", Alias: []string{"pool", "hobby", "game", "luck", "magic"}}, ":90s:": emojiData{Name: ":cd:", Description: "Optical Disc", Unicode: "1F4BF", Alias: []string{"technology", "dvd", "disk", "disc", "90s"}}, ":911:": emojiData{Name: ":ambulance:", Description: "Ambulance", Unicode: "1F691", Alias: []string{"health", "911", "hospital"}}, ":9:": emojiData{Name: ":nine:", Description: "Keycap 9", Unicode: "0039-FE0F-20E3", Alias: []string{"blue-square", "numbers", "9"}}, "::'(:": emojiData{Name: ":cry:", Description: "Crying Face", Unicode: "1F622", Alias: []string{"face", "tears", "sad", "depressed", "upset", ":'("}}, "::(:": emojiData{Name: ":worried:", Description: "Worried Face", Unicode: "1F61F", Alias: []string{"face", "concern", "nervous", ":("}}, "::):": emojiData{Name: ":smile:", Description: "Smiling Face with Open Mouth and Smiling Eyes", Unicode: "1F604", Alias: []string{"face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)"}}, "::/:": emojiData{Name: ":confused:", Description: "Confused Face", Unicode: "1F615", Alias: []string{"face", "indifference", "huh", "weird", "hmmm", ":/"}}, "::D:": emojiData{Name: ":smile:", Description: "Smiling Face with Open Mouth and Smiling Eyes", Unicode: "1F604", Alias: []string{"face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":