pax_global_header00006660000000000000000000000064137211731210014510gustar00rootroot0000000000000052 comment=0faf8bc2325ac2955c586e3349de258db83c433c goldmark-emoji-1.0.1/000077500000000000000000000000001372117312100144105ustar00rootroot00000000000000goldmark-emoji-1.0.1/.gitignore000066400000000000000000000003231372117312100163760ustar00rootroot00000000000000# Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib # Test binary, build with `go test -c` *.test *.pprof # Output of the go coverage tool, specifically when used with LiteIDE *.out .DS_Store goldmark-emoji-1.0.1/LICENSE000066400000000000000000000020571372117312100154210ustar00rootroot00000000000000MIT License Copyright (c) 2020 Yusuke Inuzuka Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. goldmark-emoji-1.0.1/README.md000066400000000000000000000027301372117312100156710ustar00rootroot00000000000000goldmark-emoji ========================= [![GoDev][godev-image]][godev-url] [godev-image]: https://pkg.go.dev/badge/github.com/yuin/goldmark-emoji [godev-url]: https://pkg.go.dev/github.com/yuin/goldmark-emoji goldmark-emoji is an extension for the [goldmark](http://github.com/yuin/goldmark) that parses `:joy:` style emojis. Installation -------------------- ``` go get github.com/yuin/goldmark-emoji ``` Usage -------------------- ```go import ( "bytes" "fmt" "github.com/yuin/goldmark" "github.com/yuin/goldmark-emoji" "github.com/yuin/goldmark-emoji/definition" ) func main() { markdown := goldmark.New( goldmark.WithExtensions( emoji.Emoji, ), ) source := ` Joy :joy: ` var buf bytes.Buffer if err := markdown.Convert([]byte(source), &buf); err != nil { panic(err) } fmt.Print(buf.String()) } ``` See `emoji_test.go` for detailed usage. ### Options Options for the extension | Option | Description | | ------ | ----------- | | `WithEmojis` | Definition of emojis. This defaults to github emoji set | | `WithRenderingMethod` | `Entity` : renders as HTML entities, `Twemoji` : renders as an img tag that uses [twemoji](https://github.com/twitter/twemoji), `Func` : renders using a go function | | `WithTwemojiTemplate` | Twemoji img tag printf template | | `WithRendererFunc` | renders by a go function | License -------------------- MIT Author -------------------- Yusuke Inuzuka goldmark-emoji-1.0.1/_tools/000077500000000000000000000000001372117312100157075ustar00rootroot00000000000000goldmark-emoji-1.0.1/_tools/gen-definitions.go000066400000000000000000000042011372117312100213150ustar00rootroot00000000000000package main import ( "encoding/json" "fmt" "io/ioutil" "net/http" "os" "strings" ) const template = `// This file was generated by _tools/gen-deifinition.go. DO NOT EDIT. package definition import "sync" var %[1]s Emojis var %[1]sOnce sync.Once func %[2]s(opts ...EmojisOption) Emojis { %[1]sOnce.Do(func() { %[1]s = NewEmojis( %[3]s, ) }) m := %[1]s.Clone() for _, opt := range opts { opt(m) } return m } ` const outBaseDir = "../definition/" func main() { fmt.Println("generate github") genGithub() } func abortIfError(err error) { if err != nil { fmt.Fprint(os.Stderr, err) os.Exit(1) } } func getURL(url string) []byte { resp, err := http.Get(url) if err != nil { fmt.Fprint(os.Stderr, err) os.Exit(1) } defer resp.Body.Close() bs, err := ioutil.ReadAll(resp.Body) abortIfError(err) return bs } func genGithub() { name := "github" nameCap := "Github" outPath := outBaseDir + "github.go" bs := getURL("https://api.github.com/emojis") var ghnames map[string]string abortIfError(json.Unmarshal(bs, &ghnames)) bs = getURL("https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json") var list []map[string]interface{} abortIfError(json.Unmarshal(bs, &list)) getShortNames := func(emoji map[string]interface{}) []string { ns := []string{} for _, name := range emoji["aliases"].([]interface{}) { ns = append(ns, name.(string)) } return ns } getUnicode := func(emoji map[string]interface{}) string { return emoji["emoji"].(string) } getDescription := func(emoji map[string]interface{}) string { return emoji["description"].(string) } buf := []string{} for _, emoji := range list { names := getShortNames(emoji) name := "" for _, n := range names { if _, ok := ghnames[n]; ok { name = n break } } if len(name) == 0 { continue } desc := getDescription(emoji) buf = append(buf, fmt.Sprintf(`NewEmoji("%s", %#v, "%s")`, desc, []rune(getUnicode(emoji)), name)) } f, err := os.Create(outPath) abortIfError(err) defer f.Close() _, err = f.WriteString(fmt.Sprintf(template, name, nameCap, strings.Join(buf, ",\n\t\t\t"))) abortIfError(err) } goldmark-emoji-1.0.1/ast/000077500000000000000000000000001372117312100151775ustar00rootroot00000000000000goldmark-emoji-1.0.1/ast/emoji.go000066400000000000000000000016021372117312100166300ustar00rootroot00000000000000// Package ast defines AST nodes that represetns emoji extension's elements. package ast import ( "fmt" "github.com/yuin/goldmark-emoji/definition" gast "github.com/yuin/goldmark/ast" ) // Emoji represents an inline emoji. type Emoji struct { gast.BaseInline ShortName []byte Value *definition.Emoji } // Dump implements Node.Dump. func (n *Emoji) Dump(source []byte, level int) { m := map[string]string{ "ShortName": string(n.ShortName), "Value": fmt.Sprintf("%#v", n.Value), } gast.DumpHelper(n, source, level, m, nil) } // KindEmoji is a NodeKind of the emoji node. var KindEmoji = gast.NewNodeKind("Emoji") // Kind implements Node.Kind. func (n *Emoji) Kind() gast.NodeKind { return KindEmoji } // NewEmoji returns a new Emoji node. func NewEmoji(shortName []byte, value *definition.Emoji) *Emoji { return &Emoji{ ShortName: shortName, Value: value, } } goldmark-emoji-1.0.1/definition/000077500000000000000000000000001372117312100165405ustar00rootroot00000000000000goldmark-emoji-1.0.1/definition/definition.go000066400000000000000000000043121372117312100212170ustar00rootroot00000000000000package definition // Emoji is a data structure that holds a single emoji. type Emoji struct { // Name is a name of this emoji. Name string // ShortNames is a shorter representation of this emoji. ShortNames []string // Unicode is an unicode representation of this emoji. Unicode []rune } // NewEmoji returns a new Emoji. func NewEmoji(name string, unicode []rune, shortNames ...string) Emoji { if len(shortNames) == 0 { panic("Emoji must have at leat 1 short name.") } if unicode == nil || len(unicode) == 0 { unicode = []rune{0xFFFD} } return Emoji{ Name: name, ShortNames: shortNames, Unicode: unicode, } } // IsUnicode returns true if this emoji is defined in unicode, otherwise false. func (em *Emoji) IsUnicode() bool { return !(len(em.Unicode) == 1 && em.Unicode[0] == 0xFFFD) } // Emojis is a collection of emojis. type Emojis interface { // Get returns (*Emoji, true) if found mapping associated with given short name, otherwise (nil, false). Get(shortName string) (*Emoji, bool) // Add adds new emojis to this collection. Add(Emojis) // Clone clones this collection. Clone() Emojis } type emojis struct { list []Emoji m map[string]*Emoji children []Emojis } // NewEmojis returns a new Emojis. func NewEmojis(es ...Emoji) Emojis { m := &emojis{ list: es, m: map[string]*Emoji{}, children: []Emojis{}, } for i, _ := range es { emoji := &m.list[i] for _, s := range emoji.ShortNames { m.m[s] = emoji } } return m } func (m *emojis) Add(emojis Emojis) { m.children = append(m.children, emojis) } func (m *emojis) Clone() Emojis { es := &emojis{ list: m.list, m: m.m, children: make([]Emojis, len(m.children)), } copy(es.children, m.children) return es } func (m *emojis) Get(shortName string) (*Emoji, bool) { v, ok := m.m[shortName] if ok { return v, ok } for _, es := range m.children { v, ok := es.Get(shortName) if ok { return v, ok } } return nil, false } // EmojisOption sets options for Emojis. type EmojisOption func(Emojis) // WithEmojis is an EmojisOption that adds emojis to the Emojis. func WithEmojis(emojis ...Emoji) EmojisOption { return func(m Emojis) { m.Add(NewEmojis(emojis...)) } } goldmark-emoji-1.0.1/definition/github.go000066400000000000000000003371611372117312100203640ustar00rootroot00000000000000// This file was generated by _tools/gen-deifinition.go. DO NOT EDIT. package definition import "sync" var github Emojis var githubOnce sync.Once func Github(opts ...EmojisOption) Emojis { githubOnce.Do(func() { github = NewEmojis( NewEmoji("grinning face", []int32{128512}, "grinning"), NewEmoji("grinning face with big eyes", []int32{128515}, "smiley"), NewEmoji("grinning face with smiling eyes", []int32{128516}, "smile"), NewEmoji("beaming face with smiling eyes", []int32{128513}, "grin"), NewEmoji("grinning squinting face", []int32{128518}, "laughing"), NewEmoji("grinning face with sweat", []int32{128517}, "sweat_smile"), NewEmoji("rolling on the floor laughing", []int32{129315}, "rofl"), NewEmoji("face with tears of joy", []int32{128514}, "joy"), NewEmoji("slightly smiling face", []int32{128578}, "slightly_smiling_face"), NewEmoji("upside-down face", []int32{128579}, "upside_down_face"), NewEmoji("winking face", []int32{128521}, "wink"), NewEmoji("smiling face with smiling eyes", []int32{128522}, "blush"), NewEmoji("smiling face with halo", []int32{128519}, "innocent"), NewEmoji("smiling face with hearts", []int32{129392}, "smiling_face_with_three_hearts"), NewEmoji("smiling face with heart-eyes", []int32{128525}, "heart_eyes"), NewEmoji("star-struck", []int32{129321}, "star_struck"), NewEmoji("face blowing a kiss", []int32{128536}, "kissing_heart"), NewEmoji("kissing face", []int32{128535}, "kissing"), NewEmoji("smiling face", []int32{9786, 65039}, "relaxed"), NewEmoji("kissing face with closed eyes", []int32{128538}, "kissing_closed_eyes"), NewEmoji("kissing face with smiling eyes", []int32{128537}, "kissing_smiling_eyes"), NewEmoji("face savoring food", []int32{128523}, "yum"), NewEmoji("face with tongue", []int32{128539}, "stuck_out_tongue"), NewEmoji("winking face with tongue", []int32{128540}, "stuck_out_tongue_winking_eye"), NewEmoji("zany face", []int32{129322}, "zany_face"), NewEmoji("squinting face with tongue", []int32{128541}, "stuck_out_tongue_closed_eyes"), NewEmoji("money-mouth face", []int32{129297}, "money_mouth_face"), NewEmoji("hugging face", []int32{129303}, "hugs"), NewEmoji("face with hand over mouth", []int32{129325}, "hand_over_mouth"), NewEmoji("shushing face", []int32{129323}, "shushing_face"), NewEmoji("thinking face", []int32{129300}, "thinking"), NewEmoji("zipper-mouth face", []int32{129296}, "zipper_mouth_face"), NewEmoji("face with raised eyebrow", []int32{129320}, "raised_eyebrow"), NewEmoji("neutral face", []int32{128528}, "neutral_face"), NewEmoji("expressionless face", []int32{128529}, "expressionless"), NewEmoji("face without mouth", []int32{128566}, "no_mouth"), NewEmoji("smirking face", []int32{128527}, "smirk"), NewEmoji("unamused face", []int32{128530}, "unamused"), NewEmoji("face with rolling eyes", []int32{128580}, "roll_eyes"), NewEmoji("grimacing face", []int32{128556}, "grimacing"), NewEmoji("lying face", []int32{129317}, "lying_face"), NewEmoji("relieved face", []int32{128524}, "relieved"), NewEmoji("pensive face", []int32{128532}, "pensive"), NewEmoji("sleepy face", []int32{128554}, "sleepy"), NewEmoji("drooling face", []int32{129316}, "drooling_face"), NewEmoji("sleeping face", []int32{128564}, "sleeping"), NewEmoji("face with medical mask", []int32{128567}, "mask"), NewEmoji("face with thermometer", []int32{129298}, "face_with_thermometer"), NewEmoji("face with head-bandage", []int32{129301}, "face_with_head_bandage"), NewEmoji("nauseated face", []int32{129314}, "nauseated_face"), NewEmoji("face vomiting", []int32{129326}, "vomiting_face"), NewEmoji("sneezing face", []int32{129319}, "sneezing_face"), NewEmoji("hot face", []int32{129397}, "hot_face"), NewEmoji("cold face", []int32{129398}, "cold_face"), NewEmoji("woozy face", []int32{129396}, "woozy_face"), NewEmoji("dizzy face", []int32{128565}, "dizzy_face"), NewEmoji("exploding head", []int32{129327}, "exploding_head"), NewEmoji("cowboy hat face", []int32{129312}, "cowboy_hat_face"), NewEmoji("partying face", []int32{129395}, "partying_face"), NewEmoji("smiling face with sunglasses", []int32{128526}, "sunglasses"), NewEmoji("nerd face", []int32{129299}, "nerd_face"), NewEmoji("face with monocle", []int32{129488}, "monocle_face"), NewEmoji("confused face", []int32{128533}, "confused"), NewEmoji("worried face", []int32{128543}, "worried"), NewEmoji("slightly frowning face", []int32{128577}, "slightly_frowning_face"), NewEmoji("frowning face", []int32{9785, 65039}, "frowning_face"), NewEmoji("face with open mouth", []int32{128558}, "open_mouth"), NewEmoji("hushed face", []int32{128559}, "hushed"), NewEmoji("astonished face", []int32{128562}, "astonished"), NewEmoji("flushed face", []int32{128563}, "flushed"), NewEmoji("pleading face", []int32{129402}, "pleading_face"), NewEmoji("frowning face with open mouth", []int32{128550}, "frowning"), NewEmoji("anguished face", []int32{128551}, "anguished"), NewEmoji("fearful face", []int32{128552}, "fearful"), NewEmoji("anxious face with sweat", []int32{128560}, "cold_sweat"), NewEmoji("sad but relieved face", []int32{128549}, "disappointed_relieved"), NewEmoji("crying face", []int32{128546}, "cry"), NewEmoji("loudly crying face", []int32{128557}, "sob"), NewEmoji("face screaming in fear", []int32{128561}, "scream"), NewEmoji("confounded face", []int32{128534}, "confounded"), NewEmoji("persevering face", []int32{128547}, "persevere"), NewEmoji("disappointed face", []int32{128542}, "disappointed"), NewEmoji("downcast face with sweat", []int32{128531}, "sweat"), NewEmoji("weary face", []int32{128553}, "weary"), NewEmoji("tired face", []int32{128555}, "tired_face"), NewEmoji("yawning face", []int32{129393}, "yawning_face"), NewEmoji("face with steam from nose", []int32{128548}, "triumph"), NewEmoji("pouting face", []int32{128545}, "rage"), NewEmoji("angry face", []int32{128544}, "angry"), NewEmoji("face with symbols on mouth", []int32{129324}, "cursing_face"), NewEmoji("smiling face with horns", []int32{128520}, "smiling_imp"), NewEmoji("angry face with horns", []int32{128127}, "imp"), NewEmoji("skull", []int32{128128}, "skull"), NewEmoji("skull and crossbones", []int32{9760, 65039}, "skull_and_crossbones"), NewEmoji("pile of poo", []int32{128169}, "hankey"), NewEmoji("clown face", []int32{129313}, "clown_face"), NewEmoji("ogre", []int32{128121}, "japanese_ogre"), NewEmoji("goblin", []int32{128122}, "japanese_goblin"), NewEmoji("ghost", []int32{128123}, "ghost"), NewEmoji("alien", []int32{128125}, "alien"), NewEmoji("alien monster", []int32{128126}, "space_invader"), NewEmoji("robot", []int32{129302}, "robot"), NewEmoji("grinning cat", []int32{128570}, "smiley_cat"), NewEmoji("grinning cat with smiling eyes", []int32{128568}, "smile_cat"), NewEmoji("cat with tears of joy", []int32{128569}, "joy_cat"), NewEmoji("smiling cat with heart-eyes", []int32{128571}, "heart_eyes_cat"), NewEmoji("cat with wry smile", []int32{128572}, "smirk_cat"), NewEmoji("kissing cat", []int32{128573}, "kissing_cat"), NewEmoji("weary cat", []int32{128576}, "scream_cat"), NewEmoji("crying cat", []int32{128575}, "crying_cat_face"), NewEmoji("pouting cat", []int32{128574}, "pouting_cat"), NewEmoji("see-no-evil monkey", []int32{128584}, "see_no_evil"), NewEmoji("hear-no-evil monkey", []int32{128585}, "hear_no_evil"), NewEmoji("speak-no-evil monkey", []int32{128586}, "speak_no_evil"), NewEmoji("kiss mark", []int32{128139}, "kiss"), NewEmoji("love letter", []int32{128140}, "love_letter"), NewEmoji("heart with arrow", []int32{128152}, "cupid"), NewEmoji("heart with ribbon", []int32{128157}, "gift_heart"), NewEmoji("sparkling heart", []int32{128150}, "sparkling_heart"), NewEmoji("growing heart", []int32{128151}, "heartpulse"), NewEmoji("beating heart", []int32{128147}, "heartbeat"), NewEmoji("revolving hearts", []int32{128158}, "revolving_hearts"), NewEmoji("two hearts", []int32{128149}, "two_hearts"), NewEmoji("heart decoration", []int32{128159}, "heart_decoration"), NewEmoji("heart exclamation", []int32{10083, 65039}, "heavy_heart_exclamation"), NewEmoji("broken heart", []int32{128148}, "broken_heart"), NewEmoji("red heart", []int32{10084, 65039}, "heart"), NewEmoji("orange heart", []int32{129505}, "orange_heart"), NewEmoji("yellow heart", []int32{128155}, "yellow_heart"), NewEmoji("green heart", []int32{128154}, "green_heart"), NewEmoji("blue heart", []int32{128153}, "blue_heart"), NewEmoji("purple heart", []int32{128156}, "purple_heart"), NewEmoji("brown heart", []int32{129294}, "brown_heart"), NewEmoji("black heart", []int32{128420}, "black_heart"), NewEmoji("white heart", []int32{129293}, "white_heart"), NewEmoji("hundred points", []int32{128175}, "100"), NewEmoji("anger symbol", []int32{128162}, "anger"), NewEmoji("collision", []int32{128165}, "boom"), NewEmoji("dizzy", []int32{128171}, "dizzy"), NewEmoji("sweat droplets", []int32{128166}, "sweat_drops"), NewEmoji("dashing away", []int32{128168}, "dash"), NewEmoji("hole", []int32{128371, 65039}, "hole"), NewEmoji("bomb", []int32{128163}, "bomb"), NewEmoji("speech balloon", []int32{128172}, "speech_balloon"), NewEmoji("eye in speech bubble", []int32{128065, 65039, 8205, 128488, 65039}, "eye_speech_bubble"), NewEmoji("left speech bubble", []int32{128488, 65039}, "left_speech_bubble"), NewEmoji("right anger bubble", []int32{128495, 65039}, "right_anger_bubble"), NewEmoji("thought balloon", []int32{128173}, "thought_balloon"), NewEmoji("zzz", []int32{128164}, "zzz"), NewEmoji("waving hand", []int32{128075}, "wave"), NewEmoji("raised back of hand", []int32{129306}, "raised_back_of_hand"), NewEmoji("hand with fingers splayed", []int32{128400, 65039}, "raised_hand_with_fingers_splayed"), NewEmoji("raised hand", []int32{9995}, "hand"), NewEmoji("vulcan salute", []int32{128406}, "vulcan_salute"), NewEmoji("OK hand", []int32{128076}, "ok_hand"), NewEmoji("pinching hand", []int32{129295}, "pinching_hand"), NewEmoji("victory hand", []int32{9996, 65039}, "v"), NewEmoji("crossed fingers", []int32{129310}, "crossed_fingers"), NewEmoji("love-you gesture", []int32{129311}, "love_you_gesture"), NewEmoji("sign of the horns", []int32{129304}, "metal"), NewEmoji("call me hand", []int32{129305}, "call_me_hand"), NewEmoji("backhand index pointing left", []int32{128072}, "point_left"), NewEmoji("backhand index pointing right", []int32{128073}, "point_right"), NewEmoji("backhand index pointing up", []int32{128070}, "point_up_2"), NewEmoji("middle finger", []int32{128405}, "middle_finger"), NewEmoji("backhand index pointing down", []int32{128071}, "point_down"), NewEmoji("index pointing up", []int32{9757, 65039}, "point_up"), NewEmoji("thumbs up", []int32{128077}, "+1"), NewEmoji("thumbs down", []int32{128078}, "-1"), NewEmoji("raised fist", []int32{9994}, "fist_raised"), NewEmoji("oncoming fist", []int32{128074}, "fist_oncoming"), NewEmoji("left-facing fist", []int32{129307}, "fist_left"), NewEmoji("right-facing fist", []int32{129308}, "fist_right"), NewEmoji("clapping hands", []int32{128079}, "clap"), NewEmoji("raising hands", []int32{128588}, "raised_hands"), NewEmoji("open hands", []int32{128080}, "open_hands"), NewEmoji("palms up together", []int32{129330}, "palms_up_together"), NewEmoji("handshake", []int32{129309}, "handshake"), NewEmoji("folded hands", []int32{128591}, "pray"), NewEmoji("writing hand", []int32{9997, 65039}, "writing_hand"), NewEmoji("nail polish", []int32{128133}, "nail_care"), NewEmoji("selfie", []int32{129331}, "selfie"), NewEmoji("flexed biceps", []int32{128170}, "muscle"), NewEmoji("mechanical arm", []int32{129470}, "mechanical_arm"), NewEmoji("mechanical leg", []int32{129471}, "mechanical_leg"), NewEmoji("leg", []int32{129461}, "leg"), NewEmoji("foot", []int32{129462}, "foot"), NewEmoji("ear", []int32{128066}, "ear"), NewEmoji("ear with hearing aid", []int32{129467}, "ear_with_hearing_aid"), NewEmoji("nose", []int32{128067}, "nose"), NewEmoji("brain", []int32{129504}, "brain"), NewEmoji("tooth", []int32{129463}, "tooth"), NewEmoji("bone", []int32{129460}, "bone"), NewEmoji("eyes", []int32{128064}, "eyes"), NewEmoji("eye", []int32{128065, 65039}, "eye"), NewEmoji("tongue", []int32{128069}, "tongue"), NewEmoji("mouth", []int32{128068}, "lips"), NewEmoji("baby", []int32{128118}, "baby"), NewEmoji("child", []int32{129490}, "child"), NewEmoji("boy", []int32{128102}, "boy"), NewEmoji("girl", []int32{128103}, "girl"), NewEmoji("person", []int32{129489}, "adult"), NewEmoji("person: blond hair", []int32{128113}, "blond_haired_person"), NewEmoji("man", []int32{128104}, "man"), NewEmoji("man: beard", []int32{129492}, "bearded_person"), NewEmoji("man: red hair", []int32{128104, 8205, 129456}, "red_haired_man"), NewEmoji("man: curly hair", []int32{128104, 8205, 129457}, "curly_haired_man"), NewEmoji("man: white hair", []int32{128104, 8205, 129459}, "white_haired_man"), NewEmoji("man: bald", []int32{128104, 8205, 129458}, "bald_man"), NewEmoji("woman", []int32{128105}, "woman"), NewEmoji("woman: red hair", []int32{128105, 8205, 129456}, "red_haired_woman"), NewEmoji("person: red hair", []int32{129489, 8205, 129456}, "person_red_hair"), NewEmoji("woman: curly hair", []int32{128105, 8205, 129457}, "curly_haired_woman"), NewEmoji("person: curly hair", []int32{129489, 8205, 129457}, "person_curly_hair"), NewEmoji("woman: white hair", []int32{128105, 8205, 129459}, "white_haired_woman"), NewEmoji("person: white hair", []int32{129489, 8205, 129459}, "person_white_hair"), NewEmoji("woman: bald", []int32{128105, 8205, 129458}, "bald_woman"), NewEmoji("person: bald", []int32{129489, 8205, 129458}, "person_bald"), NewEmoji("woman: blond hair", []int32{128113, 8205, 9792, 65039}, "blond_haired_woman"), NewEmoji("man: blond hair", []int32{128113, 8205, 9794, 65039}, "blond_haired_man"), NewEmoji("older person", []int32{129491}, "older_adult"), NewEmoji("old man", []int32{128116}, "older_man"), NewEmoji("old woman", []int32{128117}, "older_woman"), NewEmoji("person frowning", []int32{128589}, "frowning_person"), NewEmoji("man frowning", []int32{128589, 8205, 9794, 65039}, "frowning_man"), NewEmoji("woman frowning", []int32{128589, 8205, 9792, 65039}, "frowning_woman"), NewEmoji("person pouting", []int32{128590}, "pouting_face"), NewEmoji("man pouting", []int32{128590, 8205, 9794, 65039}, "pouting_man"), NewEmoji("woman pouting", []int32{128590, 8205, 9792, 65039}, "pouting_woman"), NewEmoji("person gesturing NO", []int32{128581}, "no_good"), NewEmoji("man gesturing NO", []int32{128581, 8205, 9794, 65039}, "no_good_man"), NewEmoji("woman gesturing NO", []int32{128581, 8205, 9792, 65039}, "no_good_woman"), NewEmoji("person gesturing OK", []int32{128582}, "ok_person"), NewEmoji("man gesturing OK", []int32{128582, 8205, 9794, 65039}, "ok_man"), NewEmoji("woman gesturing OK", []int32{128582, 8205, 9792, 65039}, "ok_woman"), NewEmoji("person tipping hand", []int32{128129}, "tipping_hand_person"), NewEmoji("man tipping hand", []int32{128129, 8205, 9794, 65039}, "tipping_hand_man"), NewEmoji("woman tipping hand", []int32{128129, 8205, 9792, 65039}, "tipping_hand_woman"), NewEmoji("person raising hand", []int32{128587}, "raising_hand"), NewEmoji("man raising hand", []int32{128587, 8205, 9794, 65039}, "raising_hand_man"), NewEmoji("woman raising hand", []int32{128587, 8205, 9792, 65039}, "raising_hand_woman"), NewEmoji("deaf person", []int32{129487}, "deaf_person"), NewEmoji("deaf man", []int32{129487, 8205, 9794, 65039}, "deaf_man"), NewEmoji("deaf woman", []int32{129487, 8205, 9792, 65039}, "deaf_woman"), NewEmoji("person bowing", []int32{128583}, "bow"), NewEmoji("man bowing", []int32{128583, 8205, 9794, 65039}, "bowing_man"), NewEmoji("woman bowing", []int32{128583, 8205, 9792, 65039}, "bowing_woman"), NewEmoji("person facepalming", []int32{129318}, "facepalm"), NewEmoji("man facepalming", []int32{129318, 8205, 9794, 65039}, "man_facepalming"), NewEmoji("woman facepalming", []int32{129318, 8205, 9792, 65039}, "woman_facepalming"), NewEmoji("person shrugging", []int32{129335}, "shrug"), NewEmoji("man shrugging", []int32{129335, 8205, 9794, 65039}, "man_shrugging"), NewEmoji("woman shrugging", []int32{129335, 8205, 9792, 65039}, "woman_shrugging"), NewEmoji("health worker", []int32{129489, 8205, 9877, 65039}, "health_worker"), NewEmoji("man health worker", []int32{128104, 8205, 9877, 65039}, "man_health_worker"), NewEmoji("woman health worker", []int32{128105, 8205, 9877, 65039}, "woman_health_worker"), NewEmoji("student", []int32{129489, 8205, 127891}, "student"), NewEmoji("man student", []int32{128104, 8205, 127891}, "man_student"), NewEmoji("woman student", []int32{128105, 8205, 127891}, "woman_student"), NewEmoji("teacher", []int32{129489, 8205, 127979}, "teacher"), NewEmoji("man teacher", []int32{128104, 8205, 127979}, "man_teacher"), NewEmoji("woman teacher", []int32{128105, 8205, 127979}, "woman_teacher"), NewEmoji("judge", []int32{129489, 8205, 9878, 65039}, "judge"), NewEmoji("man judge", []int32{128104, 8205, 9878, 65039}, "man_judge"), NewEmoji("woman judge", []int32{128105, 8205, 9878, 65039}, "woman_judge"), NewEmoji("farmer", []int32{129489, 8205, 127806}, "farmer"), NewEmoji("man farmer", []int32{128104, 8205, 127806}, "man_farmer"), NewEmoji("woman farmer", []int32{128105, 8205, 127806}, "woman_farmer"), NewEmoji("cook", []int32{129489, 8205, 127859}, "cook"), NewEmoji("man cook", []int32{128104, 8205, 127859}, "man_cook"), NewEmoji("woman cook", []int32{128105, 8205, 127859}, "woman_cook"), NewEmoji("mechanic", []int32{129489, 8205, 128295}, "mechanic"), NewEmoji("man mechanic", []int32{128104, 8205, 128295}, "man_mechanic"), NewEmoji("woman mechanic", []int32{128105, 8205, 128295}, "woman_mechanic"), NewEmoji("factory worker", []int32{129489, 8205, 127981}, "factory_worker"), NewEmoji("man factory worker", []int32{128104, 8205, 127981}, "man_factory_worker"), NewEmoji("woman factory worker", []int32{128105, 8205, 127981}, "woman_factory_worker"), NewEmoji("office worker", []int32{129489, 8205, 128188}, "office_worker"), NewEmoji("man office worker", []int32{128104, 8205, 128188}, "man_office_worker"), NewEmoji("woman office worker", []int32{128105, 8205, 128188}, "woman_office_worker"), NewEmoji("scientist", []int32{129489, 8205, 128300}, "scientist"), NewEmoji("man scientist", []int32{128104, 8205, 128300}, "man_scientist"), NewEmoji("woman scientist", []int32{128105, 8205, 128300}, "woman_scientist"), NewEmoji("technologist", []int32{129489, 8205, 128187}, "technologist"), NewEmoji("man technologist", []int32{128104, 8205, 128187}, "man_technologist"), NewEmoji("woman technologist", []int32{128105, 8205, 128187}, "woman_technologist"), NewEmoji("singer", []int32{129489, 8205, 127908}, "singer"), NewEmoji("man singer", []int32{128104, 8205, 127908}, "man_singer"), NewEmoji("woman singer", []int32{128105, 8205, 127908}, "woman_singer"), NewEmoji("artist", []int32{129489, 8205, 127912}, "artist"), NewEmoji("man artist", []int32{128104, 8205, 127912}, "man_artist"), NewEmoji("woman artist", []int32{128105, 8205, 127912}, "woman_artist"), NewEmoji("pilot", []int32{129489, 8205, 9992, 65039}, "pilot"), NewEmoji("man pilot", []int32{128104, 8205, 9992, 65039}, "man_pilot"), NewEmoji("woman pilot", []int32{128105, 8205, 9992, 65039}, "woman_pilot"), NewEmoji("astronaut", []int32{129489, 8205, 128640}, "astronaut"), NewEmoji("man astronaut", []int32{128104, 8205, 128640}, "man_astronaut"), NewEmoji("woman astronaut", []int32{128105, 8205, 128640}, "woman_astronaut"), NewEmoji("firefighter", []int32{129489, 8205, 128658}, "firefighter"), NewEmoji("man firefighter", []int32{128104, 8205, 128658}, "man_firefighter"), NewEmoji("woman firefighter", []int32{128105, 8205, 128658}, "woman_firefighter"), NewEmoji("police officer", []int32{128110}, "police_officer"), NewEmoji("man police officer", []int32{128110, 8205, 9794, 65039}, "policeman"), NewEmoji("woman police officer", []int32{128110, 8205, 9792, 65039}, "policewoman"), NewEmoji("detective", []int32{128373, 65039}, "detective"), NewEmoji("man detective", []int32{128373, 65039, 8205, 9794, 65039}, "male_detective"), NewEmoji("woman detective", []int32{128373, 65039, 8205, 9792, 65039}, "female_detective"), NewEmoji("guard", []int32{128130}, "guard"), NewEmoji("man guard", []int32{128130, 8205, 9794, 65039}, "guardsman"), NewEmoji("woman guard", []int32{128130, 8205, 9792, 65039}, "guardswoman"), NewEmoji("construction worker", []int32{128119}, "construction_worker"), NewEmoji("man construction worker", []int32{128119, 8205, 9794, 65039}, "construction_worker_man"), NewEmoji("woman construction worker", []int32{128119, 8205, 9792, 65039}, "construction_worker_woman"), NewEmoji("prince", []int32{129332}, "prince"), NewEmoji("princess", []int32{128120}, "princess"), NewEmoji("person wearing turban", []int32{128115}, "person_with_turban"), NewEmoji("man wearing turban", []int32{128115, 8205, 9794, 65039}, "man_with_turban"), NewEmoji("woman wearing turban", []int32{128115, 8205, 9792, 65039}, "woman_with_turban"), NewEmoji("person with skullcap", []int32{128114}, "man_with_gua_pi_mao"), NewEmoji("woman with headscarf", []int32{129493}, "woman_with_headscarf"), NewEmoji("man in tuxedo", []int32{129333, 8205, 9794, 65039}, "man_in_tuxedo"), NewEmoji("woman with veil", []int32{128112, 8205, 9792, 65039}, "bride_with_veil"), NewEmoji("pregnant woman", []int32{129328}, "pregnant_woman"), NewEmoji("breast-feeding", []int32{129329}, "breast_feeding"), NewEmoji("baby angel", []int32{128124}, "angel"), NewEmoji("Santa Claus", []int32{127877}, "santa"), NewEmoji("Mrs. Claus", []int32{129334}, "mrs_claus"), NewEmoji("superhero", []int32{129464}, "superhero"), NewEmoji("man superhero", []int32{129464, 8205, 9794, 65039}, "superhero_man"), NewEmoji("woman superhero", []int32{129464, 8205, 9792, 65039}, "superhero_woman"), NewEmoji("supervillain", []int32{129465}, "supervillain"), NewEmoji("man supervillain", []int32{129465, 8205, 9794, 65039}, "supervillain_man"), NewEmoji("woman supervillain", []int32{129465, 8205, 9792, 65039}, "supervillain_woman"), NewEmoji("mage", []int32{129497}, "mage"), NewEmoji("man mage", []int32{129497, 8205, 9794, 65039}, "mage_man"), NewEmoji("woman mage", []int32{129497, 8205, 9792, 65039}, "mage_woman"), NewEmoji("fairy", []int32{129498}, "fairy"), NewEmoji("man fairy", []int32{129498, 8205, 9794, 65039}, "fairy_man"), NewEmoji("woman fairy", []int32{129498, 8205, 9792, 65039}, "fairy_woman"), NewEmoji("vampire", []int32{129499}, "vampire"), NewEmoji("man vampire", []int32{129499, 8205, 9794, 65039}, "vampire_man"), NewEmoji("woman vampire", []int32{129499, 8205, 9792, 65039}, "vampire_woman"), NewEmoji("merperson", []int32{129500}, "merperson"), NewEmoji("merman", []int32{129500, 8205, 9794, 65039}, "merman"), NewEmoji("mermaid", []int32{129500, 8205, 9792, 65039}, "mermaid"), NewEmoji("elf", []int32{129501}, "elf"), NewEmoji("man elf", []int32{129501, 8205, 9794, 65039}, "elf_man"), NewEmoji("woman elf", []int32{129501, 8205, 9792, 65039}, "elf_woman"), NewEmoji("genie", []int32{129502}, "genie"), NewEmoji("man genie", []int32{129502, 8205, 9794, 65039}, "genie_man"), NewEmoji("woman genie", []int32{129502, 8205, 9792, 65039}, "genie_woman"), NewEmoji("zombie", []int32{129503}, "zombie"), NewEmoji("man zombie", []int32{129503, 8205, 9794, 65039}, "zombie_man"), NewEmoji("woman zombie", []int32{129503, 8205, 9792, 65039}, "zombie_woman"), NewEmoji("person getting massage", []int32{128134}, "massage"), NewEmoji("man getting massage", []int32{128134, 8205, 9794, 65039}, "massage_man"), NewEmoji("woman getting massage", []int32{128134, 8205, 9792, 65039}, "massage_woman"), NewEmoji("person getting haircut", []int32{128135}, "haircut"), NewEmoji("man getting haircut", []int32{128135, 8205, 9794, 65039}, "haircut_man"), NewEmoji("woman getting haircut", []int32{128135, 8205, 9792, 65039}, "haircut_woman"), NewEmoji("person walking", []int32{128694}, "walking"), NewEmoji("man walking", []int32{128694, 8205, 9794, 65039}, "walking_man"), NewEmoji("woman walking", []int32{128694, 8205, 9792, 65039}, "walking_woman"), NewEmoji("person standing", []int32{129485}, "standing_person"), NewEmoji("man standing", []int32{129485, 8205, 9794, 65039}, "standing_man"), NewEmoji("woman standing", []int32{129485, 8205, 9792, 65039}, "standing_woman"), NewEmoji("person kneeling", []int32{129486}, "kneeling_person"), NewEmoji("man kneeling", []int32{129486, 8205, 9794, 65039}, "kneeling_man"), NewEmoji("woman kneeling", []int32{129486, 8205, 9792, 65039}, "kneeling_woman"), NewEmoji("person with white cane", []int32{129489, 8205, 129455}, "person_with_probing_cane"), NewEmoji("man with white cane", []int32{128104, 8205, 129455}, "man_with_probing_cane"), NewEmoji("woman with white cane", []int32{128105, 8205, 129455}, "woman_with_probing_cane"), NewEmoji("person in motorized wheelchair", []int32{129489, 8205, 129468}, "person_in_motorized_wheelchair"), NewEmoji("man in motorized wheelchair", []int32{128104, 8205, 129468}, "man_in_motorized_wheelchair"), NewEmoji("woman in motorized wheelchair", []int32{128105, 8205, 129468}, "woman_in_motorized_wheelchair"), NewEmoji("person in manual wheelchair", []int32{129489, 8205, 129469}, "person_in_manual_wheelchair"), NewEmoji("man in manual wheelchair", []int32{128104, 8205, 129469}, "man_in_manual_wheelchair"), NewEmoji("woman in manual wheelchair", []int32{128105, 8205, 129469}, "woman_in_manual_wheelchair"), NewEmoji("person running", []int32{127939}, "runner"), NewEmoji("man running", []int32{127939, 8205, 9794, 65039}, "running_man"), NewEmoji("woman running", []int32{127939, 8205, 9792, 65039}, "running_woman"), NewEmoji("woman dancing", []int32{128131}, "woman_dancing"), NewEmoji("man dancing", []int32{128378}, "man_dancing"), NewEmoji("person in suit levitating", []int32{128372, 65039}, "business_suit_levitating"), NewEmoji("people with bunny ears", []int32{128111}, "dancers"), NewEmoji("men with bunny ears", []int32{128111, 8205, 9794, 65039}, "dancing_men"), NewEmoji("women with bunny ears", []int32{128111, 8205, 9792, 65039}, "dancing_women"), NewEmoji("person in steamy room", []int32{129494}, "sauna_person"), NewEmoji("man in steamy room", []int32{129494, 8205, 9794, 65039}, "sauna_man"), NewEmoji("woman in steamy room", []int32{129494, 8205, 9792, 65039}, "sauna_woman"), NewEmoji("person climbing", []int32{129495}, "climbing"), NewEmoji("man climbing", []int32{129495, 8205, 9794, 65039}, "climbing_man"), NewEmoji("woman climbing", []int32{129495, 8205, 9792, 65039}, "climbing_woman"), NewEmoji("person fencing", []int32{129338}, "person_fencing"), NewEmoji("horse racing", []int32{127943}, "horse_racing"), NewEmoji("skier", []int32{9975, 65039}, "skier"), NewEmoji("snowboarder", []int32{127938}, "snowboarder"), NewEmoji("person golfing", []int32{127948, 65039}, "golfing"), NewEmoji("man golfing", []int32{127948, 65039, 8205, 9794, 65039}, "golfing_man"), NewEmoji("woman golfing", []int32{127948, 65039, 8205, 9792, 65039}, "golfing_woman"), NewEmoji("person surfing", []int32{127940}, "surfer"), NewEmoji("man surfing", []int32{127940, 8205, 9794, 65039}, "surfing_man"), NewEmoji("woman surfing", []int32{127940, 8205, 9792, 65039}, "surfing_woman"), NewEmoji("person rowing boat", []int32{128675}, "rowboat"), NewEmoji("man rowing boat", []int32{128675, 8205, 9794, 65039}, "rowing_man"), NewEmoji("woman rowing boat", []int32{128675, 8205, 9792, 65039}, "rowing_woman"), NewEmoji("person swimming", []int32{127946}, "swimmer"), NewEmoji("man swimming", []int32{127946, 8205, 9794, 65039}, "swimming_man"), NewEmoji("woman swimming", []int32{127946, 8205, 9792, 65039}, "swimming_woman"), NewEmoji("person bouncing ball", []int32{9977, 65039}, "bouncing_ball_person"), NewEmoji("man bouncing ball", []int32{9977, 65039, 8205, 9794, 65039}, "bouncing_ball_man"), NewEmoji("woman bouncing ball", []int32{9977, 65039, 8205, 9792, 65039}, "bouncing_ball_woman"), NewEmoji("person lifting weights", []int32{127947, 65039}, "weight_lifting"), NewEmoji("man lifting weights", []int32{127947, 65039, 8205, 9794, 65039}, "weight_lifting_man"), NewEmoji("woman lifting weights", []int32{127947, 65039, 8205, 9792, 65039}, "weight_lifting_woman"), NewEmoji("person biking", []int32{128692}, "bicyclist"), NewEmoji("man biking", []int32{128692, 8205, 9794, 65039}, "biking_man"), NewEmoji("woman biking", []int32{128692, 8205, 9792, 65039}, "biking_woman"), NewEmoji("person mountain biking", []int32{128693}, "mountain_bicyclist"), NewEmoji("man mountain biking", []int32{128693, 8205, 9794, 65039}, "mountain_biking_man"), NewEmoji("woman mountain biking", []int32{128693, 8205, 9792, 65039}, "mountain_biking_woman"), NewEmoji("person cartwheeling", []int32{129336}, "cartwheeling"), NewEmoji("man cartwheeling", []int32{129336, 8205, 9794, 65039}, "man_cartwheeling"), NewEmoji("woman cartwheeling", []int32{129336, 8205, 9792, 65039}, "woman_cartwheeling"), NewEmoji("people wrestling", []int32{129340}, "wrestling"), NewEmoji("men wrestling", []int32{129340, 8205, 9794, 65039}, "men_wrestling"), NewEmoji("women wrestling", []int32{129340, 8205, 9792, 65039}, "women_wrestling"), NewEmoji("person playing water polo", []int32{129341}, "water_polo"), NewEmoji("man playing water polo", []int32{129341, 8205, 9794, 65039}, "man_playing_water_polo"), NewEmoji("woman playing water polo", []int32{129341, 8205, 9792, 65039}, "woman_playing_water_polo"), NewEmoji("person playing handball", []int32{129342}, "handball_person"), NewEmoji("man playing handball", []int32{129342, 8205, 9794, 65039}, "man_playing_handball"), NewEmoji("woman playing handball", []int32{129342, 8205, 9792, 65039}, "woman_playing_handball"), NewEmoji("person juggling", []int32{129337}, "juggling_person"), NewEmoji("man juggling", []int32{129337, 8205, 9794, 65039}, "man_juggling"), NewEmoji("woman juggling", []int32{129337, 8205, 9792, 65039}, "woman_juggling"), NewEmoji("person in lotus position", []int32{129496}, "lotus_position"), NewEmoji("man in lotus position", []int32{129496, 8205, 9794, 65039}, "lotus_position_man"), NewEmoji("woman in lotus position", []int32{129496, 8205, 9792, 65039}, "lotus_position_woman"), NewEmoji("person taking bath", []int32{128704}, "bath"), NewEmoji("person in bed", []int32{128716}, "sleeping_bed"), NewEmoji("people holding hands", []int32{129489, 8205, 129309, 8205, 129489}, "people_holding_hands"), NewEmoji("women holding hands", []int32{128109}, "two_women_holding_hands"), NewEmoji("woman and man holding hands", []int32{128107}, "couple"), NewEmoji("men holding hands", []int32{128108}, "two_men_holding_hands"), NewEmoji("kiss", []int32{128143}, "couplekiss"), NewEmoji("kiss: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_woman"), NewEmoji("kiss: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_man"), NewEmoji("kiss: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128105}, "couplekiss_woman_woman"), NewEmoji("couple with heart", []int32{128145}, "couple_with_heart"), NewEmoji("couple with heart: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_woman_man"), NewEmoji("couple with heart: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_man_man"), NewEmoji("couple with heart: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128105}, "couple_with_heart_woman_woman"), NewEmoji("family", []int32{128106}, "family"), NewEmoji("family: man, woman, boy", []int32{128104, 8205, 128105, 8205, 128102}, "family_man_woman_boy"), NewEmoji("family: man, woman, girl", []int32{128104, 8205, 128105, 8205, 128103}, "family_man_woman_girl"), NewEmoji("family: man, woman, girl, boy", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128102}, "family_man_woman_girl_boy"), NewEmoji("family: man, woman, boy, boy", []int32{128104, 8205, 128105, 8205, 128102, 8205, 128102}, "family_man_woman_boy_boy"), NewEmoji("family: man, woman, girl, girl", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128103}, "family_man_woman_girl_girl"), NewEmoji("family: man, man, boy", []int32{128104, 8205, 128104, 8205, 128102}, "family_man_man_boy"), NewEmoji("family: man, man, girl", []int32{128104, 8205, 128104, 8205, 128103}, "family_man_man_girl"), NewEmoji("family: man, man, girl, boy", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128102}, "family_man_man_girl_boy"), NewEmoji("family: man, man, boy, boy", []int32{128104, 8205, 128104, 8205, 128102, 8205, 128102}, "family_man_man_boy_boy"), NewEmoji("family: man, man, girl, girl", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128103}, "family_man_man_girl_girl"), NewEmoji("family: woman, woman, boy", []int32{128105, 8205, 128105, 8205, 128102}, "family_woman_woman_boy"), NewEmoji("family: woman, woman, girl", []int32{128105, 8205, 128105, 8205, 128103}, "family_woman_woman_girl"), NewEmoji("family: woman, woman, girl, boy", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128102}, "family_woman_woman_girl_boy"), NewEmoji("family: woman, woman, boy, boy", []int32{128105, 8205, 128105, 8205, 128102, 8205, 128102}, "family_woman_woman_boy_boy"), NewEmoji("family: woman, woman, girl, girl", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128103}, "family_woman_woman_girl_girl"), NewEmoji("family: man, boy", []int32{128104, 8205, 128102}, "family_man_boy"), NewEmoji("family: man, boy, boy", []int32{128104, 8205, 128102, 8205, 128102}, "family_man_boy_boy"), NewEmoji("family: man, girl", []int32{128104, 8205, 128103}, "family_man_girl"), NewEmoji("family: man, girl, boy", []int32{128104, 8205, 128103, 8205, 128102}, "family_man_girl_boy"), NewEmoji("family: man, girl, girl", []int32{128104, 8205, 128103, 8205, 128103}, "family_man_girl_girl"), NewEmoji("family: woman, boy", []int32{128105, 8205, 128102}, "family_woman_boy"), NewEmoji("family: woman, boy, boy", []int32{128105, 8205, 128102, 8205, 128102}, "family_woman_boy_boy"), NewEmoji("family: woman, girl", []int32{128105, 8205, 128103}, "family_woman_girl"), NewEmoji("family: woman, girl, boy", []int32{128105, 8205, 128103, 8205, 128102}, "family_woman_girl_boy"), NewEmoji("family: woman, girl, girl", []int32{128105, 8205, 128103, 8205, 128103}, "family_woman_girl_girl"), NewEmoji("speaking head", []int32{128483, 65039}, "speaking_head"), NewEmoji("bust in silhouette", []int32{128100}, "bust_in_silhouette"), NewEmoji("busts in silhouette", []int32{128101}, "busts_in_silhouette"), NewEmoji("footprints", []int32{128099}, "footprints"), NewEmoji("monkey face", []int32{128053}, "monkey_face"), NewEmoji("monkey", []int32{128018}, "monkey"), NewEmoji("gorilla", []int32{129421}, "gorilla"), NewEmoji("orangutan", []int32{129447}, "orangutan"), NewEmoji("dog face", []int32{128054}, "dog"), NewEmoji("dog", []int32{128021}, "dog2"), NewEmoji("guide dog", []int32{129454}, "guide_dog"), NewEmoji("service dog", []int32{128021, 8205, 129466}, "service_dog"), NewEmoji("poodle", []int32{128041}, "poodle"), NewEmoji("wolf", []int32{128058}, "wolf"), NewEmoji("fox", []int32{129418}, "fox_face"), NewEmoji("raccoon", []int32{129437}, "raccoon"), NewEmoji("cat face", []int32{128049}, "cat"), NewEmoji("cat", []int32{128008}, "cat2"), NewEmoji("lion", []int32{129409}, "lion"), NewEmoji("tiger face", []int32{128047}, "tiger"), NewEmoji("tiger", []int32{128005}, "tiger2"), NewEmoji("leopard", []int32{128006}, "leopard"), NewEmoji("horse face", []int32{128052}, "horse"), NewEmoji("horse", []int32{128014}, "racehorse"), NewEmoji("unicorn", []int32{129412}, "unicorn"), NewEmoji("zebra", []int32{129427}, "zebra"), NewEmoji("deer", []int32{129420}, "deer"), NewEmoji("cow face", []int32{128046}, "cow"), NewEmoji("ox", []int32{128002}, "ox"), NewEmoji("water buffalo", []int32{128003}, "water_buffalo"), NewEmoji("cow", []int32{128004}, "cow2"), NewEmoji("pig face", []int32{128055}, "pig"), NewEmoji("pig", []int32{128022}, "pig2"), NewEmoji("boar", []int32{128023}, "boar"), NewEmoji("pig nose", []int32{128061}, "pig_nose"), NewEmoji("ram", []int32{128015}, "ram"), NewEmoji("ewe", []int32{128017}, "sheep"), NewEmoji("goat", []int32{128016}, "goat"), NewEmoji("camel", []int32{128042}, "dromedary_camel"), NewEmoji("two-hump camel", []int32{128043}, "camel"), NewEmoji("llama", []int32{129433}, "llama"), NewEmoji("giraffe", []int32{129426}, "giraffe"), NewEmoji("elephant", []int32{128024}, "elephant"), NewEmoji("rhinoceros", []int32{129423}, "rhinoceros"), NewEmoji("hippopotamus", []int32{129435}, "hippopotamus"), NewEmoji("mouse face", []int32{128045}, "mouse"), NewEmoji("mouse", []int32{128001}, "mouse2"), NewEmoji("rat", []int32{128000}, "rat"), NewEmoji("hamster", []int32{128057}, "hamster"), NewEmoji("rabbit face", []int32{128048}, "rabbit"), NewEmoji("rabbit", []int32{128007}, "rabbit2"), NewEmoji("chipmunk", []int32{128063, 65039}, "chipmunk"), NewEmoji("hedgehog", []int32{129428}, "hedgehog"), NewEmoji("bat", []int32{129415}, "bat"), NewEmoji("bear", []int32{128059}, "bear"), NewEmoji("koala", []int32{128040}, "koala"), NewEmoji("panda", []int32{128060}, "panda_face"), NewEmoji("sloth", []int32{129445}, "sloth"), NewEmoji("otter", []int32{129446}, "otter"), NewEmoji("skunk", []int32{129448}, "skunk"), NewEmoji("kangaroo", []int32{129432}, "kangaroo"), NewEmoji("badger", []int32{129441}, "badger"), NewEmoji("paw prints", []int32{128062}, "feet"), NewEmoji("turkey", []int32{129411}, "turkey"), NewEmoji("chicken", []int32{128020}, "chicken"), NewEmoji("rooster", []int32{128019}, "rooster"), NewEmoji("hatching chick", []int32{128035}, "hatching_chick"), NewEmoji("baby chick", []int32{128036}, "baby_chick"), NewEmoji("front-facing baby chick", []int32{128037}, "hatched_chick"), NewEmoji("bird", []int32{128038}, "bird"), NewEmoji("penguin", []int32{128039}, "penguin"), NewEmoji("dove", []int32{128330, 65039}, "dove"), NewEmoji("eagle", []int32{129413}, "eagle"), NewEmoji("duck", []int32{129414}, "duck"), NewEmoji("swan", []int32{129442}, "swan"), NewEmoji("owl", []int32{129417}, "owl"), NewEmoji("flamingo", []int32{129449}, "flamingo"), NewEmoji("peacock", []int32{129434}, "peacock"), NewEmoji("parrot", []int32{129436}, "parrot"), NewEmoji("frog", []int32{128056}, "frog"), NewEmoji("crocodile", []int32{128010}, "crocodile"), NewEmoji("turtle", []int32{128034}, "turtle"), NewEmoji("lizard", []int32{129422}, "lizard"), NewEmoji("snake", []int32{128013}, "snake"), NewEmoji("dragon face", []int32{128050}, "dragon_face"), NewEmoji("dragon", []int32{128009}, "dragon"), NewEmoji("sauropod", []int32{129429}, "sauropod"), NewEmoji("T-Rex", []int32{129430}, "t-rex"), NewEmoji("spouting whale", []int32{128051}, "whale"), NewEmoji("whale", []int32{128011}, "whale2"), NewEmoji("dolphin", []int32{128044}, "dolphin"), NewEmoji("fish", []int32{128031}, "fish"), NewEmoji("tropical fish", []int32{128032}, "tropical_fish"), NewEmoji("blowfish", []int32{128033}, "blowfish"), NewEmoji("shark", []int32{129416}, "shark"), NewEmoji("octopus", []int32{128025}, "octopus"), NewEmoji("spiral shell", []int32{128026}, "shell"), NewEmoji("snail", []int32{128012}, "snail"), NewEmoji("butterfly", []int32{129419}, "butterfly"), NewEmoji("bug", []int32{128027}, "bug"), NewEmoji("ant", []int32{128028}, "ant"), NewEmoji("honeybee", []int32{128029}, "bee"), NewEmoji("beetle", []int32{129714}, "beetle"), NewEmoji("cricket", []int32{129431}, "cricket"), NewEmoji("spider", []int32{128375, 65039}, "spider"), NewEmoji("spider web", []int32{128376, 65039}, "spider_web"), NewEmoji("scorpion", []int32{129410}, "scorpion"), NewEmoji("mosquito", []int32{129439}, "mosquito"), NewEmoji("microbe", []int32{129440}, "microbe"), NewEmoji("bouquet", []int32{128144}, "bouquet"), NewEmoji("cherry blossom", []int32{127800}, "cherry_blossom"), NewEmoji("white flower", []int32{128174}, "white_flower"), NewEmoji("rosette", []int32{127989, 65039}, "rosette"), NewEmoji("rose", []int32{127801}, "rose"), NewEmoji("wilted flower", []int32{129344}, "wilted_flower"), NewEmoji("hibiscus", []int32{127802}, "hibiscus"), NewEmoji("sunflower", []int32{127803}, "sunflower"), NewEmoji("blossom", []int32{127804}, "blossom"), NewEmoji("tulip", []int32{127799}, "tulip"), NewEmoji("seedling", []int32{127793}, "seedling"), NewEmoji("evergreen tree", []int32{127794}, "evergreen_tree"), NewEmoji("deciduous tree", []int32{127795}, "deciduous_tree"), NewEmoji("palm tree", []int32{127796}, "palm_tree"), NewEmoji("cactus", []int32{127797}, "cactus"), NewEmoji("sheaf of rice", []int32{127806}, "ear_of_rice"), NewEmoji("herb", []int32{127807}, "herb"), NewEmoji("shamrock", []int32{9752, 65039}, "shamrock"), NewEmoji("four leaf clover", []int32{127808}, "four_leaf_clover"), NewEmoji("maple leaf", []int32{127809}, "maple_leaf"), NewEmoji("fallen leaf", []int32{127810}, "fallen_leaf"), NewEmoji("leaf fluttering in wind", []int32{127811}, "leaves"), NewEmoji("grapes", []int32{127815}, "grapes"), NewEmoji("melon", []int32{127816}, "melon"), NewEmoji("watermelon", []int32{127817}, "watermelon"), NewEmoji("tangerine", []int32{127818}, "tangerine"), NewEmoji("lemon", []int32{127819}, "lemon"), NewEmoji("banana", []int32{127820}, "banana"), NewEmoji("pineapple", []int32{127821}, "pineapple"), NewEmoji("mango", []int32{129389}, "mango"), NewEmoji("red apple", []int32{127822}, "apple"), NewEmoji("green apple", []int32{127823}, "green_apple"), NewEmoji("pear", []int32{127824}, "pear"), NewEmoji("peach", []int32{127825}, "peach"), NewEmoji("cherries", []int32{127826}, "cherries"), NewEmoji("strawberry", []int32{127827}, "strawberry"), NewEmoji("kiwi fruit", []int32{129373}, "kiwi_fruit"), NewEmoji("tomato", []int32{127813}, "tomato"), NewEmoji("coconut", []int32{129381}, "coconut"), NewEmoji("avocado", []int32{129361}, "avocado"), NewEmoji("eggplant", []int32{127814}, "eggplant"), NewEmoji("potato", []int32{129364}, "potato"), NewEmoji("carrot", []int32{129365}, "carrot"), NewEmoji("ear of corn", []int32{127805}, "corn"), NewEmoji("hot pepper", []int32{127798, 65039}, "hot_pepper"), NewEmoji("cucumber", []int32{129362}, "cucumber"), NewEmoji("leafy green", []int32{129388}, "leafy_green"), NewEmoji("broccoli", []int32{129382}, "broccoli"), NewEmoji("garlic", []int32{129476}, "garlic"), NewEmoji("onion", []int32{129477}, "onion"), NewEmoji("mushroom", []int32{127812}, "mushroom"), NewEmoji("peanuts", []int32{129372}, "peanuts"), NewEmoji("chestnut", []int32{127792}, "chestnut"), NewEmoji("bread", []int32{127838}, "bread"), NewEmoji("croissant", []int32{129360}, "croissant"), NewEmoji("baguette bread", []int32{129366}, "baguette_bread"), NewEmoji("pretzel", []int32{129384}, "pretzel"), NewEmoji("bagel", []int32{129391}, "bagel"), NewEmoji("pancakes", []int32{129374}, "pancakes"), NewEmoji("waffle", []int32{129479}, "waffle"), NewEmoji("cheese wedge", []int32{129472}, "cheese"), NewEmoji("meat on bone", []int32{127830}, "meat_on_bone"), NewEmoji("poultry leg", []int32{127831}, "poultry_leg"), NewEmoji("cut of meat", []int32{129385}, "cut_of_meat"), NewEmoji("bacon", []int32{129363}, "bacon"), NewEmoji("hamburger", []int32{127828}, "hamburger"), NewEmoji("french fries", []int32{127839}, "fries"), NewEmoji("pizza", []int32{127829}, "pizza"), NewEmoji("hot dog", []int32{127789}, "hotdog"), NewEmoji("sandwich", []int32{129386}, "sandwich"), NewEmoji("taco", []int32{127790}, "taco"), NewEmoji("burrito", []int32{127791}, "burrito"), NewEmoji("stuffed flatbread", []int32{129369}, "stuffed_flatbread"), NewEmoji("falafel", []int32{129478}, "falafel"), NewEmoji("egg", []int32{129370}, "egg"), NewEmoji("cooking", []int32{127859}, "fried_egg"), NewEmoji("shallow pan of food", []int32{129368}, "shallow_pan_of_food"), NewEmoji("pot of food", []int32{127858}, "stew"), NewEmoji("bowl with spoon", []int32{129379}, "bowl_with_spoon"), NewEmoji("green salad", []int32{129367}, "green_salad"), NewEmoji("popcorn", []int32{127871}, "popcorn"), NewEmoji("butter", []int32{129480}, "butter"), NewEmoji("salt", []int32{129474}, "salt"), NewEmoji("canned food", []int32{129387}, "canned_food"), NewEmoji("bento box", []int32{127857}, "bento"), NewEmoji("rice cracker", []int32{127832}, "rice_cracker"), NewEmoji("rice ball", []int32{127833}, "rice_ball"), NewEmoji("cooked rice", []int32{127834}, "rice"), NewEmoji("curry rice", []int32{127835}, "curry"), NewEmoji("steaming bowl", []int32{127836}, "ramen"), NewEmoji("spaghetti", []int32{127837}, "spaghetti"), NewEmoji("roasted sweet potato", []int32{127840}, "sweet_potato"), NewEmoji("oden", []int32{127842}, "oden"), NewEmoji("sushi", []int32{127843}, "sushi"), NewEmoji("fried shrimp", []int32{127844}, "fried_shrimp"), NewEmoji("fish cake with swirl", []int32{127845}, "fish_cake"), NewEmoji("moon cake", []int32{129390}, "moon_cake"), NewEmoji("dango", []int32{127841}, "dango"), NewEmoji("dumpling", []int32{129375}, "dumpling"), NewEmoji("fortune cookie", []int32{129376}, "fortune_cookie"), NewEmoji("takeout box", []int32{129377}, "takeout_box"), NewEmoji("crab", []int32{129408}, "crab"), NewEmoji("lobster", []int32{129438}, "lobster"), NewEmoji("shrimp", []int32{129424}, "shrimp"), NewEmoji("squid", []int32{129425}, "squid"), NewEmoji("oyster", []int32{129450}, "oyster"), NewEmoji("soft ice cream", []int32{127846}, "icecream"), NewEmoji("shaved ice", []int32{127847}, "shaved_ice"), NewEmoji("ice cream", []int32{127848}, "ice_cream"), NewEmoji("doughnut", []int32{127849}, "doughnut"), NewEmoji("cookie", []int32{127850}, "cookie"), NewEmoji("birthday cake", []int32{127874}, "birthday"), NewEmoji("shortcake", []int32{127856}, "cake"), NewEmoji("cupcake", []int32{129473}, "cupcake"), NewEmoji("pie", []int32{129383}, "pie"), NewEmoji("chocolate bar", []int32{127851}, "chocolate_bar"), NewEmoji("candy", []int32{127852}, "candy"), NewEmoji("lollipop", []int32{127853}, "lollipop"), NewEmoji("custard", []int32{127854}, "custard"), NewEmoji("honey pot", []int32{127855}, "honey_pot"), NewEmoji("baby bottle", []int32{127868}, "baby_bottle"), NewEmoji("glass of milk", []int32{129371}, "milk_glass"), NewEmoji("hot beverage", []int32{9749}, "coffee"), NewEmoji("teacup without handle", []int32{127861}, "tea"), NewEmoji("sake", []int32{127862}, "sake"), NewEmoji("bottle with popping cork", []int32{127870}, "champagne"), NewEmoji("wine glass", []int32{127863}, "wine_glass"), NewEmoji("cocktail glass", []int32{127864}, "cocktail"), NewEmoji("tropical drink", []int32{127865}, "tropical_drink"), NewEmoji("beer mug", []int32{127866}, "beer"), NewEmoji("clinking beer mugs", []int32{127867}, "beers"), NewEmoji("clinking glasses", []int32{129346}, "clinking_glasses"), NewEmoji("tumbler glass", []int32{129347}, "tumbler_glass"), NewEmoji("cup with straw", []int32{129380}, "cup_with_straw"), NewEmoji("beverage box", []int32{129475}, "beverage_box"), NewEmoji("mate", []int32{129481}, "mate"), NewEmoji("ice", []int32{129482}, "ice_cube"), NewEmoji("chopsticks", []int32{129378}, "chopsticks"), NewEmoji("fork and knife with plate", []int32{127869, 65039}, "plate_with_cutlery"), NewEmoji("fork and knife", []int32{127860}, "fork_and_knife"), NewEmoji("spoon", []int32{129348}, "spoon"), NewEmoji("kitchen knife", []int32{128298}, "hocho"), NewEmoji("amphora", []int32{127994}, "amphora"), NewEmoji("globe showing Europe-Africa", []int32{127757}, "earth_africa"), NewEmoji("globe showing Americas", []int32{127758}, "earth_americas"), NewEmoji("globe showing Asia-Australia", []int32{127759}, "earth_asia"), NewEmoji("globe with meridians", []int32{127760}, "globe_with_meridians"), NewEmoji("world map", []int32{128506, 65039}, "world_map"), NewEmoji("map of Japan", []int32{128510}, "japan"), NewEmoji("compass", []int32{129517}, "compass"), NewEmoji("snow-capped mountain", []int32{127956, 65039}, "mountain_snow"), NewEmoji("mountain", []int32{9968, 65039}, "mountain"), NewEmoji("volcano", []int32{127755}, "volcano"), NewEmoji("mount fuji", []int32{128507}, "mount_fuji"), NewEmoji("camping", []int32{127957, 65039}, "camping"), NewEmoji("beach with umbrella", []int32{127958, 65039}, "beach_umbrella"), NewEmoji("desert", []int32{127964, 65039}, "desert"), NewEmoji("desert island", []int32{127965, 65039}, "desert_island"), NewEmoji("national park", []int32{127966, 65039}, "national_park"), NewEmoji("stadium", []int32{127967, 65039}, "stadium"), NewEmoji("classical building", []int32{127963, 65039}, "classical_building"), NewEmoji("building construction", []int32{127959, 65039}, "building_construction"), NewEmoji("brick", []int32{129521}, "bricks"), NewEmoji("houses", []int32{127960, 65039}, "houses"), NewEmoji("derelict house", []int32{127962, 65039}, "derelict_house"), NewEmoji("house", []int32{127968}, "house"), NewEmoji("house with garden", []int32{127969}, "house_with_garden"), NewEmoji("office building", []int32{127970}, "office"), NewEmoji("Japanese post office", []int32{127971}, "post_office"), NewEmoji("post office", []int32{127972}, "european_post_office"), NewEmoji("hospital", []int32{127973}, "hospital"), NewEmoji("bank", []int32{127974}, "bank"), NewEmoji("hotel", []int32{127976}, "hotel"), NewEmoji("love hotel", []int32{127977}, "love_hotel"), NewEmoji("convenience store", []int32{127978}, "convenience_store"), NewEmoji("school", []int32{127979}, "school"), NewEmoji("department store", []int32{127980}, "department_store"), NewEmoji("factory", []int32{127981}, "factory"), NewEmoji("Japanese castle", []int32{127983}, "japanese_castle"), NewEmoji("castle", []int32{127984}, "european_castle"), NewEmoji("wedding", []int32{128146}, "wedding"), NewEmoji("Tokyo tower", []int32{128508}, "tokyo_tower"), NewEmoji("Statue of Liberty", []int32{128509}, "statue_of_liberty"), NewEmoji("church", []int32{9962}, "church"), NewEmoji("mosque", []int32{128332}, "mosque"), NewEmoji("hindu temple", []int32{128725}, "hindu_temple"), NewEmoji("synagogue", []int32{128333}, "synagogue"), NewEmoji("shinto shrine", []int32{9961, 65039}, "shinto_shrine"), NewEmoji("kaaba", []int32{128331}, "kaaba"), NewEmoji("fountain", []int32{9970}, "fountain"), NewEmoji("tent", []int32{9978}, "tent"), NewEmoji("foggy", []int32{127745}, "foggy"), NewEmoji("night with stars", []int32{127747}, "night_with_stars"), NewEmoji("cityscape", []int32{127961, 65039}, "cityscape"), NewEmoji("sunrise over mountains", []int32{127748}, "sunrise_over_mountains"), NewEmoji("sunrise", []int32{127749}, "sunrise"), NewEmoji("cityscape at dusk", []int32{127750}, "city_sunset"), NewEmoji("sunset", []int32{127751}, "city_sunrise"), NewEmoji("bridge at night", []int32{127753}, "bridge_at_night"), NewEmoji("hot springs", []int32{9832, 65039}, "hotsprings"), NewEmoji("carousel horse", []int32{127904}, "carousel_horse"), NewEmoji("ferris wheel", []int32{127905}, "ferris_wheel"), NewEmoji("roller coaster", []int32{127906}, "roller_coaster"), NewEmoji("barber pole", []int32{128136}, "barber"), NewEmoji("circus tent", []int32{127914}, "circus_tent"), NewEmoji("locomotive", []int32{128642}, "steam_locomotive"), NewEmoji("railway car", []int32{128643}, "railway_car"), NewEmoji("high-speed train", []int32{128644}, "bullettrain_side"), NewEmoji("bullet train", []int32{128645}, "bullettrain_front"), NewEmoji("train", []int32{128646}, "train2"), NewEmoji("metro", []int32{128647}, "metro"), NewEmoji("light rail", []int32{128648}, "light_rail"), NewEmoji("station", []int32{128649}, "station"), NewEmoji("tram", []int32{128650}, "tram"), NewEmoji("monorail", []int32{128669}, "monorail"), NewEmoji("mountain railway", []int32{128670}, "mountain_railway"), NewEmoji("tram car", []int32{128651}, "train"), NewEmoji("bus", []int32{128652}, "bus"), NewEmoji("oncoming bus", []int32{128653}, "oncoming_bus"), NewEmoji("trolleybus", []int32{128654}, "trolleybus"), NewEmoji("minibus", []int32{128656}, "minibus"), NewEmoji("ambulance", []int32{128657}, "ambulance"), NewEmoji("fire engine", []int32{128658}, "fire_engine"), NewEmoji("police car", []int32{128659}, "police_car"), NewEmoji("oncoming police car", []int32{128660}, "oncoming_police_car"), NewEmoji("taxi", []int32{128661}, "taxi"), NewEmoji("oncoming taxi", []int32{128662}, "oncoming_taxi"), NewEmoji("automobile", []int32{128663}, "car"), NewEmoji("oncoming automobile", []int32{128664}, "oncoming_automobile"), NewEmoji("sport utility vehicle", []int32{128665}, "blue_car"), NewEmoji("delivery truck", []int32{128666}, "truck"), NewEmoji("articulated lorry", []int32{128667}, "articulated_lorry"), NewEmoji("tractor", []int32{128668}, "tractor"), NewEmoji("racing car", []int32{127950, 65039}, "racing_car"), NewEmoji("motorcycle", []int32{127949, 65039}, "motorcycle"), NewEmoji("motor scooter", []int32{128757}, "motor_scooter"), NewEmoji("manual wheelchair", []int32{129469}, "manual_wheelchair"), NewEmoji("motorized wheelchair", []int32{129468}, "motorized_wheelchair"), NewEmoji("auto rickshaw", []int32{128762}, "auto_rickshaw"), NewEmoji("bicycle", []int32{128690}, "bike"), NewEmoji("kick scooter", []int32{128756}, "kick_scooter"), NewEmoji("skateboard", []int32{128761}, "skateboard"), NewEmoji("bus stop", []int32{128655}, "busstop"), NewEmoji("motorway", []int32{128739, 65039}, "motorway"), NewEmoji("railway track", []int32{128740, 65039}, "railway_track"), NewEmoji("oil drum", []int32{128738, 65039}, "oil_drum"), NewEmoji("fuel pump", []int32{9981}, "fuelpump"), NewEmoji("police car light", []int32{128680}, "rotating_light"), NewEmoji("horizontal traffic light", []int32{128677}, "traffic_light"), NewEmoji("vertical traffic light", []int32{128678}, "vertical_traffic_light"), NewEmoji("stop sign", []int32{128721}, "stop_sign"), NewEmoji("construction", []int32{128679}, "construction"), NewEmoji("anchor", []int32{9875}, "anchor"), NewEmoji("sailboat", []int32{9973}, "boat"), NewEmoji("canoe", []int32{128758}, "canoe"), NewEmoji("speedboat", []int32{128676}, "speedboat"), NewEmoji("passenger ship", []int32{128755, 65039}, "passenger_ship"), NewEmoji("ferry", []int32{9972, 65039}, "ferry"), NewEmoji("motor boat", []int32{128741, 65039}, "motor_boat"), NewEmoji("ship", []int32{128674}, "ship"), NewEmoji("airplane", []int32{9992, 65039}, "airplane"), NewEmoji("small airplane", []int32{128745, 65039}, "small_airplane"), NewEmoji("airplane departure", []int32{128747}, "flight_departure"), NewEmoji("airplane arrival", []int32{128748}, "flight_arrival"), NewEmoji("parachute", []int32{129666}, "parachute"), NewEmoji("seat", []int32{128186}, "seat"), NewEmoji("helicopter", []int32{128641}, "helicopter"), NewEmoji("suspension railway", []int32{128671}, "suspension_railway"), NewEmoji("mountain cableway", []int32{128672}, "mountain_cableway"), NewEmoji("aerial tramway", []int32{128673}, "aerial_tramway"), NewEmoji("satellite", []int32{128752, 65039}, "artificial_satellite"), NewEmoji("rocket", []int32{128640}, "rocket"), NewEmoji("flying saucer", []int32{128760}, "flying_saucer"), NewEmoji("bellhop bell", []int32{128718, 65039}, "bellhop_bell"), NewEmoji("luggage", []int32{129523}, "luggage"), NewEmoji("hourglass done", []int32{8987}, "hourglass"), NewEmoji("hourglass not done", []int32{9203}, "hourglass_flowing_sand"), NewEmoji("watch", []int32{8986}, "watch"), NewEmoji("alarm clock", []int32{9200}, "alarm_clock"), NewEmoji("stopwatch", []int32{9201, 65039}, "stopwatch"), NewEmoji("timer clock", []int32{9202, 65039}, "timer_clock"), NewEmoji("mantelpiece clock", []int32{128368, 65039}, "mantelpiece_clock"), NewEmoji("twelve o’clock", []int32{128347}, "clock12"), NewEmoji("twelve-thirty", []int32{128359}, "clock1230"), NewEmoji("one o’clock", []int32{128336}, "clock1"), NewEmoji("one-thirty", []int32{128348}, "clock130"), NewEmoji("two o’clock", []int32{128337}, "clock2"), NewEmoji("two-thirty", []int32{128349}, "clock230"), NewEmoji("three o’clock", []int32{128338}, "clock3"), NewEmoji("three-thirty", []int32{128350}, "clock330"), NewEmoji("four o’clock", []int32{128339}, "clock4"), NewEmoji("four-thirty", []int32{128351}, "clock430"), NewEmoji("five o’clock", []int32{128340}, "clock5"), NewEmoji("five-thirty", []int32{128352}, "clock530"), NewEmoji("six o’clock", []int32{128341}, "clock6"), NewEmoji("six-thirty", []int32{128353}, "clock630"), NewEmoji("seven o’clock", []int32{128342}, "clock7"), NewEmoji("seven-thirty", []int32{128354}, "clock730"), NewEmoji("eight o’clock", []int32{128343}, "clock8"), NewEmoji("eight-thirty", []int32{128355}, "clock830"), NewEmoji("nine o’clock", []int32{128344}, "clock9"), NewEmoji("nine-thirty", []int32{128356}, "clock930"), NewEmoji("ten o’clock", []int32{128345}, "clock10"), NewEmoji("ten-thirty", []int32{128357}, "clock1030"), NewEmoji("eleven o’clock", []int32{128346}, "clock11"), NewEmoji("eleven-thirty", []int32{128358}, "clock1130"), NewEmoji("new moon", []int32{127761}, "new_moon"), NewEmoji("waxing crescent moon", []int32{127762}, "waxing_crescent_moon"), NewEmoji("first quarter moon", []int32{127763}, "first_quarter_moon"), NewEmoji("waxing gibbous moon", []int32{127764}, "moon"), NewEmoji("full moon", []int32{127765}, "full_moon"), NewEmoji("waning gibbous moon", []int32{127766}, "waning_gibbous_moon"), NewEmoji("last quarter moon", []int32{127767}, "last_quarter_moon"), NewEmoji("waning crescent moon", []int32{127768}, "waning_crescent_moon"), NewEmoji("crescent moon", []int32{127769}, "crescent_moon"), NewEmoji("new moon face", []int32{127770}, "new_moon_with_face"), NewEmoji("first quarter moon face", []int32{127771}, "first_quarter_moon_with_face"), NewEmoji("last quarter moon face", []int32{127772}, "last_quarter_moon_with_face"), NewEmoji("thermometer", []int32{127777, 65039}, "thermometer"), NewEmoji("sun", []int32{9728, 65039}, "sunny"), NewEmoji("full moon face", []int32{127773}, "full_moon_with_face"), NewEmoji("sun with face", []int32{127774}, "sun_with_face"), NewEmoji("ringed planet", []int32{129680}, "ringed_planet"), NewEmoji("star", []int32{11088}, "star"), NewEmoji("glowing star", []int32{127775}, "star2"), NewEmoji("shooting star", []int32{127776}, "stars"), NewEmoji("milky way", []int32{127756}, "milky_way"), NewEmoji("cloud", []int32{9729, 65039}, "cloud"), NewEmoji("sun behind cloud", []int32{9925}, "partly_sunny"), NewEmoji("cloud with lightning and rain", []int32{9928, 65039}, "cloud_with_lightning_and_rain"), NewEmoji("sun behind small cloud", []int32{127780, 65039}, "sun_behind_small_cloud"), NewEmoji("sun behind large cloud", []int32{127781, 65039}, "sun_behind_large_cloud"), NewEmoji("sun behind rain cloud", []int32{127782, 65039}, "sun_behind_rain_cloud"), NewEmoji("cloud with rain", []int32{127783, 65039}, "cloud_with_rain"), NewEmoji("cloud with snow", []int32{127784, 65039}, "cloud_with_snow"), NewEmoji("cloud with lightning", []int32{127785, 65039}, "cloud_with_lightning"), NewEmoji("tornado", []int32{127786, 65039}, "tornado"), NewEmoji("fog", []int32{127787, 65039}, "fog"), NewEmoji("wind face", []int32{127788, 65039}, "wind_face"), NewEmoji("cyclone", []int32{127744}, "cyclone"), NewEmoji("rainbow", []int32{127752}, "rainbow"), NewEmoji("closed umbrella", []int32{127746}, "closed_umbrella"), NewEmoji("umbrella", []int32{9730, 65039}, "open_umbrella"), NewEmoji("umbrella with rain drops", []int32{9748}, "umbrella"), NewEmoji("umbrella on ground", []int32{9969, 65039}, "parasol_on_ground"), NewEmoji("high voltage", []int32{9889}, "zap"), NewEmoji("snowflake", []int32{10052, 65039}, "snowflake"), NewEmoji("snowman", []int32{9731, 65039}, "snowman_with_snow"), NewEmoji("snowman without snow", []int32{9924}, "snowman"), NewEmoji("comet", []int32{9732, 65039}, "comet"), NewEmoji("fire", []int32{128293}, "fire"), NewEmoji("droplet", []int32{128167}, "droplet"), NewEmoji("water wave", []int32{127754}, "ocean"), NewEmoji("jack-o-lantern", []int32{127875}, "jack_o_lantern"), NewEmoji("Christmas tree", []int32{127876}, "christmas_tree"), NewEmoji("fireworks", []int32{127878}, "fireworks"), NewEmoji("sparkler", []int32{127879}, "sparkler"), NewEmoji("firecracker", []int32{129512}, "firecracker"), NewEmoji("sparkles", []int32{10024}, "sparkles"), NewEmoji("balloon", []int32{127880}, "balloon"), NewEmoji("party popper", []int32{127881}, "tada"), NewEmoji("confetti ball", []int32{127882}, "confetti_ball"), NewEmoji("tanabata tree", []int32{127883}, "tanabata_tree"), NewEmoji("pine decoration", []int32{127885}, "bamboo"), NewEmoji("Japanese dolls", []int32{127886}, "dolls"), NewEmoji("carp streamer", []int32{127887}, "flags"), NewEmoji("wind chime", []int32{127888}, "wind_chime"), NewEmoji("moon viewing ceremony", []int32{127889}, "rice_scene"), NewEmoji("red envelope", []int32{129511}, "red_envelope"), NewEmoji("ribbon", []int32{127872}, "ribbon"), NewEmoji("wrapped gift", []int32{127873}, "gift"), NewEmoji("reminder ribbon", []int32{127895, 65039}, "reminder_ribbon"), NewEmoji("admission tickets", []int32{127903, 65039}, "tickets"), NewEmoji("ticket", []int32{127915}, "ticket"), NewEmoji("military medal", []int32{127894, 65039}, "medal_military"), NewEmoji("trophy", []int32{127942}, "trophy"), NewEmoji("sports medal", []int32{127941}, "medal_sports"), NewEmoji("1st place medal", []int32{129351}, "1st_place_medal"), NewEmoji("2nd place medal", []int32{129352}, "2nd_place_medal"), NewEmoji("3rd place medal", []int32{129353}, "3rd_place_medal"), NewEmoji("soccer ball", []int32{9917}, "soccer"), NewEmoji("baseball", []int32{9918}, "baseball"), NewEmoji("softball", []int32{129358}, "softball"), NewEmoji("basketball", []int32{127936}, "basketball"), NewEmoji("volleyball", []int32{127952}, "volleyball"), NewEmoji("american football", []int32{127944}, "football"), NewEmoji("rugby football", []int32{127945}, "rugby_football"), NewEmoji("tennis", []int32{127934}, "tennis"), NewEmoji("flying disc", []int32{129359}, "flying_disc"), NewEmoji("bowling", []int32{127923}, "bowling"), NewEmoji("cricket game", []int32{127951}, "cricket_game"), NewEmoji("field hockey", []int32{127953}, "field_hockey"), NewEmoji("ice hockey", []int32{127954}, "ice_hockey"), NewEmoji("lacrosse", []int32{129357}, "lacrosse"), NewEmoji("ping pong", []int32{127955}, "ping_pong"), NewEmoji("badminton", []int32{127992}, "badminton"), NewEmoji("boxing glove", []int32{129354}, "boxing_glove"), NewEmoji("martial arts uniform", []int32{129355}, "martial_arts_uniform"), NewEmoji("goal net", []int32{129349}, "goal_net"), NewEmoji("flag in hole", []int32{9971}, "golf"), NewEmoji("ice skate", []int32{9976, 65039}, "ice_skate"), NewEmoji("fishing pole", []int32{127907}, "fishing_pole_and_fish"), NewEmoji("diving mask", []int32{129343}, "diving_mask"), NewEmoji("running shirt", []int32{127933}, "running_shirt_with_sash"), NewEmoji("skis", []int32{127935}, "ski"), NewEmoji("sled", []int32{128759}, "sled"), NewEmoji("curling stone", []int32{129356}, "curling_stone"), NewEmoji("direct hit", []int32{127919}, "dart"), NewEmoji("yo-yo", []int32{129664}, "yo_yo"), NewEmoji("kite", []int32{129665}, "kite"), NewEmoji("pool 8 ball", []int32{127921}, "8ball"), NewEmoji("crystal ball", []int32{128302}, "crystal_ball"), NewEmoji("nazar amulet", []int32{129535}, "nazar_amulet"), NewEmoji("video game", []int32{127918}, "video_game"), NewEmoji("joystick", []int32{128377, 65039}, "joystick"), NewEmoji("slot machine", []int32{127920}, "slot_machine"), NewEmoji("game die", []int32{127922}, "game_die"), NewEmoji("puzzle piece", []int32{129513}, "jigsaw"), NewEmoji("teddy bear", []int32{129528}, "teddy_bear"), NewEmoji("spade suit", []int32{9824, 65039}, "spades"), NewEmoji("heart suit", []int32{9829, 65039}, "hearts"), NewEmoji("diamond suit", []int32{9830, 65039}, "diamonds"), NewEmoji("club suit", []int32{9827, 65039}, "clubs"), NewEmoji("chess pawn", []int32{9823, 65039}, "chess_pawn"), NewEmoji("joker", []int32{127183}, "black_joker"), NewEmoji("mahjong red dragon", []int32{126980}, "mahjong"), NewEmoji("flower playing cards", []int32{127924}, "flower_playing_cards"), NewEmoji("performing arts", []int32{127917}, "performing_arts"), NewEmoji("framed picture", []int32{128444, 65039}, "framed_picture"), NewEmoji("artist palette", []int32{127912}, "art"), NewEmoji("thread", []int32{129525}, "thread"), NewEmoji("yarn", []int32{129526}, "yarn"), NewEmoji("glasses", []int32{128083}, "eyeglasses"), NewEmoji("sunglasses", []int32{128374, 65039}, "dark_sunglasses"), NewEmoji("goggles", []int32{129405}, "goggles"), NewEmoji("lab coat", []int32{129404}, "lab_coat"), NewEmoji("safety vest", []int32{129466}, "safety_vest"), NewEmoji("necktie", []int32{128084}, "necktie"), NewEmoji("t-shirt", []int32{128085}, "shirt"), NewEmoji("jeans", []int32{128086}, "jeans"), NewEmoji("scarf", []int32{129507}, "scarf"), NewEmoji("gloves", []int32{129508}, "gloves"), NewEmoji("coat", []int32{129509}, "coat"), NewEmoji("socks", []int32{129510}, "socks"), NewEmoji("dress", []int32{128087}, "dress"), NewEmoji("kimono", []int32{128088}, "kimono"), NewEmoji("sari", []int32{129403}, "sari"), NewEmoji("one-piece swimsuit", []int32{129649}, "one_piece_swimsuit"), NewEmoji("briefs", []int32{129650}, "swim_brief"), NewEmoji("shorts", []int32{129651}, "shorts"), NewEmoji("bikini", []int32{128089}, "bikini"), NewEmoji("woman’s clothes", []int32{128090}, "womans_clothes"), NewEmoji("purse", []int32{128091}, "purse"), NewEmoji("handbag", []int32{128092}, "handbag"), NewEmoji("clutch bag", []int32{128093}, "pouch"), NewEmoji("shopping bags", []int32{128717, 65039}, "shopping"), NewEmoji("backpack", []int32{127890}, "school_satchel"), NewEmoji("man’s shoe", []int32{128094}, "mans_shoe"), NewEmoji("running shoe", []int32{128095}, "athletic_shoe"), NewEmoji("hiking boot", []int32{129406}, "hiking_boot"), NewEmoji("flat shoe", []int32{129407}, "flat_shoe"), NewEmoji("high-heeled shoe", []int32{128096}, "high_heel"), NewEmoji("woman’s sandal", []int32{128097}, "sandal"), NewEmoji("ballet shoes", []int32{129648}, "ballet_shoes"), NewEmoji("woman’s boot", []int32{128098}, "boot"), NewEmoji("crown", []int32{128081}, "crown"), NewEmoji("woman’s hat", []int32{128082}, "womans_hat"), NewEmoji("top hat", []int32{127913}, "tophat"), NewEmoji("graduation cap", []int32{127891}, "mortar_board"), NewEmoji("billed cap", []int32{129506}, "billed_cap"), NewEmoji("rescue worker’s helmet", []int32{9937, 65039}, "rescue_worker_helmet"), NewEmoji("prayer beads", []int32{128255}, "prayer_beads"), NewEmoji("lipstick", []int32{128132}, "lipstick"), NewEmoji("ring", []int32{128141}, "ring"), NewEmoji("gem stone", []int32{128142}, "gem"), NewEmoji("muted speaker", []int32{128263}, "mute"), NewEmoji("speaker low volume", []int32{128264}, "speaker"), NewEmoji("speaker medium volume", []int32{128265}, "sound"), NewEmoji("speaker high volume", []int32{128266}, "loud_sound"), NewEmoji("loudspeaker", []int32{128226}, "loudspeaker"), NewEmoji("megaphone", []int32{128227}, "mega"), NewEmoji("postal horn", []int32{128239}, "postal_horn"), NewEmoji("bell", []int32{128276}, "bell"), NewEmoji("bell with slash", []int32{128277}, "no_bell"), NewEmoji("musical score", []int32{127932}, "musical_score"), NewEmoji("musical note", []int32{127925}, "musical_note"), NewEmoji("musical notes", []int32{127926}, "notes"), NewEmoji("studio microphone", []int32{127897, 65039}, "studio_microphone"), NewEmoji("level slider", []int32{127898, 65039}, "level_slider"), NewEmoji("control knobs", []int32{127899, 65039}, "control_knobs"), NewEmoji("microphone", []int32{127908}, "microphone"), NewEmoji("headphone", []int32{127911}, "headphones"), NewEmoji("radio", []int32{128251}, "radio"), NewEmoji("saxophone", []int32{127927}, "saxophone"), NewEmoji("guitar", []int32{127928}, "guitar"), NewEmoji("musical keyboard", []int32{127929}, "musical_keyboard"), NewEmoji("trumpet", []int32{127930}, "trumpet"), NewEmoji("violin", []int32{127931}, "violin"), NewEmoji("banjo", []int32{129685}, "banjo"), NewEmoji("drum", []int32{129345}, "drum"), NewEmoji("mobile phone", []int32{128241}, "iphone"), NewEmoji("mobile phone with arrow", []int32{128242}, "calling"), NewEmoji("telephone", []int32{9742, 65039}, "phone"), NewEmoji("telephone receiver", []int32{128222}, "telephone_receiver"), NewEmoji("pager", []int32{128223}, "pager"), NewEmoji("fax machine", []int32{128224}, "fax"), NewEmoji("battery", []int32{128267}, "battery"), NewEmoji("electric plug", []int32{128268}, "electric_plug"), NewEmoji("laptop", []int32{128187}, "computer"), NewEmoji("desktop computer", []int32{128421, 65039}, "desktop_computer"), NewEmoji("printer", []int32{128424, 65039}, "printer"), NewEmoji("keyboard", []int32{9000, 65039}, "keyboard"), NewEmoji("computer mouse", []int32{128433, 65039}, "computer_mouse"), NewEmoji("trackball", []int32{128434, 65039}, "trackball"), NewEmoji("computer disk", []int32{128189}, "minidisc"), NewEmoji("floppy disk", []int32{128190}, "floppy_disk"), NewEmoji("optical disk", []int32{128191}, "cd"), NewEmoji("dvd", []int32{128192}, "dvd"), NewEmoji("abacus", []int32{129518}, "abacus"), NewEmoji("movie camera", []int32{127909}, "movie_camera"), NewEmoji("film frames", []int32{127902, 65039}, "film_strip"), NewEmoji("film projector", []int32{128253, 65039}, "film_projector"), NewEmoji("clapper board", []int32{127916}, "clapper"), NewEmoji("television", []int32{128250}, "tv"), NewEmoji("camera", []int32{128247}, "camera"), NewEmoji("camera with flash", []int32{128248}, "camera_flash"), NewEmoji("video camera", []int32{128249}, "video_camera"), NewEmoji("videocassette", []int32{128252}, "vhs"), NewEmoji("magnifying glass tilted left", []int32{128269}, "mag"), NewEmoji("magnifying glass tilted right", []int32{128270}, "mag_right"), NewEmoji("candle", []int32{128367, 65039}, "candle"), NewEmoji("light bulb", []int32{128161}, "bulb"), NewEmoji("flashlight", []int32{128294}, "flashlight"), NewEmoji("red paper lantern", []int32{127982}, "izakaya_lantern"), NewEmoji("diya lamp", []int32{129684}, "diya_lamp"), NewEmoji("notebook with decorative cover", []int32{128212}, "notebook_with_decorative_cover"), NewEmoji("closed book", []int32{128213}, "closed_book"), NewEmoji("open book", []int32{128214}, "book"), NewEmoji("green book", []int32{128215}, "green_book"), NewEmoji("blue book", []int32{128216}, "blue_book"), NewEmoji("orange book", []int32{128217}, "orange_book"), NewEmoji("books", []int32{128218}, "books"), NewEmoji("notebook", []int32{128211}, "notebook"), NewEmoji("ledger", []int32{128210}, "ledger"), NewEmoji("page with curl", []int32{128195}, "page_with_curl"), NewEmoji("scroll", []int32{128220}, "scroll"), NewEmoji("page facing up", []int32{128196}, "page_facing_up"), NewEmoji("newspaper", []int32{128240}, "newspaper"), NewEmoji("rolled-up newspaper", []int32{128478, 65039}, "newspaper_roll"), NewEmoji("bookmark tabs", []int32{128209}, "bookmark_tabs"), NewEmoji("bookmark", []int32{128278}, "bookmark"), NewEmoji("label", []int32{127991, 65039}, "label"), NewEmoji("money bag", []int32{128176}, "moneybag"), NewEmoji("yen banknote", []int32{128180}, "yen"), NewEmoji("dollar banknote", []int32{128181}, "dollar"), NewEmoji("euro banknote", []int32{128182}, "euro"), NewEmoji("pound banknote", []int32{128183}, "pound"), NewEmoji("money with wings", []int32{128184}, "money_with_wings"), NewEmoji("credit card", []int32{128179}, "credit_card"), NewEmoji("receipt", []int32{129534}, "receipt"), NewEmoji("chart increasing with yen", []int32{128185}, "chart"), NewEmoji("envelope", []int32{9993, 65039}, "email"), NewEmoji("e-mail", []int32{128231}, "e-mail"), NewEmoji("incoming envelope", []int32{128232}, "incoming_envelope"), NewEmoji("envelope with arrow", []int32{128233}, "envelope_with_arrow"), NewEmoji("outbox tray", []int32{128228}, "outbox_tray"), NewEmoji("inbox tray", []int32{128229}, "inbox_tray"), NewEmoji("package", []int32{128230}, "package"), NewEmoji("closed mailbox with raised flag", []int32{128235}, "mailbox"), NewEmoji("closed mailbox with lowered flag", []int32{128234}, "mailbox_closed"), NewEmoji("open mailbox with raised flag", []int32{128236}, "mailbox_with_mail"), NewEmoji("open mailbox with lowered flag", []int32{128237}, "mailbox_with_no_mail"), NewEmoji("postbox", []int32{128238}, "postbox"), NewEmoji("ballot box with ballot", []int32{128499, 65039}, "ballot_box"), NewEmoji("pencil", []int32{9999, 65039}, "pencil2"), NewEmoji("black nib", []int32{10002, 65039}, "black_nib"), NewEmoji("fountain pen", []int32{128395, 65039}, "fountain_pen"), NewEmoji("pen", []int32{128394, 65039}, "pen"), NewEmoji("paintbrush", []int32{128396, 65039}, "paintbrush"), NewEmoji("crayon", []int32{128397, 65039}, "crayon"), NewEmoji("memo", []int32{128221}, "memo"), NewEmoji("briefcase", []int32{128188}, "briefcase"), NewEmoji("file folder", []int32{128193}, "file_folder"), NewEmoji("open file folder", []int32{128194}, "open_file_folder"), NewEmoji("card index dividers", []int32{128450, 65039}, "card_index_dividers"), NewEmoji("calendar", []int32{128197}, "date"), NewEmoji("tear-off calendar", []int32{128198}, "calendar"), NewEmoji("spiral notepad", []int32{128466, 65039}, "spiral_notepad"), NewEmoji("spiral calendar", []int32{128467, 65039}, "spiral_calendar"), NewEmoji("card index", []int32{128199}, "card_index"), NewEmoji("chart increasing", []int32{128200}, "chart_with_upwards_trend"), NewEmoji("chart decreasing", []int32{128201}, "chart_with_downwards_trend"), NewEmoji("bar chart", []int32{128202}, "bar_chart"), NewEmoji("clipboard", []int32{128203}, "clipboard"), NewEmoji("pushpin", []int32{128204}, "pushpin"), NewEmoji("round pushpin", []int32{128205}, "round_pushpin"), NewEmoji("paperclip", []int32{128206}, "paperclip"), NewEmoji("linked paperclips", []int32{128391, 65039}, "paperclips"), NewEmoji("straight ruler", []int32{128207}, "straight_ruler"), NewEmoji("triangular ruler", []int32{128208}, "triangular_ruler"), NewEmoji("scissors", []int32{9986, 65039}, "scissors"), NewEmoji("card file box", []int32{128451, 65039}, "card_file_box"), NewEmoji("file cabinet", []int32{128452, 65039}, "file_cabinet"), NewEmoji("wastebasket", []int32{128465, 65039}, "wastebasket"), NewEmoji("locked", []int32{128274}, "lock"), NewEmoji("unlocked", []int32{128275}, "unlock"), NewEmoji("locked with pen", []int32{128271}, "lock_with_ink_pen"), NewEmoji("locked with key", []int32{128272}, "closed_lock_with_key"), NewEmoji("key", []int32{128273}, "key"), NewEmoji("old key", []int32{128477, 65039}, "old_key"), NewEmoji("hammer", []int32{128296}, "hammer"), NewEmoji("axe", []int32{129683}, "axe"), NewEmoji("pick", []int32{9935, 65039}, "pick"), NewEmoji("hammer and pick", []int32{9874, 65039}, "hammer_and_pick"), NewEmoji("hammer and wrench", []int32{128736, 65039}, "hammer_and_wrench"), NewEmoji("dagger", []int32{128481, 65039}, "dagger"), NewEmoji("crossed swords", []int32{9876, 65039}, "crossed_swords"), NewEmoji("pistol", []int32{128299}, "gun"), NewEmoji("bow and arrow", []int32{127993}, "bow_and_arrow"), NewEmoji("shield", []int32{128737, 65039}, "shield"), NewEmoji("wrench", []int32{128295}, "wrench"), NewEmoji("nut and bolt", []int32{128297}, "nut_and_bolt"), NewEmoji("gear", []int32{9881, 65039}, "gear"), NewEmoji("clamp", []int32{128476, 65039}, "clamp"), NewEmoji("balance scale", []int32{9878, 65039}, "balance_scale"), NewEmoji("white cane", []int32{129455}, "probing_cane"), NewEmoji("link", []int32{128279}, "link"), NewEmoji("chains", []int32{9939, 65039}, "chains"), NewEmoji("toolbox", []int32{129520}, "toolbox"), NewEmoji("magnet", []int32{129522}, "magnet"), NewEmoji("alembic", []int32{9879, 65039}, "alembic"), NewEmoji("test tube", []int32{129514}, "test_tube"), NewEmoji("petri dish", []int32{129515}, "petri_dish"), NewEmoji("dna", []int32{129516}, "dna"), NewEmoji("microscope", []int32{128300}, "microscope"), NewEmoji("telescope", []int32{128301}, "telescope"), NewEmoji("satellite antenna", []int32{128225}, "satellite"), NewEmoji("syringe", []int32{128137}, "syringe"), NewEmoji("drop of blood", []int32{129656}, "drop_of_blood"), NewEmoji("pill", []int32{128138}, "pill"), NewEmoji("adhesive bandage", []int32{129657}, "adhesive_bandage"), NewEmoji("stethoscope", []int32{129658}, "stethoscope"), NewEmoji("door", []int32{128682}, "door"), NewEmoji("bed", []int32{128719, 65039}, "bed"), NewEmoji("couch and lamp", []int32{128715, 65039}, "couch_and_lamp"), NewEmoji("chair", []int32{129681}, "chair"), NewEmoji("toilet", []int32{128701}, "toilet"), NewEmoji("shower", []int32{128703}, "shower"), NewEmoji("bathtub", []int32{128705}, "bathtub"), NewEmoji("razor", []int32{129682}, "razor"), NewEmoji("lotion bottle", []int32{129524}, "lotion_bottle"), NewEmoji("safety pin", []int32{129527}, "safety_pin"), NewEmoji("broom", []int32{129529}, "broom"), NewEmoji("basket", []int32{129530}, "basket"), NewEmoji("roll of paper", []int32{129531}, "roll_of_paper"), NewEmoji("soap", []int32{129532}, "soap"), NewEmoji("sponge", []int32{129533}, "sponge"), NewEmoji("fire extinguisher", []int32{129519}, "fire_extinguisher"), NewEmoji("shopping cart", []int32{128722}, "shopping_cart"), NewEmoji("cigarette", []int32{128684}, "smoking"), NewEmoji("coffin", []int32{9904, 65039}, "coffin"), NewEmoji("funeral urn", []int32{9905, 65039}, "funeral_urn"), NewEmoji("moai", []int32{128511}, "moyai"), NewEmoji("ATM sign", []int32{127975}, "atm"), NewEmoji("litter in bin sign", []int32{128686}, "put_litter_in_its_place"), NewEmoji("potable water", []int32{128688}, "potable_water"), NewEmoji("wheelchair symbol", []int32{9855}, "wheelchair"), NewEmoji("men’s room", []int32{128697}, "mens"), NewEmoji("women’s room", []int32{128698}, "womens"), NewEmoji("restroom", []int32{128699}, "restroom"), NewEmoji("baby symbol", []int32{128700}, "baby_symbol"), NewEmoji("water closet", []int32{128702}, "wc"), NewEmoji("passport control", []int32{128706}, "passport_control"), NewEmoji("customs", []int32{128707}, "customs"), NewEmoji("baggage claim", []int32{128708}, "baggage_claim"), NewEmoji("left luggage", []int32{128709}, "left_luggage"), NewEmoji("warning", []int32{9888, 65039}, "warning"), NewEmoji("children crossing", []int32{128696}, "children_crossing"), NewEmoji("no entry", []int32{9940}, "no_entry"), NewEmoji("prohibited", []int32{128683}, "no_entry_sign"), NewEmoji("no bicycles", []int32{128691}, "no_bicycles"), NewEmoji("no smoking", []int32{128685}, "no_smoking"), NewEmoji("no littering", []int32{128687}, "do_not_litter"), NewEmoji("non-potable water", []int32{128689}, "non-potable_water"), NewEmoji("no pedestrians", []int32{128695}, "no_pedestrians"), NewEmoji("no mobile phones", []int32{128245}, "no_mobile_phones"), NewEmoji("no one under eighteen", []int32{128286}, "underage"), NewEmoji("radioactive", []int32{9762, 65039}, "radioactive"), NewEmoji("biohazard", []int32{9763, 65039}, "biohazard"), NewEmoji("up arrow", []int32{11014, 65039}, "arrow_up"), NewEmoji("up-right arrow", []int32{8599, 65039}, "arrow_upper_right"), NewEmoji("right arrow", []int32{10145, 65039}, "arrow_right"), NewEmoji("down-right arrow", []int32{8600, 65039}, "arrow_lower_right"), NewEmoji("down arrow", []int32{11015, 65039}, "arrow_down"), NewEmoji("down-left arrow", []int32{8601, 65039}, "arrow_lower_left"), NewEmoji("left arrow", []int32{11013, 65039}, "arrow_left"), NewEmoji("up-left arrow", []int32{8598, 65039}, "arrow_upper_left"), NewEmoji("up-down arrow", []int32{8597, 65039}, "arrow_up_down"), NewEmoji("left-right arrow", []int32{8596, 65039}, "left_right_arrow"), NewEmoji("right arrow curving left", []int32{8617, 65039}, "leftwards_arrow_with_hook"), NewEmoji("left arrow curving right", []int32{8618, 65039}, "arrow_right_hook"), NewEmoji("right arrow curving up", []int32{10548, 65039}, "arrow_heading_up"), NewEmoji("right arrow curving down", []int32{10549, 65039}, "arrow_heading_down"), NewEmoji("clockwise vertical arrows", []int32{128259}, "arrows_clockwise"), NewEmoji("counterclockwise arrows button", []int32{128260}, "arrows_counterclockwise"), NewEmoji("BACK arrow", []int32{128281}, "back"), NewEmoji("END arrow", []int32{128282}, "end"), NewEmoji("ON! arrow", []int32{128283}, "on"), NewEmoji("SOON arrow", []int32{128284}, "soon"), NewEmoji("TOP arrow", []int32{128285}, "top"), NewEmoji("place of worship", []int32{128720}, "place_of_worship"), NewEmoji("atom symbol", []int32{9883, 65039}, "atom_symbol"), NewEmoji("om", []int32{128329, 65039}, "om"), NewEmoji("star of David", []int32{10017, 65039}, "star_of_david"), NewEmoji("wheel of dharma", []int32{9784, 65039}, "wheel_of_dharma"), NewEmoji("yin yang", []int32{9775, 65039}, "yin_yang"), NewEmoji("latin cross", []int32{10013, 65039}, "latin_cross"), NewEmoji("orthodox cross", []int32{9766, 65039}, "orthodox_cross"), NewEmoji("star and crescent", []int32{9770, 65039}, "star_and_crescent"), NewEmoji("peace symbol", []int32{9774, 65039}, "peace_symbol"), NewEmoji("menorah", []int32{128334}, "menorah"), NewEmoji("dotted six-pointed star", []int32{128303}, "six_pointed_star"), NewEmoji("Aries", []int32{9800}, "aries"), NewEmoji("Taurus", []int32{9801}, "taurus"), NewEmoji("Gemini", []int32{9802}, "gemini"), NewEmoji("Cancer", []int32{9803}, "cancer"), NewEmoji("Leo", []int32{9804}, "leo"), NewEmoji("Virgo", []int32{9805}, "virgo"), NewEmoji("Libra", []int32{9806}, "libra"), NewEmoji("Scorpio", []int32{9807}, "scorpius"), NewEmoji("Sagittarius", []int32{9808}, "sagittarius"), NewEmoji("Capricorn", []int32{9809}, "capricorn"), NewEmoji("Aquarius", []int32{9810}, "aquarius"), NewEmoji("Pisces", []int32{9811}, "pisces"), NewEmoji("Ophiuchus", []int32{9934}, "ophiuchus"), NewEmoji("shuffle tracks button", []int32{128256}, "twisted_rightwards_arrows"), NewEmoji("repeat button", []int32{128257}, "repeat"), NewEmoji("repeat single button", []int32{128258}, "repeat_one"), NewEmoji("play button", []int32{9654, 65039}, "arrow_forward"), NewEmoji("fast-forward button", []int32{9193}, "fast_forward"), NewEmoji("next track button", []int32{9197, 65039}, "next_track_button"), NewEmoji("play or pause button", []int32{9199, 65039}, "play_or_pause_button"), NewEmoji("reverse button", []int32{9664, 65039}, "arrow_backward"), NewEmoji("fast reverse button", []int32{9194}, "rewind"), NewEmoji("last track button", []int32{9198, 65039}, "previous_track_button"), NewEmoji("upwards button", []int32{128316}, "arrow_up_small"), NewEmoji("fast up button", []int32{9195}, "arrow_double_up"), NewEmoji("downwards button", []int32{128317}, "arrow_down_small"), NewEmoji("fast down button", []int32{9196}, "arrow_double_down"), NewEmoji("pause button", []int32{9208, 65039}, "pause_button"), NewEmoji("stop button", []int32{9209, 65039}, "stop_button"), NewEmoji("record button", []int32{9210, 65039}, "record_button"), NewEmoji("eject button", []int32{9167, 65039}, "eject_button"), NewEmoji("cinema", []int32{127910}, "cinema"), NewEmoji("dim button", []int32{128261}, "low_brightness"), NewEmoji("bright button", []int32{128262}, "high_brightness"), NewEmoji("antenna bars", []int32{128246}, "signal_strength"), NewEmoji("vibration mode", []int32{128243}, "vibration_mode"), NewEmoji("mobile phone off", []int32{128244}, "mobile_phone_off"), NewEmoji("female sign", []int32{9792, 65039}, "female_sign"), NewEmoji("male sign", []int32{9794, 65039}, "male_sign"), NewEmoji("multiply", []int32{10006, 65039}, "heavy_multiplication_x"), NewEmoji("plus", []int32{10133}, "heavy_plus_sign"), NewEmoji("minus", []int32{10134}, "heavy_minus_sign"), NewEmoji("divide", []int32{10135}, "heavy_division_sign"), NewEmoji("infinity", []int32{9854, 65039}, "infinity"), NewEmoji("double exclamation mark", []int32{8252, 65039}, "bangbang"), NewEmoji("exclamation question mark", []int32{8265, 65039}, "interrobang"), NewEmoji("question mark", []int32{10067}, "question"), NewEmoji("white question mark", []int32{10068}, "grey_question"), NewEmoji("white exclamation mark", []int32{10069}, "grey_exclamation"), NewEmoji("exclamation mark", []int32{10071}, "exclamation"), NewEmoji("wavy dash", []int32{12336, 65039}, "wavy_dash"), NewEmoji("currency exchange", []int32{128177}, "currency_exchange"), NewEmoji("heavy dollar sign", []int32{128178}, "heavy_dollar_sign"), NewEmoji("medical symbol", []int32{9877, 65039}, "medical_symbol"), NewEmoji("recycling symbol", []int32{9851, 65039}, "recycle"), NewEmoji("fleur-de-lis", []int32{9884, 65039}, "fleur_de_lis"), NewEmoji("trident emblem", []int32{128305}, "trident"), NewEmoji("name badge", []int32{128219}, "name_badge"), NewEmoji("Japanese symbol for beginner", []int32{128304}, "beginner"), NewEmoji("hollow red circle", []int32{11093}, "o"), NewEmoji("check mark button", []int32{9989}, "white_check_mark"), NewEmoji("check box with check", []int32{9745, 65039}, "ballot_box_with_check"), NewEmoji("check mark", []int32{10004, 65039}, "heavy_check_mark"), NewEmoji("cross mark", []int32{10060}, "x"), NewEmoji("cross mark button", []int32{10062}, "negative_squared_cross_mark"), NewEmoji("curly loop", []int32{10160}, "curly_loop"), NewEmoji("double curly loop", []int32{10175}, "loop"), NewEmoji("part alternation mark", []int32{12349, 65039}, "part_alternation_mark"), NewEmoji("eight-spoked asterisk", []int32{10035, 65039}, "eight_spoked_asterisk"), NewEmoji("eight-pointed star", []int32{10036, 65039}, "eight_pointed_black_star"), NewEmoji("sparkle", []int32{10055, 65039}, "sparkle"), NewEmoji("copyright", []int32{169, 65039}, "copyright"), NewEmoji("registered", []int32{174, 65039}, "registered"), NewEmoji("trade mark", []int32{8482, 65039}, "tm"), NewEmoji("keycap: #", []int32{35, 65039, 8419}, "hash"), NewEmoji("keycap: *", []int32{42, 65039, 8419}, "asterisk"), NewEmoji("keycap: 0", []int32{48, 65039, 8419}, "zero"), NewEmoji("keycap: 1", []int32{49, 65039, 8419}, "one"), NewEmoji("keycap: 2", []int32{50, 65039, 8419}, "two"), NewEmoji("keycap: 3", []int32{51, 65039, 8419}, "three"), NewEmoji("keycap: 4", []int32{52, 65039, 8419}, "four"), NewEmoji("keycap: 5", []int32{53, 65039, 8419}, "five"), NewEmoji("keycap: 6", []int32{54, 65039, 8419}, "six"), NewEmoji("keycap: 7", []int32{55, 65039, 8419}, "seven"), NewEmoji("keycap: 8", []int32{56, 65039, 8419}, "eight"), NewEmoji("keycap: 9", []int32{57, 65039, 8419}, "nine"), NewEmoji("keycap: 10", []int32{128287}, "keycap_ten"), NewEmoji("input latin uppercase", []int32{128288}, "capital_abcd"), NewEmoji("input latin lowercase", []int32{128289}, "abcd"), NewEmoji("input numbers", []int32{128290}, "1234"), NewEmoji("input symbols", []int32{128291}, "symbols"), NewEmoji("input latin letters", []int32{128292}, "abc"), NewEmoji("A button (blood type)", []int32{127344, 65039}, "a"), NewEmoji("AB button (blood type)", []int32{127374}, "ab"), NewEmoji("B button (blood type)", []int32{127345, 65039}, "b"), NewEmoji("CL button", []int32{127377}, "cl"), NewEmoji("COOL button", []int32{127378}, "cool"), NewEmoji("FREE button", []int32{127379}, "free"), NewEmoji("information", []int32{8505, 65039}, "information_source"), NewEmoji("ID button", []int32{127380}, "id"), NewEmoji("circled M", []int32{9410, 65039}, "m"), NewEmoji("NEW button", []int32{127381}, "new"), NewEmoji("NG button", []int32{127382}, "ng"), NewEmoji("O button (blood type)", []int32{127358, 65039}, "o2"), NewEmoji("OK button", []int32{127383}, "ok"), NewEmoji("P button", []int32{127359, 65039}, "parking"), NewEmoji("SOS button", []int32{127384}, "sos"), NewEmoji("UP! button", []int32{127385}, "up"), NewEmoji("VS button", []int32{127386}, "vs"), NewEmoji("Japanese “here” button", []int32{127489}, "koko"), NewEmoji("Japanese “service charge” button", []int32{127490, 65039}, "sa"), NewEmoji("Japanese “monthly amount” button", []int32{127543, 65039}, "u6708"), NewEmoji("Japanese “not free of charge” button", []int32{127542}, "u6709"), NewEmoji("Japanese “reserved” button", []int32{127535}, "u6307"), NewEmoji("Japanese “bargain” button", []int32{127568}, "ideograph_advantage"), NewEmoji("Japanese “discount” button", []int32{127545}, "u5272"), NewEmoji("Japanese “free of charge” button", []int32{127514}, "u7121"), NewEmoji("Japanese “prohibited” button", []int32{127538}, "u7981"), NewEmoji("Japanese “acceptable” button", []int32{127569}, "accept"), NewEmoji("Japanese “application” button", []int32{127544}, "u7533"), NewEmoji("Japanese “passing grade” button", []int32{127540}, "u5408"), NewEmoji("Japanese “vacancy” button", []int32{127539}, "u7a7a"), NewEmoji("Japanese “congratulations” button", []int32{12951, 65039}, "congratulations"), NewEmoji("Japanese “secret” button", []int32{12953, 65039}, "secret"), NewEmoji("Japanese “open for business” button", []int32{127546}, "u55b6"), NewEmoji("Japanese “no vacancy” button", []int32{127541}, "u6e80"), NewEmoji("red circle", []int32{128308}, "red_circle"), NewEmoji("orange circle", []int32{128992}, "orange_circle"), NewEmoji("yellow circle", []int32{128993}, "yellow_circle"), NewEmoji("green circle", []int32{128994}, "green_circle"), NewEmoji("blue circle", []int32{128309}, "large_blue_circle"), NewEmoji("purple circle", []int32{128995}, "purple_circle"), NewEmoji("brown circle", []int32{128996}, "brown_circle"), NewEmoji("black circle", []int32{9899}, "black_circle"), NewEmoji("white circle", []int32{9898}, "white_circle"), NewEmoji("red square", []int32{128997}, "red_square"), NewEmoji("orange square", []int32{128999}, "orange_square"), NewEmoji("yellow square", []int32{129000}, "yellow_square"), NewEmoji("green square", []int32{129001}, "green_square"), NewEmoji("blue square", []int32{128998}, "blue_square"), NewEmoji("purple square", []int32{129002}, "purple_square"), NewEmoji("brown square", []int32{129003}, "brown_square"), NewEmoji("black large square", []int32{11035}, "black_large_square"), NewEmoji("white large square", []int32{11036}, "white_large_square"), NewEmoji("black medium square", []int32{9724, 65039}, "black_medium_square"), NewEmoji("white medium square", []int32{9723, 65039}, "white_medium_square"), NewEmoji("black medium-small square", []int32{9726}, "black_medium_small_square"), NewEmoji("white medium-small square", []int32{9725}, "white_medium_small_square"), NewEmoji("black small square", []int32{9642, 65039}, "black_small_square"), NewEmoji("white small square", []int32{9643, 65039}, "white_small_square"), NewEmoji("large orange diamond", []int32{128310}, "large_orange_diamond"), NewEmoji("large blue diamond", []int32{128311}, "large_blue_diamond"), NewEmoji("small orange diamond", []int32{128312}, "small_orange_diamond"), NewEmoji("small blue diamond", []int32{128313}, "small_blue_diamond"), NewEmoji("red triangle pointed up", []int32{128314}, "small_red_triangle"), NewEmoji("red triangle pointed down", []int32{128315}, "small_red_triangle_down"), NewEmoji("diamond with a dot", []int32{128160}, "diamond_shape_with_a_dot_inside"), NewEmoji("radio button", []int32{128280}, "radio_button"), NewEmoji("white square button", []int32{128307}, "white_square_button"), NewEmoji("black square button", []int32{128306}, "black_square_button"), NewEmoji("chequered flag", []int32{127937}, "checkered_flag"), NewEmoji("triangular flag", []int32{128681}, "triangular_flag_on_post"), NewEmoji("crossed flags", []int32{127884}, "crossed_flags"), NewEmoji("black flag", []int32{127988}, "black_flag"), NewEmoji("white flag", []int32{127987, 65039}, "white_flag"), NewEmoji("rainbow flag", []int32{127987, 65039, 8205, 127752}, "rainbow_flag"), NewEmoji("pirate flag", []int32{127988, 8205, 9760, 65039}, "pirate_flag"), NewEmoji("flag: Ascension Island", []int32{127462, 127464}, "ascension_island"), NewEmoji("flag: Andorra", []int32{127462, 127465}, "andorra"), NewEmoji("flag: United Arab Emirates", []int32{127462, 127466}, "united_arab_emirates"), NewEmoji("flag: Afghanistan", []int32{127462, 127467}, "afghanistan"), NewEmoji("flag: Antigua & Barbuda", []int32{127462, 127468}, "antigua_barbuda"), NewEmoji("flag: Anguilla", []int32{127462, 127470}, "anguilla"), NewEmoji("flag: Albania", []int32{127462, 127473}, "albania"), NewEmoji("flag: Armenia", []int32{127462, 127474}, "armenia"), NewEmoji("flag: Angola", []int32{127462, 127476}, "angola"), NewEmoji("flag: Antarctica", []int32{127462, 127478}, "antarctica"), NewEmoji("flag: Argentina", []int32{127462, 127479}, "argentina"), NewEmoji("flag: American Samoa", []int32{127462, 127480}, "american_samoa"), NewEmoji("flag: Austria", []int32{127462, 127481}, "austria"), NewEmoji("flag: Australia", []int32{127462, 127482}, "australia"), NewEmoji("flag: Aruba", []int32{127462, 127484}, "aruba"), NewEmoji("flag: Åland Islands", []int32{127462, 127485}, "aland_islands"), NewEmoji("flag: Azerbaijan", []int32{127462, 127487}, "azerbaijan"), NewEmoji("flag: Bosnia & Herzegovina", []int32{127463, 127462}, "bosnia_herzegovina"), NewEmoji("flag: Barbados", []int32{127463, 127463}, "barbados"), NewEmoji("flag: Bangladesh", []int32{127463, 127465}, "bangladesh"), NewEmoji("flag: Belgium", []int32{127463, 127466}, "belgium"), NewEmoji("flag: Burkina Faso", []int32{127463, 127467}, "burkina_faso"), NewEmoji("flag: Bulgaria", []int32{127463, 127468}, "bulgaria"), NewEmoji("flag: Bahrain", []int32{127463, 127469}, "bahrain"), NewEmoji("flag: Burundi", []int32{127463, 127470}, "burundi"), NewEmoji("flag: Benin", []int32{127463, 127471}, "benin"), NewEmoji("flag: St. Barthélemy", []int32{127463, 127473}, "st_barthelemy"), NewEmoji("flag: Bermuda", []int32{127463, 127474}, "bermuda"), NewEmoji("flag: Brunei", []int32{127463, 127475}, "brunei"), NewEmoji("flag: Bolivia", []int32{127463, 127476}, "bolivia"), NewEmoji("flag: Caribbean Netherlands", []int32{127463, 127478}, "caribbean_netherlands"), NewEmoji("flag: Brazil", []int32{127463, 127479}, "brazil"), NewEmoji("flag: Bahamas", []int32{127463, 127480}, "bahamas"), NewEmoji("flag: Bhutan", []int32{127463, 127481}, "bhutan"), NewEmoji("flag: Bouvet Island", []int32{127463, 127483}, "bouvet_island"), NewEmoji("flag: Botswana", []int32{127463, 127484}, "botswana"), NewEmoji("flag: Belarus", []int32{127463, 127486}, "belarus"), NewEmoji("flag: Belize", []int32{127463, 127487}, "belize"), NewEmoji("flag: Canada", []int32{127464, 127462}, "canada"), NewEmoji("flag: Cocos (Keeling) Islands", []int32{127464, 127464}, "cocos_islands"), NewEmoji("flag: Congo - Kinshasa", []int32{127464, 127465}, "congo_kinshasa"), NewEmoji("flag: Central African Republic", []int32{127464, 127467}, "central_african_republic"), NewEmoji("flag: Congo - Brazzaville", []int32{127464, 127468}, "congo_brazzaville"), NewEmoji("flag: Switzerland", []int32{127464, 127469}, "switzerland"), NewEmoji("flag: Côte d’Ivoire", []int32{127464, 127470}, "cote_divoire"), NewEmoji("flag: Cook Islands", []int32{127464, 127472}, "cook_islands"), NewEmoji("flag: Chile", []int32{127464, 127473}, "chile"), NewEmoji("flag: Cameroon", []int32{127464, 127474}, "cameroon"), NewEmoji("flag: China", []int32{127464, 127475}, "cn"), NewEmoji("flag: Colombia", []int32{127464, 127476}, "colombia"), NewEmoji("flag: Clipperton Island", []int32{127464, 127477}, "clipperton_island"), NewEmoji("flag: Costa Rica", []int32{127464, 127479}, "costa_rica"), NewEmoji("flag: Cuba", []int32{127464, 127482}, "cuba"), NewEmoji("flag: Cape Verde", []int32{127464, 127483}, "cape_verde"), NewEmoji("flag: Curaçao", []int32{127464, 127484}, "curacao"), NewEmoji("flag: Christmas Island", []int32{127464, 127485}, "christmas_island"), NewEmoji("flag: Cyprus", []int32{127464, 127486}, "cyprus"), NewEmoji("flag: Czechia", []int32{127464, 127487}, "czech_republic"), NewEmoji("flag: Germany", []int32{127465, 127466}, "de"), NewEmoji("flag: Diego Garcia", []int32{127465, 127468}, "diego_garcia"), NewEmoji("flag: Djibouti", []int32{127465, 127471}, "djibouti"), NewEmoji("flag: Denmark", []int32{127465, 127472}, "denmark"), NewEmoji("flag: Dominica", []int32{127465, 127474}, "dominica"), NewEmoji("flag: Dominican Republic", []int32{127465, 127476}, "dominican_republic"), NewEmoji("flag: Algeria", []int32{127465, 127487}, "algeria"), NewEmoji("flag: Ceuta & Melilla", []int32{127466, 127462}, "ceuta_melilla"), NewEmoji("flag: Ecuador", []int32{127466, 127464}, "ecuador"), NewEmoji("flag: Estonia", []int32{127466, 127466}, "estonia"), NewEmoji("flag: Egypt", []int32{127466, 127468}, "egypt"), NewEmoji("flag: Western Sahara", []int32{127466, 127469}, "western_sahara"), NewEmoji("flag: Eritrea", []int32{127466, 127479}, "eritrea"), NewEmoji("flag: Spain", []int32{127466, 127480}, "es"), NewEmoji("flag: Ethiopia", []int32{127466, 127481}, "ethiopia"), NewEmoji("flag: European Union", []int32{127466, 127482}, "eu"), NewEmoji("flag: Finland", []int32{127467, 127470}, "finland"), NewEmoji("flag: Fiji", []int32{127467, 127471}, "fiji"), NewEmoji("flag: Falkland Islands", []int32{127467, 127472}, "falkland_islands"), NewEmoji("flag: Micronesia", []int32{127467, 127474}, "micronesia"), NewEmoji("flag: Faroe Islands", []int32{127467, 127476}, "faroe_islands"), NewEmoji("flag: France", []int32{127467, 127479}, "fr"), NewEmoji("flag: Gabon", []int32{127468, 127462}, "gabon"), NewEmoji("flag: United Kingdom", []int32{127468, 127463}, "gb"), NewEmoji("flag: Grenada", []int32{127468, 127465}, "grenada"), NewEmoji("flag: Georgia", []int32{127468, 127466}, "georgia"), NewEmoji("flag: French Guiana", []int32{127468, 127467}, "french_guiana"), NewEmoji("flag: Guernsey", []int32{127468, 127468}, "guernsey"), NewEmoji("flag: Ghana", []int32{127468, 127469}, "ghana"), NewEmoji("flag: Gibraltar", []int32{127468, 127470}, "gibraltar"), NewEmoji("flag: Greenland", []int32{127468, 127473}, "greenland"), NewEmoji("flag: Gambia", []int32{127468, 127474}, "gambia"), NewEmoji("flag: Guinea", []int32{127468, 127475}, "guinea"), NewEmoji("flag: Guadeloupe", []int32{127468, 127477}, "guadeloupe"), NewEmoji("flag: Equatorial Guinea", []int32{127468, 127478}, "equatorial_guinea"), NewEmoji("flag: Greece", []int32{127468, 127479}, "greece"), NewEmoji("flag: South Georgia & South Sandwich Islands", []int32{127468, 127480}, "south_georgia_south_sandwich_islands"), NewEmoji("flag: Guatemala", []int32{127468, 127481}, "guatemala"), NewEmoji("flag: Guam", []int32{127468, 127482}, "guam"), NewEmoji("flag: Guinea-Bissau", []int32{127468, 127484}, "guinea_bissau"), NewEmoji("flag: Guyana", []int32{127468, 127486}, "guyana"), NewEmoji("flag: Hong Kong SAR China", []int32{127469, 127472}, "hong_kong"), NewEmoji("flag: Heard & McDonald Islands", []int32{127469, 127474}, "heard_mcdonald_islands"), NewEmoji("flag: Honduras", []int32{127469, 127475}, "honduras"), NewEmoji("flag: Croatia", []int32{127469, 127479}, "croatia"), NewEmoji("flag: Haiti", []int32{127469, 127481}, "haiti"), NewEmoji("flag: Hungary", []int32{127469, 127482}, "hungary"), NewEmoji("flag: Canary Islands", []int32{127470, 127464}, "canary_islands"), NewEmoji("flag: Indonesia", []int32{127470, 127465}, "indonesia"), NewEmoji("flag: Ireland", []int32{127470, 127466}, "ireland"), NewEmoji("flag: Israel", []int32{127470, 127473}, "israel"), NewEmoji("flag: Isle of Man", []int32{127470, 127474}, "isle_of_man"), NewEmoji("flag: India", []int32{127470, 127475}, "india"), NewEmoji("flag: British Indian Ocean Territory", []int32{127470, 127476}, "british_indian_ocean_territory"), NewEmoji("flag: Iraq", []int32{127470, 127478}, "iraq"), NewEmoji("flag: Iran", []int32{127470, 127479}, "iran"), NewEmoji("flag: Iceland", []int32{127470, 127480}, "iceland"), NewEmoji("flag: Italy", []int32{127470, 127481}, "it"), NewEmoji("flag: Jersey", []int32{127471, 127466}, "jersey"), NewEmoji("flag: Jamaica", []int32{127471, 127474}, "jamaica"), NewEmoji("flag: Jordan", []int32{127471, 127476}, "jordan"), NewEmoji("flag: Japan", []int32{127471, 127477}, "jp"), NewEmoji("flag: Kenya", []int32{127472, 127466}, "kenya"), NewEmoji("flag: Kyrgyzstan", []int32{127472, 127468}, "kyrgyzstan"), NewEmoji("flag: Cambodia", []int32{127472, 127469}, "cambodia"), NewEmoji("flag: Kiribati", []int32{127472, 127470}, "kiribati"), NewEmoji("flag: Comoros", []int32{127472, 127474}, "comoros"), NewEmoji("flag: St. Kitts & Nevis", []int32{127472, 127475}, "st_kitts_nevis"), NewEmoji("flag: North Korea", []int32{127472, 127477}, "north_korea"), NewEmoji("flag: South Korea", []int32{127472, 127479}, "kr"), NewEmoji("flag: Kuwait", []int32{127472, 127484}, "kuwait"), NewEmoji("flag: Cayman Islands", []int32{127472, 127486}, "cayman_islands"), NewEmoji("flag: Kazakhstan", []int32{127472, 127487}, "kazakhstan"), NewEmoji("flag: Laos", []int32{127473, 127462}, "laos"), NewEmoji("flag: Lebanon", []int32{127473, 127463}, "lebanon"), NewEmoji("flag: St. Lucia", []int32{127473, 127464}, "st_lucia"), NewEmoji("flag: Liechtenstein", []int32{127473, 127470}, "liechtenstein"), NewEmoji("flag: Sri Lanka", []int32{127473, 127472}, "sri_lanka"), NewEmoji("flag: Liberia", []int32{127473, 127479}, "liberia"), NewEmoji("flag: Lesotho", []int32{127473, 127480}, "lesotho"), NewEmoji("flag: Lithuania", []int32{127473, 127481}, "lithuania"), NewEmoji("flag: Luxembourg", []int32{127473, 127482}, "luxembourg"), NewEmoji("flag: Latvia", []int32{127473, 127483}, "latvia"), NewEmoji("flag: Libya", []int32{127473, 127486}, "libya"), NewEmoji("flag: Morocco", []int32{127474, 127462}, "morocco"), NewEmoji("flag: Monaco", []int32{127474, 127464}, "monaco"), NewEmoji("flag: Moldova", []int32{127474, 127465}, "moldova"), NewEmoji("flag: Montenegro", []int32{127474, 127466}, "montenegro"), NewEmoji("flag: St. Martin", []int32{127474, 127467}, "st_martin"), NewEmoji("flag: Madagascar", []int32{127474, 127468}, "madagascar"), NewEmoji("flag: Marshall Islands", []int32{127474, 127469}, "marshall_islands"), NewEmoji("flag: North Macedonia", []int32{127474, 127472}, "macedonia"), NewEmoji("flag: Mali", []int32{127474, 127473}, "mali"), NewEmoji("flag: Myanmar (Burma)", []int32{127474, 127474}, "myanmar"), NewEmoji("flag: Mongolia", []int32{127474, 127475}, "mongolia"), NewEmoji("flag: Macao SAR China", []int32{127474, 127476}, "macau"), NewEmoji("flag: Northern Mariana Islands", []int32{127474, 127477}, "northern_mariana_islands"), NewEmoji("flag: Martinique", []int32{127474, 127478}, "martinique"), NewEmoji("flag: Mauritania", []int32{127474, 127479}, "mauritania"), NewEmoji("flag: Montserrat", []int32{127474, 127480}, "montserrat"), NewEmoji("flag: Malta", []int32{127474, 127481}, "malta"), NewEmoji("flag: Mauritius", []int32{127474, 127482}, "mauritius"), NewEmoji("flag: Maldives", []int32{127474, 127483}, "maldives"), NewEmoji("flag: Malawi", []int32{127474, 127484}, "malawi"), NewEmoji("flag: Mexico", []int32{127474, 127485}, "mexico"), NewEmoji("flag: Malaysia", []int32{127474, 127486}, "malaysia"), NewEmoji("flag: Mozambique", []int32{127474, 127487}, "mozambique"), NewEmoji("flag: Namibia", []int32{127475, 127462}, "namibia"), NewEmoji("flag: New Caledonia", []int32{127475, 127464}, "new_caledonia"), NewEmoji("flag: Niger", []int32{127475, 127466}, "niger"), NewEmoji("flag: Norfolk Island", []int32{127475, 127467}, "norfolk_island"), NewEmoji("flag: Nigeria", []int32{127475, 127468}, "nigeria"), NewEmoji("flag: Nicaragua", []int32{127475, 127470}, "nicaragua"), NewEmoji("flag: Netherlands", []int32{127475, 127473}, "netherlands"), NewEmoji("flag: Norway", []int32{127475, 127476}, "norway"), NewEmoji("flag: Nepal", []int32{127475, 127477}, "nepal"), NewEmoji("flag: Nauru", []int32{127475, 127479}, "nauru"), NewEmoji("flag: Niue", []int32{127475, 127482}, "niue"), NewEmoji("flag: New Zealand", []int32{127475, 127487}, "new_zealand"), NewEmoji("flag: Oman", []int32{127476, 127474}, "oman"), NewEmoji("flag: Panama", []int32{127477, 127462}, "panama"), NewEmoji("flag: Peru", []int32{127477, 127466}, "peru"), NewEmoji("flag: French Polynesia", []int32{127477, 127467}, "french_polynesia"), NewEmoji("flag: Papua New Guinea", []int32{127477, 127468}, "papua_new_guinea"), NewEmoji("flag: Philippines", []int32{127477, 127469}, "philippines"), NewEmoji("flag: Pakistan", []int32{127477, 127472}, "pakistan"), NewEmoji("flag: Poland", []int32{127477, 127473}, "poland"), NewEmoji("flag: St. Pierre & Miquelon", []int32{127477, 127474}, "st_pierre_miquelon"), NewEmoji("flag: Pitcairn Islands", []int32{127477, 127475}, "pitcairn_islands"), NewEmoji("flag: Puerto Rico", []int32{127477, 127479}, "puerto_rico"), NewEmoji("flag: Palestinian Territories", []int32{127477, 127480}, "palestinian_territories"), NewEmoji("flag: Portugal", []int32{127477, 127481}, "portugal"), NewEmoji("flag: Palau", []int32{127477, 127484}, "palau"), NewEmoji("flag: Paraguay", []int32{127477, 127486}, "paraguay"), NewEmoji("flag: Qatar", []int32{127478, 127462}, "qatar"), NewEmoji("flag: Réunion", []int32{127479, 127466}, "reunion"), NewEmoji("flag: Romania", []int32{127479, 127476}, "romania"), NewEmoji("flag: Serbia", []int32{127479, 127480}, "serbia"), NewEmoji("flag: Russia", []int32{127479, 127482}, "ru"), NewEmoji("flag: Rwanda", []int32{127479, 127484}, "rwanda"), NewEmoji("flag: Saudi Arabia", []int32{127480, 127462}, "saudi_arabia"), NewEmoji("flag: Solomon Islands", []int32{127480, 127463}, "solomon_islands"), NewEmoji("flag: Seychelles", []int32{127480, 127464}, "seychelles"), NewEmoji("flag: Sudan", []int32{127480, 127465}, "sudan"), NewEmoji("flag: Sweden", []int32{127480, 127466}, "sweden"), NewEmoji("flag: Singapore", []int32{127480, 127468}, "singapore"), NewEmoji("flag: St. Helena", []int32{127480, 127469}, "st_helena"), NewEmoji("flag: Slovenia", []int32{127480, 127470}, "slovenia"), NewEmoji("flag: Svalbard & Jan Mayen", []int32{127480, 127471}, "svalbard_jan_mayen"), NewEmoji("flag: Slovakia", []int32{127480, 127472}, "slovakia"), NewEmoji("flag: Sierra Leone", []int32{127480, 127473}, "sierra_leone"), NewEmoji("flag: San Marino", []int32{127480, 127474}, "san_marino"), NewEmoji("flag: Senegal", []int32{127480, 127475}, "senegal"), NewEmoji("flag: Somalia", []int32{127480, 127476}, "somalia"), NewEmoji("flag: Suriname", []int32{127480, 127479}, "suriname"), NewEmoji("flag: South Sudan", []int32{127480, 127480}, "south_sudan"), NewEmoji("flag: São Tomé & Príncipe", []int32{127480, 127481}, "sao_tome_principe"), NewEmoji("flag: El Salvador", []int32{127480, 127483}, "el_salvador"), NewEmoji("flag: Sint Maarten", []int32{127480, 127485}, "sint_maarten"), NewEmoji("flag: Syria", []int32{127480, 127486}, "syria"), NewEmoji("flag: Eswatini", []int32{127480, 127487}, "swaziland"), NewEmoji("flag: Tristan da Cunha", []int32{127481, 127462}, "tristan_da_cunha"), NewEmoji("flag: Turks & Caicos Islands", []int32{127481, 127464}, "turks_caicos_islands"), NewEmoji("flag: Chad", []int32{127481, 127465}, "chad"), NewEmoji("flag: French Southern Territories", []int32{127481, 127467}, "french_southern_territories"), NewEmoji("flag: Togo", []int32{127481, 127468}, "togo"), NewEmoji("flag: Thailand", []int32{127481, 127469}, "thailand"), NewEmoji("flag: Tajikistan", []int32{127481, 127471}, "tajikistan"), NewEmoji("flag: Tokelau", []int32{127481, 127472}, "tokelau"), NewEmoji("flag: Timor-Leste", []int32{127481, 127473}, "timor_leste"), NewEmoji("flag: Turkmenistan", []int32{127481, 127474}, "turkmenistan"), NewEmoji("flag: Tunisia", []int32{127481, 127475}, "tunisia"), NewEmoji("flag: Tonga", []int32{127481, 127476}, "tonga"), NewEmoji("flag: Turkey", []int32{127481, 127479}, "tr"), NewEmoji("flag: Trinidad & Tobago", []int32{127481, 127481}, "trinidad_tobago"), NewEmoji("flag: Tuvalu", []int32{127481, 127483}, "tuvalu"), NewEmoji("flag: Taiwan", []int32{127481, 127484}, "taiwan"), NewEmoji("flag: Tanzania", []int32{127481, 127487}, "tanzania"), NewEmoji("flag: Ukraine", []int32{127482, 127462}, "ukraine"), NewEmoji("flag: Uganda", []int32{127482, 127468}, "uganda"), NewEmoji("flag: U.S. Outlying Islands", []int32{127482, 127474}, "us_outlying_islands"), NewEmoji("flag: United Nations", []int32{127482, 127475}, "united_nations"), NewEmoji("flag: United States", []int32{127482, 127480}, "us"), NewEmoji("flag: Uruguay", []int32{127482, 127486}, "uruguay"), NewEmoji("flag: Uzbekistan", []int32{127482, 127487}, "uzbekistan"), NewEmoji("flag: Vatican City", []int32{127483, 127462}, "vatican_city"), NewEmoji("flag: St. Vincent & Grenadines", []int32{127483, 127464}, "st_vincent_grenadines"), NewEmoji("flag: Venezuela", []int32{127483, 127466}, "venezuela"), NewEmoji("flag: British Virgin Islands", []int32{127483, 127468}, "british_virgin_islands"), NewEmoji("flag: U.S. Virgin Islands", []int32{127483, 127470}, "us_virgin_islands"), NewEmoji("flag: Vietnam", []int32{127483, 127475}, "vietnam"), NewEmoji("flag: Vanuatu", []int32{127483, 127482}, "vanuatu"), NewEmoji("flag: Wallis & Futuna", []int32{127484, 127467}, "wallis_futuna"), NewEmoji("flag: Samoa", []int32{127484, 127480}, "samoa"), NewEmoji("flag: Kosovo", []int32{127485, 127472}, "kosovo"), NewEmoji("flag: Yemen", []int32{127486, 127466}, "yemen"), NewEmoji("flag: Mayotte", []int32{127486, 127481}, "mayotte"), NewEmoji("flag: South Africa", []int32{127487, 127462}, "south_africa"), NewEmoji("flag: Zambia", []int32{127487, 127474}, "zambia"), NewEmoji("flag: Zimbabwe", []int32{127487, 127484}, "zimbabwe"), NewEmoji("flag: England", []int32{127988, 917607, 917602, 917605, 917614, 917607, 917631}, "england"), NewEmoji("flag: Scotland", []int32{127988, 917607, 917602, 917619, 917603, 917620, 917631}, "scotland"), NewEmoji("flag: Wales", []int32{127988, 917607, 917602, 917623, 917612, 917619, 917631}, "wales"), ) }) m := github.Clone() for _, opt := range opts { opt(m) } return m } goldmark-emoji-1.0.1/emoji.go000066400000000000000000000215211372117312100160430ustar00rootroot00000000000000// package emoji is a extension for the goldmark(http://github.com/yuin/goldmark). package emoji import ( "fmt" "strings" "github.com/yuin/goldmark" east "github.com/yuin/goldmark-emoji/ast" "github.com/yuin/goldmark-emoji/definition" "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/renderer" "github.com/yuin/goldmark/renderer/html" "github.com/yuin/goldmark/text" "github.com/yuin/goldmark/util" ) // Option interface sets options for this extension. type Option interface { emojiOption() } // ParserConfig struct is a data structure that holds configuration of // the Emoji extension. type ParserConfig struct { Emojis definition.Emojis } const optEmojis parser.OptionName = "EmojiEmojis" // SetOption implements parser.SetOptioner func (c *ParserConfig) SetOption(name parser.OptionName, value interface{}) { switch name { case optEmojis: c.Emojis = value.(definition.Emojis) } } // A ParserOption interface sets options for the emoji parser. type ParserOption interface { Option parser.Option SetEmojiOption(*ParserConfig) } var _ ParserOption = &withEmojis{} type withEmojis struct { value definition.Emojis } func (o *withEmojis) emojiOption() {} func (o *withEmojis) SetParserOption(c *parser.Config) { c.Options[optEmojis] = o.value } func (o *withEmojis) SetEmojiOption(c *ParserConfig) { c.Emojis = o.value } // WithMaping is a functional option that defines links names to unicode emojis. func WithEmojis(value definition.Emojis) Option { return &withEmojis{ value: value, } } // RenderingMethod indicates how emojis are rendered. type RenderingMethod int // RendererFunc will be used for rendering emojis. type RendererFunc func(w util.BufWriter, source []byte, n *east.Emoji, config *RendererConfig) const ( // Entity renders an emoji as an html entity. Entity RenderingMethod = iota // Unicode renders an emoji as unicode character. Unicode // Twemoji renders an emoji as an img tag with [twemoji](https://github.com/twitter/twemoji). Twemoji // Func renders an emoji using RendererFunc. Func ) // RendererConfig struct holds options for the emoji renderer. type RendererConfig struct { html.Config // Method indicates how emojis are rendered. Method RenderingMethod // TwemojiTemplate is a printf template for twemoji. This value is valid only when Method is set to Twemoji. // `printf` arguments are: // // 1: name (e.g. "face with tears of joy") // 2: file name without an extension (e.g. 1f646-2642) // 3: '/' if XHTML, otherwise '' // TwemojiTemplate string // RendererFunc is a RendererFunc that renders emojis. This value is valid only when Method is set to Func. RendererFunc RendererFunc } // DefaultTwemojiTemplate is a default value for RendererConfig.TwemojiTemplate. const DefaultTwemojiTemplate = `%[1]s` // SetOption implements renderer.SetOptioner. func (c *RendererConfig) SetOption(name renderer.OptionName, value interface{}) { switch name { case optRenderingMethod: c.Method = value.(RenderingMethod) case optTwemojiTemplate: c.TwemojiTemplate = value.(string) case optRendererFunc: c.RendererFunc = value.(RendererFunc) default: c.Config.SetOption(name, value) } } // A RendererOption interface sets options for the emoji renderer. type RendererOption interface { Option renderer.Option SetEmojiOption(*RendererConfig) } var _ RendererOption = &withRenderingMethod{} type withRenderingMethod struct { value RenderingMethod } func (o *withRenderingMethod) emojiOption() { } // SetConfig implements renderer.Option#SetConfig. func (o *withRenderingMethod) SetConfig(c *renderer.Config) { c.Options[optRenderingMethod] = o.value } // SetEmojiOption implements RendererOption#SetEmojiOption func (o *withRenderingMethod) SetEmojiOption(c *RendererConfig) { c.Method = o.value } const optRenderingMethod renderer.OptionName = "EmojiRenderingMethod" // WithRenderingMethod is a functional option that indicates how emojis are rendered. func WithRenderingMethod(a RenderingMethod) Option { return &withRenderingMethod{a} } type withTwemojiTemplate struct { value string } func (o *withTwemojiTemplate) emojiOption() { } // SetConfig implements renderer.Option#SetConfig. func (o *withTwemojiTemplate) SetConfig(c *renderer.Config) { c.Options[optTwemojiTemplate] = o.value } // SetEmojiOption implements RendererOption#SetEmojiOption func (o *withTwemojiTemplate) SetEmojiOption(c *RendererConfig) { c.TwemojiTemplate = o.value } const optTwemojiTemplate renderer.OptionName = "EmojiTwemojiTemplate" // WithTwemojiTemplate is a functional option that changes a twemoji img tag. func WithTwemojiTemplate(s string) Option { return &withTwemojiTemplate{s} } var _ RendererOption = &withRendererFunc{} type withRendererFunc struct { value RendererFunc } func (o *withRendererFunc) emojiOption() { } // SetConfig implements renderer.Option#SetConfig. func (o *withRendererFunc) SetConfig(c *renderer.Config) { c.Options[optRendererFunc] = o.value } // SetEmojiOption implements RendererOption#SetEmojiOption func (o *withRendererFunc) SetEmojiOption(c *RendererConfig) { c.RendererFunc = o.value } const optRendererFunc renderer.OptionName = "EmojiRendererFunc" // WithRendererFunc is a functional option that changes a renderer func. func WithRendererFunc(f RendererFunc) Option { return &withRendererFunc{f} } type emojiParser struct { ParserConfig } // NewParser returns a new parser.InlineParser that can parse emoji expressions. func NewParser(opts ...ParserOption) parser.InlineParser { p := &emojiParser{ ParserConfig: ParserConfig{ Emojis: definition.Github(), }, } for _, o := range opts { o.SetEmojiOption(&p.ParserConfig) } return p } func (s *emojiParser) Trigger() []byte { return []byte{':'} } func (s *emojiParser) Parse(parent ast.Node, block text.Reader, pc parser.Context) ast.Node { line, _ := block.PeekLine() if len(line) < 1 { return nil } i := 1 for ; i < len(line); i++ { c := line[i] if !(util.IsAlphaNumeric(c) || c == '_' || c == '-' || c == '+') { break } } if i >= len(line) || line[i] != ':' { return nil } block.Advance(i + 1) shortName := line[1:i] emoji, ok := s.Emojis.Get(util.BytesToReadOnlyString(shortName)) if !ok { return nil } return east.NewEmoji(shortName, emoji) } type emojiHTMLRenderer struct { RendererConfig } // NewHTMLRenderer returns a new HTMLRenderer. func NewHTMLRenderer(opts ...RendererOption) renderer.NodeRenderer { r := &emojiHTMLRenderer{ RendererConfig: RendererConfig{ Config: html.NewConfig(), Method: Entity, TwemojiTemplate: DefaultTwemojiTemplate, RendererFunc: nil, }, } for _, opt := range opts { opt.SetEmojiOption(&r.RendererConfig) } return r } // RegisterFuncs implements renderer.NodeRenderer.RegisterFuncs. func (r *emojiHTMLRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { reg.Register(east.KindEmoji, r.renderEmoji) } const slash = " /" const empty = "" func (r *emojiHTMLRenderer) renderEmoji(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) { if !entering { return ast.WalkContinue, nil } node := n.(*east.Emoji) if !node.Value.IsUnicode() && r.Method != Func { fmt.Fprintf(w, `:%s:`, util.EscapeHTML(util.StringToReadOnlyBytes(node.Value.Name)), node.ShortName) return ast.WalkContinue, nil } switch r.Method { case Entity: for _, r := range node.Value.Unicode { if r == 0x200D { _, _ = w.WriteString("‍") continue } fmt.Fprintf(w, "&#x%x;", r) } case Unicode: fmt.Fprintf(w, "%s", string(node.Value.Unicode)) case Twemoji: s := slash if !r.XHTML { s = empty } values := []string{} for _, r := range node.Value.Unicode { values = append(values, fmt.Sprintf("%x", r)) } fmt.Fprintf(w, r.TwemojiTemplate, util.EscapeHTML(util.StringToReadOnlyBytes(node.Value.Name)), strings.Join(values, "-"), s) case Func: r.RendererFunc(w, source, node, &r.RendererConfig) } return ast.WalkContinue, nil } type emoji struct { options []Option } // Emoji is a goldmark.Extender implementation. var Emoji = &emoji{ options: []Option{}, } // New returns a new extension with given options. func New(opts ...Option) goldmark.Extender { return &emoji{ options: opts, } } // Extend implements goldmark.Extender. func (e *emoji) Extend(m goldmark.Markdown) { pOpts := []ParserOption{} rOpts := []RendererOption{} for _, o := range e.options { if po, ok := o.(ParserOption); ok { pOpts = append(pOpts, po) continue } if ro, ok := o.(RendererOption); ok { rOpts = append(rOpts, ro) } } m.Renderer().AddOptions(renderer.WithNodeRenderers( util.Prioritized(NewHTMLRenderer(rOpts...), 200), )) m.Parser().AddOptions(parser.WithInlineParsers( util.Prioritized(NewParser(pOpts...), 999), )) } goldmark-emoji-1.0.1/emoji_test.go000066400000000000000000000141161372117312100171040ustar00rootroot00000000000000package emoji import ( "fmt" "strings" "testing" "github.com/yuin/goldmark" east "github.com/yuin/goldmark-emoji/ast" "github.com/yuin/goldmark-emoji/definition" "github.com/yuin/goldmark/renderer/html" "github.com/yuin/goldmark/testutil" "github.com/yuin/goldmark/util" ) func TestOptions(t *testing.T) { markdown := goldmark.New( goldmark.WithExtensions( Emoji, ), ) count := 0 count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "default", Markdown: strings.TrimSpace(` Lucky :ok_man: `), Expected: strings.TrimSpace(`

Lucky 🙆‍♂️

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithRenderingMethod(Twemoji), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "twemoji(HTML5)", Markdown: strings.TrimSpace(` Lucky :joy: `), Expected: strings.TrimSpace(`

Lucky face with tears of joy

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithRenderingMethod(Twemoji), ), ), goldmark.WithRendererOptions( html.WithXHTML(), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "twemoji(XHTML)", Markdown: strings.TrimSpace(` Lucky :joy: `), Expected: strings.TrimSpace(`

Lucky face with tears of joy

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithRenderingMethod(Twemoji), WithTwemojiTemplate(`%[1]s`), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "twemoji with customized template", Markdown: strings.TrimSpace(` Lucky :joy: `), Expected: strings.TrimSpace(`

Lucky face with tears of joy

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis(definition.NewEmojis(definition.NewEmoji( "Standing man", []rune{0x1f9cd, 0x200d, 0x2642, 0xfe0f}, "man_standing", ))), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "twemoji with customized emoji definitions", Markdown: strings.TrimSpace(` Lucky :joy: :man_standing: `), Expected: strings.TrimSpace(`

Lucky :joy: 🧍‍♂️

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis( definition.Github( definition.WithEmojis( definition.NewEmoji( "Standing man", []rune{0x1f9cd, 0x200d, 0x2642, 0xfe0f}, "man_standing", ), ), ), ), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "twemoji with github emojis that are customized", Markdown: strings.TrimSpace(` Lucky :joy: :man_standing: `), Expected: strings.TrimSpace(`

Lucky 😂 🧍‍♂️

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis( definition.NewEmojis( definition.NewEmoji("Fast parrot", nil, "fastparrot"), ), ), WithRenderingMethod(Func), WithRendererFunc(func(w util.BufWriter, source []byte, n *east.Emoji, config *RendererConfig) { fmt.Fprintf(w, `%sFast parrotLucky 😂

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis( definition.NewEmojis( definition.NewEmoji("Fast parrot", nil, "fastparrot"), ), ), WithRenderingMethod(Twemoji), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "Non-unicode emoji in twemoji", Markdown: strings.TrimSpace(` :fastparrot: `), Expected: strings.TrimSpace(`

:fastparrot:

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis( definition.NewEmojis( definition.NewEmoji("Fast parrot", nil, "fastparrot"), ), ), WithRenderingMethod(Entity), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "Non-unicode emoji in entity", Markdown: strings.TrimSpace(` :fastparrot: `), Expected: strings.TrimSpace(`

:fastparrot:

`), }, t) markdown = goldmark.New( goldmark.WithExtensions( New( WithEmojis( definition.NewEmojis( definition.NewEmoji("Fast parrot", nil, "fastparrot"), ), ), WithRenderingMethod(Unicode), ), ), ) count++ testutil.DoTestCase(markdown, testutil.MarkdownTestCase{ No: count, Description: "Non-unicode emoji in unicode", Markdown: strings.TrimSpace(` :fastparrot: `), Expected: strings.TrimSpace(`

:fastparrot:

`), }, t) } goldmark-emoji-1.0.1/go.mod000066400000000000000000000001301372117312100155100ustar00rootroot00000000000000module github.com/yuin/goldmark-emoji go 1.15 require github.com/yuin/goldmark v1.2.1 goldmark-emoji-1.0.1/go.sum000066400000000000000000000002471372117312100155460ustar00rootroot00000000000000github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=