💮

Markdown 用の絵文字コードの一覧を作ってみる

commits2 min read 1

今回は軽く小ネタで。

Go 製 SSG の Hugo が v0.82.0 にアップデートしたのでリリースノートを見ていたのだが, markdown 用の絵文字コードのパースって kyokomi/emoji パッケージを使ってるんだねぇ。

Markdown 用の絵文字コードってのは, GitHub や Slack なんかで :smile: と入力したら 😄 に変換されるやつ。

ん? もしかして kyokomi/emoji パッケージがあれば絵文字コードの一覧が作れるんじゃね? と思いついたのでコードを書いてみた。こんな感じ。

// +build run

package main

import (
    "fmt"
    "sort"
    "strings"

    "github.com/kyokomi/emoji/v2"
)

type EmojiCode struct {
    Code, Emoji string
    Aliases     []string
}

func NewEmoji(e string, cs []string) (EmojiCode, bool) {
    if len(cs) > 0 {
        return EmojiCode{Code: emoji.NormalizeShortCode(cs[0]), Emoji: e, Aliases: cs}, true
    }
    return EmojiCode{}, false
}

func EmojiListAll() []EmojiCode {
    emojiList := []EmojiCode{}
    for e, clist := range emoji.RevCodeMap() {
        if ec, ok := NewEmoji(e, clist); ok {
            emojiList = append(emojiList, ec)
        }
    }
    sort.Slice(emojiList, func(i, j int) bool {
        return strings.Compare(emojiList[i].Code, emojiList[j].Code) < 0
    })
    return emojiList
}

func main() {
    fmt.Println("| Short Code | Graph | Aliases |")
    fmt.Println("| ---------- | :---: | ------- |")
    for _, ec := range EmojiListAll() {
        var bldr strings.Builder
        for _, c := range ec.Aliases {
            if ec.Code != c {
                bldr.WriteString(fmt.Sprintf(" `%s`", c))
            }
        }
        fmt.Printf("| `%s` | %s |%s |\n", ec.Code, ec.Emoji, bldr.String())
    }
}

で実際に動かしてみたら三千行以上の巨大テーブルになってしまった(笑) ここに貼り付けるわけにもいかないので Gist に貼っている。

ご笑覧あれ。

Zenn の markdown でも絵文字コードに対応してくれんもんかねぇ。

参考

https://text.baldanders.info/remark/2020/10/emoji-variation-and-markdown/