-- Chinese JFM for Simplified Chinese fonts (zh_CN) -- v1.1.1, 2021/02/15 -- Copyright (c) 2020 -- 2021 ListLee. local is_vt, is_qj, is_bj, is_km, is_hc, is_fz if luatexja.jfont.jfm_feature then is_vt = luatexja.jfont.jfm_feature.vert is_qj = luatexja.jfont.jfm_feature.quanjiao is_bj = luatexja.jfont.jfm_feature.banjiao is_km = luatexja.jfont.jfm_feature.kaiming is_hc = luatexja.jfont.jfm_feature.hwcl is_fz = luatexja.jfont.jfm_feature.fzpr end if is_hc then if not is_vt then tex.error('JFM feature "hwcl" can only be used in vertical mode') end end if not ((is_qj and not (is_bj or is_km)) or (is_bj and not (is_qj or is_km)) or (is_km and not (is_qj or is_bj))) then tex.error( 'You must specify ONLY ONE feature among "quanjiao", "banjiao" and ' .. '"kaiming"' ) end local function aki(wd, pr, km) -- æ’å…¥ç©ºç™½é‡ local p = pr or 0 return km and (is_bj and {0, wd, 0, priority = {p, -p}} or {wd, 0, wd, priority = {p, -p}}) or (is_qj and {wd, 0, wd, priority = {p, -p}} or {0, wd, 0, priority = {p, -p}}) end luatexja.jfont.define_jfm { version = 3, dir = is_vt and 'tate' or 'yoko', zw = 1, zh = 1, kanjiskip = {0.0, 0.25, 0}, xkanjiskip = {0.25, 0.25, 0.125}, [0] = { align = 'middle', left = 0, down = 0, width = 1, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1) }, round_threshold = 0.01 }, [1] = { -- å¼€æ‹¬å· chars = { '〈', '《', '「', '『', 'ã€', '〔', '〖', '〘', 'ã€', '(', 'ï¼»', 'ï½›', '⦅' }, align = is_fz and 'middle' or 'right', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [3] = aki(0.25, -1) } }, [10] = { chars = { '‘', '“' }, align = is_vt and (is_fz and 'middle' or 'right') or 'right', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [3] = aki(0.25, -1) } }, [2] = { -- é—æ‹¬å· chars = { '〉', '》', 'ã€', 'ã€', '】', '〕', '〗', '〙', '〞', '〟', ')', 'ï¼½', 'ï½', 'ï½ ' }, align = is_fz and 'middle' or 'left', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = aki(0.5, -1), [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1), [5] = aki(0.5, -1), [51] = aki(0.5, -1), [52] = aki(0.5, -1) } }, [20] = { chars = { '’', 'â€' }, align = is_vt and (is_fz and 'middle' or 'left') or 'left', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = aki(0.5, -1), [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1), [5] = aki(0.5, -1), [51] = aki(0.5, -1), [52] = aki(0.5, -1) } }, [21] = { -- 逗å·ã€é¡¿å· chars = {'ã€', ','}, align = 'left', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = aki(0.5), [1] = aki(0.5), [10] = aki(0.5), [3] = aki(0.5), [5] = aki(0.5), [51] = aki(0.5), [52] = aki(0.5) } }, [22] = { -- 冒å·ã€åˆ†å· chars = {':', 'ï¼›'}, align = 'left', left = 0, down = 0, width = is_vt and (is_hc and 0.5 or 1) or 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5), [1] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5), [10] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5), [3] = is_vt and (is_hc and aki(0.5) or aki(0.25, 1)) or aki(0.5), [5] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5), [51] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5), [52] = is_vt and (is_hc and aki(0.5) or {}) or aki(0.5) } }, [3] = { -- é—´éš”å· chars = {'・', '·'}, align = 'middle', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = aki(0.25, -1), [1] = aki(0.25, -1), [10] = aki(0.25, -1), [2] = aki(0.25, -1), [20] = aki(0.25, -1), [21] = aki(0.25, -1), [22] = aki(0.25, -1), [3] = aki(0.5, -1), [4] = aki(0.25, -1), [41] = aki(0.25, -1), [42] = aki(0.25, -1), [5] = aki(0.25, -1), [6] = aki(0.25, -1) } }, [4] = { -- å¥å· chars = {'。', '.'}, align = 'left', left = 0, down = 0, width = 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = aki(0.5, 1, true), [1] = aki(0.5, 1, true), [10] = aki(0.5, 1, true), [3] = aki(0.5, 1, true), [5] = aki(0.5, 1, true), [51] = aki(0.5, 1, true), [52] = aki(0.5, 1, true) } }, [41] = { -- å¹å·ã€é—®å· chars = {'ï¼', '?'}, align = is_vt and 'middle' or 'left', left = 0, down = 0, width = is_vt and 1 or 0.5, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [0] = is_vt and {} or aki(0.5, 1, true), [1] = is_vt and {} or aki(0.5, 1, true), [10] = is_vt and {} or aki(0.5, 1, true), [3] = is_vt and aki(0.25, -1) or aki(0.5, 1, true), [5] = is_vt and {} or aki(0.5, 1, true), [51] = is_vt and {} or aki(0.5, 1, true), [52] = is_vt and {} or aki(0.5, 1, true) } }, [42] = { -- å¤åˆ/连用å¹å·é—®å· chars = {'‼', 'â‡', 'âˆ', 'â‰'}, align = 'middle', left = 0, down = 0, width = 1, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [3] = aki(0.25, -1) } }, [5] = { -- 一å—线ã€çœç•¥å·ã€æ³¢æµªçº¿ chars = { '—', -- U+2014 '―', -- U+2015 '‥', '…', '〜', -- U+301C '~' -- U+FF5E }, align = 'middle', left = 0, down = 0, width = 1, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1) }, kern = { [5] = 0, [51] = 0, [52] = 0 } }, [51] = { -- U+2E3A TWO-EM DASH chars = {'⸺'}, align = 'middle', left = 0, down = 0, width = 2, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1) }, kern = { [5] = 0, [51] = 0, [52] = 0 } }, [52] = { -- U+2E3B THREE-EM DASH chars = {'⸻'}, align = 'middle', left = 0, down = 0, width = 3, height = is_vt and 0.5 or 0.88, depth = is_vt and 0.5 or 0.12, italic = 0, glue = { [1] = aki(0.5, -1), [10] = aki(0.5, -1), [3] = aki(0.25, -1) }, kern = { [5] = 0, [51] = 0, [52] = 0 } }, [6] = { -- box end chars = {'boxbdd', 'parbdd', 'glue'}, glue = { [3] = aki(0.25, -1) } } }