本文档介绍了 bat 中的 Controller 组件,它充当将输入文件处理为格式化输出的中央协调器。Controller 管理数据在 bat 处理管道中的流动,从文件打开到语法高亮和最终输出生成。
有关打印机如何处理格式化和显示内容的信息,请参阅 打印机系统。
Controller 负责协调将输入文件转换为格式化输出的整个过程。它管理
来源:src/controller.rs22-322 src/bin/bat/main.rs278-285
Controller 的结构相对简单,包含对配置和高亮资产的引用
Controller 使用对 Config 对象(包含用户偏好)和 HighlightingAssets(提供语法高亮功能)的引用来初始化
来源:src/controller.rs22-27 src/controller.rs29-37
Controller 管理的处理管道遵循以下步骤
来源:src/controller.rs43-123 src/controller.rs125-322
Controller 通过其 run 方法接受一个 Input 对象向量,并按顺序处理每个对象
对于每个输入
OpenedInput,其中包含输入读取器和元数据来源:src/controller.rs39-41 src/controller.rs125-144
Controller 根据配置在两种打印机实现之间进行选择
loop_through 时,用于“cat”类行为,具有最小格式化打印机在 print_input 方法中选择和创建
两种打印机都实现了 Printer trait,该 trait 定义了打印标题、页脚和行内容的接口。
来源:src/controller.rs175-185 src/printer.rs71-90 src/printer.rs92-173 src/printer.rs189-861
Controller 通过两个主要方法处理文件
print_file:处理整体文件打印,包括标题和页脚print_file_ranges:逐行处理文件内容,根据配置的行范围进行过滤行处理算法
Controller 使用行缓冲区来支持诸如超前查看行范围和在不连续行范围之间实现“片段”指示符等功能。
来源:src/controller.rs197-233 src/controller.rs235-322
Controller 应用行范围过滤,仅显示文件的相关部分。这在 print_file_ranges 方法中实现
对于每一行
这种过滤机制支持诸如仅显示文件的一部分或在 Git diff 中仅显示更改的行等功能。
Controller 与 HighlightingAssets 系统集成以实现语法高亮
Controller 创建的 InteractivePrinter 使用这些资产来
来源:src/controller.rs22-27 src/controller.rs175-185 src/assets.rs210-242
Controller 通过 OutputType 和 OutputHandle 抽象来管理输出
输出选择考虑了
来源:src/controller.rs49-79 src/controller.rs88-92
Controller 在整个处理管道中包含全面的错误处理
run_with_error_handler 方法允许自定义错误处理
来源: src/controller.rs43-123 src/controller.rs105-119
Controller 在两种主要上下文中被使用
main.rs 中,Controller 根据命令行参数处理文件PrettyPrinter 中,Controller 为 bat 库 API 提供了核心功能来源: src/bin/bat/main.rs278-285 src/pretty_printer.rs325-335
Controller 处于 bat 处理流程的核心,协调将输入文件转换为格式化输出的过程。它提供了连接配置、高亮资源和打印机组件以构成一个统一系统的中央协调点。
通过管理从输入到输出的处理流程,Controller 实现了 bat 的关键功能,包括语法高亮、行过滤和格式化输出,同时保持了代码库内清晰的关注点分离。