Skip to content

Instantly share code, notes, and snippets.

@Kennyl
Last active October 30, 2017 05:46
Show Gist options
  • Save Kennyl/e1d84f3d52dda89708dc41450d38e745 to your computer and use it in GitHub Desktop.
Save Kennyl/e1d84f3d52dda89708dc41450d38e745 to your computer and use it in GitHub Desktop.
Python Scripts that using FontForge module

Obsoleted please refer to here for New Scripts

Please install python-fontforge module first

Python script that minimize ttf font by input word list

Use minifyTC as input word list

Word list format

A
B
C

Python script that copy glyph 'A' to glyph 'B' by Reference

Use copyReferenceAtoB as input word list

Word list format (Copy glyph 'A' to glyph 'B', copy glyph 'C' to glyph 'D')

A B
C D

Check Missing Glyph in word list missingGlyph

Word list format

A
B
C
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import collections
import fontforge
from io import open
import sys
# ignore warning
# import warnings
# warnings.filterwarnings("ignore")
# can use 3 or 2
from PyQt5.QtWidgets import (QFileDialog, QDialog, QPushButton,
QLineEdit, QLabel, QCheckBox,
QApplication, QVBoxLayout)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIntValidator
class askSetting(QDialog):
def __init__(self,
app=None,
parent=None,
items=None):
super(askSetting, self).__init__(parent)
self.app = app
self.items = items
layout = QVBoxLayout()
self.lineedits = collections.OrderedDict()
self.buttons = collections.OrderedDict()
for key in items.keys():
if isinstance(items[key], bool):
self.buttons[key] = QCheckBox(key)
self.buttons[key].setChecked(items[key])
self.buttons[key].setFocusPolicy(Qt.StrongFocus)
layout.addWidget(self.buttons[key])
else:
layout.addWidget(QLabel(key))
self.lineedits[key] = QLineEdit()
if isinstance(items[key], int):
self.lineedits[key].setText(str(items[key]))
# self.lineedits[key].setInputMask("000")
self.lineedits[key].setMaxLength(3)
self.lineedits[key].setValidator(
QIntValidator(1, 999, self))
else:
self.lineedits[key].setText(items[key])
# enable ime input
self.lineedits[key].inputMethodQuery(Qt.ImEnabled)
layout.addWidget(self.lineedits[key])
self.btn = QPushButton('TTF File to Read', self)
self.btn.clicked.connect(lambda: (self.bye(items)))
self.btn.setFocusPolicy(Qt.StrongFocus)
layout.addWidget(self.btn)
self.setLayout(layout)
self.setWindowTitle(' Setting ')
def bye(self, items):
fileName = QFileDialog.getOpenFileName(
self, 'Dialog Title', '~/', initialFilter='*.ttf')
if fileName == (u'', u'*.ttf'):
print("Must Provide an input TTF file.")
sys.exit()
for key in self.buttons.keys():
self.items[key] = self.buttons[key].isChecked()
for key in self.lineedits.keys():
self.items[key] = self.lineedits[key].text()
self.items['getOpenFileName'] = fileName[0]
self.close()
self.app.exit(1)
inFilePrompt = "File to read"
defaultInFile = "missingGlyph"
items = collections.OrderedDict()
items[inFilePrompt] = defaultInFile
app = QApplication(sys.argv)
ask = askSetting(app=app, items=items)
ask.show()
rtnCode = app.exec_()
# If press OK button rtnCode should be 1
if rtnCode != 1:
print('User abort by closing Setting dialog')
sys.exit
# print(items)
ttfFile = fontforge.open(items['getOpenFileName'])
f = open(items[inFilePrompt], 'r', encoding="utf-8")
ttfFile.selection.none()
# file contents
# 問
# 问
# ie. \w
## ie. word
count = 0
for line in f:
words = line.encode("raw_unicode_escape").split()
if len(words) == 1:
if words[0].startswith(b'\u'):
ttfFile.selection.select(words[0][1:])
elif len(words[0]) == 1:
ttfFile.selection.select(words[0])
if sum(1 for _ in ttfFile.selection.byGlyphs) == 0:
count += 1
if count == 1:
print("\n Missing Glyph for followings:")
print("-1-2-3-4-5-6-7-8-9-⓵ -1-2-3-4-5-6-7-8-9-⓶ -")
sys.stdout.write(" ")
if words[0].startswith(b'\u'):
sys.stdout.write(words[0].decode("raw_unicode_escape"))
sys.stdout.write(" ")
if count % 20 == 0:
sys.stdout.write("\n ")
sys.stdout.flush()
if count > 0:
print("\n-1-2-3-4-5-6-7-8-9-⓵ -1-2-3-4-5-6-7-8-9-⓶ -")
# print("\n-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-ー-")
# print("\nーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー")
print(" Total Missing Glyph: "+str(count))
else:
print("\n No Missing Glyph")
內 内
勻 匀
戶 户
冊 册
丟 丢
亙 亘
吒 咤
汙 污
佇 伫
兌 兑
刪 删
吳 吴
呂 吕
囪 囱
壯 壮
夾 夹
妝 妆
決 决
沒 没
災 灾
禿 秃
見 见
貝 贝
車 车
迆 迤
亞 亚
來 来
兒 儿
兩 两
協 协
姍 姗
屆 届
岡 冈
拋 抛
東 东
歿 殁
況 况
爭 争
狀 状
玨 珏
糾 纠
羋 芈
臥 卧
軋 轧
長 长
門 门
俠 侠
侶 侣
兗 兖
則 则
勁 劲
卻 却
奐 奂
姪 侄
帥 帅
彥 彦
恆 恒
柵 栅
洶 汹
為 为
紂 纣
紅 红
紀 纪
紉 纫
紇 纥
約 约
苧 苎
計 计
訂 订
訃 讣
貞 贞
負 负
軍 军
軌 轨
閂 闩
韋 韦
頁 页
風 风
飛 飞
倆 俩
們 们
倀 伥
個 个
倫 伦
倉 仓
凍 冻
剛 刚
剝 剥
員 员
娛 娱
孫 孙
宮 宫
峽 峡
島 岛
師 师
庫 库
徑 径
恥 耻
悅 悦
挾 挟
時 时
晉 晋
書 书
氣 气
涇 泾
烏 乌
狹 狭
狽 狈
畝 亩
皰 疱
紡 纺
紗 纱
紋 纹
純 纯
紐 纽
紕 纰
級 级
紜 纭
納 纳
紙 纸
紛 纷
脅 胁
脈 脉
芻 刍
荊 荆
茲 兹
記 记
訐 讦
討 讨
訌 讧
訕 讪
訊 讯
訓 训
訖 讫
豈 岂
財 财
貢 贡
軒 轩
軔 轫
釘 钉
針 针
釗 钊
閃 闪
陣 阵
陝 陕
馬 马
偽 伪
偉 伟
偵 侦
側 侧
務 务
動 动
區 区
參 参
啞 哑
問 问
國 国
堅 坚
堊 垩
執 执
夠 够
婁 娄
婦 妇
專 专
將 将
屜 屉
崢 峥
帶 带
帳 帐
張 张
強 强
從 从
悵 怅
掃 扫
掛 挂
捫 扪
掄 抡
掙 挣
敗 败
啟 启
敘 叙
斬 斩
晝 昼
勗 勖
桿 杆
棄 弃
梔 栀
條 条
梟 枭
殺 杀
氫 氢
涼 凉
淺 浅
淵 渊
淚 泪
淪 沦
淨 净
牽 牵
猙 狰
現 现
產 产
畢 毕
異 异
眾 众
絆 绊
統 统
紹 绍
紼 绋
絀 绌
細 细
紳 绅
組 组
終 终
缽 钵
習 习
脣 唇
脫 脱
莢 荚
莖 茎
莊 庄
處 处
術 术
袞 衮
覓 觅
規 规
訪 访
訝 讶
訣 诀
訥 讷
許 许
設 设
訟 讼
訛 讹
販 贩
責 责
貫 贯
貨 货
貪 贪
貧 贫
軛 轭
軟 软
這 这
連 连
逕 迳
釵 钗
釣 钓
釧 钏
閉 闭
陳 陈
陸 陆
陰 阴
頂 顶
頃 顷
魚 鱼
鳥 鸟
麥 麦
備 备
傖 伧
傘 伞
凱 凯
剴 剀
創 创
勞 劳
勝 胜
勛 勋
喪 丧
單 单
喲 哟
喚 唤
喬 乔
圍 围
堯 尧
場 场
報 报
壺 壶
尋 寻
嵐 岚
幀 帧
廁 厕
廂 厢
惡 恶
悶 闷
愜 惬
惻 恻
惱 恼
揀 拣
揮 挥
換 换
揚 扬
棗 枣
棟 栋
棧 栈
棲 栖
欽 钦
殘 残
殼 壳
湧 涌
湊 凑
減 减
渦 涡
湯 汤
測 测
渾 浑
渙 涣
無 无
猶 犹
琺 珐
畫 画
痙 痉
盜 盗
硯 砚
稈 秆
稅 税
筆 笔
筍 笋
絞 绞
結 结
絨 绒
絕 绝
絲 丝
絡 络
給 给
絢 绚
肅 肃
腎 肾
脹 胀
華 华
萊 莱
虛 虚
視 视
詠 咏
評 评
詞 词
詁 诂
詔 诏
詛 诅
詐 诈
詆 诋
訴 诉
診 诊
貯 贮
貼 贴
貳 贰
貽 贻
賁 贲
費 费
賀 贺
貴 贵
買 买
貶 贬
貿 贸
貸 贷
軻 轲
軸 轴
軼 轶
進 进
郵 邮
鄉 乡
鈔 钞
鈣 钙
鈕 钮
鈉 钠
鈞 钧
鈍 钝
鈐 钤
閔 闵
閏 闰
開 开
間 间
隊 队
階 阶
陽 阳
雋 隽
韌 韧
項 项
順 顺
飪 饪
飯 饭
飩 饨
飲 饮
飭 饬
馮 冯
馭 驭
黃 黄
亂 乱
債 债
傳 传
僅 仅
傾 倾
傷 伤
傯 偬
勢 势
嗎 吗
嗇 啬
嗚 呜
嗆 呛
園 园
圓 圆
塗 涂
塊 块
塢 坞
奧 奥
媽 妈
媼 媪
廈 厦
愛 爱
慍 愠
愾 忾
愴 怆
損 损
搶 抢
搖 摇
搗 捣
暉 晖
暈 晕
會 会
業 业
極 极
楊 杨
楨 桢
楓 枫
歲 岁
溝 沟
滅 灭
溼 湿
溫 温
滄 沧
煩 烦
煬 炀
煥 焕
爺 爷
獅 狮
琿 珲
痺 痹
盞 盏
睞 睐
睜 睁
祿 禄
萬 万
稜 棱
稟 禀
節 节
粵 粤
經 经
絹 绢
綁 绑
綏 绥
義 义
羨 羡
聖 圣
腸 肠
腳 脚
腫 肿
腦 脑
葷 荤
葦 苇
葉 叶
萵 莴
虜 虏
號 号
蛻 蜕
補 补
裝 装
詫 诧
該 该
詳 详
試 试
詩 诗
詰 诘
詼 诙
詣 诣
誠 诚
話 话
誅 诛
詭 诡
詢 询
詮 诠
詬 诟
賊 贼
資 资
賈 贾
賄 贿
貲 赀
賃 赁
賂 赂
賅 赅
跡 迹
較 较
載 载
軾 轼
輊 轾
農 农
運 运
達 达
違 违
過 过
鄒 邹
鈷 钴
鉗 钳
鈸 钹
鈽 钚
鉀 钾
鈾 铀
鉛 铅
鉤 钩
鉑 铂
鈴 铃
閘 闸
隕 陨
電 电
預 预
頑 顽
頓 顿
頊 顼
頒 颁
頌 颂
飼 饲
飴 饴
飽 饱
飾 饰
馳 驰
馱 驮
馴 驯
鳩 鸠
僥 侥
僑 侨
匱 匮
厭 厌
嘔 呕
嘆 叹
嘍 喽
嘖 啧
團 团
圖 图
塵 尘
墊 垫
塹 堑
壽 寿
夢 梦
奪 夺
奩 奁
嫗 妪
寧 宁
實 实
寢 寝
對 对
屢 屡
嶄 崭
嶇 岖
幣 币
幗 帼
徹 彻
態 态
慣 惯
慟 恸
慚 惭
慘 惨
摟 搂
摑 掴
暢 畅
榮 荣
槓 杠
構 构
槍 枪
氳 氲
滾 滚
漬 渍
漢 汉
滿 满
滯 滞
漸 渐
漲 涨
漣 涟
滬 沪
漁 渔
滲 渗
滌 涤
爾 尔
犖 荦
獄 狱
瑤 瑶
瑣 琐
瑪 玛
瘧 疟
瘍 疡
瘋 疯
瘓 痪
監 监
碩 硕
禎 祯
禍 祸
種 种
稱 称
窪 洼
窩 窝
箋 笺
箏 筝
綻 绽
綰 绾
綜 综
綽 绰
綾 绫
綠 绿
緊 紧
綴 缀
網 网
綱 纲
綺 绮
綢 绸
綿 绵
綸 纶
維 维
緒 绪
緇 缁
罰 罚
聞 闻
與 与
蒞 莅
蓋 盖
蓀 荪
蒼 苍
蝕 蚀
誦 诵
語 语
誣 诬
認 认
誡 诫
誤 误
說 说
誥 诰
誨 诲
誘 诱
誑 诳
賓 宾
賑 赈
賒 赊
趙 赵
趕 赶
輔 辅
輒 辄
輕 轻
遠 远
遜 逊
遙 遥
遞 递
鉸 铰
銬 铐
銀 银
銅 铜
銘 铭
銖 铢
鉻 铬
銓 铨
閡 阂
閨 闺
閩 闽
閣 阁
閥 阀
際 际
頗 颇
領 领
颯 飒
餃 饺
餅 饼
餌 饵
餉 饷
駁 驳
骯 肮
鳴 鸣
鳶 鸢
鳳 凤
齊 齐
億 亿
儀 仪
價 价
儂 侬
儈 侩
儉 俭
凜 凛
劇 剧
劉 刘
劍 剑
厲 厉
嘮 唠
噓 嘘
噴 喷
嘯 啸
嘰 叽
墳 坟
墜 坠
墮 堕
嫻 娴
嬋 婵
嫵 妩
嬌 娇
寬 宽
審 审
寫 写
層 层
幟 帜
廢 废
廚 厨
廟 庙
廝 厮
廣 广
廠 厂
彈 弹
慶 庆
慮 虑
憂 忧
慫 怂
憐 怜
憫 悯
憚 惮
憤 愤
摯 挚
撲 扑
撈 捞
撐 撑
撥 拨
撓 挠
撫 抚
敵 敌
數 数
暫 暂
樣 样
槨 椁
樁 桩
樞 枢
標 标
樓 楼
槳 桨
樂 乐
樅 枞
歐 欧
殤 殇
毆 殴
漿 浆
潑 泼
潔 洁
澆 浇
潛 潜
潰 溃
潤 润
澗 涧
熱 热
犛 牦
獎 奖
瑩 莹
瘡 疮
皚 皑
皺 皱
盤 盘
瞇 眯
確 确
碼 码
窯 窑
窮 穷
範 范
締 缔
練 练
緯 纬
緻 致
緘 缄
緬 缅
緝 缉
編 编
緣 缘
線 缐
緞 缎
緩 缓
綞 缍
罵 骂
罷 罢
膠 胶
膚 肤
蓮 莲
蔭 荫
蔣 蒋
蔥 葱
蝦 虾
蝸 蜗
衛 卫
誼 谊
諒 谅
談 谈
諄 谆
誕 诞
請 请
諸 诸
課 课
諉 诿
諂 谄
調 调
誰 谁
論 论
諍 诤
豎 竖
豬 猪
賠 赔
賞 赏
賦 赋
賤 贱
賬 账
賭 赌
賢 贤
賣 卖
賜 赐
質 质
踐 践
輝 辉
輛 辆
輟 辍
輩 辈
輦 辇
輪 轮
輜 辎
適 适
遷 迁
鄰 邻
鄭 郑
鄧 邓
醃 腌
鋅 锌
銻 锑
銷 销
鋪 铺
鋤 锄
鋁 铝
銳 锐
銼 锉
鋒 锋
閭 闾
閱 阅
鞏 巩
頡 颉
養 养
餓 饿
餒 馁
駝 驼
駐 驻
駟 驷
駛 驶
駑 驽
駕 驾
駒 驹
駙 驸
鬧 闹
魷 鱿
魯 鲁
鴆 鸩
鴉 鸦
麩 麸
齒 齿
儔 俦
儐 傧
劑 剂
噸 吨
噥 哝
噯 嗳
墾 垦
奮 奋
學 学
導 导
憲 宪
憑 凭
憊 惫
懍 懔
憶 忆
戰 战
擁 拥
擋 挡
撻 挞
據 据
擄 掳
擇 择
撿 捡
擔 担
曉 晓
樺 桦
橫 横
樹 树
橢 椭
橋 桥
機 机
澱 淀
濃 浓
澤 泽
濁 浊
熾 炽
燉 炖
燒 烧
燈 灯
燙 烫
燜 焖
獨 独
璣 玑
甌 瓯
盧 卢
瞞 瞒
磚 砖
積 积
穎 颖
穌 稣
窺 窥
簑 蓑
築 筑
篤 笃
篛 箬
篩 筛
縊 缢
縑 缣
縈 萦
縛 缚
縣 县
膩 腻
興 兴
艙 舱
蕭 萧
蕪 芜
螞 蚂
螢 萤
褲 裤
親 亲
覦 觎
諦 谛
諺 谚
諫 谏
諱 讳
謀 谋
諜 谍
諧 谐
諮 谘
諾 诺
謁 谒
謂 谓
諷 讽
諭 谕
貓 猫
賴 赖
踴 踊
輻 辐
輯 辑
輸 输
辦 办
選 选
遲 迟
遼 辽
遺 遗
錠 锭
鋸 锯
錳 锰
錯 错
錢 钱
鋼 钢
錫 锡
錄 录
錚 铮
錐 锥
錦 锦
閻 阎
隨 随
險 险
靜 静
靦 䩄
頰 颊
頸 颈
頻 频
頷 颔
頭 头
頹 颓
頤 颐
館 馆
餞 饯
餛 馄
餡 馅
駭 骇
駢 骈
駱 骆
鮑 鲍
鴕 鸵
鴣 鸪
鴦 鸯
鴨 鸭
鴒 鸰
鴛 鸳
龍 龙
龜 龟
優 优
償 偿
儲 储
勵 励
嚀 咛
嚇 吓
壓 压
嬰 婴
嬪 嫔
嬤 嬷
尷 尴
嶼 屿
嶺 岭
幫 帮
應 应
懇 恳
戲 戏
擊 击
擠 挤
擰 拧
擬 拟
擱 搁
斂 敛
斃 毙
曖 暧
檔 档
檢 检
檜 桧
櫛 栉
殮 殓
濘 泞
濱 滨
濟 济
濤 涛
濫 滥
澀 涩
營 营
燦 灿
燭 烛
燴 烩
牆 墙
獰 狞
環 环
璦 瑷
癆 痨
療 疗
矯 矫
磯 矶
禪 禅
簍 篓
糞 粪
縮 缩
績 绩
繆 缪
縷 缕
縲 缧
繃 绷
縫 缝
總 总
縱 纵
繅 缫
聲 声
聰 聪
聯 联
聳 耸
膿 脓
膽 胆
臉 脸
膾 脍
臨 临
舉 举
艱 艰
薔 蔷
虧 亏
螻 蝼
蟈 蝈
褻 亵
褸 褛
覬 觊
謎 谜
謗 谤
謙 谦
講 讲
謊 谎
謠 谣
謝 谢
謄 誊
賺 赚
賽 赛
購 购
趨 趋
轄 辖
輾 辗
轅 辕
輿 舆
還 还
邁 迈
醞 酝
鍍 镀
鎂 镁
錨 锚
鍵 键
鍥 锲
鍋 锅
錘 锤
鍬 锹
鍛 锻
鍰 锾
闊 阔
闋 阕
闌 阑
闈 闱
隱 隐
隸 隶
雖 虽
韓 韩
顆 颗
颶 飓
騁 骋
駿 骏
鮮 鲜
鮫 鲛
鮪 鲔
鴻 鸿
鴿 鸽
點 点
齋 斋
叢 丛
嚕 噜
壙 圹
壘 垒
嬸 婶
懣 懑
擴 扩
擲 掷
擾 扰
攆 撵
擺 摆
擻 擞
斷 断
檳 槟
櫃 柜
檻 槛
檸 柠
歟 欤
歸 归
殯 殡
瀉 泻
濾 滤
瀆 渎
濺 溅
瀏 浏
燻 熏
獷 犷
獵 猎
甕 瓮
癘 疠
礎 础
禮 礼
穡 穑
穢 秽
竄 窜
竅 窍
簫 箫
簞 箪
簣 篑
簡 简
糧 粮
織 织
繕 缮
繞 绕
繚 缭
繡 绣
翹 翘
職 职
聶 聂
臍 脐
臏 膑
舊 旧
薩 萨
藍 蓝
蟯 蛲
蟬 蝉
覲 觐
觴 觞
謨 谟
謹 谨
謬 谬
豐 丰
贅 赘
蹣 蹒
蹤 踪
軀 躯
轉 转
轍 辙
邇 迩
醫 医
醬 酱
釐 厘
鎔 镕
鎊 镑
鎖 锁
鎢 钨
鎳 镍
鎮 镇
闔 阖
闖 闯
闐 阗
雜 杂
雙 双
雛 雏
雞 鸡
額 额
顏 颜
題 题
顎 颚
顓 颛
颺 飏
餾 馏
餿 馊
餽 馈
騎 骑
鯊 鲨
鯉 鲤
鯽 鲫
鵑 鹃
鵝 鹅
鵠 鹄
嚨 咙
壟 垄
壢 坜
寵 宠
龐 庞
廬 庐
懲 惩
懷 怀
懶 懒
攏 拢
曠 旷
櫥 橱
櫝 椟
櫚 榈
櫓 橹
瀟 潇
瀨 濑
瀝 沥
瀕 濒
爍 烁
牘 牍
犢 犊
獸 兽
獺 獭
璽 玺
瓊 琼
疇 畴
礙 碍
禱 祷
穩 稳
簷 檐
繭 茧
繹 绎
繩 绳
繪 绘
羅 罗
羶 膻
臘 腊
藝 艺
藪 薮
藥 药
蟻 蚁
蠅 蝇
蠍 蝎
襠 裆
襖 袄
譜 谱
識 识
譚 谭
譎 谲
譏 讥
贈 赠
蹺 跷
轔 辚
轎 轿
辭 辞
邊 边
鏡 镜
鏑 镝
鏃 镞
鏈 链
鏜 镗
鏝 镘
鏢 镖
鏍 镙
鏘 锵
鏤 镂
鏗 铿
關 关
隴 陇
離 离
難 难
霧 雾
韜 韬
韻 韵
類 类
顛 颠
颼 飕
饅 馒
騖 骛
騙 骗
鯨 鲸
鯧 鲳
鶉 鹑
鵡 鹉
鵲 鹊
鵪 鹌
鵬 鹏
麗 丽
麴 麹
勸 劝
嚶 嘤
嚴 严
寶 宝
懸 悬
懺 忏
攔 拦
攙 搀
朧 胧
瀾 澜
爐 炉
犧 牺
獻 献
瓏 珑
癢 痒
礦 矿
礪 砺
礬 矾
礫 砾
竇 窦
競 竞
籌 筹
籃 篮
辮 辫
繽 缤
繼 继
臚 胪
艦 舰
藹 蔼
藺 蔺
蘆 芦
蘊 蕴
蠔 蚝
襤 褴
覺 觉
觸 触
議 议
譯 译
贏 赢
贍 赡
躉 趸
躂 跶
釋 释
鐃 铙
鏽 锈
闡 阐
飄 飘
饒 饶
騫 骞
騰 腾
騷 骚
鰓 鳃
鰍 鳅
黨 党
齟 龃
齡 龄
儷 俪
囁 嗫
囀 啭
囂 嚣
屬 属
懼 惧
懾 慑
攝 摄
攜 携
櫻 樱
欄 栏
殲 歼
爛 烂
癩 癞
矓 眬
纏 缠
續 续
蘭 兰
蘚 藓
蠣 蛎
蠟 蜡
襪 袜
覽 览
譴 谴
護 护
譽 誉
贓 赃
躊 踌
躍 跃
轟 轰
辯 辩
鐮 镰
鐳 镭
鐵 铁
鐺 铛
鐸 铎
鐲 镯
響 响
顧 顾
驅 驱
驃 骠
驀 蓦
騾 骡
髏 髅
鰭 鳍
鰥 鳏
鶯 莺
鶴 鹤
鷂 鹞
齜 龇
齦 龈
儼 俨
囈 呓
囉 啰
孿 孪
巔 巅
巒 峦
彎 弯
攤 摊
權 权
歡 欢
灑 洒
灘 滩
玀 猡
疊 叠
癮 瘾
癬 癣
籠 笼
籟 籁
聾 聋
聽 听
襲 袭
襯 衬
讀 读
贖 赎
贗 赝
躑 踯
轡 辔
鑄 铸
霽 霁
韃 鞑
韁 缰
顫 颤
驕 骄
鱉 鳖
鰱 鲢
鰾 鳔
鰻 鳗
鷓 鹧
鷗 鸥
鼴 鼹
齬 龉
齪 龊
龔 龚
戀 恋
攣 挛
攪 搅
竊 窃
纓 缨
纖 纤
蘿 萝
蠱 蛊
變 变
邐 逦
邏 逻
鑣 镳
鑠 铄
靨 靥
顯 显
饜 餍
驚 惊
驛 驿
驗 验
體 体
鱔 鳝
鱗 鳞
鱖 鳜
鷥 鸶
囑 嘱
壩 坝
攬 揽
癱 瘫
癲 癫
羈 羁
蠶 蚕
讓 让
讒 谗
讖 谶
贛 赣
釀 酿
靂 雳
靈 灵
靄 霭
顰 颦
驟 骤
鬢 鬓
魘 魇
鷹 鹰
鷺 鹭
鹼 硷
鹽 盐
鼇 鳌
齷 龌
齲 龋
廳 厅
欖 榄
灣 湾
籬 篱
籮 箩
蠻 蛮
觀 观
躡 蹑
釁 衅
鑲 镶
鑰 钥
顱 颅
饞 馋
灤 滦
矚 瞩
驢 驴
驥 骥
纜 缆
躪 躏
鑽 钻
鑾 銮
鑼 锣
鱷 鳄
鱸 鲈
黷 黩
豔 艳
鑿 凿
鸚 鹦
驪 骊
鸞 鸾
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import collections
import fontforge
from io import open
import os
import sys
# ignore warning
# import warnings
# warnings.filterwarnings("ignore")
# can use 3 or 2
from PyQt5.QtWidgets import (QFileDialog, QDialog, QPushButton,
QLineEdit, QLabel,
QApplication, QVBoxLayout)
from PyQt5.QtCore import Qt
class askSetting(QDialog):
def __init__(self,
app=None,
parent=None,
items=None):
super(askSetting, self).__init__(parent)
self.app = app
self.items = items
layout = QVBoxLayout()
self.lineedits = {}
for key in items.keys():
layout.addWidget(QLabel(key))
self.lineedits[key] = QLineEdit()
self.lineedits[key].setText(items[key])
# enable ime input
self.lineedits[key].inputMethodQuery(Qt.ImEnabled)
layout.addWidget(self.lineedits[key])
self.btn = QPushButton('TTF File to Read', self)
self.btn.clicked.connect(lambda: (self.bye(items)))
self.btn.setFocusPolicy(Qt.StrongFocus)
layout.addWidget(self.btn)
self.setLayout(layout)
self.setWindowTitle(' Setting ')
def bye(self, items):
fileName = QFileDialog.getOpenFileName(
self, 'Dialog Title', '~/', initialFilter='*.ttf')
if fileName == (u'', u'*.ttf'):
print("Must Provide an input TTF file.")
sys.exit()
for key in self.lineedits.keys():
self.items[key] = self.lineedits[key].text()
self.items['getOpenFileName'] = fileName[0]
self.close()
self.app.exit(1)
inFilePrompt = "File to read"
defaultInFile = "copyReferenceAtoB"
outFilePrompt = "TTF File to write"
defaultOutFile = "out.ttf"
items = collections.OrderedDict()
items[inFilePrompt] = defaultInFile
items[outFilePrompt] = defaultOutFile
app = QApplication(sys.argv)
ask = askSetting(app=app, items=items)
ask.show()
rtnCode = app.exec_()
# If press OK button rtnCode should be 1
if rtnCode != 1:
print('User abort by closing Setting dialog')
sys.exit
# print(items)
ttfFile = fontforge.open(items['getOpenFileName'])
f = open(items[inFilePrompt], 'r', encoding="utf-8")
ttfFile.selection.none()
# file contents
# 問
# 问
# ie. \w
## ie. word
count = 0
for line in f:
words = line.encode("raw_unicode_escape").split()
# words = line.split()
# print(len(words))
if len(words) == 2:
sys.stdout.write(words[0].decode('unicode_escape'))
count += 1
if count % 25 == 0:
sys.stdout.write("\n")
sys.stdout.flush()
if words[0] == words[1]:
pass
elif words[0].startswith(b'\u') and words[1].startswith(b'\u'):
ttfFile.selection.select(words[0][1:])
ttfFile.copyReference()
if words[1].startswith(b'\u'):
ttfFile.selection.select(words[1][1:])
else:
ttfFile.selection.select(words[1])
ttfFile.paste()
else:
ttfFile.selection.select(words[0])
ttfFile.copyReference()
if words[1].startswith(b'\u'):
ttfFile.selection.select(words[1][1:])
else:
ttfFile.selection.select(words[1])
ttfFile.paste()
ttfFile.fontname = ttfFile.fontname + "-TWEAK"
if not os.path.exists("out"):
os.makedirs("out")
ttfFile.generate("out/"+defaultOutFile)
print(u'\nGenerated '+ttfFile.fontname+u" as out/"+defaultOutFile+u"\n")
禿
歿
倀
貿
祿
滿
綿
漿
調
輿
駿
鴿
餿
孿
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import collections
import fontforge
from io import open
import os
import sys
# ignore warning
# import warnings
# warnings.filterwarnings("ignore")
# can use 3 or 2
from PyQt5.QtWidgets import (QFileDialog, QDialog, QPushButton,
QLineEdit, QLabel, QCheckBox,
QApplication, QVBoxLayout)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIntValidator
useUnichr = False
if not useUnichr:
unichr = str
class askSetting(QDialog):
def __init__(self,
app=None,
parent=None,
items=None):
super(askSetting, self).__init__(parent)
self.app = app
self.items = items
layout = QVBoxLayout()
self.lineedits = collections.OrderedDict()
self.buttons = collections.OrderedDict()
for key in items.keys():
if isinstance(items[key], bool):
self.buttons[key] = QCheckBox(key)
self.buttons[key].setChecked(items[key])
self.buttons[key].setFocusPolicy(Qt.StrongFocus)
layout.addWidget(self.buttons[key])
else:
layout.addWidget(QLabel(key))
self.lineedits[key] = QLineEdit()
if isinstance(items[key], int):
self.lineedits[key].setText(str(items[key]))
# self.lineedits[key].setInputMask("000")
self.lineedits[key].setMaxLength(3)
self.lineedits[key].setValidator(
QIntValidator(1, 999, self))
else:
self.lineedits[key].setText(items[key])
# enable ime input
self.lineedits[key].inputMethodQuery(Qt.ImEnabled)
layout.addWidget(self.lineedits[key])
self.btn = QPushButton('TTF File to Read', self)
self.btn.clicked.connect(lambda: (self.bye(items)))
self.btn.setFocusPolicy(Qt.StrongFocus)
layout.addWidget(self.btn)
self.setLayout(layout)
self.setWindowTitle(' Setting ')
def bye(self, items):
fileName = QFileDialog.getOpenFileName(
self, 'Dialog Title', '~/', initialFilter='*.ttf')
if fileName == (u'', u'*.ttf'):
print("Must Provide an input TTF file.")
sys.exit()
for key in self.buttons.keys():
self.items[key] = self.buttons[key].isChecked()
for key in self.lineedits.keys():
self.items[key] = self.lineedits[key].text()
self.items['getOpenFileName'] = fileName[0]
self.close()
self.app.exit(1)
inFilePrompt = "File to read"
defaultInFile = "minifyTC"
outFilePrompt = "Minimize TTF File to write"
defaultOutFile = "out.ttf"
generateGlyphAsEPS = "Generate Glyph As EPS"
generateGlyphAsPNG = "Generate Glyph As PNG"
defaultPNGSize = "PNG Pixel Size"
items = collections.OrderedDict()
items[inFilePrompt] = defaultInFile
items[outFilePrompt] = defaultOutFile
items[generateGlyphAsEPS] = True
items[generateGlyphAsPNG] = True
items[defaultPNGSize] = 48
app = QApplication(sys.argv)
ask = askSetting(app=app, items=items)
ask.show()
rtnCode = app.exec_()
# If press OK button rtnCode should be 1
if rtnCode != 1:
print('User abort by closing Setting dialog')
sys.exit
# print(items)
ttfFile = fontforge.open(items['getOpenFileName'])
f = open(items[inFilePrompt], 'r', encoding="utf-8")
ttfFile.selection.none()
# file contents
# 問
# 问
# ie. \w
## ie. word
count = 0
for line in f:
words = line.encode("raw_unicode_escape").split()
# words = line.split()
# print(len(words))
if len(words) == 1:
sys.stdout.write(words[0].decode('unicode_escape'))
count += 1
if count % 25 == 0:
sys.stdout.write("\n")
sys.stdout.flush()
if words[0].startswith(b'\u'):
###
# SelectNone()
# SelectMore(...)
# SelectInvert()
# Clear()
###
# print(words[0].decode('unicode_escape'))
ttfFile.selection.select(("more", None), words[0][1:])
elif len(words[0]) == 1:
# print(words[0].decode('unicode_escape'))
ttfFile.selection.select(("more", None), words[0])
ttfFile.selection.invert()
ttfFile.clear()
ttfFile.fontname = ttfFile.fontname + "-SKIM"
if not os.path.exists("out"):
os.makedirs("out")
ttfFile.generate("out/"+defaultOutFile)
print(u'\nGenerated '+ttfFile.fontname+u" as out/"+defaultOutFile+u"\n")
ttfFile.selection.invert()
if items[generateGlyphAsEPS]:
if not os.path.exists("out/eps"):
os.makedirs("out/eps")
count = 0
print(u'\nGenerating EPS')
for glyph in ttfFile.selection.byGlyphs:
# glyph.export("out/eps/"+str(glyph.unicode)+".eps")
glyph.export("out/eps/"+unichr(glyph.unicode)+".eps")
sys.stdout.write('.')
sys.stdout.flush()
count += 1
print("\n"+str(count)+" elements export as out/eps/{unicode}.eps")
if items[generateGlyphAsPNG]:
pngSize = items[defaultPNGSize]
if int(pngSize) < 8:
print("PNG Size should at least 8 pixel, set to 8 now.")
pngSize = "8"
if not os.path.exists("out/png"):
os.makedirs("out/png")
count = 0
print(u'\nGenerating PNG @ '+pngSize)
for glyph in ttfFile.selection.byGlyphs:
# glyph.export("out/png/"
# + str(glyph.unicode)
# + "."
# + pngSize
# + ".png",
# int(pngSize),
# 1)
glyph.export("out/png/"
+ unichr(glyph.unicode)
+ "."
+ pngSize
+ ".png",
int(pngSize),
1)
sys.stdout.write('.')
sys.stdout.flush()
count += 1
print("\n"
+ str(count)
+ " elements export as out/png/{unicode}."
+ pngSize
+ ".png")
if items[generateGlyphAsEPS] or items[generateGlyphAsPNG]:
print(u'\nGenerated '+ttfFile.fontname+u" as out/"+defaultOutFile+u"\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment