当前位置: 首页 > news >正文

【typst-rs】info.rs文件

Typst Info 命令代码解析

这段代码是 Typst 编译器typst info命令的实现,用于显示 Typst 环境信息,包括版本、构建配置、运行时特性、字体配置、包配置和相关环境变量。

主要数据结构

Info 结构体

structInfo{version:&'staticstr,// Typst 版本build:Build,// 构建信息features:Features,// 运行时特性fonts:Fonts,// 字体配置packages:Packages,// 包配置env:Environment,// 环境变量}

Build 结构体

structBuild{commit:Option<&'staticstr>,// Git commit hashplatform:Platform,// 目标平台settings:Settings,// 编译时设置}

Platform 结构体

structPlatform{os:&'staticstr,// 操作系统 (如 "linux", "windows", "macos")arch:&'staticstr,// 架构 (如 "x86_64", "aarch64")}

Settings 结构体

structSettings{self_update:bool,// 是否启用 self-update 功能http_server:bool,// 是否启用 http-server 功能}

核心函数

info 函数

主入口函数,处理typst info命令:

pubfninfo(command:&InfoCommand)->StrResult<()>{// 1. 获取环境变量letenv=get_vars()?;// 2. 解析运行时特性letruntime_features=parse_features(...)?;// 3. 解析字体路径letfont_paths=env.typst_font_paths.split(':').filter(|s|!s.is_empty()).map(PathBuf::from).collect();// 4. 构建 Info 结构体letvalue=Info{...};// 5. 输出信息ifletSome(format)=command.format{// 机器可读格式 (JSON/YAML)println!("{serialized}");}else{// 人类可读格式format_human_readable(&value)?;}}

get_vars 函数

收集所有相关的环境变量:

fnget_vars()->StrResult<Environment>{fnget_var(key:&'staticstr)->StrResult<Option<String>>{matchstd::env::var(key){Ok(val)=>Ok(Some(val)),Err(VarError::NotPresent)=>Ok(None),Err(VarError::NotUnicode(_))=>{// 处理非 UTF-8 变量值crate::print_error(...)?;Ok(None)}}}Ok(Environment{typst_cert:get_var("TYPST_CERT")?,typst_features:get_var("TYPST_FEATURES")?,// ... 其他变量})}

parse_features 函数

解析运行时特性字符串(逗号分隔):

fnparse_features(feature_list:&str)->StrResult<Features>{letmutfeatures=Features::default();forfeatureinfeature_list.split(',').filter(|s|!s.is_empty()){matchFeature::from_str(feature,true){Ok(Feature::Html)=>features.html=true,Ok(Feature::Bundle)=>features.bundle=true,Ok(Feature::A11yExtras)=>features.a11y_extras=true,Err(_)=>crate::print_error(...)?,}}Ok(features)}

格式化输出

人类可读格式

使用彩色终端输出:

fnformat_human_readable(value:&Info)->io::Result<()>{letmutout=terminal::out();// 版本信息(带颜色)write_key(&mutout,"Version",None)?;write_value_simple(&mutout,value.version,None)?;// 构建设置writeln!(out,"Build settings")?;forfeatureinvalue.build.settings.compile_features(){feature.format(&mutout,key_pad,Some(3))?;}// ... 其他部分}

颜色方案

  • 键名: 青色 (Cyan)
  • 普通值: 绿色 (Green)
  • 特殊值(如<unset>,on,off): 蓝色 (Blue)

收集的环境变量

Typst 专用变量

  • TYPST_CERT- TLS 证书
  • TYPST_FEATURES- 运行时特性
  • TYPST_FONT_PATHS- 自定义字体路径(冒号分隔)
  • TYPST_IGNORE_SYSTEM_FONTS- 忽略系统字体
  • TYPST_IGNORE_EMBEDDED_FONTS- 忽略嵌入字体
  • TYPST_PACKAGE_PATH- 包路径
  • TYPST_PACKAGE_CACHE_PATH- 包缓存路径
  • TYPST_ROOT- Typst 根目录
  • TYPST_UPDATE_BACKUP_PATH- 更新备份路径

标准环境变量

  • SOURCE_DATE_EPOCH- 可重现构建时间戳
  • NO_COLOR- 禁用彩色输出
  • HTTP_PROXY/HTTPS_PROXY/ALL_PROXY- 代理设置
  • NO_PROXY- 代理排除列表

Linux/Unix 专用变量

  • XDG_CACHE_HOME- XDG 缓存目录
  • XDG_DATA_HOME- XDG 数据目录
  • FONTCONFIG_FILE- Fontconfig 配置
  • OPENSSL_CONF- OpenSSL 配置

输出示例

人类可读格式

Version 0.1.0 (abc1234, linux on x86_64) Build settings self-update on (Update Typst via `typst update`) http-server off (Serve HTML via `typst watch`) Features html off (Experimental HTML export) bundle off (Experimental bundle export) a11y-extras off (Experimental accessibility additions) Fonts Custom font paths - /usr/share/fonts - ~/.local/share/fonts System fonts on Embedded fonts off Packages Package path /home/user/.local/share/typst/packages Package cache path /home/user/.cache/typst/packages Environment variables TYPST_FEATURES html,bundle TYPST_FONT_PATHS /usr/share/fonts:/usr/local/share/fonts NO_COLOR <unset>

JSON 格式

{"version":"0.1.0","build":{"commit":"abc1234","platform":{"os":"linux","arch":"x86_64"},"settings":{"self-update":true,"http-server":false}},"features":{"html":false,"bundle":false,"a11y-extras":false}}

关键特性

  1. 跨平台支持: 通过条件编译处理不同操作系统的差异
  2. 序列化支持: 使用serde支持 JSON/YAML 输出
  3. 彩色输出: 终端显示时使用 ANSI 颜色
  4. 错误处理: 优雅处理环境变量解析错误
  5. 可扩展性: 易于添加新的配置项和环境变量
http://www.jsqmd.com/news/610051/

相关文章:

  • CANoe故障注入秘籍:用TestDisableMsg模拟总线异常的真实案例
  • GF-2卫星影像融合实战:ENVI与ArcGIS效果对比(附NNDiffuse参数详解)
  • 技术迭代与供应链韧性:2026年5050灯珠核心服务商五强解析 - 2026年企业推荐榜
  • 嵌入式系统软件抗干扰技术实战解析
  • ChatBI赋能企业智能决策:奥威BI在零售与制造领域的创新实践
  • 从CPython源码级剖析Python 3.14 JIT编译器:如何用traceback.print_jit_stats()定位热点函数并实现亚毫秒级响应
  • 阻抗匹配原理与实战:射频电路设计核心技能
  • RemoteIR库:NCS36510超低功耗红外解码驱动
  • 2026围墙护栏服务商五强发布:谁在定义行业新标准? - 2026年企业推荐榜
  • 品牌运营必看:如何用小红书API监控竞品动态(含免费工具推荐)
  • IAR嵌入式工程多节点配置与管理详解
  • 2026年河北一体化泵站选购指南:五大优质生产厂家深度测评与推荐 - 2026年企业推荐榜
  • 校园无人超市管理系统设计与实现
  • RWA抵押:稳定币的“硬锚革命”如何撬动十万亿级金融新基建?
  • MCP3425 16位I²C接口ADC原理与嵌入式应用实战
  • iOS虚拟定位神器iFakeLocation:3个关键优势让数字足迹随心掌控
  • 【医疗数据安全合规必修课】:PHP系统敏感信息脱敏的7大核心算法与GDPR/HIPAA双认证实践
  • 新质生产力水平测算(版本3,2010-2023年)
  • 2026江苏综合物流服务商深度测评:谁在领跑市场? - 2026年企业推荐榜
  • 网络工程师实战指南:从基础概念到故障排查
  • 无人机5G通信技术:从原理到实战应用全解析
  • 嵌入式BootLoader高级应用与优化技巧
  • AI智能投放服务商综合评测:五家主流品牌实力解析与选型建议 - 2026年企业推荐榜
  • MicroLab嵌入式调试工具:组态画布与高效调试实践
  • 2026年Q2大通草苗批发基地排行:赤芍苗批发、酸枣种子批发基地、天麻苗批发基地、射干苗批发、桔梗苗批发、毛慈菇苗批发选择指南 - 优质品牌商家
  • SpringBoot + FFmpeg + Nginx:手把手教你搭建一个可动态管理的视频流转码与HLS直播服务
  • Axure动态面板实战:打造高效tab页面切换交互
  • 2026年压焊钢格板采购指南:聚焦河北实力厂家,解码行业优选标准 - 2026年企业推荐榜
  • 掘金矿山动脉:2026年钢丝网骨架耐磨管核心供应商深度测评与选择指南 - 2026年企业推荐榜
  • C语言入门基础与核心语法详解