# zhlang 的 MT 管理器语法高亮

## 文件

- `zhlang.mtsx` —— 语法文件,语言名 `zhlang`,关联后缀 `.zh`。
- `示例.zh` —— 覆盖语言特性的样例(注释/字符串/模板串/数字/声明/类/协程/@C 等)。
- `预览.html` —— 用校验器渲染的高亮预览,浏览器打开后可切换日间/夜间主题。
- `验证/` —— 校验器生成的检查、渲染、覆盖率与性能报告。

## 使用

把 `zhlang.mtsx` 放入 MT 管理器使用的语法文件目录(或通过其语法文件导入入口添加),
之后打开 `.zh` 文件并选择 `zhlang` 语法即可。

## 公网直链

官网已部署到 <https://pingsec.top/>(旧 IP 直链 <http://103.231.59.87:8000/> 保留为备用入口)。

- 语法文件直链:<https://pingsec.top/下载/zhlang.mtsx>
- SHA256:`435d64aa49d8986485195f4c76d14e4eeb29582f55d2f1b0672dce80d2b09218`(打包发布时以 `SHA256SUMS` 为准)

公网目录 `/var/www/downloads` 是 `网站/` 的部署副本;更新本地文件后需要重新复制部署。

## 版本要求

文件开头声明了 `// require MT >= 2.26.9`。`@C ... @C结束` 内嵌 C 代码块使用
`childrenSyntax` 委托给内置 C 语法,该能力从 MT 2.26.9 起提供。

若使用更低版本的 MT,删除开头的 require 行,以及 `contains` 中第一个
`start: {match: /(?m)^[ \t]*@C[ \t]*$/ } ... childrenSyntax: ".c"` 块即可。

## 高亮覆盖

- 中英关键字(变量/var、否则如果/elif 等),按整词匹配,`如果x` 不会被误判为关键字。
- `//` 行注释、`/* */` 块注释;注释与字符串内的关键字不再着色。
- `"..."`(可跨行,非法转义标红)、`r"..."` 原始字符串、`` `...${表达式}...` `` 模板字符串
  (插值内识别字符串/数字/关键字/内置函数/运算符)。
- 数字:十进制、`0x`/`0b`/`0o`、浮点、指数、数字间 `_`;语言禁止的 `1.` 与 `.5` 标红。
- 变量/常量/循环/捕捉声明名、函数名、结构体/类名、命名构造、内置类型(含类字段零值别名 `数值`)、内置函数。
- 注解 `@引入`、`@私有`、`@类方法(...)`、`@类函数(...)`、`@外部`、`@模块.名字`。
- 软关键字:类、属性、初始化、选择臂的接收/发送、为/只。
- `@C` 内嵌 C 块使用内置 C 语法着色。
- 常见全角标点与单引号在代码位置标红(字符串/注释内不受影响)。

## 验证

使用 mt-syntax-skill 的校验器(Java 17)校验:

```bash
python3 scripts/run-validator.py --syntax-file 语法高亮/zhlang.mtsx \
  --sample-file 语法高亮/示例.zh \
  --html 语法高亮/预览.html --report 语法高亮/验证/zhlang.render.json
```

- `验证/zhlang.check.json`:编译检查通过,无警告。
- `验证/zhlang.render.json`:渲染通过,依赖 `.c` 解析到内置 C 语法。
- 性能:示例约 1700 UTF-16 字符,5 次预热 + 10 次测量中位数约 8.6 ms(含编译与执行构建,受机器负载影响)。
- 真实源码:对 `自举/原生/原生_调用.zh`(约 58KB)与 `自举/运行时.zh`(约 411KB)
  做整文件渲染,均通过且无错误/警告(报告见 `验证/压力测试-*.json`)。

## 已知取舍

- 模板串插值内的字典字面量只处理一层嵌套;更深层字典或插值内再嵌模板串属于未覆盖的
  边角情况(按扁平优先原则,不做递归语法)。
- `1.`/`.5` 按语言规格标红;其他非法数字组合(如 `0xZZ`)保持普通文本,不误标为数字。
