Skip to content

[6106] 优化 JSON 语法高亮效果并支持夜间模式自适应 - #4678

Open
da-liii wants to merge 3 commits into
mainfrom
da/6106/json_highlight
Open

da-liii wants to merge 3 commits into
mainfrom
da/6106/json_highlight

Conversation

@da-liii

@da-liii da-liii commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

任务简述

优化 JSON 代码块的语法高亮渲染效果,修复夜间模式下字符串及数字颜色暗淡难以辨认的问题,实现键与值的差异化色彩区分,并为日间与夜间模式提供自适应语法高亮(详见 dev-agent-6106 任务文档 devel/6106.stem)。

问题分析

  1. 原 json-lang.scm 缺少 define-preferences,所有颜色均回退至默认编码:
    • 字符串值及对象键均回退为 "dark grey";
    • 数字回退为 "#3030b0"(深藏青蓝);
    • 在夜间模式(dark 主题)的深灰底色下,"dark grey" 与 "#3030b0" 对比度极低,几乎无法分辨。
  2. 对象键(Key)与字符串值(String Value)在解析时未区分,全部按普通字符串渲染为同一种颜色,结构层次不明显。
  3. json.stem 中将代码块字体指定为了 "font-family" "rm"(罗马衬线体),与其它代码块统一使用的等宽字体 "tt" 不一致。

解决方案

  1. 键值区分:在 prog_language_rep::get_color 中,当语言为 "json" 且遇到字符串解析器匹配时,向前探测跳过空格后的字符是否为冒号 :。若紧跟冒号则判定为对象键(variable_identifier),否则判定为普通字符串值(constant_string)。
  2. 日间与夜间自适应色彩系统:
    • env_default.cpp 与 json.stem 提供日间默认配色:键为紫色(#8020c0)、字符串值为森林绿(#2e7d32)、数字为宝蓝(#0066cc)、布尔与null为珊瑚红(#c63d2f)、分隔符与括号为石板灰(#555555);
    • dark.ts 与 dark-scene.ts 提供夜间(深色主题)自适应高亮:键为柔和浅紫(#c678dd)、字符串值为柔和浅绿(#98c379)、数字为明朗天蓝(#61afef)、布尔与null为浅珊瑚粉(#e06c75)、标点与括号为浅灰(#abb2bf)与暖金(#e5c07b);
    • json-lang.scm 引入 define-preferences 并将 syntax:json:... 映射到环境自适应变量;
    • 补充 Unicode 转义序列 \uXXXX 及单行/多行注释语法特性支持。
  3. 等宽字体修正:在 json.stem 中将字体修正为 "font-family" "tt"。
  4. 自动化测试:
    • 新增纯逻辑单元测试 TeXmacs/progs/prog/tests/json-lang-test.scm(48 项断言全部通过);
    • 新增集成测试 TeXmacs/tests/6106.scm 及测试样例文档 TeXmacs/tests/tmu/6106.tmu、TeXmacs/tests/tmu/6106_dark.tmu。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant