ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Iosevka 31.5.0 更新解读:新增 Kayah Li 与零宽不换行空格、Uiua 专属 APL 字形及巴什基尔/楚瓦什西里尔本地化形态

Iosevka 31.5.0 更新解读:新增 Kayah Li 与零宽不换行空格、Uiua 专属 APL 字形及巴什基尔/楚瓦什西里尔本地化形态 Iosevka 31.5.0 更新解读新增 Kayah Li 与零宽不换行空格、Uiua 专属 APL 字形及巴什基尔/楚瓦什西里尔本地化形态【免费下载链接】IosevkaVersatile typeface for code, from code.项目地址: https://gitcode.com/GitHub_Trending/io/IosevkaIosevka 是一款完全由代码驱动的开源编程字体其字形与 OpenType 特性均由仓库内数百个.ptl源文件构建而成。本文以版本变更记录 changes/archives/31.x/31.5.0.md 为骨架逐条拆解该版本的四项核心更新——新增 KAYAH LI SIGN CWI 与零宽不换行空格两个字符、为 Uiua 语言扩展APLF特性覆盖、新增巴什基尔Bashkir与楚瓦什Chuvash的西里尔本地化形态并结合仓库源码说明每个字形的实际构建方式、特性开关与配置方法。读完本文你将了解 Iosevka 的字符集扩充流程、locl本地化形态的注册机制以及如何通过build.toml与apl-form变体开关定制属于你自己的 APL/Uiua 字体。一、版本背景与变更总览31.5.0 是 Iosevka 31.x 系列的一个小版本迭代。31.0.0 曾对变体与 OpenType 标签的映射做过一次大规模重构如基础拉丁变体归入cv11…cv60、西里尔字母归入cv79…cv99与VAAA详见 changes/archives/31.x/31.0.0.md而 31.5.0 属于该系列内的增量更新全部变更集中在以下四项变更类别具体内容新增字符KAYAH LI SIGN CWIUA92E新增字符ZERO WIDTH NON-BREAKING SPACEUFEFF特性扩展为U25E0、U25E1增加 APL formAPLF服务 Uiua 语言本地化形态新增 Bashkir巴什基尔与 Chuvash楚瓦什的西里尔locl形态下文将逐一展开并在每一节给出对应的源码证据路径方便你在仓库中进一步核对。二、新增字符一KAYAH LI SIGN CWIUA92E2.1 字符背景KAYAH LI SIGN CWI 是 Kayah Li 文字主要用于缅甸克耶邦的克耶语的标点符号之一Unicode 码位为UA92E属于 Kayah Li 区块UA900–UA92F。它本质上是一个类似连接符/弧线的记号因此 Iosevka 在实现时将其归入连字符号Ties这一字形家族而非独立的几何图形。2.2 源码实现复用 TieShape 骨架在 packages/font-glyphs/src/symbol/punctuation/ties.ptl 中Iosevka 定义了一个通用的TieShape轮廓生成函数并由它派生出overTie、underTie、frown、smile等一系列字符。31.5.0 新增的 Kayah Li 记号就是其中最新的一员create-glyph kali/cwi 0xA92E : TieShape (XH / 2 Descender / 3 OperatorStroke / 4) 2对照同一文件中的既有字形可以清晰看出其设计规律create-glyph overTie 0x2040 : TieShape CAP 1 create-glyph underTie 0x203F : TieShape 0 (-1) create-glyph frown 0x2322 : TieShape (SymbolMid Descender / 3 OperatorStroke / 4) 2 create-glyph smile 0x2323 : TieShape (SymbolMid - Descender / 3 - OperatorStroke / 4) (-2)从源码结构可以推断kali/cwi采用与frown相近的垂直定位——基线下方约Descender / 3处叠加OperatorStroke / 4的偏移同时以2作为弧度参数kk 0时笔画宽度取右侧字怀rhsk 0时取左侧字怀lhs从而在视觉上与 Iosevka 既有的 Tie 系列标点保持一致的粗细与弧度语言。所有 Tie 字形共用SB OX到RightSB - OX的横向跨度保证其在等宽网格内严格占满一格。2.3 对使用者的意义对于以 Kayah Li 文字克耶语为主要书写系统的开发者此前 Iosevka 在该区块仅覆盖字母与数字31.5.0 补齐了UA92E这一标点后Kayah Li 文本在 Iosevka 下的排版完整度进一步提升。三、新增字符二ZERO WIDTH NON-BREAKING SPACEUFEFF3.1 字符背景UFEFFZERO WIDTH NON-BREAKING SPACE零宽不换行空格是 Unicode 中最特殊的字符之一它在文件开头通常被用作 BOMByte Order Mark而在文本中间则充当不产生换行的零宽空格。其核心语义是不换行 零宽度因此与 Iosevka 中已有的零宽空格U200BZWSP在排版行为上完全一致区别仅在于是否允许换行。3.2 源码实现一行别名完成接入Iosevka 对空格类字形的统一管理位于 packages/font-glyphs/src/space/index.ptl。该文件先用create-glyph zwsp 0x200B定义零宽空格set-width 0随后通过alias将一大批语义相近的零宽字符统一指回zwspalias nonmarkingreturn 0x000D zwsp alias lineSeparator 0x2028 zwsp alias paragraphSeparator 0x2029 zwsp alias wj 0x2060 zwsp alias funcApp 0x2061 zwsp alias invisibleTimes 0x2062 zwsp alias invisibleSeparator 0x2063 zwsp alias invisiblePlus 0x2064 zwsp alias zwnbsp 0xFEFF zwsp31.5.0 的改动正是末尾这一行alias zwnbsp 0xFEFF zwsp。UFEFF不生成独立轮廓而是复用zwsp的字形宽度为 0、无轮廓因此对字体文件体积的增量几乎为零同时也与字体内其他零宽字符如U200B、U2060等保持完全一致的排版语义。同样位于该文件的nbsp 0xA0别名则指向普通空格space两者形成鲜明对比——UA0是不换行但占宽UFEFF是不换行且零宽。3.3 对使用者的意义在解析带 BOM 的源代码或文档时文本编辑器通常会剥离 BOM但若某些工具链将UFEFF保留为普通字符字体若未覆盖该码位则会触发缺字豆腐块。Iosevka 31.5.0 补上该码位后无论 BOM 被当作控制字符保留还是被当作可打印字符处理均不会出现缺字形。四、为 Uiua 扩充 APL formAPLFU25E0 与 U25E14.1 什么是 APL formAPLFIosevka 在 OpenType 层面提供一套名为APLF的特性源码定义为OtlTaggedProp(AplForm, APLF, APL form)见 packages/glyph/src/relation.mjs。其作用是当开启该特性时某些符号如圆圈、箭头、菱形、三角等几何/箭头类算子会被替换为与 APL以及同样基于符号组合的 Uiua、BQN 等数组编程语言视觉语言统一的形态。在字体构建层面该特性由 packages/font-otl/src/index.ptl 中的buildGrFeature gsub glyphStore Gr.AplForm统一生成。4.2 U25E0 / U25E1 的字形基础U25E0UPPER HALF CIRCLE与U25E1LOWER HALF CIRCLE是几何图形区块中的两个半圆符号。它们在 Iosevka 中的基础轮廓由 packages/font-glyphs/src/symbol/geometric/masked.ptl 中的arcQuarters列表统一生成——每个条目以{ 码位 左上 左下 右上 右下 }四个象限布尔值描述圆形的留白部分list 0x25DC 1 0 0 0 list 0x25DD 0 0 1 0 list 0x25DE 0 0 0 1 list 0x25DF 0 1 0 0 list 0x25E0 1 0 1 0 list 0x25E1 0 1 0 1 list 0x1F907 1 1 0 0其中0x25E0表示上半部分保留、下半部分遮罩0x25E1则相反二者共同构成一对互补的上/下半圆。4.3 APLF 关联的注册方式所有具备 APL 形式的符号都在 packages/font-glyphs/src/symbol/math/apl.ptl 中通过统一的LinkAplFormForNwidWwid函数注册31.5.0 为 Uiua 新增的两行如下LinkAplFormForNwidWwid uni25E0 LinkAplFormForNwidWwid uni25E1该函数的核心逻辑值得展开define [LinkAplFormForNwidWwid gn] : begin define gWwid : query-glyph \(gn).WWID define gNwid : query-glyph \(gn).NWID if (gWwid gNwid) : begin AplForm.set gWwid \(gn).NWID if (para.variantSelector.__enableAplForm enable) : begin local us : glyphStore.queryUnicodeOf gWwid if us : begin glyphStore.deleteUnicodeAssignmentsOf gWwid foreach u us : glyphStore.encodeGlyph u gNwid每个参与 APLF 的符号都同时存在WWID宽体/默认形态与NWID窄体/APL 形态两个字形变体AplForm.set gWwid \(gn).NWID把APLF特性从宽体指向窄体即开启特性即替换字形当用户在自定义构建中开启apl-form enable对应para.variantSelector.__enableAplForm enable时构建期就直接把U25E0/U25E1的 Unicode 码位从宽体转移到窄体上deleteUnicodeAssignmentsOfencodeGlyph使 APL 形态成为默认字形。同文件中还有一段以# Uiua symbols注释标出的区块packages/font-glyphs/src/symbol/math/apl.ptl包含whiteDiamond、whiteSquare、whiteTriangleUp等一整套为 Uiua 定制的符号注册31.5.0 将uni25E0、uni25E1追加进这一集合补齐了 Uiua 语义中上半圆/下半圆两个算子。4.4 如何在构建中启用APLF行为由一个特殊的变体选择器apl-form控制其定义位于 params/variants.toml[prime.apl-form] isSpecial true hotChars ∆∇∊○←→↑↓ description APL form [prime.apl-form.variants.none] selector.__enableAplForm none description Disable APL-specific forms (default) snapshotFeatureApplication { } [prime.apl-form.variants.enable] selector.__enableAplForm enable description Enable harmonized alternate forms APL operators snapshotFeatureApplication { APLF 1 }在自定义构建计划private-build-plans的build.toml中可针对全局或具体字符做如下配置完整配置语法见 doc/custom-build.md[buildPlans.iosevka-custom] family Iosevka Custom # 全局启用 APL/Uiua 专属形态 design { apl-form enable } # 或者仅对 U25E0/U25E1 两个字符启用 # design { uni25E0 { apl-form enable } }官方文档对apl-form两个取值给出了明确说明none为默认值表示禁用 APL 专属形态enable表示启用与 APL 算子协调一致的替代形态见 doc/custom-build.md 中的 APL form 小节其中附有cv-apl-form-none/cv-apl-form-enable对比图。在浏览器/CSS 场景下也可以通过 OpenType 特性直接切换font-feature-settings: APLF 1;。4.5 对使用者的意义Uiua 是一门高度依赖符号的数组编程语言其文档与源码中频繁出现◓、◒即U25E0/U25E1这类半圆算子。31.5.0 之前这两个码位在 Iosevka 中只有常规几何形态开启 APLF 后则会被替换为与whiteCircle、whiteTriangleUp等算子统一线宽与风格的 Uiua 形态从而让代码中的算子群在视觉上浑然一体。配合hotChars ∆∇∊○←→↑↓所示的一批核心算子Iosevka 已成为对 APL 系语言支持最系统的开源编程字体之一。五、新增西里尔本地化形态Bashkir 与 Chuvash5.1 本地化形态locl机制简介西里尔字母在不同语言中常有字形差异。OpenType 的loclLocalized Forms特性允许字体针对不同语言标签如bsh、chu提供同一码位下的不同字形。Iosevka 用一套正交化关系orthography link-gr机制管理这些差异在 packages/font-glyphs/src/orthography/index.ptl 中通过link-gr把基础字形映射到某语言的本地化字形再由 packages/font-otl/src/gsub-locl.ptl 生成对应的locl特性查找表。5.2 31.5.0 新增的语言标签与字形映射本次更新在 packages/font-glyphs/src/orthography/index.ptl 中新增了两组映射Bashkir巴什基尔语语言标签BSH分直体与斜体两套link-gr LocalizedForm.BSH.Upright cyrl/Ghayn cyrl/Ghayn.BSH link-gr LocalizedForm.BSH.Upright cyrl/ghayn cyrl/ghayn.BSH link-gr LocalizedForm.BSH.Upright cyrl/Dhe cyrl/Dhe.BSH link-gr LocalizedForm.BSH.Upright cyrl/dhe cyrl/dhe.BSH link-gr LocalizedForm.BSH.Upright cyrl/The cyrl/The.BSH link-gr LocalizedForm.BSH.Upright cyrl/the cyrl/the.BSH link-gr LocalizedForm.BSH.Italic cyrl/Ghayn cyrl/Ghayn.BSH link-gr LocalizedForm.BSH.Italic cyrl/Dhe cyrl/Dhe.BSH link-gr LocalizedForm.BSH.Italic cyrl/dhe cyrl/dhe.BSH link-gr LocalizedForm.BSH.Italic cyrl/The cyrl/The.BSH link-gr LocalizedForm.BSH.Italic cyrl/the cyrl/the.BSHChuvash楚瓦什语语言标签CHU仅覆盖 Т/т 两个字母link-gr LocalizedForm.CHU cyrl/The cyrl/The.CHU link-gr LocalizedForm.CHU cyrl/the cyrl/the.CHU注意一个细节Bashkir 的映射覆盖了 GhaynҒ/ғU0492/U0493、DheҘ/ҙU0498/U0499、TheҪ/ҫU04AA/U04AB三对字母且直体与斜体分别注册而 Chuvash 仅涉及 The 一对。从结构上看Bashkir 斜体未对ghayn单独注册斜体映射可以推断其斜体形态沿用直体关系或字形本身即共用。5.3 特性表的生成在 packages/font-otl/src/gsub-locl.ptl 中31.5.0 为这两种语言生成了对应的locl特性与查找表# BSH define loclBSH : cyrlBSH.addFeature : gsub.createFeature locl loclBSH.addLookup : createGsubLookupFromGr gsub glyphStore if [not para.isItalic] LocalizedForm.BSH.Upright LocalizedForm.BSH.Italic # CHU define loclCHU : cyrlCHU.addFeature : gsub.createFeature locl loclCHU.addLookup : createGsubLookupFromGr gsub glyphStore LocalizedForm.CHUcyrlBSH/cyrlCHU是通过gsub.copyLanguage从cyrl_DFLT复制出的语言系统该文件开头define cyrlBSH : gsub.copyLanguage cyrl_BSH cyrl_DFLT一类的定义确保locl只在cyrl_BSH、cyrl_CHU语言标签下生效BSH 的查找表在非斜体not para.isItalic时同时注入Upright与Italic两组本地化关系CHU 则始终使用单一LocalizedForm.CHU组运行时是否需要应用这些关系由 packages/glyph/src/relation.mjs 中的字形关系收集逻辑判定只有命中LocalizedForm.BSH.Upright/LocalizedForm.BSH.Italic/LocalizedForm.CHU的字形才会进入locl查找。5.4 一个具体的 Bashkir 字形каBashkirҠ/ҡBashkir 本地化形态不止于 Ghayn/Dhe/The 这三对——巴什基尔语专用的 Ҡ/ҡU04A0/U04A1在 packages/font-glyphs/src/letter/latin/k.ptl 中作为独立字形cyrl/KaBashkir/cyrl/kaBashkir存在其轮廓由专门的BashkirKaShape绘制左竖杆使用VBar.l右腿部分复用LegsImpl顶部再叠加一条从xTopBarLeftEnd延伸到竖杆左侧的HBar.t横杠从而形成巴什基尔字母 К 特有的带顶横折造型define [BashkirKaShape df top] : glyph-proc local sw : df.adviceThinnerStroke 2.75 local xBarLeft : Math.max (df.rightSB - (RightSB - SB)) : if SLAB [mix df.leftSB df.rightSB 0.35] - [HSwToV : 0.50 * sw] [mix df.leftSB df.rightSB 0.20] - [HSwToV : 0.25 * sw] include : VBar.l xBarLeft 0 top sw include : LegsImpl false (xBarLeft - [KBalance slabLT fStraightBar]) df.rightSB sw top slabLT slabLegs if slabLT : include : UpperKLTSerif top sw xBarLeft slabLT if slabLB : include : UpperKLBSerif top sw xBarLeft slabLB local xTopBarLeftEnd : mix 0 df.leftSB : if SLAB 0.250 0.375 include : HBar.t xTopBarLeftEnd ((xBarLeft [HSwToV sw]) O) top sw if SLAB : begin local swVJut : Math.min (VJutStroke * (sw / Stroke)) : VSwToH : 0.625 * (xBarLeft - xTopBarLeftEnd) include : VSerif.dl xTopBarLeftEnd top VJut swVJut并在同一文件中通过select-variant cyrl/KaBashkir 0x4A0、select-variant cyrl/kaBashkir 0x4A1见 packages/font-glyphs/src/letter/latin/k.ptl 与 packages/font-glyphs/src/letter/latin/k.ptl挂到对应码位。从源码结构看BashkirKaShape通过df.adviceThinnerStroke 2.75微调笔画粗细并依据SLAB石板衬线变体参数调整横杠位置与衬线形态说明这些本地化字形同样完整参与了 Iosevka 的 Serif/Slab 变体体系。5.5 如何验证 locl 生效locl由应用程序根据文本的语言标签自动选择无需手动开关。要验证 Iosevka 31.5.0 中上述形态是否生效可借助支持 OpenType 特性预览的工具将语言系统指定为cyrl_BSH或cyrl_CHU并观察 Ғ/ҙ/ҫBashkir与 Ҫ/ҫChuvash的渲染差异在 CSS 场景下可使用font-language-override或lang属性触发。六、如何在本地构建包含这些更新的字体以上新增内容会随官方发布的 31.5.0 字体产物自动包含。若你想基于这些更新做进一步定制例如默认启用 APLF、调整 Bashkir 形态的衬线样式可参考以下流程阅读 doc/custom-build.md 中关于private-build-plans的完整说明参考 params/variants.toml变体选择器定义与params/下的其他 TOML 配置按需创建构建计划执行npm install与npm run build -- contents你的构建计划名完成本地构建构建入口与完整命令见 doc/custom-build.md仓库根目录 package.json 中亦可看到构建脚本约定使用生成的字体文件在支持locl/APLF的编辑器中验证渲染效果。七、小结Iosevka 31.5.0 的规模不大但覆盖面极广Kayah Li 标点UA92E补全了该文字的标点覆盖UFEFF消除了 BOM 场景的缺字隐患APLF对U25E0/U25E1的扩展让 Uiua 开发者获得与 APL 算子一致的半圆符号而 Bashkir/Chuvash 本地化形态则再次印证了 Iosevka 对多语言排版细节的持续投入。对于字体使用者而言升级到 31.5.0 即可零配置获得全部改进对于想要深入定制的人而言ties.ptl、space/index.ptl、apl.ptl、orthography/index.ptl与gsub-locl.ptl这五个文件构成了一条从字形轮廓到OpenType 特性的完整学习路径值得逐一研读。【免费下载链接】IosevkaVersatile typeface for code, from code.项目地址: https://gitcode.com/GitHub_Trending/io/Iosevka创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表