文章摘要
这篇文章探讨了如何通过内置语法高亮的字体来简化手工编写代码博客的流程。作者分析了手工编写网站的痛点,特别是语法高亮等功能的实现困难,并提出了创新的字体设计解决方案,旨在降低维护成本,提升开发效率。
文章总结
内置语法高亮的字体
核心创新
作者开发了一种将语法高亮功能直接嵌入字体的解决方案,通过OpenType的COLR表(支持多色字体)和上下文替代功能实现。这种名为"FontWithASyntaxHighlighter"的字体基于开源字体Monaspace Krypton改造,无需JavaScript即可为HTML、CSS和JS代码提供语法高亮效果。
技术实现
- 多色字体:创建了8种颜色的调色板,为A-Z字母、0-9数字及常用符号制作了多个彩色变体(.alt1-.alt5后缀)
- 上下文替换规则:
- 通过链式替换实现关键词着色(如将"if"替换为彩色版本)
- 使用有限状态机处理注释块和引号内的文本
- 为CSS函数名设置最长25字符的匹配规则
优势特点
- 零依赖:仅需引入字体文件和两行CSS代码
- 即时生效:支持在
<textarea>和<input>中实时高亮 - 跨平台:适用于所有支持OpenType的软件(如InDesign)
- 主题定制:可通过CSS的
override-colors修改配色
局限性
功能限制:
- 无法处理跨行注释
- 会误标HTML标签内的JS关键词(如
<p>if...</p>) - 超长函数名可能中断着色
修改门槛:
- 需字体编辑专业知识调整规则
- 不支持PowerPoint等缺乏OpenType支持的软件
应用前景
已有多个项目采用该技术,包括: - 可视化编程工具Holograph - HTML笔记本库@celine/celine - CSS着色器艺术作品 - 文本编辑器Web组件
未来可能通过harfbuzz-wasm实现更强大的解析功能。字体遵循SIL开源协议,相关代码采用MIT许可证。
(完整技术细节、示例代码及项目链接可查阅原文)
评论总结
以下是评论内容的总结:
对技术可行性的质疑
- 认为字体内嵌脚本与网页脚本本质上没有区别,质疑"臃肿"的定义 (vbezhenar: "script inside web page is bad, but script inside font is good?")
- 指出换行时无法保持上下文是严重缺陷 (zX41ZdbW: "there's no way to keep context line to line...This is a blocker")
肯定技术创新的价值
- 认为这是技术挑战而非实用解决方案,但仍欣赏这种创新 (cyanmagenta: "It's really more of the technical challenge...Still, love seeing stuff like this")
- 赞赏在textarea实现语法高亮的突破性 (mock-possum: "Interesting indeed! This bit feels like a neat bit of hackery")
潜在应用场景探讨
- 建议将其应用于Z80汇编语法高亮 (Gracana: "Perhaps you could add this technology to Z80 sans")
- 询问在PowerPoint中应用的可能性 (spockz: "Has anyone tried this with PowerPoint yet?")
- 认为可能解决网页文本编辑器的语法高亮问题 (mg: "With this approach, it would be possible")
技术改进建议
- 提出使用可变字体实现颜色调整 (cluckindan: "Using a variable font with r, g, b axes...")
- 联想到早期Sinclair计算机的BASIC输入方式 (exasperaited: "hazy modern mirror image of the world of Sinclair computers")