自制彩色字體Zsye發(fā)布?繪文字的隱藏技
“Zsye”是一個 ISO 15924 四字代碼,指符號(symbol)的彩色(繪文字,emoji)變體。
www.unicode.org/iso15924/iso15924-codes.html

動機
繪文字,雖然看起來像圖片,但也是文字,它有可以被機器識別的語義,可以在一些不能發(fā)圖的地方傳播、節(jié)省流量,可以被ctrl+F搜索,這是表情圖所不能代替的。
這個完全原創(chuàng)的字體不算新,去年6月之前就在用,用了快一年了。制作動機是,在用的視窗系統(tǒng)比較古老、彩色字體不好看,迫切需要顯示某些b站常見彩色繪文字,
比如:

及一些感慨:

和一些美好的祝??愿:

不光b站,像桃飽網(wǎng)還老喜歡用????這對符號:

還要區(qū)分b站一個心形表情圖(有必要嗎?圖片不便傳播,連b站專欄都不能插入文中使用。如果是也嫌系統(tǒng)繪文字字體不好看,就學推特自定義啊,技術上又不難)

最后還有一個技術問題。統(tǒng)一碼規(guī)定某些字符形狀完全一致????????????????,只有顏色區(qū)別????????????????,某些場合我需要區(qū)分它們。
加之系統(tǒng)字體老舊不能顯示所有彩色心,??因??此??做??了?這??個??字??體??

設計
統(tǒng)一碼有些歷史上的妥協(xié)。比如這個??,你看見是紅色的,但其實它是:
U+2764 HEAVY BLACK HEART “粗黑心”
名稱其實沒錯,本來?在各種非彩色字體里都是黑心。但到了彩色字體時期,統(tǒng)一碼需要找補,于是:
[先于繪文字收錄的符號名稱之White/Black一般譯作 空心/實心 而非 白/黑](unicode.org/reports/tr51/#Names)
并啟用了變體選擇符(U+FE00~FE0F Variation Selectors,簡稱VS,不可見字符,設計上是故意顯示不出來的,原則上即便有字形也不會顯示)其中,
VS15 U+FE0E指定前一個符號表現(xiàn)為單色(text style,使用例:??)
VS16 U+FE0F指定前一個符號表現(xiàn)為彩色(emoji?style,使用例:??)
注意這只是指定,如果渲染的軟件\應用不理會、字體不支持也沒辦法?!癦sye”就不支持VS15,不過我全都指定了后備單色字形,在不支持彩色字體的軟件里會顯示為對應的區(qū)分用單色字形,可以用????????????????試一試。
這種名實不符的情況還有。除了??中號空心星,為了區(qū)分下列這些,我也單獨做了彩字:

?? 看起來是個叉,其實是 U+2716 HEAVY MULTIPLICATION X “粗X形乘號”,和??加??減??除 一樣不做成紅色,經(jīng)常被誤用。
???U+274C CROSS MARK “叉號”,一般做成大紅叉。對應的是???U+2714 HEAVY CHECK MARK “粗勾選標記”。
??負形×標記,繪文字中用途是當作點叉按鈕,可以與??負形?標記一個顏色。
但這個???就挺怪,好像與??重復,其實與 ???? (用了VS15)是同一批的選項框,另外2個??不是繪文字。
由于某些人會在評論區(qū)打撲克,我需要區(qū)分究竟是實心的心?還是紅桃?。



繪文字似乎不重視麻將,并沒有全套的麻將繪文字,僅一個??是規(guī)定為彩色的(微軟大善人把全套做成彩色是個例外)。雖然沒必要,我順帶把??白板 和??牌背 給做了。

由于我想讓該字體完全原創(chuàng),所以沒用現(xiàn)成Noto字體,找了張不錯的實物圖作參考搞了個“黑體楷書(?)”。

同理,交通標志停車讓行??則是不用思源黑體,直接拍了張照片參考。

還有波浪線 ??? 等的制作就不介紹了吧??

FLAG
為了讓繪文字便于使用,有些復雜的處理被隱藏起來,但既然您看到這里大概也明白:某些看上去是1個的繪文字,實際上由不止1個字符組成:這個??(U+1F499)是1個字符,但這個??(U+2764 U+FE0F)是2個字符,而這個???????(U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F)是5個字符(???彩色+[ZWJ]+???彩色)。
隱藏技就是:統(tǒng)一碼里沒有一面國旗被編碼,大多國家、屬地、具特殊科學價值地點、組織旗幟是由區(qū)域指示符序列(Regional Indicator Sequences,簡稱RI)組成,是26個像??、??、??……這樣的字符。而RI遵循?ISO 3166-1二位字母代碼,比如俄羅斯的二位字母代碼就是RU,那么把??、??貼在一起,就成了???? ——你在選中的時候會發(fā)現(xiàn)這2個字符緊貼在一起沒法分開成?? ??,這就是有意向用戶隱藏起來的程序處理,防止用戶困惑:怎么旗子點一下刪除就變成一個英文繪文字了……
而呈現(xiàn)為旗幟就是字體解決的事。字體在收到有效的RI后會找到相應的旗幟字形給軟件顯示,如果沒有相應旗幟,那就顯示為類似下圖這樣:

許多國家沒撐到 ISO?3166-1 確立的時候(初次發(fā)表于1974年)就滅亡了,但蘇聯(lián)(Soviet Union)恰好有二位字母代碼:SU 因歷史原因被保留不會被用作別的用途——直到目前還有.su 域名,所以????技術上允許呈現(xiàn)為蘇聯(lián)國旗。
SU 原本自1992年9月起做為過渡性保留代碼,自2008年6月改起為特殊保留代碼
實際上此前已存在支持蘇聯(lián)國旗的彩色字體?[BabelStone Flags](babelstone.co.uk/Fonts/Flags.html),不過打開發(fā)現(xiàn)字形曲線似乎是自動掃描的,比較渣,所以我重新繪制了。
這個二位代碼是否可以自己編?倒也有先例:
代碼 XE、XS、XW 被WhatsApp軟件分別用于表示英格蘭、蘇格蘭、威爾士國旗的表情圖標。
但前提是,使用者自定義代碼:當使用者采用ISO 3166-1代碼系統(tǒng)時,在其內(nèi)部添加用于進一步表示其它國家、地區(qū)或地理區(qū)域名稱的代碼,ISO 3166/MA將不會在標準的更新過程中使用這些代碼。下面的二位代碼可以由使用者自由分配:AA、QM到QZ、XA到XZ、以及ZZ。
這意味著跟私用區(qū)一樣可能撞車。
于是暫時從未分配代碼里挑出2個:????(LQ,Liuqiu)、????(RK,Ryukyu)冒充琉球國代碼。
參考:ja.wikipedia.org/wiki/琉球王國、Flag_of_Ryukyu.svg

我將字形做成符合其實際縱橫比例的平放樣式,無旗桿,不勾邊(白底旗看不到邊是正常情況)
如果你的軟件不支持RI,那么請從私用區(qū)復制:U+E001、U+E002。含后備單色字形。
還有一個?Flag Emoji Tag Sequences?(使用U+1F3F4?? 和 不可見的標簽符)?是對應ISO 3166-2代碼的,如統(tǒng)一碼規(guī)定的英格蘭旗??????????????,本文篇幅過長不提。

該彩色字體為矢量的CPAL制式,Win10和新瀏覽器應該都支持??稍谶@下載與在線預覽:
[MY1L/wwwoff](github.com/MY1L/wwwoff/releases)

端午節(jié)修訂:在github寫了個干擾其他繪文字字體顯示旗幟的解決方案。