├── .gitignore ├── LICENSE ├── README.md ├── build ├── deploy ├── dist ├── xfl.js └── xfl.min.js ├── npm-shrinkwrap.json ├── package.json ├── src └── xfl.ls ├── tool ├── build.ls └── word-frequency.csv └── web ├── src ├── ls │ └── index.ls ├── pug │ └── index.pug └── styl │ └── index.styl └── static ├── assets ├── img │ └── thumbnail.png ├── ldui │ ├── ldui.min.css │ ├── ldui.min.js │ └── pug │ │ ├── core │ │ ├── chevron-down.pug │ │ ├── spinner.pug │ │ └── util.pug │ │ ├── ext │ │ └── index.pug │ │ └── ldui.pug └── lib │ ├── ldlz.js │ ├── xfl.js │ └── xfl.min.js ├── css └── index.css ├── favicon.ico ├── index.html └── js └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .*.swp 3 | fonts 4 | output 5 | old 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018, Kirby T. Wu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | xl-fontload 2 | ======= 3 | 4 | 中文字型網路化。 依詞頻切割字型,並透過前端實作 lazy loading。 無需後端程式支援。 5 | 6 | * 字頻檔 ( word-frequency.csv ) 7 | 示範檔來源: [教育部](http://language.moe.gov.tw/001/Upload/files/SITE_CONTENT/M0001/86NEWS/download/86rest17.TXT) 8 | * 列舉轉換字型. 放置在 fonts/ 目錄, 結構不拘. 自動搜尋所有 .ttf 結尾檔案. 9 | * 針對每一字型: 10 | * 列舉所有支援字符 11 | * 其中常用五百字、標點符號、英文字母、數字等,做為第一字型檔 12 | * 接下來,剩餘字符有出現在詞頻表中者,依字頻每一百字組成一字型檔. 13 | * 剩餘未對應字,每一百字組成一字型檔. 14 | * 所有字型檔置於同一目錄中,檔名以數字區隔. 15 | * 輸出字碼 / 字型檔編號對應表, 供前端快查. 16 | 17 | 18 | 19 | Usage / Compiler 20 | ---------------- 21 | 22 | * 此專案使用 nodejs, 請先安裝 nodejs 與 npm ,並利用 npm install 建利 node_modules 目錄。 23 | 參考指令: 24 | 25 | curl -sL https://deb.nodesource.com/setup_8.x | sudo bash - 26 | npm install 27 | 28 | * 將欲轉換的字型整理至 fonts/ 目錄,目錄結構不拘。程式會自動掃出所有字型檔。 29 | - 目前只吃 ttf 檔唷~啾咪。 30 | * 準備字型檔 word-frequency.csv 31 | * 執行轉換程式 compile.sh 32 | * 字型檔輸出於 assets/ 目錄. 33 | 34 | 35 | 36 | Usage / Frontend 37 | ---------------- 38 | 39 | 基本使用方式: 40 | 41 | xfl.load("http://path/to/scattered/font/folder/", options, function(font) { 42 | font.sync(stringToDisplay); 43 | }) 44 | 45 | 46 | 根據即時內容動態載入字型的範例: 47 | 48 | /* assume we have "textarea" variable to be an input box accepting user input */ 49 | xfl.load("http://path/to/scattered/font/folder/", options, function(font) { 50 | textarea.addEventListener("keyup", function() { 51 | font.sync(textarea.value); 52 | }); 53 | }) 54 | 55 | 56 | 若你沒有打算自幹字型檔,可以使用我們透過 Github Pages 準備的一組字型檔,專案庫的位置在[這裡](https://github.com/plotdb/xl-fontset/),欲使用則可以透過這個網址:[http://plotdb.github.io/xl-fontset/alpha/<字型名稱>](http://plotdb.github.io/xl-fontset/alpha/<字型名稱>),例如: 57 | 58 | xfl.load("http://plotdb.github.io/xl-fontset/alpha/瀨戶字体", function(font) { ... 59 | 60 | 請自行將「<字型名稱>」換成欲使用的字型即可。目前支援的字型一覽可在[這裡](https://github.com/plotdb/xl-fontset/tree/gh-pages/alpha)找到,包括王漢宗 42 字型、刻石錄、站酷、cwText-Q、瀨戶字体等共 57 種字型。 61 | 62 | 要注意的是目前字型檔轉換時仍有些問題,可能因此導致部份字型有缺字狀況。此外並非所有字型都包含了完整的中文字,請自行斟酌使用。 63 | 64 | 65 | Options: 66 | 67 | * fontName - name used in font-family. default to be the basename of URL. 68 | * (TBD) text - preload files that contains text in this option. 69 | 70 | 71 | 72 | 未來方向 73 | -------- 74 | 75 | * 傳輸最佳化 ( Optimization ) 76 | * 考慮到字符相關性,可透過萌典、特定語料庫建立字符空間,透過 clustering algorithm ( 如 K-means clustering ) 將相關字符分組做為字型切割依據,進而減少需要載入的檔案數量. 77 | * 進一步做檔案尺寸最佳化。 78 | * 提供 nginx 與 apache 組檔模組,讓瀏覽器可以透過單一 HTTP Request 取得必要檔案 ( 例如, GET https://path/to/font/1+2+3+4 ) 79 | * 品質問題 ( Quality ) 80 | * 缺字部份,可使用對抗式生成網路學習並自動補齊。 81 | * 上述的對抗式生成網路亦可用於協助新字型生成。 82 | * 其它 83 | * 設定參數化,在建立字型檔時可透過設定依自己的需求客製化字型集。 84 | * Google Font 已實作類似的技術用以載入中文字型. 請參見: 85 | - https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization 86 | - 範例 CSS: 87 | - https://fonts.googleapis.com/css?family=Zhi-Mang-Xing&display=swap 88 | 89 | 90 | LICENSE 91 | -------- 92 | 93 | * Font Files: All curated font files are separatedly placed in [another repo (xl-fontset)](https://github.com/plotdb/xl-fontset/) and are either GPL or SIL-OFL Licensed. (OK for Commercial Use) 94 | * Source codes are released under MIT License. 95 | 96 | -------------------------------------------------------------------------------- /build: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | mkdir -p dist 3 | echo "build src/xfl.ls -> dist/xfl.js ..." 4 | ./node_modules/.bin/lsc -cbp src/xfl.ls > dist/xfl.js 5 | echo "minifying xfl.js ..." 6 | ./node_modules/.bin/uglifyjs dist/xfl.js > dist/xfl.min.js 7 | echo "deploy into local web ..." 8 | mkdir -p web/static/assets/lib/ 9 | cp -R dist/* web/static/assets/lib/ 10 | echo "done." 11 | -------------------------------------------------------------------------------- /deploy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | REV=`git describe --always` 3 | rm -rf _public 4 | git clone $(git remote get-url origin) --depth 1 -b gh-pages _public 5 | cd _public 6 | git rm -r * 7 | cp -R ../web/static/* ./ 8 | git add * 9 | git commit -m "regen for $REV" 10 | git push 11 | cd .. 12 | rm -rf _public 13 | -------------------------------------------------------------------------------- /dist/xfl.js: -------------------------------------------------------------------------------- 1 | // Generated by LiveScript 1.3.1 2 | var xfl; 3 | xfl = { 4 | variants: ['Italic', 'Regular', 'Bold', 'ExtraBold', 'Medium', 'SemiBold', 'ExtraLight', 'Light', 'Thin', 'Black', 'BlackItalic', 'BoldItalic', 'ExtraBoldItalic', 'MediumItalic', 'LightItalic', 'ThinItalic', 'SemiBoldItalic', 'ExtraLightItalic', 'DemiBold', 'Heavy', 'UltraLight'], 5 | fonts: {}, 6 | isCJK: function(){ 7 | return (code >= 0xff00 && code <= 0xffef) || (code >= 0x4e00 && code <= 0x9fff); 8 | }, 9 | load: function(path, options, callback){ 10 | var ref$, cb, ext, name, slug, variant, font, format, xhr, this$ = this; 11 | options == null && (options = {}); 12 | if (!path) { 13 | return; 14 | } 15 | ref$ = [path.replace(/\/$/, ''), typeof options === 'function' ? options : callback], path = ref$[0], cb = ref$[1]; 16 | if (this.fonts[path]) { 17 | return cb ? cb(this.fonts[path]) : null; 18 | } 19 | if (options.fontName) { 20 | options.name = options.fontName; 21 | } 22 | ref$ = [ 23 | (options.ext || (/\.([a-zA-Z0-9]+)$/.exec(path) || [])[1] || '').toLowerCase(), options.name || (ref$ = path.replace(/\.[a-zA-Z0-9]+$/, '').split("/").filter(function(it){ 24 | return it; 25 | }))[ref$.length - 1], options.name || Math.random().toString(16).substring(2) 26 | ], ext = ref$[0], name = ref$[1], slug = ref$[2]; 27 | variant = options.variant || (~name.indexOf('-') ? (ref$ = name.split('-'))[ref$.length - 1] : 'Regular'); 28 | if (!in$(variant, xfl.variants)) { 29 | variant = 'Regular'; 30 | } 31 | this.fonts[path] = font = { 32 | name: name, 33 | path: path, 34 | variant: variant, 35 | options: options, 36 | className: "xfl-" + slug, 37 | codeToSet: {}, 38 | hit: {}, 39 | url: {}, 40 | ext: ext && ~['woff2', 'woff', 'eot', 'ttf', 'otf'].indexOf(ext) ? ext : null 41 | }; 42 | font.ajax = function(idxlist, cb){ 43 | var check, this$ = this; 44 | check = function(){ 45 | if (idxlist.map(function(it){ 46 | return this$.url[it]; 47 | }).filter(function(it){ 48 | return it; 49 | }).length === idxlist.length) { 50 | return cb(); 51 | } 52 | }; 53 | return idxlist.map(function(d, i){ 54 | var xhr; 55 | if (this$.url[d]) { 56 | return check(); 57 | } 58 | xhr = new XMLHttpRequest(); 59 | xhr.addEventListener('readystatechange', function(){ 60 | if (xhr.readyState !== 4) { 61 | return; 62 | } 63 | this$.url[d] = URL.createObjectURL(xhr.response); 64 | return check(); 65 | }); 66 | xhr.open('GET', path + "/" + d + ".ttf"); 67 | xhr.responseType = 'blob'; 68 | return xhr.send(); 69 | }); 70 | }; 71 | font.sync = function(txt, cb){ 72 | var ref$, misschar, missset, i$, to$, i, code, setIdx, k, this$ = this; 73 | txt == null && (txt = ""); 74 | if (this.nosync) { 75 | return cb ? cb() : ''; 76 | } 77 | ref$ = [{}, {}], misschar = ref$[0], missset = ref$[1]; 78 | for (i$ = 0, to$ = txt.length; i$ < to$; ++i$) { 79 | i = i$; 80 | code = txt.charCodeAt(i); 81 | if (options.cjkOnly && !xfl.isCJK(code)) { 82 | continue; 83 | } 84 | setIdx = this.codeToSet[code.toString(16)]; 85 | if (!setIdx) { 86 | misschar[txt[i]] = true; 87 | } else if (!this.hit[setIdx]) { 88 | this.hit[setIdx] = missset[setIdx] = true; 89 | } 90 | } 91 | misschar = (function(){ 92 | var results$ = []; 93 | for (k in misschar) { 94 | results$.push(k); 95 | } 96 | return results$; 97 | }()).filter(function(it){ 98 | return it.trim(); 99 | }); 100 | if (misschar.length) { 101 | console.log("not supported chars: " + misschar.join('')); 102 | } 103 | return this.ajax((function(){ 104 | var results$ = []; 105 | for (k in missset) { 106 | results$.push(k); 107 | } 108 | return results$; 109 | }()), function(){ 110 | var k, ref$, css, idxlist, i$, len$, idx, url, names; 111 | ref$ = [ 112 | "", (function(){ 113 | var results$ = []; 114 | for (k in this.hit) { 115 | results$.push(k); 116 | } 117 | return results$; 118 | }.call(this$)) 119 | ], css = ref$[0], idxlist = ref$[1]; 120 | for (i$ = 0, len$ = idxlist.length; i$ < len$; ++i$) { 121 | idx = idxlist[i$]; 122 | url = this$.url[idx] || path + "/" + idx + ".woff2"; 123 | css += "@font-face {\n font-family: " + name + ";\n src: url(" + url + ") format('woff2');\n}"; 124 | } 125 | names = idxlist.map(function(it){ 126 | return name + "-" + it; 127 | }).join(','); 128 | css += "." + this$.className + " { font-family: " + name + "; }"; 129 | this$.css = css; 130 | xfl.update(); 131 | if (cb) { 132 | return cb(); 133 | } 134 | }); 135 | }; 136 | if (font.ext) { 137 | font.nosync = true; 138 | format = font.ext && font.ext !== 'ttf' ? "format('" + font.ext + "')" : ''; 139 | font.css = "@font-face {\n font-family: " + name + ";\n src: url(" + path + ") " + format + ";\n}\n." + font.className + " { font-family: \"" + name + "\"; }"; 140 | xfl.update(); 141 | if (cb) { 142 | return cb(font); 143 | } 144 | } else { 145 | xhr = new XMLHttpRequest(); 146 | xhr.addEventListener('readystatechange', function(){ 147 | var hash; 148 | if (xhr.readyState !== 4) { 149 | return; 150 | } 151 | hash = {}; 152 | xhr.responseText.split('\n').map(function(d, i){ 153 | return d.split(' ').map(function(e, j){ 154 | return hash[e] = i + 1; 155 | }); 156 | }); 157 | font.codeToSet = hash; 158 | if (cb) { 159 | return cb(font); 160 | } 161 | }); 162 | xhr.open('GET', path + "/charmap.txt"); 163 | return xhr.send(); 164 | } 165 | }, 166 | update: function(){ 167 | var css, k, v, node; 168 | css = (function(){ 169 | var ref$, results$ = []; 170 | for (k in ref$ = xfl.fonts) { 171 | v = ref$[k]; 172 | results$.push(v.css || ''); 173 | } 174 | return results$; 175 | }()).join('\n'); 176 | node = xfl.node || document.createElement("style"); 177 | node.textContent = css; 178 | if (xfl.node) { 179 | return; 180 | } 181 | node.setAttribute('type', 'text/css'); 182 | document.body.appendChild(node); 183 | return xfl.node = node; 184 | } 185 | }; 186 | function in$(x, xs){ 187 | var i = -1, l = xs.length >>> 0; 188 | while (++i < l) if (x === xs[i]) return true; 189 | return false; 190 | } 191 | -------------------------------------------------------------------------------- /dist/xfl.min.js: -------------------------------------------------------------------------------- 1 | var xfl;xfl={variants:["Italic","Regular","Bold","ExtraBold","Medium","SemiBold","ExtraLight","Light","Thin","Black","BlackItalic","BoldItalic","ExtraBoldItalic","MediumItalic","LightItalic","ThinItalic","SemiBoldItalic","ExtraLightItalic","DemiBold","Heavy","UltraLight"],fonts:{},isCJK:function(){return code>=65280&&code<=65519||code>=19968&&code<=40959},load:function(path,options,callback){var ref$,cb,ext,name,slug,variant,font,format,xhr,this$=this;options==null&&(options={});if(!path){return}ref$=[path.replace(/\/$/,""),typeof options==="function"?options:callback],path=ref$[0],cb=ref$[1];if(this.fonts[path]){return cb?cb(this.fonts[path]):null}if(options.fontName){options.name=options.fontName}ref$=[(options.ext||(/\.([a-zA-Z0-9]+)$/.exec(path)||[])[1]||"").toLowerCase(),options.name||(ref$=path.replace(/\.[a-zA-Z0-9]+$/,"").split("/").filter(function(it){return it}))[ref$.length-1],options.name||Math.random().toString(16).substring(2)],ext=ref$[0],name=ref$[1],slug=ref$[2];variant=options.variant||(~name.indexOf("-")?(ref$=name.split("-"))[ref$.length-1]:"Regular");if(!in$(variant,xfl.variants)){variant="Regular"}this.fonts[path]=font={name:name,path:path,variant:variant,options:options,className:"xfl-"+slug,codeToSet:{},hit:{},url:{},ext:ext&&~["woff2","woff","eot","ttf","otf"].indexOf(ext)?ext:null};font.ajax=function(idxlist,cb){var check,this$=this;check=function(){if(idxlist.map(function(it){return this$.url[it]}).filter(function(it){return it}).length===idxlist.length){return cb()}};return idxlist.map(function(d,i){var xhr;if(this$.url[d]){return check()}xhr=new XMLHttpRequest;xhr.addEventListener("readystatechange",function(){if(xhr.readyState!==4){return}this$.url[d]=URL.createObjectURL(xhr.response);return check()});xhr.open("GET",path+"/"+d+".ttf");xhr.responseType="blob";return xhr.send()})};font.sync=function(txt,cb){var ref$,misschar,missset,i$,to$,i,code,setIdx,k,this$=this;txt==null&&(txt="");if(this.nosync){return cb?cb():""}ref$=[{},{}],misschar=ref$[0],missset=ref$[1];for(i$=0,to$=txt.length;i$>>0;while(++i=8.5.0", 17 | "npm": ">=5.3.0" 18 | }, 19 | "scripts": { 20 | "start": "cd web; ../node_modules/.bin/lsc ../node_modules/template/server.ls", 21 | "build": "cd tool; ../node_modules/.bin/lsc ./build.ls" 22 | }, 23 | "dependencies": { 24 | "LiveScript": ">=1.2.0", 25 | "stylus": "^0.54.5", 26 | "uglify-js": "=3.2.0", 27 | "uglifycss": "0.0.29", 28 | "colors": "=1.1.2", 29 | "fontmin": "=0.9.7-beta", 30 | "fs-extra": "^6.0.1", 31 | "gulp-rename": "=1.3.0", 32 | "hoek": "^4.2.1", 33 | "opentype.js": "=0.8.0", 34 | "progress": "=2.0.0", 35 | "ttf2woff2": "^2.0.3", 36 | "template": "github:zbryikt/template#v2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/xfl.ls: -------------------------------------------------------------------------------- 1 | xfl = do 2 | variants: <[Italic Regular Bold ExtraBold Medium SemiBold ExtraLight Light Thin Black BlackItalic BoldItalic ExtraBoldItalic MediumItalic LightItalic ThinItalic SemiBoldItalic ExtraLightItalic DemiBold Heavy UltraLight]> 3 | fonts: {} 4 | # TODO lets add a more accurate range 5 | isCJK: -> ((code >= 0xff00 and code <= 0xffef) or (code >= 0x4e00 and code <= 0x9fff)) 6 | # load font from path. will resolve information from path, 7 | # if failed to resolve, user can still supply options for alternative information. 8 | load: (path, options={}, callback) -> 9 | if !path => return 10 | [path, cb] = [ 11 | path.replace(/\/$/, ''), 12 | (if typeof(options) == 'function' => options else callback) 13 | ] 14 | if @fonts[path] => return (if cb => cb @fonts[path] else null) 15 | # backward compatibility; remove this once we confirmed that there is not font-name used when calling API. 16 | if options.font-name => options.name = options.font-name 17 | [ext, name, slug] = [ 18 | (options.ext or (/\.([a-zA-Z0-9]+)$/.exec(path) or []).1 or '').toLowerCase!, 19 | options.name or (path.replace(/\.[a-zA-Z0-9]+$/,'').split("/").filter(->it)[* - 1]), 20 | (options.name or Math.random!toString(16).substring(2)) 21 | ] 22 | variant = options.variant or (if ~name.indexOf('-') => name.split('-')[* - 1] else 'Regular') 23 | if !(variant in xfl.variants) => variant = \Regular 24 | @fonts[path] = font = do 25 | name: name 26 | path: path 27 | variant: variant 28 | options: options 29 | className: "xfl-#slug" 30 | code-to-set: {} # convert unicode to the set idx that contains this code. load from charmap.txt 31 | hit: {} # is specific set been hit? hashed by index 32 | url: {} # blob URL for specific set, hashed by index 33 | ext: if ext and ~(<[woff2 woff eot ttf otf]>.indexOf(ext)) => ext else null 34 | 35 | # TODO support patterns like https://PATH/TO/FONT/1+2+3.ttf for faster request 36 | font.ajax = (idxlist, cb) -> 37 | check = ~> if idxlist.map(~>@url[it]).filter(->it).length == idxlist.length => return cb! 38 | idxlist.map (d,i) ~> 39 | if @url[d] => return check! 40 | xhr = new XMLHttpRequest! 41 | xhr.addEventListener \readystatechange, ~> 42 | if xhr.readyState != 4 => return 43 | @url[d] = URL.createObjectURL(xhr.response) 44 | return check! 45 | xhr.open \GET, "#path/#d.ttf" 46 | xhr.responseType = \blob 47 | xhr.send! 48 | 49 | font.sync = (txt = "", cb) -> 50 | # fonts with file extension will be treated as needing directly download 51 | if @nosync => return (if cb => cb! else '') 52 | [misschar, missset]= [{}, {}] 53 | for i from 0 til txt.length => 54 | code = txt.charCodeAt(i) 55 | if options.cjk-only and !xfl.isCJK(code) => continue 56 | set-idx = @code-to-set[code.toString 16] 57 | if !set-idx => misschar[txt[i]] = true 58 | else if !@hit[set-idx] => @hit[set-idx] = missset[set-idx] = true 59 | misschar = [k for k of misschar].filter(->it.trim!) 60 | if misschar.length => console.log "not supported chars: #{misschar.join('')}" 61 | <~ @ajax [k for k of missset], _ 62 | [css, idxlist] = ["", [k for k of @hit]] 63 | for idx in idxlist => 64 | url = @url[idx] or "#path/#idx.woff2" 65 | css += """ 66 | @font-face { 67 | font-family: #{name}; 68 | src: url(#{url}) format('woff2'); 69 | } 70 | """ 71 | names = idxlist.map(-> "#{name}-#it").join(\,) 72 | css += ".#{@className} { font-family: #name; }" 73 | @css = css 74 | xfl.update! 75 | if cb => cb! 76 | 77 | if font.ext => # load directly if path has extension ... 78 | font.nosync = true 79 | format = if font.ext and font.ext != 'ttf' => "format('#{font.ext}')" else '' 80 | font.css = """ 81 | @font-face { 82 | font-family: #name; 83 | src: url(#path) #format; 84 | } 85 | .#{font.className} { font-family: "#name"; }""" 86 | xfl.update! 87 | if cb => return cb font 88 | else # ... else treat it as a subsetted font set 89 | xhr = new XMLHttpRequest! 90 | xhr.addEventListener \readystatechange, ~> 91 | if xhr.readyState != 4 => return 92 | hash = {} 93 | xhr.responseText.split(\\n).map (d,i) -> d.split(' ').map (e,j) -> hash[e] = (i + 1) 94 | font.code-to-set = hash 95 | if cb => return cb font 96 | xhr.open \GET, "#path/charmap.txt" 97 | xhr.send! 98 | update: -> 99 | css = [(v.css or '') for k,v of xfl.fonts].join('\n') 100 | node = xfl.node or document.createElement("style") 101 | node.textContent = css 102 | if xfl.node => return 103 | node.setAttribute \type, 'text/css' 104 | document.body.appendChild node 105 | xfl.node = node 106 | -------------------------------------------------------------------------------- /tool/build.ls: -------------------------------------------------------------------------------- 1 | require! <[fs fs-extra fontmin opentype.js path colors progress gulp-rename bluebird ttf2woff2]> 2 | 3 | font-dir = if !process.argv.2 => \../fonts else process.argv.2 4 | out-dir = "../output" 5 | Promise = bluebird 6 | 7 | common-ranges = [[0,0xff], [0xff00, 0xffef]] 8 | common-size = 1000 9 | set-size = 50 10 | 11 | if !fs.exists-sync font-dir => 12 | console.log "#font-dir directory not found." 13 | process.exit -1 14 | 15 | progress-bar = (total = 10, text = "converting") -> 16 | bar = new progress( 17 | " #text [#{':bar'.yellow}] #{':percent'.cyan} :etas", 18 | { total: total, width: 60, complete: '#' } 19 | ) 20 | return bar 21 | 22 | font-file-finder = (parent) -> 23 | files = fs.readdir-sync parent .map -> "#parent/#it" 24 | ret = [] 25 | for file in files => 26 | if fs.stat-sync file .is-directory! => ret = ret ++ font-file-finder(file) 27 | else if /\.[t]tf$/.exec(file) => ret.push file 28 | return ret 29 | 30 | word-frequency = (file = "word-frequency.csv") -> 31 | list = (fs.read-file-sync file .toString!) 32 | .split(\\n) 33 | .map -> it.split ',' 34 | .filter -> it and it.length and it.length >=2 and it.0 and !isNaN(+it.1) 35 | .map -> [it.0.charCodeAt(0), +it.1] 36 | for range in common-ranges => 37 | list = [[i,0] for i from range.0 to range.1] ++ list 38 | return list 39 | 40 | code-in-font = (font) -> new Promise (res, rej) -> 41 | if !font or !fs.exists-sync(font) => return rej new Error("font file not found") 42 | opentype.load font, (e, font) -> 43 | ret = [] 44 | if e => return rej new Error(e) 45 | glyphs = font.glyphs.glyphs 46 | for i from 0 til font.glyphs.length 47 | glyph = glyphs[i] 48 | if !(glyph and glyph.unicode) => continue 49 | # while this should be checked, it cause out of memory bug 50 | # if !glyph.xMax => continue 51 | ret ++= glyph.unicodes 52 | res ret 53 | 54 | files = font-file-finder font-dir 55 | wordlist = word-frequency! 56 | 57 | subset-font = (data) -> new Promise (res, rej) -> 58 | try 59 | {filename, basename, set-idx, codes} = data{filename, basename, set-idx, codes} 60 | fm = new fontmin!src filename 61 | if /\.otf$/.exec(filename) => fm.use fontmin.otf2ttf! 62 | fm.dest path.join(out-dir, basename) 63 | .use gulp-rename("#set-idx.ttf") 64 | .use fontmin.glyph text: codes.map(-> String.fromCharCode(it)).join('') 65 | .run (e, f) -> 66 | data.bar.tick codes.length 67 | if e => return rej new Error(e) 68 | return res f 69 | catch e 70 | return rej new Error(e) 71 | 72 | iterate-code = (code, data, force-set = false) -> 73 | Promise.resolve! 74 | .then -> 75 | if code and !isNaN(code) and data.code-available[code] and !data.code-to-set[code.toString 16] => 76 | delete data.code-available[code] 77 | data.codes.push code 78 | data.code-to-set[code.toString 16] = data.set-idx 79 | promise = if force-set or (data.set-idx == 1 and data.codes.length >= common-size) 80 | or (data.set-idx > 1 and data.codes.length >= set-size) => 81 | subset-font data .finally -> 82 | data.codes = [] 83 | data.set-idx++ 84 | else Promise.resolve! 85 | return promise 86 | 87 | iterate-codes = (data) -> new Promise (res, rej) -> 88 | _ = -> 89 | if !data or !data.list or !data.list.length => 90 | return iterate-code null, data, true 91 | .then -> return res data 92 | .catch -> 93 | data.failed.push [data.set-idx - 1, it] 94 | return res data 95 | code = data.list.splice(0, 1).0 96 | if !code => return _! 97 | iterate-code code, data 98 | .then -> _! 99 | .catch -> 100 | data.failed.push [data.set-idx - 1, it] 101 | _! 102 | _! 103 | 104 | ttf-to-woff2s = (data) -> new Promise (res, rej) -> 105 | try 106 | ttfs = fs.readdir-sync path.join(out-dir, data.basename) 107 | .filter -> /\.ttf$/.exec(it) 108 | .filter -> !/all/.exec(it) 109 | .map -> path.join(out-dir, data.basename, it) 110 | bar = progress-bar ttfs.length, "converting" 111 | _ = -> 112 | if !ttfs or !ttfs.length => 113 | bar.tick! 114 | return res data 115 | file = ttfs.splice 0, 1 .0 116 | if !file => return _! 117 | <- fs.write-file file.replace(/\.ttf$/, '.woff2'), ttf2woff2(fs.read-file-sync file), _ 118 | bar.tick! 119 | _! 120 | _! 121 | catch e 122 | console.log e 123 | return rej new Error(e) 124 | 125 | process-font = (filename) -> new Promise (res, rej) -> 126 | code-in-font filename 127 | .then (font-codes) -> 128 | [code-available, code-to-set] = [{}, {}] 129 | [codes, idx, set-idx, count] = [[], 0, 1, 0] 130 | for code in font-codes => code-available[code] = true 131 | console.log " - #{font-codes.length} code available." 132 | data = { 133 | filename, code-available, code-to-set, codes, set-idx, 134 | list: wordlist.map(-> it.0) ++ font-codes, 135 | bar: progress-bar(font-codes.length, "subsetting"), failed: [] 136 | basename: path.basename(filename).replace(/\.[t]tf$/, '') 137 | } 138 | iterate-codes data 139 | .then (data) -> 140 | console.log " - subsetted into #{data.set-idx} pieces." 141 | fs-extra.copy-sync filename, path.join(out-dir, data.basename, "all.ttf") 142 | data.bar.tick data.list.length 143 | console.log " - converting to woff2..." 144 | ttf-to-woff2s data 145 | .then (data) -> 146 | if data.failed.length => 147 | console.log " - some subset failed to be created due to following reason: ".yellow 148 | failed-set = [it.0 for it in data.failed] 149 | for item in data.failed => 150 | console.log " subset #{item.0}: #{item.1}" 151 | for k,v of data.code-to-set => if ~failed-set.indexOf(v) => delete data.code-to-set[k] 152 | idx-map = {} 153 | for k,v of data.code-to-set => idx-map[][v].push k.toString(16) 154 | charmap = [v for k,v of idx-map].map(->it.join(' ')).join('\n') 155 | fs.write-file-sync path.join(out-dir, data.basename, "charmap.txt"), charmap 156 | console.log " - process done. ".green 157 | console.log " " 158 | return res! 159 | .catch -> 160 | console.log " - process failed due to following reason: ".red 161 | console.log it 162 | console.log "" 163 | return rej! 164 | 165 | process-fonts = (files) -> new Promise (res, rej) -> 166 | try 167 | data = {passed: [], failed: []} 168 | [total, count] = [files.length, 0] 169 | console.log " * total #{total} files to process...".cyan 170 | _ = -> 171 | if !files or !files.length => return res data 172 | file = files.splice(0,1).0 173 | if !file => return _! 174 | count := count + 1 175 | console.log " * Process #file ( #count/#total ) ".cyan 176 | process-font file 177 | .then -> 178 | data.passed.push fil 179 | _! 180 | .catch -> 181 | data.failed.push file 182 | _! 183 | _! 184 | catch e 185 | return rej new Error(e) 186 | 187 | process-fonts files 188 | .then (data) -> 189 | console.log " * all fonts processed. " 190 | console.log " * statistics: " 191 | console.log " - passed: [ #{data.passed.length} ]".green 192 | console.log " - partial passed: [ #{data.failed.length} ]".yellow 193 | console.log " * finished." 194 | console.log "" 195 | .catch -> 196 | console.log "failed due to following reason: ".red 197 | console.log it 198 | -------------------------------------------------------------------------------- /tool/word-frequency.csv: -------------------------------------------------------------------------------- 1 | word,count 2 | 的,36053 3 | 一,12680 4 | 是,10897 5 | 有,9424 6 | 在,9011 7 | 人,8499 8 | 不,8058 9 | 大,6019 10 | 中,6011 11 | 為,5889 12 | 以,5793 13 | 國,5759 14 | 會,5551 15 | 上,5037 16 | 了,4896 17 | 我,4777 18 | 年,4736 19 | 時,4543 20 | 來,4504 21 | 這,4437 22 | 他,4359 23 | 出,4260 24 | 個,4068 25 | 可,4054 26 | 到,3978 27 | 生,3914 28 | 公,3841 29 | 也,3748 30 | 要,3723 31 | 成,3653 32 | 之,3559 33 | 十,3549 34 | 業,3524 35 | 而,3509 36 | 台,3435 37 | 地,3428 38 | 資,3426 39 | 於,3401 40 | 行,3385 41 | 能,3308 42 | 就,3226 43 | 對,3221 44 | 多,3149 45 | 後,3076 46 | 及,3026 47 | 電,3007 48 | 與,2988 49 | 家,2976 50 | 學,2965 51 | 自,2921 52 | 發,2916 53 | 經,2913 54 | 和,2888 55 | 所,2876 56 | 市,2859 57 | 們,2784 58 | 作,2771 59 | 過,2726 60 | 得,2712 61 | 下,2709 62 | 新,2682 63 | 分,2641 64 | 動,2629 65 | 用,2620 66 | 日,2619 67 | 說,2611 68 | 因,2596 69 | 子,2568 70 | 長,2554 71 | 理,2525 72 | 心,2524 73 | 法,2523 74 | 方,2489 75 | 三,2463 76 | 事,2423 77 | 前,2419 78 | 者,2409 79 | 民,2392 80 | 現,2361 81 | 都,2351 82 | 如,2345 83 | 高,2336 84 | 天,2293 85 | 主,2289 86 | 司,2289 87 | 外,2282 88 | 等,2269 89 | 開,2232 90 | 本,2210 91 | 美,2203 92 | 但,2194 93 | 網,2186 94 | 機,2174 95 | 同,2173 96 | 場,2169 97 | 工,2121 98 | 股,2108 99 | 當,2108 100 | 最,2100 101 | 定,2091 102 | 面,2050 103 | 金,2048 104 | 路,2048 105 | 政,2028 106 | 力,2018 107 | 然,2014 108 | 文,2010 109 | 部,2009 110 | 車,2008 111 | 其,1983 112 | 體,1983 113 | 將,1974 114 | 此,1950 115 | 小,1942 116 | 進,1934 117 | 產,1919 118 | 表,1901 119 | 好,1894 120 | 全,1859 121 | 間,1850 122 | 提,1829 123 | 種,1828 124 | 性,1821 125 | 情,1820 126 | 加,1815 127 | 務,1814 128 | 月,1810 129 | 由,1787 130 | 內,1783 131 | 五,1777 132 | 相,1734 133 | 關,1725 134 | 重,1715 135 | 實,1694 136 | 設,1693 137 | 著,1652 138 | 二,1649 139 | 訊,1644 140 | 利,1643 141 | 代,1639 142 | 位,1639 143 | 並,1634 144 | 灣,1624 145 | 已,1622 146 | 品,1622 147 | 意,1612 148 | 去,1611 149 | 化,1595 150 | 看,1586 151 | 起,1580 152 | 合,1577 153 | 或,1510 154 | 四,1508 155 | 教,1501 156 | 投,1495 157 | 度,1492 158 | 計,1476 159 | 明,1473 160 | 期,1470 161 | 區,1466 162 | 點,1457 163 | 員,1455 164 | 元,1453 165 | 還,1452 166 | 選,1448 167 | 使,1433 168 | 無,1420 169 | 沒,1417 170 | 正,1408 171 | 報,1408 172 | 統,1403 173 | 手,1399 174 | 常,1389 175 | 商,1388 176 | 物,1384 177 | 只,1374 178 | 應,1371 179 | 從,1368 180 | 問,1362 181 | 活,1361 182 | 式,1355 183 | 些,1354 184 | 你,1351 185 | 九,1348 186 | 北,1340 187 | 兩,1333 188 | 立,1316 189 | 建,1316 190 | 至,1310 191 | 基,1310 192 | 名,1305 193 | 服,1303 194 | 入,1298 195 | 很,1292 196 | 各,1290 197 | 水,1284 198 | 百,1282 199 | 女,1276 200 | 想,1272 201 | 第,1267 202 | 次,1259 203 | 道,1253 204 | 那,1251 205 | 科,1250 206 | 目,1242 207 | 腦,1242 208 | 價,1233 209 | 處,1229 210 | 果,1226 211 | 比,1225 212 | 總,1214 213 | 更,1211 214 | 影,1208 215 | 回,1207 216 | 麼,1202 217 | 萬,1197 218 | 她,1192 219 | 世,1175 220 | 六,1167 221 | 再,1164 222 | 通,1160 223 | 八,1146 224 | 特,1140 225 | 黨,1136 226 | 則,1132 227 | 受,1124 228 | 每,1119 229 | 供,1110 230 | 程,1110 231 | 示,1107 232 | 交,1102 233 | 接,1101 234 | 書,1099 235 | 展,1095 236 | 被,1093 237 | 認,1086 238 | 界,1077 239 | 東,1073 240 | 題,1059 241 | 信,1055 242 | 身,1054 243 | 七,1053 244 | 社,1053 245 | 數,1051 246 | 今,1050 247 | 指,1049 248 | 樣,1049 249 | 變,1045 250 | 醫,1042 251 | 知,1039 252 | 向,1037 253 | 造,1032 254 | 導,1017 255 | 做,1014 256 | 華,1013 257 | 才,1011 258 | 未,1011 259 | 原,1009 260 | 保,1005 261 | 專,1003 262 | 觀,1001 263 | 解,1000 264 | 己,997 265 | 院,993 266 | 限,981 267 | 安,978 268 | 任,972 269 | 讓,970 270 | 感,969 271 | 際,965 272 | 線,965 273 | 球,961 274 | 色,958 275 | 近,957 276 | 共,956 277 | 少,955 278 | 先,948 279 | 營,944 280 | 運,936 281 | 管,935 282 | 海,932 283 | 何,931 284 | 樂,925 285 | 平,924 286 | 西,916 287 | 結,916 288 | 包,914 289 | 持,914 290 | 系,912 291 | 達,908 292 | 光,905 293 | 別,900 294 | 見,900 295 | 氣,899 296 | 又,893 297 | 戰,892 298 | 規,887 299 | 頭,887 300 | 口,885 301 | 話,885 302 | 整,884 303 | 較,882 304 | 老,881 305 | 師,879 306 | 求,877 307 | 反,876 308 | 風,873 309 | 空,872 310 | 量,871 311 | 愛,870 312 | 告,868 313 | 議,867 314 | 技,865 315 | 案,864 316 | 術,861 317 | 調,855 318 | 像,854 319 | 類,852 320 | 太,851 321 | 即,848 322 | 林,845 323 | 視,844 324 | 許,840 325 | 亞,839 326 | 連,839 327 | 記,836 328 | 該,834 329 | 府,832 330 | 收,830 331 | 權,828 332 | 製,827 333 | 真,821 334 | 型,818 335 | 斯,818 336 | 辦,814 337 | 且,809 338 | 強,809 339 | 單,809 340 | 治,807 341 | 南,807 342 | 非,803 343 | 縣,802 344 | 傳,800 345 | 件,798 346 | 論,797 347 | 費,795 348 | 卻,794 349 | 份,787 350 | 制,784 351 | 料,783 352 | 義,778 353 | 企,774 354 | 率,772 355 | 放,765 356 | 除,764 357 | 山,761 358 | 證,758 359 | 望,754 360 | 容,753 361 | 必,750 362 | 流,745 363 | 約,744 364 | 團,743 365 | 畫,742 366 | 打,739 367 | 直,739 368 | 幾,735 369 | 廣,734 370 | 改,726 371 | 李,723 372 | 港,721 373 | 研,720 374 | 取,719 375 | 舉,714 376 | 片,712 377 | 把,711 378 | 清,711 379 | 決,710 380 | 具,710 381 | 站,710 382 | 買,704 383 | 形,703 384 | 銷,701 385 | 音,700 386 | 標,700 387 | 帶,698 388 | 集,695 389 | 親,694 390 | 友,686 391 | 花,686 392 | 組,685 393 | 完,681 394 | 裡,680 395 | 格,679 396 | 兒,673 397 | 備,672 398 | 給,672 399 | 往,670 400 | 門,670 401 | 英,669 402 | 言,667 403 | 聯,666 404 | 需,665 405 | 查,663 406 | 易,660 407 | 預,660 408 | 局,656 409 | 士,655 410 | 消,654 411 | 便,653 412 | 星,653 413 | 另,651 414 | 象,646 415 | 票,645 416 | 房,643 417 | 張,642 418 | 千,641 419 | 介,641 420 | 香,639 421 | 項,638 422 | 請,638 423 | 勢,627 424 | 推,626 425 | 什,625 426 | 命,622 427 | 質,616 428 | 病,615 429 | 始,612 430 | 住,611 431 | 客,610 432 | 座,607 433 | 難,605 434 | 引,604 435 | 參,603 436 | 圖,599 437 | 演,597 438 | 精,596 439 | 覺,596 440 | 陳,594 441 | 考,593 442 | 器,590 443 | 究,589 444 | 眾,587 445 | 店,586 446 | 環,580 447 | 轉,574 448 | 濟,573 449 | 續,573 450 | 軍,571 451 | 德,571 452 | 委,570 453 | 神,570 454 | 獲,570 455 | 隊,567 456 | 助,566 457 | 半,564 458 | 旅,564 459 | 走,560 460 | 馬,559 461 | 購,556 462 | 創,555 463 | 曾,555 464 | 它,552 465 | 興,550 466 | 裝,549 467 | 例,547 468 | 底,547 469 | 劃,536 470 | 功,535 471 | 增,534 472 | 快,533 473 | 括,532 474 | 賣,531 475 | 支,530 476 | 藝,530 477 | 爭,529 478 | 陸,529 479 | 遊,529 480 | 顯,528 481 | 卡,527 482 | 響,526 483 | 仍,524 484 | 據,523 485 | 步,518 486 | 配,518 487 | 準,518 488 | 失,517 489 | 財,517 490 | 希,515 491 | 爾,515 492 | 億,515 493 | 效,514 494 | 維,511 495 | 雖,510 496 | 廠,508 497 | 識,505 498 | 深,503 499 | 克,502 500 | 食,501 501 | 境,501 502 | 土,500 503 | 育,498 504 | 校,498 505 | 態,498 506 | 拉,497 507 | 售,497 508 | 算,497 509 | 協,495 510 | 洲,495 511 | 眼,495 512 | 候,492 513 | 火,489 514 | 室,488 515 | 省,488 516 | 值,488 517 | 速,488 518 | 係,486 519 | 白,483 520 | 須,482 521 | 紀,480 522 | 領,480 523 | 邊,480 524 | 屋,478 525 | 首,478 526 | 排,477 527 | 列,475 528 | 否,472 529 | 源,472 530 | 鄉,471 531 | 免,469 532 | 防,469 533 | 顧,469 534 | 況,468 535 | 確,467 536 | 存,466 537 | 滿,466 538 | 王,465 539 | 超,463 540 | 景,462 541 | 官,461 542 | 致,461 543 | 照,459 544 | 修,458 545 | 園,458 546 | 輕,456 547 | 極,455 548 | 談,455 549 | 史,454 550 | 男,454 551 | 般,454 552 | 令,453 553 | 聲,452 554 | 級,450 555 | 遠,450 556 | 找,448 557 | 念,448 558 | 策,448 559 | 賽,445 560 | 驗,444 561 | 母,443 562 | 段,443 563 | 登,443 564 | 昨,442 565 | 孩,441 566 | 隨,441 567 | 歡,437 568 | 款,434 569 | 施,433 570 | 雄,432 571 | 館,432 572 | 斷,431 573 | 雜,431 574 | 軟,430 575 | 死,428 576 | 歷,428 577 | 熱,427 578 | 思,425 579 | 職,424 580 | 石,423 581 | 早,418 582 | 採,417 583 | 節,416 584 | 離,416 585 | 福,415 586 | 養,415 587 | 構,414 588 | 依,412 589 | 甚,412 590 | 健,412 591 | 警,412 592 | 落,411 593 | 切,410 594 | 檢,410 595 | 銀,408 596 | 吃,407 597 | 錢,407 598 | 聽,407 599 | 歲,405 600 | 條,404 601 | 字,403 602 | 息,401 603 | 喜,401 604 | 布,399 605 | 紹,399 606 | 周,398 607 | 號,397 608 | 蔣,397 609 | 乎,396 610 | 油,396 611 | 置,396 612 | 簡,394 613 | 足,393 614 | 密,393 615 | 聞,392 616 | 護,392 617 | 若,391 618 | 皮,389 619 | 版,389 620 | 媽,389 621 | 試,388 622 | 戶,386 623 | 嗎,386 624 | 屬,386 625 | 貨,385 626 | 羅,385 627 | 習,384 628 | 頁,383 629 | 益,383 630 | 升,381 631 | 險,381 632 | 里,380 633 | 居,379 634 | 素,379 635 | 層,379 636 | 根,377 637 | 負,376 638 | 雙,375 639 | 印,373 640 | 角,372 641 | 父,369 642 | 細,369 643 | 餘,368 644 | 紅,365 645 | 牌,364 646 | 黃,364 647 | 寫,363 648 | 積,363 649 | 錄,362 650 | 壓,362 651 | 責,361 652 | 臺,361 653 | 嚴,361 654 | 康,359 655 | 獨,359 656 | 古,358 657 | 休,357 658 | 班,357 659 | 模,357 660 | 青,355 661 | 留,355 662 | 停,355 663 | 稱,355 664 | 融,355 665 | 讀,354 666 | 詢,353 667 | 討,352 668 | 飛,348 669 | 季,347 670 | 均,346 671 | 劇,346 672 | 波,345 673 | 血,343 674 | 絕,342 675 | 似,339 676 | 注,339 677 | 歐,339 678 | 派,337 679 | 適,337 680 | 願,337 681 | 送,335 682 | 訴,335 683 | 擇,335 684 | 愈,334 685 | 誌,333 686 | 初,331 687 | 券,328 688 | 衛,328 689 | 察,327 690 | 夫,326 691 | 戲,326 692 | 講,326 693 | 夠,324 694 | 狀,323 695 | 婦,323 696 | 透,322 697 | 額,322 698 | 跟,321 699 | 盡,320 700 | 優,319 701 | 拿,318 702 | 農,318 703 | 止,317 704 | 黑,316 705 | 材,315 706 | 板,315 707 | 語,313 708 | 害,312 709 | 筆,311 710 | 蘭,311 711 | 換,310 712 | 餐,310 713 | 擊,310 714 | 假,309 715 | 晚,309 716 | 富,309 717 | 味,308 718 | 故,307 719 | 徵,307 720 | 央,306 721 | 破,305 722 | 族,305 723 | 擔,305 724 | 療,305 725 | 良,304 726 | 尼,303 727 | 架,301 728 | 評,301 729 | 僅,301 730 | 練,300 731 | 永,299 732 | 執,298 733 | 越,298 734 | 控,297 735 | 朋,296 736 | 盤,296 737 | 充,294 738 | 差,294 739 | 稅,294 740 | 善,294 741 | 久,293 742 | 異,293 743 | 傷,292 744 | 寶,292 745 | 群,290 746 | 藥,290 747 | 終,289 748 | 漸,289 749 | 跌,288 750 | 左,287 751 | 媒,287 752 | 尋,287 753 | 巴,286 754 | 威,286 755 | 幅,286 756 | 村,284 757 | 競,284 758 | 午,283 759 | 復,282 760 | 榮,282 761 | 待,281 762 | 航,281 763 | 啡,279 764 | 硬,278 765 | 臨,278 766 | 降,275 767 | 課,275 768 | 短,273 769 | 佳,272 770 | 播,272 771 | 承,271 772 | 樓,271 773 | 租,270 774 | 逐,269 775 | 溫,269 776 | 補,267 777 | 錯,267 778 | 律,266 779 | 陽,266 780 | 奇,265 781 | 庫,265 782 | 魚,264 783 | 測,264 784 | 阿,263 785 | 怎,263 786 | 酒,263 787 | 幣,263 788 | 席,262 789 | 刻,261 790 | 答,261 791 | 低,260 792 | 救,259 793 | 歌,258 794 | 刊,257 795 | 症,257 796 | 退,257 797 | 博,257 798 | 右,256 799 | 肉,256 800 | 移,256 801 | 江,255 802 | 某,254 803 | 智,254 804 | 鎮,253 805 | 申,252 806 | 含,252 807 | 妳,252 808 | 漲,252 809 | 輝,252 810 | 龍,252 811 | 夜,251 812 | 殺,251 813 | 呢,250 814 | 歸,250 815 | 急,248 816 | 突,247 817 | 婚,247 818 | 庭,246 819 | 普,246 820 | 週,246 821 | 激,246 822 | 繼,246 823 | 追,245 824 | 章,245 825 | 析,244 826 | 宣,244 827 | 略,243 828 | 訪,243 829 | 城,242 830 | 洋,242 831 | 飯,242 832 | 缺,241 833 | 童,241 834 | 疑,241 835 | 附,240 836 | 宜,239 837 | 汽,238 838 | 訓,237 839 | 吳,236 840 | 亦,234 841 | 暴,232 842 | 編,232 843 | 幫,232 844 | 禮,232 845 | 麗,232 846 | 訂,231 847 | 唱,231 848 | 減,231 849 | 盟,231 850 | 頓,231 851 | 範,231 852 | 吸,230 853 | 咖,230 854 | 紙,230 855 | 菜,229 856 | 織,228 857 | 射,227 858 | 避,227 859 | 套,226 860 | 域,226 861 | 微,226 862 | 懷,226 863 | 核,225 864 | 緊,224 865 | 您,223 866 | 彈,223 867 | 靈,222 868 | 冷,221 869 | 檔,221 870 | 判,220 871 | 怕,220 872 | 誰,220 873 | 膚,219 874 | 零,218 875 | 碼,218 876 | 趣,218 877 | 獎,217 878 | 志,216 879 | 抗,216 880 | 典,216 881 | 促,216 882 | 聖,216 883 | 憲,216 884 | 臉,216 885 | 宗,215 886 | 烈,215 887 | 痛,215 888 | 笑,214 889 | 豐,214 890 | 仁,212 891 | 竹,212 892 | 玩,211 893 | 圍,211 894 | 順,211 895 | 吧,210 896 | 擁,210 897 | 匯,208 898 | 概,208 899 | 革,207 900 | 牠,205 901 | 苦,205 902 | 閒,205 903 | 階,205 904 | 剛,204 905 | 哥,204 906 | 舊,204 907 | 刺,203 908 | 背,203 909 | 迷,203 910 | 針,203 911 | 勞,202 912 | 嘉,202 913 | 京,201 914 | 虛,201 915 | 索,200 916 | 危,199 917 | 粉,199 918 | 尤,198 919 | 倒,198 920 | 納,198 921 | 慮,198 922 | 擬,198 923 | 廿,197 924 | 亮,197 925 | 隻,197 926 | 野,197 927 | 勝,197 928 | 街,197 929 | 巨,196 930 | 武,195 931 | 副,195 932 | 攝,195 933 | 瑞,194 934 | 綠,194 935 | 尚,193 936 | 彩,193 937 | 損,193 938 | 楚,193 939 | 碟,193 940 | 謂,193 941 | 謝,193 942 | 泰,192 943 | 腳,192 944 | 緯,192 945 | 績,192 946 | 毛,191 947 | 估,191 948 | 困,191 949 | 竟,191 950 | 互,190 951 | 飲,190 952 | 藏,190 953 | 衣,189 954 | 幕,189 955 | 輸,189 956 | 鐵,189 957 | 牛,188 958 | 抽,188 959 | 草,188 960 | 葉,188 961 | 衝,188 962 | 州,187 963 | 述,187 964 | 木,186 965 | 叫,186 966 | 恐,186 967 | 掉,186 968 | 船,186 969 | 釣,186 970 | 按,185 971 | 探,185 972 | 米,184 973 | 慢,184 974 | 舞,184 975 | 禁,183 976 | 釋,183 977 | 岸,182 978 | 散,182 979 | 跳,182 980 | 伯,181 981 | 春,181 982 | 染,181 983 | 擴,181 984 | 哪,180 985 | 盛,180 986 | 絲,180 987 | 穩,180 988 | 貿,179 989 | 籍,178 990 | 兵,177 991 | 河,177 992 | 堅,177 993 | 慶,177 994 | 蘇,177 995 | 堂,176 996 | 潮,176 997 | 遭,176 998 | 雨,175 999 | 夢,175 1000 | 審,175 1001 | 靜,175 1002 | 享,174 1003 | 挑,174 1004 | 圓,173 1005 | 付,172 1006 | 啟,172 1007 | 延,171 1008 | 迎,171 1009 | 島,171 1010 | 敗,171 1011 | 援,171 1012 | 爸,170 1013 | 乾,170 1014 | 惠,170 1015 | 輪,170 1016 | 輛,169 1017 | 築,169 1018 | 鐘,169 1019 | 廳,169 1020 | 曲,168 1021 | 固,168 1022 | 熟,168 1023 | 束,167 1024 | 操,167 1025 | 幸,166 1026 | 拍,166 1027 | 畢,166 1028 | 監,166 1029 | 宋,165 1030 | 陣,165 1031 | 震,165 1032 | 壞,165 1033 | 批,164 1034 | 載,164 1035 | 障,164 1036 | 坐,163 1037 | 沙,163 1038 | 哈,163 1039 | 麥,163 1040 | 靠,163 1041 | 洛,162 1042 | 淡,162 1043 | 壽,162 1044 | 倫,161 1045 | 樹,161 1046 | 藉,161 1047 | 犯,160 1048 | 淨,160 1049 | 署,160 1050 | 呼,159 1051 | 諮,159 1052 | 鍵,159 1053 | 鮮,159 1054 | 守,158 1055 | 倍,158 1056 | 蛋,157 1057 | 劉,157 1058 | 癌,157 1059 | 既,156 1060 | 鬆,156 1061 | 驚,156 1062 | 尺,155 1063 | 攻,155 1064 | 穿,155 1065 | 授,155 1066 | 揮,155 1067 | 搭,155 1068 | 吉,154 1069 | 封,154 1070 | 惡,154 1071 | 慧,154 1072 | 佛,153 1073 | 雅,153 1074 | 隆,152 1075 | 債,152 1076 | 董,152 1077 | 秀,151 1078 | 怪,151 1079 | 誠,151 1080 | 緒,151 1081 | 毒,150 1082 | 掌,150 1083 | 診,150 1084 | 賓,150 1085 | 趨,150 1086 | 坡,149 1087 | 田,148 1088 | 桌,148 1089 | 棒,148 1090 | 湖,148 1091 | 貸,148 1092 | 輔,148 1093 | 露,148 1094 | 占,147 1095 | 抱,147 1096 | 楊,147 1097 | 撥,147 1098 | 肯,146 1099 | 潛,146 1100 | 燒,146 1101 | 佔,145 1102 | 屆,145 1103 | 忠,145 1104 | 紛,145 1105 | 暗,145 1106 | 脫,144 1107 | 端,144 1108 | 齡,144 1109 | 序,143 1110 | 罪,143 1111 | 飾,143 1112 | 忙,142 1113 | 努,142 1114 | 旁,142 1115 | 茶,142 1116 | 簽,142 1117 | 弟,141 1118 | 晶,141 1119 | 森,141 1120 | 湯,141 1121 | 跑,141 1122 | 覽,141 1123 | 予,140 1124 | 甲,140 1125 | 宏,140 1126 | 漫,140 1127 | 賞,140 1128 | 棄,139 1129 | 頂,139 1130 | 蔡,139 1131 | 縮,139 1132 | 亡,138 1133 | 唯,138 1134 | 澤,138 1135 | 玉,137 1136 | 拜,137 1137 | 託,137 1138 | 朝,137 1139 | 距,137 1140 | 雷,137 1141 | 誤,137 1142 | 搶,136 1143 | 複,136 1144 | 旗,135 1145 | 燈,135 1146 | 緣,134 1147 | 籌,134 1148 | 弱,133 1149 | 捷,133 1150 | 敏,133 1151 | 遇,133 1152 | 頻,133 1153 | 圾,132 1154 | 貝,132 1155 | 垃,132 1156 | 洗,132 1157 | 祖,132 1158 | 揚,132 1159 | 韓,132 1160 | 俄,131 1161 | 浪,131 1162 | 符,131 1163 | 貼,131 1164 | 輯,131 1165 | 私,130 1166 | 欣,130 1167 | 秋,130 1168 | 貴,130 1169 | 詩,130 1170 | 寬,130 1171 | 招,129 1172 | 植,129 1173 | 呈,128 1174 | 閉,128 1175 | 悲,128 1176 | 鄭,128 1177 | 髮,128 1178 | 鏡,128 1179 | 柯,127 1180 | 亂,127 1181 | 澳,127 1182 | 戴,127 1183 | 邀,127 1184 | 折,126 1185 | 冠,126 1186 | 宮,126 1187 | 紐,126 1188 | 啊,126 1189 | 尊,126 1190 | 憶,126 1191 | 觸,126 1192 | 宅,125 1193 | 狗,125 1194 | 漢,125 1195 | 儀,125 1196 | 旦,123 1197 | 圈,123 1198 | 患,123 1199 | 累,123 1200 | 途,123 1201 | 遺,123 1202 | 培,122 1203 | 蓋,122 1204 | 豪,122 1205 | 仔,121 1206 | 坪,121 1207 | 夏,121 1208 | 廢,121 1209 | 箱,121 1210 | 蕭,121 1211 | 翻,121 1212 | 抵,120 1213 | 松,120 1214 | 駐,120 1215 | 籃,120 1216 | 鬥,119 1217 | 偶,119 1218 | 溪,119 1219 | 慣,119 1220 | 橋,119 1221 | 奶,118 1222 | 厚,118 1223 | 盈,118 1224 | 勒,118 1225 | 握,118 1226 | 菸,118 1227 | 鼓,118 1228 | 緩,118 1229 | 姓,117 1230 | 泥,117 1231 | 遍,117 1232 | 諾,117 1233 | 麵,117 1234 | 恩,116 1235 | 蓮,116 1236 | 藍,116 1237 | 爆,116 1238 | 乏,115 1239 | 池,115 1240 | 桃,115 1241 | 陰,115 1242 | 隔,115 1243 | 潔,115 1244 | 篇,115 1245 | 乃,114 1246 | 君,114 1247 | 徒,114 1248 | 涉,114 1249 | 販,114 1250 | 塔,114 1251 | 濃,114 1252 | 仲,113 1253 | 游,113 1254 | 傾,113 1255 | 賺,113 1256 | 蟲,113 1257 | 句,112 1258 | 巧,112 1259 | 屏,112 1260 | 烏,112 1261 | 喝,112 1262 | 塑,112 1263 | 摩,112 1264 | 肝,111 1265 | 皆,111 1266 | 替,111 1267 | 幹,111 1268 | 趕,111 1269 | 豬,111 1270 | 儘,111 1271 | 沈,110 1272 | 妻,110 1273 | 雲,110 1274 | 塊,110 1275 | 蒐,110 1276 | 忘,109 1277 | 鳥,109 1278 | 櫃,109 1279 | 昌,108 1280 | 振,107 1281 | 液,107 1282 | 嫌,107 1283 | 寧,107 1284 | 耳,106 1285 | 骨,106 1286 | 麻,106 1287 | 詳,106 1288 | 隱,106 1289 | 帳,105 1290 | 賴,105 1291 | 戀,105 1292 | 丁,104 1293 | 牙,104 1294 | 召,104 1295 | 肌,104 1296 | 炎,104 1297 | 詞,104 1298 | 搖,104 1299 | 床,103 1300 | 俗,103 1301 | 迫,103 1302 | 純,103 1303 | 傑,103 1304 | 勵,103 1305 | 羊,102 1306 | 伴,102 1307 | 映,102 1308 | 毫,102 1309 | 殘,102 1310 | 塞,102 1311 | 煩,102 1312 | 駛,102 1313 | 繁,102 1314 | 顏,102 1315 | 丹,101 1316 | 址,101 1317 | 侵,101 1318 | 柔,101 1319 | 胞,101 1320 | 莫,101 1321 | 勤,101 1322 | 跨,101 1323 | 違,101 1324 | 帝,100 1325 | 掛,100 1326 | 敢,100 1327 | 睡,100 1328 | 獻,100 1329 | 贏,100 1330 | 邦,99 1331 | 拒,99 1332 | 勇,99 1333 | 殊,99 1334 | 疾,99 1335 | 偏,99 1336 | 描,99 1337 | 萊,99 1338 | 溝,99 1339 | 覆,99 1340 | 凡,98 1341 | 坦,98 1342 | 孫,98 1343 | 婆,98 1344 | 稍,98 1345 | 廚,98 1346 | 憂,98 1347 | 撞,98 1348 | 擺,98 1349 | 幼,97 1350 | 刑,97 1351 | 忍,97 1352 | 刷,97 1353 | 忽,97 1354 | 珍,97 1355 | 兼,97 1356 | 曼,97 1357 | 窗,97 1358 | 舒,97 1359 | 鋼,97 1360 | 沿,96 1361 | 梅,96 1362 | 聊,96 1363 | 擾,96 1364 | 阻,95 1365 | 浮,95 1366 | 陷,95 1367 | 凱,95 1368 | 循,95 1369 | 滑,95 1370 | 暫,95 1371 | 柏,94 1372 | 疫,94 1373 | 蒙,94 1374 | 雞,94 1375 | 辭,94 1376 | 尖,93 1377 | 姆,93 1378 | 冒,93 1379 | 敦,93 1380 | 蒂,93 1381 | 黎,93 1382 | 默,93 1383 | 谷,92 1384 | 俱,92 1385 | 逃,92 1386 | 偷,92 1387 | 絡,92 1388 | 臟,92 1389 | 伊,91 1390 | 扁,91 1391 | 措,91 1392 | 陪,91 1393 | 奧,91 1394 | 滾,91 1395 | 遷,91 1396 | 衡,91 1397 | 遲,91 1398 | 扣,90 1399 | 洪,90 1400 | 祇,90 1401 | 徐,90 1402 | 菌,90 1403 | 駕,90 1404 | 干,89 1405 | 兄,89 1406 | 側,89 1407 | 堆,89 1408 | 寄,89 1409 | 菲,89 1410 | 督,89 1411 | 敵,89 1412 | 譯,89 1413 | 孔,88 1414 | 祝,88 1415 | 裁,88 1416 | 綜,88 1417 | 膜,88 1418 | 閱,88 1419 | 醒,88 1420 | 礎,88 1421 | 伸,87 1422 | 災,87 1423 | 辛,87 1424 | 唐,87 1425 | 祥,87 1426 | 酸,87 1427 | 頗,87 1428 | 壇,87 1429 | 謀,87 1430 | 末,86 1431 | 莊,86 1432 | 稿,86 1433 | 壁,86 1434 | 托,85 1435 | 尾,85 1436 | 抓,85 1437 | 焦,85 1438 | 奪,85 1439 | 聚,85 1440 | 鎖,85 1441 | 繪,85 1442 | 冰,84 1443 | 返,84 1444 | 耐,84 1445 | 欲,84 1446 | 袋,84 1447 | 郭,84 1448 | 剩,84 1449 | 裂,84 1450 | 膠,84 1451 | 瓦,83 1452 | 併,83 1453 | 彼,83 1454 | 芳,83 1455 | 迪,83 1456 | 插,83 1457 | 閣,83 1458 | 貓,83 1459 | 贈,83 1460 | 伍,82 1461 | 妨,82 1462 | 珠,82 1463 | 番,82 1464 | 廖,82 1465 | 魔,82 1466 | 氛,81 1467 | 胡,81 1468 | 捕,81 1469 | 掃,81 1470 | 刀,80 1471 | 借,80 1472 | 峰,80 1473 | 偉,80 1474 | 蜂,80 1475 | 妙,79 1476 | 甜,79 1477 | 酬,79 1478 | 銘,79 1479 | 盧,79 1480 | 宇,78 1481 | 役,78 1482 | 沉,78 1483 | 挫,78 1484 | 瑜,78 1485 | 碰,78 1486 | 餅,78 1487 | 朱,77 1488 | 孝,77 1489 | 怨,77 1490 | 混,77 1491 | 懂,77 1492 | 攤,77 1493 | 晨,76 1494 | 淑,76 1495 | 喪,76 1496 | 曉,76 1497 | 薪,76 1498 | 姿,75 1499 | 割,75 1500 | 郵,75 1501 | 跡,75 1502 | 罰,75 1503 | 螢,75 1504 | 艾,74 1505 | 牢,74 1506 | 豆,74 1507 | 勉,74 1508 | 苗,74 1509 | 陶,74 1510 | 殖,74 1511 | 睛,74 1512 | 槍,74 1513 | 齊,74 1514 | 糖,74 1515 | 卅,73 1516 | 幻,73 1517 | 捐,73 1518 | 貶,73 1519 | 魯,73 1520 | 鑑,73 1521 | 杯,72 1522 | 貞,72 1523 | 脈,72 1524 | 荷,72 1525 | 雪,72 1526 | 薄,72 1527 | 串,71 1528 | 沖,71 1529 | 狂,71 1530 | 俊,71 1531 | 乘,71 1532 | 惜,71 1533 | 慈,71 1534 | 榜,71 1535 | 劑,71 1536 | 憑,71 1537 | 雕,71 1538 | 准,70 1539 | 徑,70 1540 | 脂,70 1541 | 瓶,70 1542 | 裕,70 1543 | 賭,70 1544 | 瞭,70 1545 | 呂,69 1546 | 戒,69 1547 | 巡,69 1548 | 玲,69 1549 | 剪,69 1550 | 獅,69 1551 | 截,69 1552 | 貌,69 1553 | 踏,69 1554 | 奮,69 1555 | 嬰,69 1556 | 灰,68 1557 | 姊,68 1558 | 拆,68 1559 | 采,68 1560 | 宿,68 1561 | 暢,68 1562 | 禍,68 1563 | 攀,68 1564 | 蟻,68 1565 | 扮,67 1566 | 拖,67 1567 | 泡,67 1568 | 赴,67 1569 | 鬼,67 1570 | 淚,67 1571 | 猶,67 1572 | 搜,67 1573 | 滅,67 1574 | 蜜,67 1575 | 鞋,67 1576 | 顆,67 1577 | 欄,67 1578 | 仰,66 1579 | 粗,66 1580 | 敬,66 1581 | 腸,66 1582 | 嘗,66 1583 | 嘴,66 1584 | 罷,66 1585 | 擎,66 1586 | 牆,66 1587 | 丸,65 1588 | 杜,65 1589 | 砂,65 1590 | 茂,65 1591 | 哲,65 1592 | 娛,65 1593 | 袖,65 1594 | 喊,65 1595 | 漏,65 1596 | 鳳,65 1597 | 鬧,65 1598 | 邁,65 1599 | 鴻,65 1600 | 冬,64 1601 | 迅,64 1602 | 卷,64 1603 | 胃,64 1604 | 慎,64 1605 | 氏,63 1606 | 汙,63 1607 | 拚,63 1608 | 恢,63 1609 | 炸,63 1610 | 皇,63 1611 | 朗,63 1612 | 疏,63 1613 | 莉,63 1614 | 彰,63 1615 | 爐,63 1616 | 躍,63 1617 | 冊,62 1618 | 甘,62 1619 | 夾,62 1620 | 肥,62 1621 | 胎,62 1622 | 棉,62 1623 | 辜,62 1624 | 膽,62 1625 | 魏,62 1626 | 鷹,62 1627 | 妹,61 1628 | 勁,61 1629 | 娼,61 1630 | 崇,61 1631 | 盒,61 1632 | 辨,61 1633 | 儲,61 1634 | 虧,61 1635 | 贊,61 1636 | 勸,61 1637 | 孕,60 1638 | 臣,60 1639 | 奈,60 1640 | 岩,60 1641 | 昆,60 1642 | 恆,60 1643 | 氧,60 1644 | 械,60 1645 | 喬,60 1646 | 椅,60 1647 | 葛,60 1648 | 慘,60 1649 | 潤,60 1650 | 誼,60 1651 | 誕,60 1652 | 鄰,60 1653 | 懼,60 1654 | 茲,59 1655 | 桿,59 1656 | 逢,59 1657 | 搬,59 1658 | 償,59 1659 | 嚇,59 1660 | 醬,59 1661 | 艦,59 1662 | 瓜,58 1663 | 吋,58 1664 | 妥,58 1665 | 姻,58 1666 | 津,58 1667 | 凍,58 1668 | 耗,58 1669 | 偵,58 1670 | 涵,58 1671 | 眷,58 1672 | 揭,58 1673 | 渡,58 1674 | 賀,58 1675 | 廉,58 1676 | 磁,58 1677 | 腐,58 1678 | 賢,58 1679 | 橫,58 1680 | 伺,57 1681 | 坑,57 1682 | 妝,57 1683 | 舍,57 1684 | 貢,57 1685 | 煙,57 1686 | 腹,57 1687 | 坊,56 1688 | 弄,56 1689 | 姐,56 1690 | 垂,56 1691 | 耶,56 1692 | 埔,56 1693 | 瑪,56 1694 | 慰,56 1695 | 墨,56 1696 | 闆,56 1697 | 斤,55 1698 | 哭,55 1699 | 衰,55 1700 | 悉,55 1701 | 盜,55 1702 | 賠,55 1703 | 螺,55 1704 | 礙,55 1705 | 鹽,55 1706 | 洞,54 1707 | 淋,54 1708 | 毀,54 1709 | 綁,54 1710 | 酷,54 1711 | 緻,54 1712 | 螂,54 1713 | 諸,54 1714 | 譜,54 1715 | 乳,53 1716 | 奉,53 1717 | 泌,53 1718 | 邱,53 1719 | 挖,53 1720 | 暑,53 1721 | 棟,53 1722 | 誘,53 1723 | 醉,53 1724 | 汁,52 1725 | 甫,52 1726 | 爬,52 1727 | 浴,52 1728 | 閃,52 1729 | 煮,52 1730 | 僑,52 1731 | 碩,52 1732 | 赫,52 1733 | 厲,52 1734 | 縱,52 1735 | 蹤,52 1736 | 灘,52 1737 | 叔,51 1738 | 秒,51 1739 | 凌,51 1740 | 添,51 1741 | 撐,51 1742 | 霸,51 1743 | 讚,51 1744 | 吊,50 1745 | 朵,50 1746 | 扭,50 1747 | 孤,50 1748 | 拓,50 1749 | 旺,50 1750 | 泛,50 1751 | 郎,50 1752 | 斑,50 1753 | 腫,50 1754 | 漁,50 1755 | 腿,50 1756 | 遞,50 1757 | 撲,50 1758 | 撒,50 1759 | 噸,50 1760 | 擠,50 1761 | 騎,50 1762 | 川,49 1763 | 兆,49 1764 | 吹,49 1765 | 杉,49 1766 | 芝,49 1767 | 烤,49 1768 | 釘,49 1769 | 彭,49 1770 | 煌,49 1771 | 慾,49 1772 | 磨,49 1773 | 叢,49 1774 | 扶,48 1775 | 抑,48 1776 | 肚,48 1777 | 虎,48 1778 | 娜,48 1779 | 寒,48 1780 | 腔,48 1781 | 募,48 1782 | 暖,48 1783 | 敲,48 1784 | 魅,48 1785 | 燃,48 1786 | 螞,48 1787 | 螳,48 1788 | 寵,48 1789 | 仙,47 1790 | 狄,47 1791 | 泳,47 1792 | 咬,47 1793 | 泉,47 1794 | 梁,47 1795 | 涼,47 1796 | 渴,47 1797 | 滋,47 1798 | 脹,47 1799 | 徹,47 1800 | 噴,47 1801 | 濾,47 1802 | 忌,46 1803 | 妮,46 1804 | 押,46 1805 | 抬,46 1806 | 洽,46 1807 | 偽,46 1808 | 掩,46 1809 | 淺,46 1810 | 詹,46 1811 | 鼎,46 1812 | 弊,46 1813 | 摸,46 1814 | 寮,46 1815 | 輩,46 1816 | 驅,46 1817 | 屈,45 1818 | 拔,45 1819 | 肩,45 1820 | 苓,45 1821 | 宴,45 1822 | 紋,45 1823 | 牽,45 1824 | 貫,45 1825 | 註,45 1826 | 夥,45 1827 | 瑰,45 1828 | 趙,45 1829 | 鼻,45 1830 | 燕,45 1831 | 繫,45 1832 | 芬,44 1833 | 怒,44 1834 | 珊,44 1835 | 盾,44 1836 | 啦,44 1837 | 涯,44 1838 | 鹿,44 1839 | 棗,44 1840 | 欽,44 1841 | 軸,44 1842 | 馳,44 1843 | 厭,44 1844 | 暨,44 1845 | 龐,44 1846 | 鬱,44 1847 | 壯,43 1848 | 彷,43 1849 | 炒,43 1850 | 咳,43 1851 | 堪,43 1852 | 裔,43 1853 | 漂,43 1854 | 銅,43 1855 | 蝶,43 1856 | 錦,43 1857 | 盪,43 1858 | 耀,43 1859 | 丈,42 1860 | 伏,42 1861 | 旬,42 1862 | 尿,42 1863 | 赤,42 1864 | 疼,42 1865 | 紗,42 1866 | 蚤,42 1867 | 迴,42 1868 | 烹,42 1869 | 貪,42 1870 | 堡,42 1871 | 琪,42 1872 | 腎,42 1873 | 嘛,42 1874 | 遙,42 1875 | 膨,42 1876 | 騰,42 1877 | 譽,42 1878 | 允,41 1879 | 牡,41 1880 | 彿,41 1881 | 怡,41 1882 | 昂,41 1883 | 契,41 1884 | 昭,41 1885 | 眉,41 1886 | 哦,41 1887 | 埋,41 1888 | 浦,41 1889 | 脅,41 1890 | 惱,41 1891 | 愉,41 1892 | 琳,41 1893 | 紫,41 1894 | 脾,41 1895 | 碎,41 1896 | 逼,41 1897 | 飽,41 1898 | 摘,41 1899 | 翼,41 1900 | 獵,41 1901 | 函,40 1902 | 枝,40 1903 | 玫,40 1904 | 祕,40 1905 | 秦,40 1906 | 梯,40 1907 | 惑,40 1908 | 填,40 1909 | 搞,40 1910 | 碗,40 1911 | 獄,40 1912 | 颱,40 1913 | 稽,40 1914 | 鄧,40 1915 | 鋒,40 1916 | 龜,40 1917 | 鍾,40 1918 | 轎,40 1919 | 礦,40 1920 | 辯,40 1921 | 囊,40 1922 | 鑽,40 1923 | 丟,39 1924 | 旨,39 1925 | 劫,39 1926 | 岡,39 1927 | 糾,39 1928 | 勃,39 1929 | 浩,39 1930 | 紡,39 1931 | 胸,39 1932 | 猛,39 1933 | 帽,39 1934 | 殼,39 1935 | 聘,39 1936 | 窩,39 1937 | 窮,39 1938 | 箭,39 1939 | 糊,39 1940 | 褪,39 1941 | 蘆,39 1942 | 蘋,39 1943 | 罐,39 1944 | 征,38 1945 | 屍,38 1946 | 巷,38 1947 | 竿,38 1948 | 倚,38 1949 | 栗,38 1950 | 荒,38 1951 | 敖,38 1952 | 稀,38 1953 | 毅,38 1954 | 銳,38 1955 | 蹄,38 1956 | 擦,38 1957 | 磯,38 1958 | 檳,38 1959 | 灑,38 1960 | 纖,38 1961 | 卜,37 1962 | 桑,37 1963 | 眠,37 1964 | 逮,37 1965 | 溢,37 1966 | 賃,37 1967 | 撰,37 1968 | 締,37 1969 | 凝,37 1970 | 噢,37 1971 | 鮑,37 1972 | 闢,37 1973 | 斥,36 1974 | 旭,36 1975 | 余,36 1976 | 姑,36 1977 | 抹,36 1978 | 敘,36 1979 | 旋,36 1980 | 爽,36 1981 | 痕,36 1982 | 頃,36 1983 | 湧,36 1984 | 廈,36 1985 | 碧,36 1986 | 潑,36 1987 | 潭,36 1988 | 擋,36 1989 | 謹,36 1990 | 蟹,36 1991 | 籤,36 1992 | 邏,36 1993 | 籲,36 1994 | 坤,35 1995 | 削,35 1996 | 哀,35 1997 | 屑,35 1998 | 捲,35 1999 | 棲,35 2000 | 琴,35 2001 | 塗,35 2002 | 榔,35 2003 | 煞,35 2004 | 瑟,35 2005 | 鼠,35 2006 | 塵,35 2007 | 噪,35 2008 | 臂,35 2009 | 艱,35 2010 | 馨,35 2011 | 肺,34 2012 | 茄,34 2013 | 娘,34 2014 | 峽,34 2015 | 柴,34 2016 | 秤,34 2017 | 秩,34 2018 | 貧,34 2019 | 寓,34 2020 | 焚,34 2021 | 肅,34 2022 | 撤,34 2023 | 瘋,34 2024 | 餌,34 2025 | 蔬,34 2026 | 蝴,34 2027 | 曆,34 2028 | 藤,34 2029 | 懸,34 2030 | 彎,34 2031 | 襲,34 2032 | 寸,33 2033 | 汗,33 2034 | 奔,33 2035 | 拋,33 2036 | 沾,33 2037 | 幽,33 2038 | 柱,33 2039 | 悅,33 2040 | 脆,33 2041 | 逆,33 2042 | 寂,33 2043 | 捨,33 2044 | 趁,33 2045 | 傲,33 2046 | 墓,33 2047 | 墊,33 2048 | 綿,33 2049 | 廟,33 2050 | 憤,33 2051 | 罵,33 2052 | 蝦,33 2053 | 諷,33 2054 | 鍋,33 2055 | 繞,33 2056 | 藩,33 2057 | 夕,32 2058 | 伙,32 2059 | 呀,32 2060 | 拼,32 2061 | 倉,32 2062 | 栽,32 2063 | 疲,32 2064 | 巢,32 2065 | 敞,32 2066 | 欺,32 2067 | 筋,32 2068 | 嘆,32 2069 | 賜,32 2070 | 餵,32 2071 | 黛,32 2072 | 灌,32 2073 | 匹,31 2074 | 矛,31 2075 | 亨,31 2076 | 兌,31 2077 | 吞,31 2078 | 吻,31 2079 | 卓,31 2080 | 孟,31 2081 | 怖,31 2082 | 歧,31 2083 | 恨,31 2084 | 軌,31 2085 | 扇,31 2086 | 捉,31 2087 | 啤,31 2088 | 崩,31 2089 | 悠,31 2090 | 罩,31 2091 | 滴,31 2092 | 漠,31 2093 | 綱,31 2094 | 蓄,31 2095 | 遜,31 2096 | 瘤,31 2097 | 彌,31 2098 | 騙,31 2099 | 嚼,31 2100 | 躁,31 2101 | 纏,31 2102 | 驟,31 2103 | 纜,31 2104 | 穴,30 2105 | 寺,30 2106 | 宙,30 2107 | 奏,30 2108 | 枯,30 2109 | 卿,30 2110 | 挺,30 2111 | 框,30 2112 | 曹,30 2113 | 傅,30 2114 | 睪,30 2115 | 鉤,30 2116 | 歉,30 2117 | 誓,30 2118 | 墜,30 2119 | 慕,30 2120 | 糕,30 2121 | 褲,30 2122 | 謊,30 2123 | 黏,30 2124 | 壤,30 2125 | 譬,30 2126 | 騷,30 2127 | 籠,30 2128 | 竊,30 2129 | 勾,29 2130 | 卸,29 2131 | 侯,29 2132 | 恰,29 2133 | 拾,29 2134 | 悄,29 2135 | 狼,29 2136 | 窄,29 2137 | 郡,29 2138 | 勘,29 2139 | 喚,29 2140 | 晴,29 2141 | 葬,29 2142 | 鈴,29 2143 | 漆,29 2144 | 魁,29 2145 | 魂,29 2146 | 澄,29 2147 | 諒,29 2148 | 趟,29 2149 | 濱,29 2150 | 篷,29 2151 | 蕾,29 2152 | 爛,29 2153 | 井,28 2154 | 汰,28 2155 | 披,28 2156 | 昏,28 2157 | 盼,28 2158 | 郊,28 2159 | 挽,28 2160 | 耕,28 2161 | 猜,28 2162 | 祭,28 2163 | 羞,28 2164 | 甦,28 2165 | 催,28 2166 | 爺,28 2167 | 頒,28 2168 | 僵,28 2169 | 劍,28 2170 | 履,28 2171 | 憐,28 2172 | 撫,28 2173 | 瘦,28 2174 | 頸,28 2175 | 聰,28 2176 | 謙,28 2177 | 蹈,28 2178 | 懶,28 2179 | 顛,28 2180 | 犧,28 2181 | 髒,28 2182 | 舌,27 2183 | 抨,27 2184 | 枚,27 2185 | 沮,27 2186 | 叛,27 2187 | 倆,27 2188 | 浸,27 2189 | 臭,27 2190 | 惟,27 2191 | 雀,27 2192 | 傢,27 2193 | 喉,27 2194 | 翔,27 2195 | 毓,27 2196 | 煤,27 2197 | 葡,27 2198 | 膀,27 2199 | 醇,27 2200 | 齒,27 2201 | 翰,27 2202 | 糟,27 2203 | 鍊,27 2204 | 繩,27 2205 | 霧,27 2206 | 鵬,27 2207 | 釀,27 2208 | 歹,26 2209 | 丙,26 2210 | 弘,26 2211 | 仿,26 2212 | 兇,26 2213 | 恬,26 2214 | 炳,26 2215 | 牲,26 2216 | 埃,26 2217 | 悔,26 2218 | 翅,26 2219 | 莎,26 2220 | 蚵,26 2221 | 訣,26 2222 | 悶,26 2223 | 棋,26 2224 | 菊,26 2225 | 萄,26 2226 | 媳,26 2227 | 鳴,26 2228 | 璃,26 2229 | 踐,26 2230 | 憩,26 2231 | 擅,26 2232 | 襄,26 2233 | 闊,26 2234 | 蠍,26 2235 | 麟,26 2236 | 矚,26 2237 | 勻,25 2238 | 圳,25 2239 | 佐,25 2240 | 卵,25 2241 | 盯,25 2242 | 佩,25 2243 | 昔,25 2244 | 肢,25 2245 | 玻,25 2246 | 苑,25 2247 | 衍,25 2248 | 韋,25 2249 | 辱,25 2250 | 婉,25 2251 | 斜,25 2252 | 淘,25 2253 | 堤,25 2254 | 廊,25 2255 | 睹,25 2256 | 腺,25 2257 | 艇,25 2258 | 躲,25 2259 | 滯,25 2260 | 賦,25 2261 | 蕩,25 2262 | 縫,25 2263 | 璧,25 2264 | 闖,25 2265 | 斗,24 2266 | 欠,24 2267 | 卑,24 2268 | 卦,24 2269 | 狠,24 2270 | 胖,24 2271 | 狹,24 2272 | 粒,24 2273 | 喻,24 2274 | 遂,24 2275 | 榕,24 2276 | 竭,24 2277 | 粹,24 2278 | 翠,24 2279 | 裸,24 2280 | 墾,24 2281 | 薩,24 2282 | 臘,24 2283 | 癢,24 2284 | 飄,24 2285 | 鑼,24 2286 | 劣,23 2287 | 吐,23 2288 | 羽,23 2289 | 妓,23 2290 | 刮,23 2291 | 矽,23 2292 | 肪,23 2293 | 柚,23 2294 | 盆,23 2295 | 拳,23 2296 | 晉,23 2297 | 瓷,23 2298 | 逛,23 2299 | 鈔,23 2300 | 塌,23 2301 | 碌,23 2302 | 碑,23 2303 | 虞,23 2304 | 蒼,23 2305 | 駁,23 2306 | 鋁,23 2307 | 罹,23 2308 | 諧,23 2309 | 輻,23 2310 | 遵,23 2311 | 霍,23 2312 | 鵝,23 2313 | 獸,23 2314 | 鶴,23 2315 | 疊,23 2316 | 凸,22 2317 | 乖,22 2318 | 拌,22 2319 | 祈,22 2320 | 陌,22 2321 | 宰,22 2322 | 矩,22 2323 | 埠,22 2324 | 蛇,22 2325 | 覓,22 2326 | 逝,22 2327 | 椒,22 2328 | 萃,22 2329 | 菁,22 2330 | 菱,22 2331 | 腰,22 2332 | 逾,22 2333 | 瞄,22 2334 | 裹,22 2335 | 辣,22 2336 | 踩,22 2337 | 鋪,22 2338 | 鴨,22 2339 | 濫,22 2340 | 壘,22 2341 | 瀏,22 2342 | 竄,22 2343 | 糧,22 2344 | 轟,22 2345 | 扎,21 2346 | 仗,21 2347 | 夷,21 2348 | 廷,21 2349 | 沫,21 2350 | 姚,21 2351 | 娟,21 2352 | 烘,21 2353 | 脊,21 2354 | 豈,21 2355 | 掀,21 2356 | 晤,21 2357 | 喔,21 2358 | 壺,21 2359 | 廂,21 2360 | 逸,21 2361 | 嫁,21 2362 | 瑕,21 2363 | 嫩,21 2364 | 粽,21 2365 | 膏,21 2366 | 蒸,21 2367 | 漿,21 2368 | 遮,21 2369 | 憾,21 2370 | 穎,21 2371 | 嚐,21 2372 | 瞬,21 2373 | 謠,21 2374 | 轄,21 2375 | 醜,21 2376 | 霜,21 2377 | 攜,21 2378 | 癮,21 2379 | 驕,21 2380 | 侍,20 2381 | 帕,20 2382 | 庚,20 2383 | 牧,20 2384 | 俐,20 2385 | 炮,20 2386 | 范,20 2387 | 衫,20 2388 | 剝,20 2389 | 宵,20 2390 | 殷,20 2391 | 翁,20 2392 | 屠,20 2393 | 淵,20 2394 | 喀,20 2395 | 慨,20 2396 | 棵,20 2397 | 棚,20 2398 | 睞,20 2399 | 稚,20 2400 | 羨,20 2401 | 裙,20 2402 | 僚,20 2403 | 寡,20 2404 | 屢,20 2405 | 熊,20 2406 | 碳,20 2407 | 嘲,20 2408 | 樁,20 2409 | 躺,20 2410 | 艘,20 2411 | 爵,20 2412 | 礁,20 2413 | 薰,20 2414 | 繭,20 2415 | 藻,20 2416 | 于,19 2417 | 巾,19 2418 | 玄,19 2419 | 后,19 2420 | 哇,19 2421 | 彥,19 2422 | 缸,19 2423 | 倡,19 2424 | 荐,19 2425 | 笨,19 2426 | 訝,19 2427 | 揆,19 2428 | 湊,19 2429 | 歇,19 2430 | 溼,19 2431 | 葵,19 2432 | 詮,19 2433 | 鉗,19 2434 | 滲,19 2435 | 肇,19 2436 | 蒲,19 2437 | 蜥,19 2438 | 蜴,19 2439 | 遣,19 2440 | 槽,19 2441 | 蓬,19 2442 | 贖,19 2443 | 鑿,19 2444 | 犬,18 2445 | 妃,18 2446 | 呆,18 2447 | 汪,18 2448 | 姍,18 2449 | 宛,18 2450 | 岳,18 2451 | 邸,18 2452 | 侶,18 2453 | 昧,18 2454 | 桂,18 2455 | 掙,18 2456 | 梭,18 2457 | 愁,18 2458 | 慌,18 2459 | 楷,18 2460 | 溶,18 2461 | 煥,18 2462 | 寞,18 2463 | 甄,18 2464 | 酵,18 2465 | 嘿,18 2466 | 稻,18 2467 | 橘,18 2468 | 霖,18 2469 | 頰,18 2470 | 瀉,18 2471 | 癒,18 2472 | 瓊,18 2473 | 疇,18 2474 | 圭,17 2475 | 吵,17 2476 | 尬,17 2477 | 抒,17 2478 | 罕,17 2479 | 迄,17 2480 | 佰,17 2481 | 剁,17 2482 | 呵,17 2483 | 枋,17 2484 | 臥,17 2485 | 芽,17 2486 | 娃,17 2487 | 姦,17 2488 | 柵,17 2489 | 耍,17 2490 | 剖,17 2491 | 剔,17 2492 | 匪,17 2493 | 茫,17 2494 | 衷,17 2495 | 匙,17 2496 | 戚,17 2497 | 舶,17 2498 | 筍,17 2499 | 蛛,17 2500 | 酥,17 2501 | 雇,17 2502 | 彙,17 2503 | 溜,17 2504 | 誇,17 2505 | 飼,17 2506 | 撕,17 2507 | 澎,17 2508 | 皺,17 2509 | 餓,17 2510 | 燙,17 2511 | 尷,17 2512 | 輿,17 2513 | 懲,17 2514 | 穫,17 2515 | 韻,17 2516 | 鯨,17 2517 | 饒,17 2518 | 襯,17 2519 | 攬,17 2520 | 乙,16 2521 | 勿,16 2522 | 屯,16 2523 | 呎,16 2524 | 坍,16 2525 | 盲,16 2526 | 姨,16 2527 | 帥,16 2528 | 拱,16 2529 | 哩,16 2530 | 悍,16 2531 | 畜,16 2532 | 堵,16 2533 | 庸,16 2534 | 桶,16 2535 | 逗,16 2536 | 喇,16 2537 | 筒,16 2538 | 蛙,16 2539 | 塢,16 2540 | 肆,16 2541 | 摔,16 2542 | 摧,16 2543 | 潘,16 2544 | 鞏,16 2545 | 儒,16 2546 | 膩,16 2547 | 艙,16 2548 | 燥,16 2549 | 矯,16 2550 | 謎,16 2551 | 隸,16 2552 | 櫥,16 2553 | 攔,16 2554 | 瀰,16 2555 | 囉,16 2556 | 鰻,16 2557 | 蘿,16 2558 | 髓,16 2559 | 云,15 2560 | 仕,15 2561 | 扔,15 2562 | 冶,15 2563 | 屁,15 2564 | 旱,15 2565 | 弧,15 2566 | 沼,15 2567 | 俏,15 2568 | 苛,15 2569 | 虐,15 2570 | 虹,15 2571 | 冤,15 2572 | 冥,15 2573 | 悟,15 2574 | 崔,15 2575 | 彬,15 2576 | 聆,15 2577 | 渥,15 2578 | 萍,15 2579 | 萎,15 2580 | 煎,15 2581 | 煉,15 2582 | 僕,15 2583 | 墅,15 2584 | 寥,15 2585 | 蓉,15 2586 | 蝕,15 2587 | 潰,15 2588 | 蔓,15 2589 | 澀,15 2590 | 糞,15 2591 | 鍛,15 2592 | 雛,15 2593 | 簿,15 2594 | 齣,15 2595 | 叉,14 2596 | 卉,14 2597 | 朴,14 2598 | 孚,14 2599 | 抖,14 2600 | 俠,14 2601 | 咪,14 2602 | 歪,14 2603 | 癸,14 2604 | 倦,14 2605 | 俾,14 2606 | 挾,14 2607 | 梳,14 2608 | 飢,14 2609 | 偕,14 2610 | 唸,14 2611 | 寇,14 2612 | 崛,14 2613 | 淹,14 2614 | 淪,14 2615 | 犁,14 2616 | 陵,14 2617 | 喧,14 2618 | 渣,14 2619 | 袱,14 2620 | 証,14 2621 | 韌,14 2622 | 惹,14 2623 | 詭,14 2624 | 賈,14 2625 | 鉛,14 2626 | 摺,14 2627 | 榴,14 2628 | 羯,14 2629 | 蔭,14 2630 | 橡,14 2631 | 禦,14 2632 | 縛,14 2633 | 錫,14 2634 | 嶼,14 2635 | 嶺,14 2636 | 擱,14 2637 | 謗,14 2638 | 瞻,14 2639 | 鑄,14 2640 | 鹼,14 2641 | 乍,13 2642 | 匆,13 2643 | 汀,13 2644 | 匠,13 2645 | 汐,13 2646 | 佑,13 2647 | 吾,13 2648 | 辰,13 2649 | 阪,13 2650 | 卒,13 2651 | 咒,13 2652 | 帖,13 2653 | 芭,13 2654 | 邵,13 2655 | 俘,13 2656 | 柳,13 2657 | 砍,13 2658 | 哺,13 2659 | 圃,13 2660 | 峻,13 2661 | 恭,13 2662 | 捏,13 2663 | 晃,13 2664 | 掘,13 2665 | 掏,13 2666 | 眺,13 2667 | 喲,13 2668 | 奠,13 2669 | 嵌,13 2670 | 揉,13 2671 | 棺,13 2672 | 傻,13 2673 | 睦,13 2674 | 賄,13 2675 | 嗽,13 2676 | 嘎,13 2677 | 銜,13 2678 | 穀,13 2679 | 蔽,13 2680 | 蔚,13 2681 | 醃,13 2682 | 撼,13 2683 | 撿,13 2684 | 窺,13 2685 | 蕙,13 2686 | 懇,13 2687 | 糙,13 2688 | 薯,13 2689 | 霞,13 2690 | 釐,13 2691 | 鎊,13 2692 | 嚥,13 2693 | 壢,13 2694 | 蠻,13 2695 | 戈,12 2696 | 凹,12 2697 | 叮,12 2698 | 叩,12 2699 | 叭,12 2700 | 奴,12 2701 | 弗,12 2702 | 伐,12 2703 | 弛,12 2704 | 妒,12 2705 | 抉,12 2706 | 扯,12 2707 | 沛,12 2708 | 矣,12 2709 | 肖,12 2710 | 杭,12 2711 | 芙,12 2712 | 畏,12 2713 | 栩,12 2714 | 浚,12 2715 | 畔,12 2716 | 軒,12 2717 | 捧,12 2718 | 疵,12 2719 | 笙,12 2720 | 紮,12 2721 | 莖,12 2722 | 訟,12 2723 | 晰,12 2724 | 椎,12 2725 | 渾,12 2726 | 窘,12 2727 | 嗜,12 2728 | 嗯,12 2729 | 愧,12 2730 | 跪,12 2731 | 靶,12 2732 | 僱,12 2733 | 綺,12 2734 | 蜘,12 2735 | 儂,12 2736 | 幟,12 2737 | 敷,12 2738 | 樞,12 2739 | 毆,12 2740 | 踢,12 2741 | 樸,12 2742 | 磚,12 2743 | 穆,12 2744 | 燦,12 2745 | 聳,12 2746 | 瀑,12 2747 | 癖,12 2748 | 竅,12 2749 | 蟬,12 2750 | 蘊,12 2751 | 鱷,12 2752 | 豔,12 2753 | 划,11 2754 | 曳,11 2755 | 汝,11 2756 | 聿,11 2757 | 沐,11 2758 | 汲,11 2759 | 邪,11 2760 | 阮,11 2761 | 咕,11 2762 | 咀,11 2763 | 忿,11 2764 | 拘,11 2765 | 泣,11 2766 | 泊,11 2767 | 秉,11 2768 | 俟,11 2769 | 奎,11 2770 | 拯,11 2771 | 茅,11 2772 | 迥,11 2773 | 倖,11 2774 | 凋,11 2775 | 恥,11 2776 | 疹,11 2777 | 耽,11 2778 | 耿,11 2779 | 酌,11 2780 | 婪,11 2781 | 掠,11 2782 | 捱,11 2783 | 斬,11 2784 | 紳,11 2785 | 莞,11 2786 | 酗,11 2787 | 婷,11 2788 | 媚,11 2789 | 媛,11 2790 | 飪,11 2791 | 嗅,11 2792 | 暇,11 2793 | 殿,11 2794 | 滄,11 2795 | 瑚,11 2796 | 萱,11 2797 | 誦,11 2798 | 嬌,11 2799 | 緬,11 2800 | 澡,11 2801 | 濁,11 2802 | 燉,11 2803 | 諱,11 2804 | 遼,11 2805 | 瓣,11 2806 | 疆,11 2807 | 麒,11 2808 | 闡,11 2809 | 鑰,11 2810 | 仇,10 2811 | 凶,10 2812 | 爪,10 2813 | 札,10 2814 | 坎,10 2815 | 抄,10 2816 | 皂,10 2817 | 枕,10 2818 | 俞,10 2819 | 垮,10 2820 | 洶,10 2821 | 珀,10 2822 | 趴,10 2823 | 郁,10 2824 | 株,10 2825 | 茱,10 2826 | 豹,10 2827 | 陡,10 2828 | 匿,10 2829 | 屜,10 2830 | 崎,10 2831 | 崑,10 2832 | 彗,10 2833 | 梧,10 2834 | 梨,10 2835 | 淫,10 2836 | 痊,10 2837 | 逕,10 2838 | 喘,10 2839 | 廁,10 2840 | 粥,10 2841 | 嫂,10 2842 | 搏,10 2843 | 瑛,10 2844 | 腥,10 2845 | 裴,10 2846 | 輒,10 2847 | 儉,10 2848 | 墮,10 2849 | 璋,10 2850 | 磅,10 2851 | 蔔,10 2852 | 蔥,10 2853 | 褐,10 2854 | 鴉,10 2855 | 樺,10 2856 | 篤,10 2857 | 濛,10 2858 | 濤,10 2859 | 瞪,10 2860 | 瞧,10 2861 | 薇,10 2862 | 嚮,10 2863 | 轍,10 2864 | 鞭,10 2865 | 曝,10 2866 | 鬚,10 2867 | 弔,9 2868 | 囚,9 2869 | 舟,9 2870 | 刪,9 2871 | 匣,9 2872 | 巫,9 2873 | 灸,9 2874 | 甸,9 2875 | 阱,9 2876 | 兔,9 2877 | 咎,9 2878 | 妾,9 2879 | 杰,9 2880 | 亭,9 2881 | 剎,9 2882 | 咨,9 2883 | 咽,9 2884 | 拭,9 2885 | 柬,9 2886 | 炭,9 2887 | 俯,9 2888 | 桐,9 2889 | 栓,9 2890 | 氨,9 2891 | 祟,9 2892 | 躬,9 2893 | 淒,9 2894 | 窒,9 2895 | 脖,9 2896 | 揣,9 2897 | 斐,9 2898 | 棘,9 2899 | 棧,9 2900 | 焙,9 2901 | 詛,9 2902 | 詐,9 2903 | 雯,9 2904 | 嫉,9 2905 | 暈,9 2906 | 溯,9 2907 | 瑙,9 2908 | 稠,9 2909 | 蛻,9 2910 | 遏,9 2911 | 寨,9 2912 | 嶄,9 2913 | 廓,9 2914 | 禎,9 2915 | 箏,9 2916 | 翡,9 2917 | 銖,9 2918 | 墳,9 2919 | 撓,9 2920 | 瑩,9 2921 | 磊,9 2922 | 窯,9 2923 | 緝,9 2924 | 豎,9 2925 | 憊,9 2926 | 澱,9 2927 | 隧,9 2928 | 頹,9 2929 | 曖,9 2930 | 檜,9 2931 | 燭,9 2932 | 瞳,9 2933 | 輾,9 2934 | 燻,9 2935 | 鎔,9 2936 | 壟,9 2937 | 攏,9 2938 | 鹹,9 2939 | 櫻,9 2940 | 鶯,9 2941 | 黯,9 2942 | 顫,9 2943 | 鑲,9 2944 | 弓,8 2945 | 毋,8 2946 | 甩,8 2947 | 扛,8 2948 | 吝,8 2949 | 吟,8 2950 | 杏,8 2951 | 沃,8 2952 | 咐,8 2953 | 奄,8 2954 | 拐,8 2955 | 枉,8 2956 | 哉,8 2957 | 姜,8 2958 | 炯,8 2959 | 倘,8 2960 | 倪,8 2961 | 厝,8 2962 | 娩,8 2963 | 挨,8 2964 | 殉,8 2965 | 浙,8 2966 | 爹,8 2967 | 祐,8 2968 | 茹,8 2969 | 茗,8 2970 | 梓,8 2971 | 盔,8 2972 | 笛,8 2973 | 逍,8 2974 | 傍,8 2975 | 傘,8 2976 | 喃,8 2977 | 惰,8 2978 | 惶,8 2979 | 萌,8 2980 | 詠,8 2981 | 鈞,8 2982 | 馮,8 2983 | 塘,8 2984 | 媲,8 2985 | 楓,8 2986 | 溺,8 2987 | 痴,8 2988 | 睜,8 2989 | 遑,8 2990 | 雋,8 2991 | 頑,8 2992 | 兢,8 2993 | 槓,8 2994 | 滬,8 2995 | 瑣,8 2996 | 瘍,8 2997 | 綻,8 2998 | 蒜,8 2999 | 膝,8 3000 | 銬,8 3001 | 霉,8 3002 | 魄,8 3003 | 懊,8 3004 | 濂,8 3005 | 螃,8 3006 | 豫,8 3007 | 薛,8 3008 | 鞠,8 3009 | 駿,8 3010 | 擲,8 3011 | 檻,8 3012 | 闔,8 3013 | 瀟,8 3014 | 瀕,8 3015 | 簷,8 3016 | 蠅,8 3017 | 鬍,8 3018 | 嚨,8 3019 | 癥,8 3020 | 藹,8 3021 | 殲,8 3022 | 霹,8 3023 | 鑒,8 3024 | 攪,8 3025 | 釁,8 3026 | 乞,7 3027 | 卯,7 3028 | 氾,7 3029 | 吏,7 3030 | 扼,7 3031 | 杖,7 3032 | 芒,7 3033 | 劾,7 3034 | 岱,7 3035 | 炙,7 3036 | 罔,7 3037 | 咸,7 3038 | 哄,7 3039 | 咱,7 3040 | 垣,7 3041 | 恍,7 3042 | 拷,7 3043 | 柑,7 3044 | 苟,7 3045 | 迭,7 3046 | 陋,7 3047 | 挪,7 3048 | 珮,7 3049 | 茵,7 3050 | 兜,7 3051 | 匾,7 3052 | 啞,7 3053 | 崙,7 3054 | 御,7 3055 | 涎,7 3056 | 焉,7 3057 | 烽,7 3058 | 脣,7 3059 | 豚,7 3060 | 婿,7 3061 | 湛,7 3062 | 鈕,7 3063 | 鈍,7 3064 | 隅,7 3065 | 嗣,7 3066 | 愚,7 3067 | 搗,7 3068 | 暉,7 3069 | 楠,7 3070 | 矮,7 3071 | 綑,7 3072 | 馴,7 3073 | 漬,7 3074 | 熔,7 3075 | 熄,7 3076 | 睽,7 3077 | 綴,7 3078 | 綸,7 3079 | 閥,7 3080 | 髦,7 3081 | 嘯,7 3082 | 撈,7 3083 | 磋,7 3084 | 賤,7 3085 | 橄,7 3086 | 膳,7 3087 | 蕃,7 3088 | 蕪,7 3089 | 諜,7 3090 | 踴,7 3091 | 遴,7 3092 | 餡,7 3093 | 嚀,7 3094 | 燴,7 3095 | 禪,7 3096 | 簇,7 3097 | 薔,7 3098 | 謬,7 3099 | 軀,7 3100 | 譏,7 3101 | 蹲,7 3102 | 孀,7 3103 | 瀾,7 3104 | 繽,7 3105 | 囂,7 3106 | 蠟,7 3107 | 巒,7 3108 | 黴,7 3109 | 囑,7 3110 | 蠶,7 3111 | 靂,7 3112 | 魘,7 3113 | 刁,6 3114 | 刃,6 3115 | 孑,6 3116 | 尹,6 3117 | 曰,6 3118 | 帆,6 3119 | 牟,6 3120 | 肋,6 3121 | 妖,6 3122 | 灼,6 3123 | 怯,6 3124 | 泄,6 3125 | 亟,6 3126 | 怠,6 3127 | 拮,6 3128 | 炫,6 3129 | 砌,6 3130 | 胚,6 3131 | 哨,6 3132 | 娓,6 3133 | 耙,6 3134 | 胰,6 3135 | 袁,6 3136 | 迺,6 3137 | 冕,6 3138 | 啄,6 3139 | 啃,6 3140 | 婁,6 3141 | 崖,6 3142 | 晝,6 3143 | 梢,6 3144 | 淇,6 3145 | 眶,6 3146 | 翎,6 3147 | 莘,6 3148 | 袍,6 3149 | 喂,6 3150 | 徨,6 3151 | 愕,6 3152 | 棕,6 3153 | 毯,6 3154 | 湘,6 3155 | 焰,6 3156 | 猴,6 3157 | 絞,6 3158 | 絨,6 3159 | 腕,6 3160 | 剷,6 3161 | 祿,6 3162 | 窟,6 3163 | 筠,6 3164 | 葦,6 3165 | 葫,6 3166 | 遁,6 3167 | 酪,6 3168 | 隘,6 3169 | 頌,6 3170 | 撇,6 3171 | 瑤,6 3172 | 睿,6 3173 | 誡,6 3174 | 餃,6 3175 | 嘻,6 3176 | 墟,6 3177 | 憫,6 3178 | 摯,6 3179 | 暮,6 3180 | 樟,6 3181 | 瘡,6 3182 | 膛,6 3183 | 擂,6 3184 | 臻,6 3185 | 錶,6 3186 | 閻,6 3187 | 頤,6 3188 | 擘,6 3189 | 穗,6 3190 | 膿,6 3191 | 薑,6 3192 | 遽,6 3193 | 醣,6 3194 | 醞,6 3195 | 鍍,6 3196 | 鍰,6 3197 | 鴿,6 3198 | 嚕,6 3199 | 翹,6 3200 | 顎,6 3201 | 廬,6 3202 | 譚,6 3203 | 譎,6 3204 | 鵡,6 3205 | 襪,6 3206 | 譴,6 3207 | 霾,6 3208 | 欖,6 3209 | 驥,6 3210 | 鸚,6 3211 | 兮,5 3212 | 夭,5 3213 | 叨,5 3214 | 妄,5 3215 | 奸,5 3216 | 朽,5 3217 | 吼,5 3218 | 庇,5 3219 | 扳,5 3220 | 灶,5 3221 | 芋,5 3222 | 沸,5 3223 | 疙,5 3224 | 芹,5 3225 | 軋,5 3226 | 陀,5 3227 | 侮,5 3228 | 剋,5 3229 | 哎,5 3230 | 恤,5 3231 | 殃,5 3232 | 盃,5 3233 | 祉,5 3234 | 倩,5 3235 | 峭,5 3236 | 恕,5 3237 | 悚,5 3238 | 盎,5 3239 | 眩,5 3240 | 砸,5 3241 | 羔,5 3242 | 耘,5 3243 | 荊,5 3244 | 埤,5 3245 | 奢,5 3246 | 悼,5 3247 | 惕,5 3248 | 淮,5 3249 | 莽,5 3250 | 啼,5 3251 | 棍,5 3252 | 犀,5 3253 | 琢,5 3254 | 痘,5 3255 | 硝,5 3256 | 蛤,5 3257 | 軼,5 3258 | 閑,5 3259 | 雁,5 3260 | 嗚,5 3261 | 徬,5 3262 | 楔,5 3263 | 禽,5 3264 | 裘,5 3265 | 鄒,5 3266 | 靖,5 3267 | 凳,5 3268 | 慷,5 3269 | 榨,5 3270 | 榻,5 3271 | 熙,5 3272 | 綽,5 3273 | 閩,5 3274 | 隙,5 3275 | 嘶,5 3276 | 嬉,5 3277 | 幢,5 3278 | 撩,5 3279 | 澆,5 3280 | 熬,5 3281 | 瘩,5 3282 | 瘟,5 3283 | 磐,5 3284 | 緞,5 3285 | 蝸,5 3286 | 踝,5 3287 | 醋,5 3288 | 噹,5 3289 | 橙,5 3290 | 瞞,5 3291 | 穌,5 3292 | 篩,5 3293 | 蕉,5 3294 | 褥,5 3295 | 諺,5 3296 | 鋸,5 3297 | 霎,5 3298 | 斂,5 3299 | 斃,5 3300 | 繆,5 3301 | 螫,5 3302 | 錨,5 3303 | 檬,5 3304 | 檸,5 3305 | 瀆,5 3306 | 濺,5 3307 | 曠,5 3308 | 瀝,5 3309 | 爍,5 3310 | 矇,5 3311 | 簾,5 3312 | 襟,5 3313 | 靡,5 3314 | 礫,5 3315 | 蘑,5 3316 | 儼,5 3317 | 鷗,5 3318 | 几,4 3319 | 孓,4 3320 | 仆,4 3321 | 丘,4 3322 | 皿,4 3323 | 忖,4 3324 | 臼,4 3325 | 伶,4 3326 | 吭,4 3327 | 吩,4 3328 | 忱,4 3329 | 禿,4 3330 | 迂,4 3331 | 咄,4 3332 | 戕,4 3333 | 斧,4 3334 | 祁,4 3335 | 咻,4 3336 | 垢,4 3337 | 奕,4 3338 | 姪,4 3339 | 峙,4 3340 | 柄,4 3341 | 殆,4 3342 | 牴,4 3343 | 苞,4 3344 | 迦,4 3345 | 倌,4 3346 | 俸,4 3347 | 俺,4 3348 | 崁,4 3349 | 恣,4 3350 | 悖,4 3351 | 晏,4 3352 | 涓,4 3353 | 狸,4 3354 | 祠,4 3355 | 紜,4 3356 | 虔,4 3357 | 蚊,4 3358 | 釜,4 3359 | 凰,4 3360 | 啪,4 3361 | 孰,4 3362 | 尉,4 3363 | 庶,4 3364 | 惋,4 3365 | 捻,4 3366 | 淤,4 3367 | 眸,4 3368 | 絀,4 3369 | 莓,4 3370 | 逞,4 3371 | 喋,4 3372 | 喳,4 3373 | 唾,4 3374 | 孳,4 3375 | 弼,4 3376 | 愣,4 3377 | 摒,4 3378 | 氯,4 3379 | 渦,4 3380 | 渺,4 3381 | 渝,4 3382 | 渙,4 3383 | 琥,4 3384 | 皓,4 3385 | 絮,4 3386 | 鈣,4 3387 | 馭,4 3388 | 塚,4 3389 | 塭,4 3390 | 搓,4 3391 | 斟,4 3392 | 滔,4 3393 | 猷,4 3394 | 瑯,4 3395 | 盞,4 3396 | 祺,4 3397 | 稜,4 3398 | 稟,4 3399 | 筷,4 3400 | 粵,4 3401 | 虜,4 3402 | 蜀,4 3403 | 誅,4 3404 | 閘,4 3405 | 雍,4 3406 | 僧,4 3407 | 僥,4 3408 | 嘀,4 3409 | 嗷,4 3410 | 嘟,4 3411 | 孵,4 3412 | 嶇,4 3413 | 彆,4 3414 | 愿,4 3415 | 瘧,4 3416 | 箔,4 3417 | 綢,4 3418 | 綵,4 3419 | 蓓,4 3420 | 賒,4 3421 | 銓,4 3422 | 雌,4 3423 | 嘮,4 3424 | 嘩,4 3425 | 廝,4 3426 | 憧,4 3427 | 憬,4 3428 | 戮,4 3429 | 瞑,4 3430 | 蔑,4 3431 | 蝙,4 3432 | 豌,4 3433 | 輟,4 3434 | 鋅,4 3435 | 駝,4 3436 | 諦,4 3437 | 諭,4 3438 | 踵,4 3439 | 錐,4 3440 | 駭,4 3441 | 嶽,4 3442 | 徽,4 3443 | 曙,4 3444 | 檀,4 3445 | 瞰,4 3446 | 禧,4 3447 | 臀,4 3448 | 蟀,4 3449 | 蟋,4 3450 | 鎂,4 3451 | 錘,4 3452 | 闌,4 3453 | 黝,4 3454 | 殯,4 3455 | 獷,4 3456 | 贅,4 3457 | 馥,4 3458 | 鯊,4 3459 | 瀚,4 3460 | 禱,4 3461 | 繹,4 3462 | 羸,4 3463 | 蹶,4 3464 | 蹺,4 3465 | 鏟,4 3466 | 鏈,4 3467 | 鏗,4 3468 | 颼,4 3469 | 攘,4 3470 | 鏽,4 3471 | 鐸,4 3472 | 鐲,4 3473 | 齦,4 3474 | 聾,4 3475 | 壩,4 3476 | 癱,4 3477 | 矗,4 3478 | 鷺,4 3479 | 籬,4 3480 | 冗,3 3481 | 厄,3 3482 | 丕,3 3483 | 冉,3 3484 | 匝,3 3485 | 仟,3 3486 | 矢,3 3487 | 禾,3 3488 | 丞,3 3489 | 吁,3 3490 | 虫,3 3491 | 佇,3 3492 | 佣,3 3493 | 呃,3 3494 | 吮,3 3495 | 吠,3 3496 | 妊,3 3497 | 沁,3 3498 | 汨,3 3499 | 肘,3 3500 | 肛,3 3501 | 佯,3 3502 | 侖,3 3503 | 侏,3 3504 | 冽,3 3505 | 呻,3 3506 | 呷,3 3507 | 弦,3 3508 | 拂,3 3509 | 拙,3 3510 | 泓,3 3511 | 阜,3 3512 | 咦,3 3513 | 宦,3 3514 | 屎,3 3515 | 恃,3 3516 | 柩,3 3517 | 炬,3 3518 | 牯,3 3519 | 疤,3 3520 | 矜,3 3521 | 禹,3 3522 | 紉,3 3523 | 茁,3 3524 | 苜,3 3525 | 酋,3 3526 | 唷,3 3527 | 哼,3 3528 | 唆,3 3529 | 唉,3 3530 | 娠,3 3531 | 朔,3 3532 | 狽,3 3533 | 眨,3 3534 | 茸,3 3535 | 啖,3 3536 | 啜,3 3537 | 帷,3 3538 | 悸,3 3539 | 掬,3 3540 | 捩,3 3541 | 梗,3 3542 | 氫,3 3543 | 淳,3 3544 | 淆,3 3545 | 焊,3 3546 | 猖,3 3547 | 翌,3 3548 | 莢,3 3549 | 趾,3 3550 | 堯,3 3551 | 壹,3 3552 | 寐,3 3553 | 惻,3 3554 | 痣,3 3555 | 痙,3 3556 | 絢,3 3557 | 菩,3 3558 | 貯,3 3559 | 鄂,3 3560 | 傭,3 3561 | 嗓,3 3562 | 嗆,3 3563 | 椰,3 3564 | 猿,3 3565 | 稔,3 3566 | 窠,3 3567 | 綏,3 3568 | 葷,3 3569 | 蛹,3 3570 | 賊,3 3571 | 靴,3 3572 | 麂,3 3573 | 僮,3 3574 | 匱,3 3575 | 嘈,3 3576 | 寢,3 3577 | 摟,3 3578 | 榭,3 3579 | 漾,3 3580 | 澈,3 3581 | 窪,3 3582 | 緇,3 3583 | 蒞,3 3584 | 誣,3 3585 | 誨,3 3586 | 骯,3 3587 | 僻,3 3588 | 劈,3 3589 | 噗,3 3590 | 憎,3 3591 | 撮,3 3592 | 槳,3 3593 | 瞎,3 3594 | 瞇,3 3595 | 瞌,3 3596 | 箴,3 3597 | 篆,3 3598 | 蓿,3 3599 | 蝠,3 3600 | 蝨,3 3601 | 霄,3 3602 | 鞍,3 3603 | 駒,3 3604 | 骷,3 3605 | 噬,3 3606 | 懈,3 3607 | 橢,3 3608 | 瞠,3 3609 | 瞥,3 3610 | 羲,3 3611 | 蹂,3 3612 | 骸,3 3613 | 骼,3 3614 | 鴦,3 3615 | 鴛,3 3616 | 濘,3 3617 | 獰,3 3618 | 轅,3 3619 | 齋,3 3620 | 甕,3 3621 | 穢,3 3622 | 簧,3 3623 | 簣,3 3624 | 臍,3 3625 | 蹦,3 3626 | 鯉,3 3627 | 瀛,3 3628 | 瀨,3 3629 | 羹,3 3630 | 躇,3 3631 | 騖,3 3632 | 鵲,3 3633 | 懺,3 3634 | 蠔,3 3635 | 蠕,3 3636 | 饑,3 3637 | 籐,3 3638 | 蠢,3 3639 | 贓,3 3640 | 躊,3 3641 | 髏,3 3642 | 龔,3 3643 | 巖,3 3644 | 攣,3 3645 | 鑣,3 3646 | 鷥,3 3647 | 饞,3 3648 | 躪,3 3649 | 鑾,3 3650 | 丐,2 3651 | 仄,2 3652 | 叼,2 3653 | 亙,2 3654 | 伕,2 3655 | 夙,2 3656 | 屹,2 3657 | 戍,2 3658 | 汕,2 3659 | 刨,2 3660 | 吶,2 3661 | 吱,2 3662 | 囪,2 3663 | 杞,2 3664 | 甬,2 3665 | 芍,2 3666 | 侃,2 3667 | 佻,2 3668 | 呱,2 3669 | 咚,2 3670 | 帘,2 3671 | 拈,2 3672 | 拗,2 3673 | 沱,2 3674 | 泱,2 3675 | 炊,2 3676 | 狐,2 3677 | 疝,2 3678 | 疚,2 3679 | 祀,2 3680 | 肴,2 3681 | 芥,2 3682 | 剌,2 3683 | 咯,2 3684 | 垠,2 3685 | 姣,2 3686 | 弭,2 3687 | 徊,2 3688 | 柿,2 3689 | 毗,2 3690 | 氟,2 3691 | 玳,2 3692 | 甭,2 3693 | 茉,2 3694 | 倣,2 3695 | 倨,2 3696 | 唔,2 3697 | 姬,2 3698 | 涕,2 3699 | 琉,2 3700 | 畝,2 3701 | 笆,2 3702 | 耆,2 3703 | 胱,2 3704 | 胴,2 3705 | 茴,2 3706 | 訌,2 3707 | 訕,2 3708 | 訖,2 3709 | 軔,2 3710 | 娶,2 3711 | 崢,2 3712 | 庵,2 3713 | 庾,2 3714 | 徙,2 3715 | 徘,2 3716 | 悴,2 3717 | 惦,2 3718 | 悽,2 3719 | 悻,2 3720 | 敝,2 3721 | 晦,2 3722 | 梵,2 3723 | 梆,2 3724 | 梔,2 3725 | 梟,2 3726 | 淙,2 3727 | 淌,2 3728 | 涸,2 3729 | 笠,2 3730 | 絃,2 3731 | 荼,2 3732 | 袞,2 3733 | 訛,2 3734 | 赦,2 3735 | 傀,2 3736 | 啻,2 3737 | 啾,2 3738 | 堰,2 3739 | 掣,2 3740 | 揍,2 3741 | 揖,2 3742 | 棠,2 3743 | 氮,2 3744 | 渲,2 3745 | 渠,2 3746 | 湮,2 3747 | 湍,2 3748 | 溉,2 3749 | 猥,2 3750 | 猩,2 3751 | 琵,2 3752 | 竣,2 3753 | 筏,2 3754 | 腋,2 3755 | 腆,2 3756 | 菅,2 3757 | 詔,2 3758 | 貂,2 3759 | 貽,2 3760 | 跛,2 3761 | 酣,2 3762 | 嗇,2 3763 | 慄,2 3764 | 慍,2 3765 | 愾,2 3766 | 搪,2 3767 | 楞,2 3768 | 滂,2 3769 | 滇,2 3770 | 煦,2 3771 | 瑁,2 3772 | 瘀,2 3773 | 瘁,2 3774 | 痱,2 3775 | 睫,2 3776 | 碘,2 3777 | 碉,2 3778 | 粱,2 3779 | 絹,2 3780 | 腮,2 3781 | 蜃,2 3782 | 豢,2 3783 | 貲,2 3784 | 賅,2 3785 | 軾,2 3786 | 辟,2 3787 | 釉,2 3788 | 隕,2 3789 | 雉,2 3790 | 鳩,2 3791 | 嘔,2 3792 | 嫗,2 3793 | 嫣,2 3794 | 慟,2 3795 | 慚,2 3796 | 槁,2 3797 | 榷,2 3798 | 槌,2 3799 | 漓,2 3800 | 滌,2 3801 | 煽,2 3802 | 瘓,2 3803 | 箋,2 3804 | 舔,2 3805 | 蜿,2 3806 | 閡,2 3807 | 閨,2 3808 | 閤,2 3809 | 靼,2 3810 | 嫻,2 3811 | 憔,2 3812 | 潦,2 3813 | 潸,2 3814 | 潺,2 3815 | 獗,2 3816 | 皚,2 3817 | 碾,2 3818 | 翩,2 3819 | 褒,2 3820 | 諄,2 3821 | 遨,2 3822 | 鋤,2 3823 | 麾,2 3824 | 冀,2 3825 | 噥,2 3826 | 噱,2 3827 | 撻,2 3828 | 擄,2 3829 | 擒,2 3830 | 熾,2 3831 | 瓢,2 3832 | 盥,2 3833 | 縈,2 3834 | 翱,2 3835 | 錠,2 3836 | 靦,2 3837 | 駱,2 3838 | 儡,2 3839 | 嚎,2 3840 | 嚏,2 3841 | 嬪,2 3842 | 檄,2 3843 | 濠,2 3844 | 縷,2 3845 | 繃,2 3846 | 罄,2 3847 | 臃,2 3848 | 膺,2 3849 | 蟑,2 3850 | 褻,2 3851 | 鍥,2 3852 | 瀋,2 3853 | 聶,2 3854 | 謨,2 3855 | 鵑,2 3856 | 黠,2 3857 | 櫚,2 3858 | 璽,2 3859 | 藕,2 3860 | 譁,2 3861 | 鏢,2 3862 | 曦,2 3863 | 朧,2 3864 | 瓏,2 3865 | 竇,2 3866 | 糯,2 3867 | 躉,2 3868 | 躅,2 3869 | 齟,2 3870 | 儷,2 3871 | 懾,2 3872 | 醺,2 3873 | 驀,2 3874 | 騾,2 3875 | 鰭,2 3876 | 巔,2 3877 | 懿,2 3878 | 躑,2 3879 | 韃,2 3880 | 齬,2 3881 | 蘸,2 3882 | 蠱,2 3883 | 饜,2 3884 | 驛,2 3885 | 癲,2 3886 | 羈,2 3887 | 鬢,2 3888 | 鸞,2 3889 | 匕,1 3890 | 丑,1 3891 | 仞,1 3892 | 叱,1 3893 | 弁,1 3894 | 扒,1 3895 | 乓,1 3896 | 伉,1 3897 | 匈,1 3898 | 吆,1 3899 | 吒,1 3900 | 夸,1 3901 | 并,1 3902 | 戎,1 3903 | 阡,1 3904 | 佃,1 3905 | 囤,1 3906 | 妍,1 3907 | 岐,1 3908 | 岑,1 3909 | 岔,1 3910 | 沌,1 3911 | 佬,1 3912 | 咆,1 3913 | 咋,1 3914 | 帛,1 3915 | 帑,1 3916 | 庖,1 3917 | 怔,1 3918 | 戾,1 3919 | 杳,1 3920 | 歿,1 3921 | 氓,1 3922 | 狎,1 3923 | 狙,1 3924 | 玟,1 3925 | 穹,1 3926 | 竺,1 3927 | 羌,1 3928 | 虱,1 3929 | 俑,1 3930 | 俎,1 3931 | 剃,1 3932 | 匍,1 3933 | 咫,1 3934 | 宥,1 3935 | 弈,1 3936 | 恪,1 3937 | 拴,1 3938 | 枸,1 3939 | 洱,1 3940 | 狩,1 3941 | 玷,1 3942 | 赳,1 3943 | 韭,1 3944 | 冢,1 3945 | 哮,1 3946 | 宸,1 3947 | 屐,1 3948 | 悌,1 3949 | 晒,1 3950 | 晌,1 3951 | 朕,1 3952 | 桓,1 3953 | 桀,1 3954 | 桅,1 3955 | 浬,1 3956 | 烊,1 3957 | 砧,1 3958 | 砥,1 3959 | 窈,1 3960 | 紊,1 3961 | 紕,1 3962 | 罟,1 3963 | 胭,1 3964 | 臬,1 3965 | 舫,1 3966 | 蚣,1 3967 | 袂,1 3968 | 訐,1 3969 | 逅,1 3970 | 釗,1 3971 | 偃,1 3972 | 倏,1 3973 | 匐,1 3974 | 唬,1 3975 | 唳,1 3976 | 婢,1 3977 | 恿,1 3978 | 悵,1 3979 | 惘,1 3980 | 惚,1 3981 | 捫,1 3982 | 涮,1 3983 | 淞,1 3984 | 猙,1 3985 | 琅,1 3986 | 瓠,1 3987 | 畦,1 3988 | 皎,1 3989 | 硫,1 3990 | 窕,1 3991 | 缽,1 3992 | 脩,1 3993 | 舷,1 3994 | 莒,1 3995 | 莠,1 3996 | 蛀,1 3997 | 豉,1 3998 | 釦,1 3999 | 釧,1 4000 | 厥,1 4001 | 孱,1 4002 | 嵐,1 4003 | 巽,1 4004 | 惺,1 4005 | 揀,1 4006 | 揪,1 4007 | 湃,1 4008 | 甥,1 4009 | 痞,1 4010 | 粟,1 4011 | 腑,1 4012 | 舜,1 4013 | 菠,1 4014 | 蛔,1 4015 | 詁,1 4016 | 貳,1 4017 | 賁,1 4018 | 跋,1 4019 | 跚,1 4020 | 跆,1 4021 | 鈐,1 4022 | 閔,1 4023 | 隋,1 4024 | 飭,1 4025 | 黍,1 4026 | 嗤,1 4027 | 嗡,1 4028 | 媾,1 4029 | 幌,1 4030 | 搔,1 4031 | 楨,1 4032 | 榆,1 4033 | 牒,1 4034 | 畸,1 4035 | 痰,1 4036 | 睬,1 4037 | 睥,1 4038 | 睨,1 4039 | 蜈,1 4040 | 衙,1 4041 | 詫,1 4042 | 詰,1 4043 | 詣,1 4044 | 詬,1 4045 | 輊,1 4046 | 飴,1 4047 | 馱,1 4048 | 嘖,1 4049 | 塹,1 4050 | 嫦,1 4051 | 旖,1 4052 | 榫,1 4053 | 槐,1 4054 | 漳,1 4055 | 箕,1 4056 | 筵,1 4057 | 箝,1 4058 | 綾,1 4059 | 臧,1 4060 | 蓀,1 4061 | 褚,1 4062 | 輓,1 4063 | 鄙,1 4064 | 骰,1 4065 | 噓,1 4066 | 噎,1 4067 | 慫,1 4068 | 憚,1 4069 | 樊,1 4070 | 瘠,1 4071 | 磕,1 4072 | 稼,1 4073 | 蔗,1 4074 | 褓,1 4075 | 諉,1 4076 | 諂,1 4077 | 賬,1 4078 | 閭,1 4079 | 颳,1 4080 | 餒,1 4081 | 駑,1 4082 | 駙,1 4083 | 麩,1 4084 | 嬴,1 4085 | 暹,1 4086 | 樵,1 4087 | 澹,1 4088 | 縑,1 4089 | 蕊,1 4090 | 褫,1 4091 | 覦,1 4092 | 諫,1 4093 | 霓,1 4094 | 餞,1 4095 | 鬨,1 4096 | 壕,1 4097 | 孺,1 4098 | 懦,1 4099 | 櫛,1 4100 | 濡,1 4101 | 磷,1 4102 | 簍,1 4103 | 糜,1 4104 | 膾,1 4105 | 蟒,1 4106 | 褶,1 4107 | 覬,1 4108 | 謄,1 4109 | 豁,1 4110 | 蹋,1 4111 | 蹊,1 4112 | 邂,1 4113 | 颶,1 4114 | 騁,1 4115 | 鮪,1 4116 | 戳,1 4117 | 朦,1 4118 | 簫,1 4119 | 繡,1 4120 | 罈,1 4121 | 觴,1 4122 | 蹣,1 4123 | 鞦,1 4124 | 餾,1 4125 | 懵,1 4126 | 簸,1 4127 | 隴,1 4128 | 鶉,1 4129 | 鵪,1 4130 | 麓,1 4131 | 嚷,1 4132 | 孽,1 4133 | 攙,1 4134 | 礪,1 4135 | 辮,1 4136 | 纂,1 4137 | 贍,1 4138 | 鰓,1 4139 | 蠣,1 4140 | 鐮,1 4141 | 鐳,1 4142 | 鐺,1 4143 | 驃,1 4144 | 囈,1 4145 | 孿,1 4146 | 癬,1 4147 | 籟,1 4148 | 霽,1 4149 | 韁,1 4150 | 鱔,1 4151 | 鱗,1 4152 | 讒,1 4153 | 韆,1 4154 | 顱,1 4155 | 驢,1 4156 | 黷,1 4157 | -------------------------------------------------------------------------------- /web/src/ls/index.ls: -------------------------------------------------------------------------------- 1 | base = \https://plotdb.github.io/xl-fontset/alpha/ 2 | #base = \alpha/ # for local testing 3 | 4 | editor = do 5 | init: -> 6 | @textarea = document.querySelector \textarea 7 | @textarea.addEventListener \keyup, ~> @sync! 8 | document.querySelector \#chooser .addEventListener \click, (e) ~> 9 | if !e or !e.target => return 10 | [font,type] = [e.target.getAttribute(\data-font), e.target.getAttribute(\data-type)] 11 | if !font => return 12 | if type == \en => 13 | xfl.load "fonts/#font.ttf", ~> 14 | @font = it 15 | @sync! 16 | else @load font 17 | @load \王漢宗細黑 18 | load: (font) -> 19 | xfl.load "#base/#font", (font) ~> 20 | @font = font 21 | @font.sync document.body.innerText 22 | @sync! 23 | sync: -> 24 | if !@font => return 25 | @font.sync @textarea.value 26 | @textarea.setAttribute \class, "form-control #{@font.className}" 27 | document.body.setAttribute \class, "#{@font.className}" 28 | 29 | editor.init! 30 | 31 | xfl.load "#base/王漢宗超明", (font) -> 32 | headlines = Array.from(document.querySelectorAll 'h1,h2,h3') 33 | texts = headlines.map(-> it.innerText).join('') 34 | font.sync texts 35 | headlines.map -> it.classList.add font.className 36 | 37 | -------------------------------------------------------------------------------- /web/src/pug/index.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | include ../../static/assets/ldui/pug/ldui.pug 3 | - var fontlist = ["851手書き雑フォント","中楷體","瀨戶字体","花園明朝","中仿宋體","刻石錄明體","站酷快乐体2016修订版","衡山毛筆","中圓體","刻石錄鋼筆鶴體","站酷高端黑体修订2015","中明體","刻石錄顏體","粗黑體","王漢宗中魏碑簡體","王漢宗仿宋體","王漢宗粗鋼體","王漢宗粗黑體實陰","王漢宗標楷體空心","王漢宗正海報","王漢宗細新宋簡體","王漢宗中明注音體","王漢宗波卡體空陰","王漢宗細明","王漢宗中明破音字1","王漢宗波浪體","王漢宗細黑","王漢宗中明破音字2","王漢宗海報體半天水","王漢宗中明破音字3","王漢宗中楷注音體","王漢宗超明","王漢宗中楷破音字1","王漢宗超黑俏皮動物","王漢宗中楷破音字2","王漢宗特黑","王漢宗酷儷海報","王漢宗中楷破音字3","王漢宗鋼筆行楷","王漢宗粗圓體雙空","王漢宗顏體"]; 4 | - var featurefonts = ["瀨戶字体", "衡山毛筆", "王漢宗粗鋼體", "王漢宗綜藝體", "王漢宗波浪體"]; 5 | 6 | html 7 | head 8 | meta(charset="utf-8") 9 | meta(property="og:locale",content="zh_TW") 10 | meta(property="og:image",content="http://plotdb.github.io/xl-fontload/assets/img/thumbnail.png") 11 | meta(property="og:image:type",content="image/png") 12 | meta(property="og:image:width",content="1200") 13 | meta(property="og:image:height",content="630") 14 | meta(property="og:title",content="XL Font Load / 大尺寸字型載入器") 15 | meta(property="og:type",content="article") 16 | meta(property="og:url",content="http://plotdb.github.io/xl-fontload/") 17 | meta(property="og:description",content="這個專案實作了一個快速中文字型載入模組,將字型檔依字頻切成小塊,再根據網頁內容選擇需要載入的字型子集") 18 | meta(property="article:author",content="zbryikt") 19 | meta(property="article:section",content="Taiwan") 20 | meta(name="keywords",content="webfont,font loader,cjk") 21 | +css("https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css") 22 | +css("assets/ldui/ldui.min.css") 23 | +css("css/index.css") 24 | body: #root 25 | h1 26 | span XL Font Load / 27 | ruby 28 | rb 大尺寸 29 | rt 中日韓 30 | span 字型載入器 31 | hr 32 | #chooser 33 | .btn-group.mb-2.mr-2 34 | each font in featurefonts 35 | .btn.btn-outline-dark(data-font=font)= font 36 | .dropdown(style="display:inline-block;vertical-align:top") 37 | .btn.btn-outline-dark.dropdown-toggle(data-toggle="dropdown") More 38 | .dropdown-menu(style="max-height:400px;overflow:scroll") 39 | each font in fontlist 40 | a.dropdown-item(href="#",data-font=font)= font 41 | //-each font in enlist 42 | a.dropdown-item(href="#",data-font=font,data-type="en")= font 43 | 44 | 45 | textarea.form-control(rows="7",placeholder="在這邊隨便輸入一些中文字看看吧...") 46 | +nbr(2) 47 | h2 這是什麼? 48 | p 中文字型檔向來動輒數MB,若要做為網路字型使用往往很卡。其它解決方案大多是商業付費服務,而且針對動態內容,要嘛做不好,亦或成本很高。 49 | p 這個專案實作了一個快速中文字型載入模組,將字型檔依字頻切成小塊,再根據網頁內容選擇需要載入的字型子集,因此我們可以快速的選取想要的字型,套用在網站上。 50 | p 另一方面,此專案亦收集了數十套免費、可商用的開放中文字型,也提供了預先切割好的字型模組,可直接分支使用,不需再花時間自行搜集處理。 51 | br 52 | h2 我要怎麼取得? 53 | p 此專案託管於 #[a(href="https://github.com/plotdb/xl-fontload") Github 專案庫] ,您可以造訪該網址並利用 Git 分支,或者直接下載整包模組。 54 | br 55 | h3 我可以整理自己的中文字型集嗎? 56 | p 可以!此專案連同編譯程式碼一同釋出,可自動編譯切割指定之字型檔。 57 | br 58 | h3 換字型會閃 / 打字會閃 / 載入還是很久 / 字型有缺字 59 | p 這些都是未來改進方向,科科。 60 | br 61 | hr 62 | #footer 63 | div source code copyrighted #[a(href="https://twitter.com/zbryikt") @zbryikt] released under MIT License 64 | div source in #[a(href="https://github.com/plotdb/xl-fontload") Github Repo] / font files in #[a(href="https://github.com/plotdb/xl-fontset") Another Github Repo] 65 | 66 | 67 | +script("assets/lib/xfl.js") 68 | +script("https://cdnjs.cloudflare.com/ajax/libs/bootstrap.native/2.0.27/bootstrap-native-v4.min.js") 69 | +script("js/index.js") 70 | -------------------------------------------------------------------------------- /web/src/styl/index.styl: -------------------------------------------------------------------------------- 1 | html,body 2 | margin: 0 3 | padding: 0 4 | font-size: 24px 5 | 6 | #root 7 | margin: 20px auto 8 | padding: 20px 0 60px 9 | max-width: 1200px 10 | width: 90% 11 | textarea 12 | font-size: 30px 13 | 14 | h1 ruby 15 | -webkit-ruby-position: over 16 | font-size: 0.85em 17 | rt 18 | font-size: 14px 19 | 20 | #chooser .btn 21 | font-size: 20px 22 | 23 | #footer 24 | font-family: helvetica, arial, sans-serif 25 | font-size: 16px 26 | 27 | h1, h2, h3 28 | font-weight: 400 29 | -------------------------------------------------------------------------------- /web/static/assets/img/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotdb/xfl/5d708e2bc51571bdf3685c53b77115babc0652a2/web/static/assets/img/thumbnail.png -------------------------------------------------------------------------------- /web/static/assets/ldui/pug/core/chevron-down.pug: -------------------------------------------------------------------------------- 1 | //- module 2 | mixin chevron-down 3 | img(src="data:image/gif;base64,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") 4 | -------------------------------------------------------------------------------- /web/static/assets/ldui/pug/core/spinner.pug: -------------------------------------------------------------------------------- 1 | //- module 2 | mixin spinner 3 | img(src="data:image/gif;base64,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") 4 | -------------------------------------------------------------------------------- /web/static/assets/ldui/pug/core/util.pug: -------------------------------------------------------------------------------- 1 | //- module 2 | //- escape for json output to prevent xss 3 | - var escjson = function(obj) { return 'JSON.parse(unescape("' + escape(JSON.stringify(obj)) + '"))'; }; 4 | //- escape for html output to prevent xss 5 | - var eschtml = (function() { var MAP = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; var repl = function(c) { return MAP[c]; }; return function(s) { return s.replace(/[&<>'"]/g, repl); }; })(); 6 | //- add br x n 7 | mixin nbr(count) 8 | - for (var i = 0; i < count; i++) 9 | br 10 | 11 | //- load script / css without worrying about loading them multiple times. 12 | - if(!scriptLoader) { scriptLoader = {url: {}, config: {}}; } 13 | - if(!decache) { decache = (version? "?v=" + version : ""); } 14 | mixin script(url,config) 15 | - scriptLoader.config = (config ? config : {}); 16 | if !scriptLoader.url[url] 17 | - scriptLoader.url[url] = true; 18 | if /^https?:\/\/./.exec(url) 19 | script(type="text/javascript",src=url, 20 | defer=!!scriptLoader.config.defer,async=!!scriptLoader.config.async) 21 | else 22 | script(type="text/javascript",src=url + decache, 23 | defer=!!scriptLoader.config.defer,async=!!scriptLoader.config.async) 24 | 25 | - if(!cssLoader) { cssLoader = {url: {}}; } 26 | mixin css(url,config) 27 | - cssLoader.config = (config ? config : {}); 28 | if !cssLoader.url[url] 29 | - cssLoader.url[url] = true; 30 | link(rel="stylesheet",type="text/css",href=url + decache) 31 | 32 | - if(!blockLoader) { blockLoader = {name: {}, config: {}}; } 33 | mixin block(name) 34 | if !blockLoader.name[name] 35 | - blockLoader.name[name] = true; 36 | block 37 | - var b64img = {}; 38 | - b64img.px1 = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAQAICRAEAOw==" 39 | -------------------------------------------------------------------------------- /web/static/assets/ldui/pug/ext/index.pug: -------------------------------------------------------------------------------- 1 | //- module 2 | 3 | mixin ldp(name, colors, actions, cls) 4 | - if(!actions) actions = [] 5 | .ldp(class=(cls || "")) 6 | .colors 7 | .ctrl 8 | each a in actions 9 | div(data-action=a[0])= a[1] 10 | each c in colors 11 | .color(style=`background:${c}`) 12 | if name 13 | .name= name 14 | 15 | //- Palette Editor 16 | mixin ldPaletteEditor 17 | .ldp 18 | .name 19 | .colors 20 | .edit 21 | .inner 22 | .row 23 | .col-sm-6 24 | .ldColorPicker.no-border.no-palette 25 | .col-sm-6 26 | .row.mb-2 27 | .col-sm-8 28 | select.form-control.form-control-local-sm(value="rgb") 29 | option(value="rgb") RGB 30 | option(value="hsl") HSL 31 | option(value="hcl") HCL 32 | .col-sm-4.pl-0: input.form-control.form-control-local-sm.value(placeholder="Hex Value",data-tag="hex",style="margin:0") 33 | - var configs = [["Red", "Green", "Blue", "rgb", "active"], ["Hue", "Saturation", "Luminance", "hsl",""], ["Hue", "Chroma", "Luminance", "hcl",""]]; 34 | each config in configs 35 | .row.config(data-tag=config[3],class=config[4]) 36 | .col-sm-8 37 | .label-group: span= config[0] 38 | input.ldrs.ldrs-sm( 39 | data-tag=config[3] + "-" + config[0][0].toLowerCase()) 40 | .label-group: span= config[1] 41 | input.ldrs.ldrs-sm( 42 | data-tag=config[3] + "-" + config[1][0].toLowerCase()) 43 | .label-group: span= config[2] 44 | input.ldrs.ldrs-sm( 45 | data-tag=config[3] + "-" + config[2][0].toLowerCase()) 46 | .col-sm-4 47 | input.value.form-control.form-control-local-sm( 48 | data-tag=config[3] + "-" + config[0][0].toLowerCase()) 49 | input.value.form-control.form-control-local-sm( 50 | data-tag=config[3] + "-" + config[1][0].toLowerCase()) 51 | input.value.form-control.form-control-local-sm( 52 | data-tag=config[3] + "-" + config[2][0].toLowerCase()) 53 | 54 | //- Palette Picker Widget 55 | mixin ldPalettePicker 56 | .ldpp(ldPalettePicker) 57 | .navbar.text-center: .inner(data-tag="menu") 58 | ul.nav.nav-pills.float-right 59 | .nav-item: a.nav-link.active(data-panel="view") View 60 | .nav-item: a.nav-link(data-panel="mypal") My Pals 61 | .nav-item: a.nav-link(data-panel="edit") Edit 62 | div.nav.nav-pills 63 | .input-group 64 | input.form-control(placeholder="Search...",data-tag="search") 65 | .input-group-append.dropdown 66 | .btn.btn-outline-dark.dropdown-toggle(data-toggle="dropdown") Filter 67 | .dropdown-menu(data-tag="categories") 68 | a.dropdown-item(href="#",data-cat="") All 69 | .dropdown-divider 70 | a.dropdown-item(href="#",data-cat="artwork") Artwork 71 | a.dropdown-item(href="#",data-cat="brand") Brand 72 | a.dropdown-item(href="#",data-cat="concept") Concept 73 | .dropdown-divider 74 | a.dropdown-item(href="#",data-cat="gradient") Gradient 75 | a.dropdown-item(href="#",data-cat="qualitative") Qualitative 76 | a.dropdown-item(href="#",data-cat="diverging") Diverging 77 | a.dropdown-item(href="#",data-cat="colorbrew") Colorbrew 78 | .panels 79 | .panel.active.clusterize-scroll(data-panel="view",style="max-height:600px"): .inner.clusterize-content 80 | .panel.clusterize-scroll(data-panel="mypal",style="max-height:600px") 81 | .inner.clusterize-content 82 | .btn.btn-primary.btn-block.ld-over-inverse.btn-load 83 | | Load More 84 | .ld.ldld.ldbtn.sm 85 | .panel(data-panel="edit") 86 | +ldPaletteEditor 87 | .foot 88 | hr 89 | .float-right 90 | .btn.btn-primary.mr-2(data-action="use") Use This Palette 91 | .btn.btn-outline-secondary.ld-ext-right(data-action="save") Save as Asset #[.ld.ldld.ldbtn.sm] 92 | .btn.btn-outline-secondary(data-action="undo") Undo #[i.i-undo] 93 | mixin ldCover 94 | .ldcv: .base: .inner 95 | block 96 | //- module 97 | - var anikit = {"groupName":["No Animation","Popular Animation","Repeat Animation","Transition"],"members":[["static"],["blink","bounce","bounce-in","bounce-out","breath","fade","flip-h","float-btt-in","slide-ltr","spin","tremble"],["beat","blink","blur","bounce","bounceAlt","breath","clock","coin-h","coin-v","cycle","cycle-alt","damage","dim","fade","flip","flip-h","flip-v","float","heartbeat","hit","jelly","jelly-alt","jingle","jump","measure","metronome","move-btt","move-fade-btt","move-fade-ltr","move-fade-rtl","move-fade-ttb","move-ltr","move-rtl","move-ttb","orbit","pulse","rubber-h","rubber-v","rush-btt","rush-ltr","rush-rtl","rush-ttb","shake-h","shake-v","shiver","skew","skew-alt","slide-btt","slide-ltr","slide-rtl","slide-ttb","smash","spin","spin-fast","squeeze","surprise","swim","swing","tick","tick-alt","tremble","vortex","vortex-alt","wander-h","wander-v","wrench"],["blur-in","blur-out","bounce-alt-in","bounce-alt-out","bounce-in","bounce-out","fade-in","fade-out","fall-btt-in","fall-ltr-in","fall-rtl-in","fall-ttb-in","flip-h-in","flip-h-out","flip-v-in","flip-v-out","float-btt-in","float-btt-out","float-ltr-in","float-ltr-out","float-rtl-in","float-rtl-out","float-ttb-in","float-ttb-out","grow-btt-in","grow-btt-out","grow-ltr-in","grow-ltr-out","grow-rtl-in","grow-rtl-out","grow-ttb-in","grow-ttb-out","jump-alt-in","jump-alt-out","jump-in","jump-out","power-off","power-on","rush-btt-in","rush-ltr-in","rush-rtl-in","rush-ttb-in","slide-btt-in","slide-btt-out","slide-ltr-in","slide-ltr-out","slide-rtl-in","slide-rtl-out","slide-ttb-in","slide-ttb-out","spring-btt-in","spring-ltr-in","spring-rtl-in","spring-ttb-in","throw-btt-in","throw-ltr-in","throw-rtl-in","throw-ttb-in","vortex-alt-in","vortex-alt-out","vortex-in","vortex-out","zoom-in","zoom-out"]],"group":{"static":["static"],"popular":["blink","bounce","bounce-in","bounce-out","breath","fade","flip-h","float-btt-in","slide-ltr","spin","tremble"],"repeat":["beat","blink","blur","bounce","bounceAlt","breath","clock","coin-h","coin-v","cycle","cycle-alt","damage","dim","fade","flip","flip-h","flip-v","float","heartbeat","hit","jelly","jelly-alt","jingle","jump","measure","metronome","move-btt","move-fade-btt","move-fade-ltr","move-fade-rtl","move-fade-ttb","move-ltr","move-rtl","move-ttb","orbit","pulse","rubber-h","rubber-v","rush-btt","rush-ltr","rush-rtl","rush-ttb","shake-h","shake-v","shiver","skew","skew-alt","slide-btt","slide-ltr","slide-rtl","slide-ttb","smash","spin","spin-fast","squeeze","surprise","swim","swing","tick","tick-alt","tremble","vortex","vortex-alt","wander-h","wander-v","wrench"],"transition":["blur-in","blur-out","bounce-alt-in","bounce-alt-out","bounce-in","bounce-out","fade-in","fade-out","fall-btt-in","fall-ltr-in","fall-rtl-in","fall-ttb-in","flip-h-in","flip-h-out","flip-v-in","flip-v-out","float-btt-in","float-btt-out","float-ltr-in","float-ltr-out","float-rtl-in","float-rtl-out","float-ttb-in","float-ttb-out","grow-btt-in","grow-btt-out","grow-ltr-in","grow-ltr-out","grow-rtl-in","grow-rtl-out","grow-ttb-in","grow-ttb-out","jump-alt-in","jump-alt-out","jump-in","jump-out","power-off","power-on","rush-btt-in","rush-ltr-in","rush-rtl-in","rush-ttb-in","slide-btt-in","slide-btt-out","slide-ltr-in","slide-ltr-out","slide-rtl-in","slide-rtl-out","slide-ttb-in","slide-ttb-out","spring-btt-in","spring-ltr-in","spring-rtl-in","spring-ttb-in","throw-btt-in","throw-ltr-in","throw-rtl-in","throw-ttb-in","vortex-alt-in","vortex-alt-out","vortex-in","vortex-out","zoom-in","zoom-out"]}}; 98 | mixin ldap(clsname) 99 | .ldcv.ldap(class=clsname): .base: .inner.has-tips.mx-auto: div 100 | .head: input 101 | block 102 | .menu 103 | each g,$index in anikit.groupName 104 | .item-head #{g} 105 | .item-group 106 | each m in anikit.members[$index] 107 | .item(data-value=m) 108 | div #{m} 109 | .ani(class=`ld ld-${m}`) 110 | 111 | mixin anikit-select-options 112 | each n,i in anikit.groupName 113 | optgroup(label=n) 114 | each k in anikit.members[i] 115 | option(value=k)= k 116 | 117 | - prefix = function(n) { return (!n?[]:(Array.isArray(n)?n:[n])).map(function(it){ return `${prefix.currentName}$${it}`; }).join(' ');} 118 | mixin scope(name) 119 | - var prentName = prefix.currentName; 120 | - prefix.currentName = name; 121 | if attributes.class && /naked-scope/.exec(attributes.class) 122 | block 123 | else 124 | div(ld-scope=name || '')&attributes(attributes) 125 | block 126 | - prefix.currentName = parentName; 127 | mixin lzimg(src) 128 | img.ldlz(data-src=src, 129 | src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAQAICRAEAOw==")&attributes(attributes) 130 | -------------------------------------------------------------------------------- /web/static/assets/ldui/pug/ldui.pug: -------------------------------------------------------------------------------- 1 | //- module 2 | - if(!ctrl) var ctrl = {}; 3 | //-include core/authpanel.pug 4 | include core/chevron-down.pug 5 | //-include core/nav-top.pug 6 | include core/spinner.pug 7 | include core/util.pug 8 | //-include core/foot.pug 9 | include ext/index.pug 10 | -------------------------------------------------------------------------------- /web/static/assets/lib/ldlz.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotdb/xfl/5d708e2bc51571bdf3685c53b77115babc0652a2/web/static/assets/lib/ldlz.js -------------------------------------------------------------------------------- /web/static/assets/lib/xfl.js: -------------------------------------------------------------------------------- 1 | // Generated by LiveScript 1.3.1 2 | var xfl; 3 | xfl = { 4 | variants: ['Italic', 'Regular', 'Bold', 'ExtraBold', 'Medium', 'SemiBold', 'ExtraLight', 'Light', 'Thin', 'Black', 'BlackItalic', 'BoldItalic', 'ExtraBoldItalic', 'MediumItalic', 'LightItalic', 'ThinItalic', 'SemiBoldItalic', 'ExtraLightItalic', 'DemiBold', 'Heavy', 'UltraLight'], 5 | fonts: {}, 6 | isCJK: function(){ 7 | return (code >= 0xff00 && code <= 0xffef) || (code >= 0x4e00 && code <= 0x9fff); 8 | }, 9 | load: function(path, options, callback){ 10 | var ref$, cb, ext, name, slug, variant, font, format, xhr, this$ = this; 11 | options == null && (options = {}); 12 | if (!path) { 13 | return; 14 | } 15 | ref$ = [path.replace(/\/$/, ''), typeof options === 'function' ? options : callback], path = ref$[0], cb = ref$[1]; 16 | if (this.fonts[path]) { 17 | return cb ? cb(this.fonts[path]) : null; 18 | } 19 | if (options.fontName) { 20 | options.name = options.fontName; 21 | } 22 | ref$ = [ 23 | (options.ext || (/\.([a-zA-Z0-9]+)$/.exec(path) || [])[1] || '').toLowerCase(), options.name || (ref$ = path.replace(/\.[a-zA-Z0-9]+$/, '').split("/").filter(function(it){ 24 | return it; 25 | }))[ref$.length - 1], options.name || Math.random().toString(16).substring(2) 26 | ], ext = ref$[0], name = ref$[1], slug = ref$[2]; 27 | variant = options.variant || (~name.indexOf('-') ? (ref$ = name.split('-'))[ref$.length - 1] : 'Regular'); 28 | if (!in$(variant, xfl.variants)) { 29 | variant = 'Regular'; 30 | } 31 | this.fonts[path] = font = { 32 | name: name, 33 | path: path, 34 | variant: variant, 35 | options: options, 36 | className: "xfl-" + slug, 37 | codeToSet: {}, 38 | hit: {}, 39 | url: {}, 40 | ext: ext && ~['woff2', 'woff', 'eot', 'ttf', 'otf'].indexOf(ext) ? ext : null 41 | }; 42 | font.ajax = function(idxlist, cb){ 43 | var check, this$ = this; 44 | check = function(){ 45 | if (idxlist.map(function(it){ 46 | return this$.url[it]; 47 | }).filter(function(it){ 48 | return it; 49 | }).length === idxlist.length) { 50 | return cb(); 51 | } 52 | }; 53 | return idxlist.map(function(d, i){ 54 | var xhr; 55 | if (this$.url[d]) { 56 | return check(); 57 | } 58 | xhr = new XMLHttpRequest(); 59 | xhr.addEventListener('readystatechange', function(){ 60 | if (xhr.readyState !== 4) { 61 | return; 62 | } 63 | this$.url[d] = URL.createObjectURL(xhr.response); 64 | return check(); 65 | }); 66 | xhr.open('GET', path + "/" + d + ".ttf"); 67 | xhr.responseType = 'blob'; 68 | return xhr.send(); 69 | }); 70 | }; 71 | font.sync = function(txt, cb){ 72 | var ref$, misschar, missset, i$, to$, i, code, setIdx, k, this$ = this; 73 | txt == null && (txt = ""); 74 | if (this.nosync) { 75 | return cb ? cb() : ''; 76 | } 77 | ref$ = [{}, {}], misschar = ref$[0], missset = ref$[1]; 78 | for (i$ = 0, to$ = txt.length; i$ < to$; ++i$) { 79 | i = i$; 80 | code = txt.charCodeAt(i); 81 | if (options.cjkOnly && !xfl.isCJK(code)) { 82 | continue; 83 | } 84 | setIdx = this.codeToSet[code.toString(16)]; 85 | if (!setIdx) { 86 | misschar[txt[i]] = true; 87 | } else if (!this.hit[setIdx]) { 88 | this.hit[setIdx] = missset[setIdx] = true; 89 | } 90 | } 91 | misschar = (function(){ 92 | var results$ = []; 93 | for (k in misschar) { 94 | results$.push(k); 95 | } 96 | return results$; 97 | }()).filter(function(it){ 98 | return it.trim(); 99 | }); 100 | if (misschar.length) { 101 | console.log("not supported chars: " + misschar.join('')); 102 | } 103 | return this.ajax((function(){ 104 | var results$ = []; 105 | for (k in missset) { 106 | results$.push(k); 107 | } 108 | return results$; 109 | }()), function(){ 110 | var k, ref$, css, idxlist, i$, len$, idx, url, names; 111 | ref$ = [ 112 | "", (function(){ 113 | var results$ = []; 114 | for (k in this.hit) { 115 | results$.push(k); 116 | } 117 | return results$; 118 | }.call(this$)) 119 | ], css = ref$[0], idxlist = ref$[1]; 120 | for (i$ = 0, len$ = idxlist.length; i$ < len$; ++i$) { 121 | idx = idxlist[i$]; 122 | url = this$.url[idx] || path + "/" + idx + ".woff2"; 123 | css += "@font-face {\n font-family: " + name + ";\n src: url(" + url + ") format('woff2');\n}"; 124 | } 125 | names = idxlist.map(function(it){ 126 | return name + "-" + it; 127 | }).join(','); 128 | css += "." + this$.className + " { font-family: " + name + "; }"; 129 | this$.css = css; 130 | xfl.update(); 131 | if (cb) { 132 | return cb(); 133 | } 134 | }); 135 | }; 136 | if (font.ext) { 137 | font.nosync = true; 138 | format = font.ext && font.ext !== 'ttf' ? "format('" + font.ext + "')" : ''; 139 | font.css = "@font-face {\n font-family: " + name + ";\n src: url(" + path + ") " + format + ";\n}\n." + font.className + " { font-family: \"" + name + "\"; }"; 140 | xfl.update(); 141 | if (cb) { 142 | return cb(font); 143 | } 144 | } else { 145 | xhr = new XMLHttpRequest(); 146 | xhr.addEventListener('readystatechange', function(){ 147 | var hash; 148 | if (xhr.readyState !== 4) { 149 | return; 150 | } 151 | hash = {}; 152 | xhr.responseText.split('\n').map(function(d, i){ 153 | return d.split(' ').map(function(e, j){ 154 | return hash[e] = i + 1; 155 | }); 156 | }); 157 | font.codeToSet = hash; 158 | if (cb) { 159 | return cb(font); 160 | } 161 | }); 162 | xhr.open('GET', path + "/charmap.txt"); 163 | return xhr.send(); 164 | } 165 | }, 166 | update: function(){ 167 | var css, k, v, node; 168 | css = (function(){ 169 | var ref$, results$ = []; 170 | for (k in ref$ = xfl.fonts) { 171 | v = ref$[k]; 172 | results$.push(v.css || ''); 173 | } 174 | return results$; 175 | }()).join('\n'); 176 | node = xfl.node || document.createElement("style"); 177 | node.textContent = css; 178 | if (xfl.node) { 179 | return; 180 | } 181 | node.setAttribute('type', 'text/css'); 182 | document.body.appendChild(node); 183 | return xfl.node = node; 184 | } 185 | }; 186 | function in$(x, xs){ 187 | var i = -1, l = xs.length >>> 0; 188 | while (++i < l) if (x === xs[i]) return true; 189 | return false; 190 | } 191 | -------------------------------------------------------------------------------- /web/static/assets/lib/xfl.min.js: -------------------------------------------------------------------------------- 1 | var xfl;xfl={variants:["Italic","Regular","Bold","ExtraBold","Medium","SemiBold","ExtraLight","Light","Thin","Black","BlackItalic","BoldItalic","ExtraBoldItalic","MediumItalic","LightItalic","ThinItalic","SemiBoldItalic","ExtraLightItalic","DemiBold","Heavy","UltraLight"],fonts:{},isCJK:function(){return code>=65280&&code<=65519||code>=19968&&code<=40959},load:function(path,options,callback){var ref$,cb,ext,name,slug,variant,font,format,xhr,this$=this;options==null&&(options={});if(!path){return}ref$=[path.replace(/\/$/,""),typeof options==="function"?options:callback],path=ref$[0],cb=ref$[1];if(this.fonts[path]){return cb?cb(this.fonts[path]):null}if(options.fontName){options.name=options.fontName}ref$=[(options.ext||(/\.([a-zA-Z0-9]+)$/.exec(path)||[])[1]||"").toLowerCase(),options.name||(ref$=path.replace(/\.[a-zA-Z0-9]+$/,"").split("/").filter(function(it){return it}))[ref$.length-1],options.name||Math.random().toString(16).substring(2)],ext=ref$[0],name=ref$[1],slug=ref$[2];variant=options.variant||(~name.indexOf("-")?(ref$=name.split("-"))[ref$.length-1]:"Regular");if(!in$(variant,xfl.variants)){variant="Regular"}this.fonts[path]=font={name:name,path:path,variant:variant,options:options,className:"xfl-"+slug,codeToSet:{},hit:{},url:{},ext:ext&&~["woff2","woff","eot","ttf","otf"].indexOf(ext)?ext:null};font.ajax=function(idxlist,cb){var check,this$=this;check=function(){if(idxlist.map(function(it){return this$.url[it]}).filter(function(it){return it}).length===idxlist.length){return cb()}};return idxlist.map(function(d,i){var xhr;if(this$.url[d]){return check()}xhr=new XMLHttpRequest;xhr.addEventListener("readystatechange",function(){if(xhr.readyState!==4){return}this$.url[d]=URL.createObjectURL(xhr.response);return check()});xhr.open("GET",path+"/"+d+".ttf");xhr.responseType="blob";return xhr.send()})};font.sync=function(txt,cb){var ref$,misschar,missset,i$,to$,i,code,setIdx,k,this$=this;txt==null&&(txt="");if(this.nosync){return cb?cb():""}ref$=[{},{}],misschar=ref$[0],missset=ref$[1];for(i$=0,to$=txt.length;i$>>0;while(++i

XL Font Load / 大尺寸中日韓字型載入器




這是什麼?

中文字型檔向來動輒數MB,若要做為網路字型使用往往很卡。其它解決方案大多是商業付費服務,而且針對動態內容,要嘛做不好,亦或成本很高。

這個專案實作了一個快速中文字型載入模組,將字型檔依字頻切成小塊,再根據網頁內容選擇需要載入的字型子集,因此我們可以快速的選取想要的字型,套用在網站上。

另一方面,此專案亦收集了數十套免費、可商用的開放中文字型,也提供了預先切割好的字型模組,可直接分支使用,不需再花時間自行搜集處理。


我要怎麼取得?

此專案託管於 Github 專案庫 ,您可以造訪該網址並利用 Git 分支,或者直接下載整包模組。


我可以整理自己的中文字型集嗎?

可以!此專案連同編譯程式碼一同釋出,可自動編譯切割指定之字型檔。


換字型會閃 / 打字會閃 / 載入還是很久 / 字型有缺字

這些都是未來改進方向,科科。



-------------------------------------------------------------------------------- /web/static/js/index.js: -------------------------------------------------------------------------------- 1 | // Generated by LiveScript 1.3.1 2 | var base, editor; 3 | base = 'https://plotdb.github.io/xl-fontset/alpha/'; 4 | editor = { 5 | init: function(){ 6 | var this$ = this; 7 | this.textarea = document.querySelector('textarea'); 8 | this.textarea.addEventListener('keyup', function(){ 9 | return this$.sync(); 10 | }); 11 | document.querySelector('#chooser').addEventListener('click', function(e){ 12 | var ref$, font, type; 13 | if (!e || !e.target) { 14 | return; 15 | } 16 | ref$ = [e.target.getAttribute('data-font'), e.target.getAttribute('data-type')], font = ref$[0], type = ref$[1]; 17 | if (!font) { 18 | return; 19 | } 20 | if (type === 'en') { 21 | return xfl.load("fonts/" + font + ".ttf", function(it){ 22 | this$.font = it; 23 | return this$.sync(); 24 | }); 25 | } else { 26 | return this$.load(font); 27 | } 28 | }); 29 | return this.load('王漢宗細黑'); 30 | }, 31 | load: function(font){ 32 | var this$ = this; 33 | return xfl.load(base + "/" + font, function(font){ 34 | this$.font = font; 35 | this$.font.sync(document.body.innerText); 36 | return this$.sync(); 37 | }); 38 | }, 39 | sync: function(){ 40 | if (!this.font) { 41 | return; 42 | } 43 | this.font.sync(this.textarea.value); 44 | this.textarea.setAttribute('class', "form-control " + this.font.className); 45 | return document.body.setAttribute('class', this.font.className + ""); 46 | } 47 | }; 48 | editor.init(); 49 | xfl.load(base + "/王漢宗超明", function(font){ 50 | var headlines, texts; 51 | headlines = Array.from(document.querySelectorAll('h1,h2,h3')); 52 | texts = headlines.map(function(it){ 53 | return it.innerText; 54 | }).join(''); 55 | font.sync(texts); 56 | return headlines.map(function(it){ 57 | return it.classList.add(font.className); 58 | }); 59 | }); --------------------------------------------------------------------------------