IPrinter

输出器接口

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.printer.IPrinter
行数 13(纯接口)

唯一方法

boolean print(File file, Map<Alignment, List<List<Value>>> format);

与 IParser 的 parse 签名对称, format 类型完全一致。

三个实现

实现 行数 用途
XmlPrinter 94 写回 XML
JsonPrinter 93 写回 JSON
TextPrinter 109 写回 TXT

⚠️ 三者行数相近(93-109),说明实现难度相当, 没有哪个格式被特别简化。

唯一调用方

InGameInfoCore.saveConfig(:231-243):

if (filename.endsWith(EXT_XML))       printer = new XmlPrinter();
else if (filename.endsWith(EXT_JSON)) printer = new JsonPrinter();
else if (filename.endsWith(EXT_TXT))  printer = new TextPrinter();
return printer != null && printer.print(file, format);

⚠️ 与 setConfigFile 的解析器选择完全相同的 if-else 链 (InGameInfoCore 的 :118-124), 两处独立重复,改扩展名清单要同时改两处。

⚠️ printer 可能为 null(扩展名不匹配), printer != null && 短路保护后返回 false —— 不抛异常。 调用方 InGameInfoCommand 的 save 分支 据此报 failure。

往返一致性

printer 的输出是给用户手写配置用的参考格式 (/igi save <file>),不是给解析器做 round-trip 测试用的。 由于 TextParser 的语法与 XML/JSON 差异较大 (见该条目),TXT 的往返不保证无损。

相关