Skip to content

Stats-flutter v1.5.0 · 语法语言与 PDF 导出

Latest

Choose a tag to compare

@Maicarons Maicarons released this 17 Oct 07:33

Stats-flutter v1.5.0 · 语法语言与 PDF 导出 / Scripting language & PDF export

v1.4.0 把统计口径理清之后,这一版补上两处「用得下去」的能力:数据页的语法编辑器补齐 PSPP 语法层(注释 / 宏 / INCLUDE / 定位 / .sps 往返),分析结果从「一份报告」变成会话级输出树,并补上长期缺的PDF 导出——纯 Dart 渲染、内置 2.3 MB 子集化中文字体,中文内容在屏幕 / HTML / PDF 三处一致。

App 版本 1.5.0+7,内置 statkit 0.5.1(本版未改动统计内核,数值与 v1.4.0 一致)。

亮点 / Highlights — M3:语法语言层

  • 注释按 PSPP 语义:* / COMMENT 持续到「行尾句点」或空行,而不是「本行剩余部分」;行内 /* … */ 剥离;整行注释会结束未闭合命令;漏写句点时给提示,而不是静默把后面的命令一起吃掉
  • 宏:DEFINE … !ENDDEFINE,位置参数 !POSITIONAL 与关键字参数、!TOKENS(n) / !CHAREND('/') / !CMDEND / !DEFAULT(值);宏函数 !CONCAT !QUOTE !UNQUOTE !UPCASE !LENGTH !SUBSTR !HEAD !TAIL !INDEX !EVAL !BLANKS !NULL;!LET / !IF !THEN !ELSE !ENDIF / !DO !TO !BY !DOEND;调用支持 !m a=1. 与 !m(1). 两种写法;重复定义覆盖,递归有深度上限
  • INCLUDE:被包含文件注入当前脚本一起执行、宏表延续;相对路径按当前 .sps 文件所在目录解析;循环包含报错,嵌套上限 16 层;包含文件出错即中止后续命令(PSPP 语义)
  • 定位:每条命令带起止位置,失败标注「第 N 行」可点击跳回源码;宏展开产生的命令能回溯到原始位置,不因展开丢行列信息
  • .sps 往返:打开先剥 UTF-8 BOM、非法字节替换为 U+FFFD 并提示数量;保存写出无 BOM 的 UTF-8,PSPP 可直接读取
  • 本版不做的可选宏构造(!DO !v !IN (…)、!ENCLOSE、!NOEXPAND / !OFFEXPAND / !ONEXPAND)明确报「未支持」,不静默忽略

亮点 / Highlights — M4:输出树与 PDF 导出

  • 会话级输出树:每次运行生成一张卡片,最新在前、默认只展开最新一张,可手动折叠;同一分析连跑多次不再互相覆盖(清空走「清空输出」按钮,带确认对话框)
  • 每张卡片:复制纯文本 / 分享 / 导出 PDF·HTML·Markdown;卡片右上角可删除,AppBar 的「导出全部输出 / 分享全部输出」把该分析的每张卡片合成为一份;v1.4 的分区导出菜单保留
  • PDF 导出(新增):pdf 纯 Dart 渲染(不引入 printing),A4 分页、页眉(标题 + 生成时间)、页脚「第 x / y 页」、表头跨页自动重复、数值列右对齐、p 值加星着色;导出期间显示进度提示
  • 内置中文字体:Google Fonts Noto Sans SC 子集化(wght=400 静态实例 + GB2312 常用字 + Latin + 标点),按 OFL 要求改名 StatsSansSC,实测 2.3 MB 随包分发(未子集的完整字重为 17 MB,故不采用);Latin 仍用 Inter,中文走 fontFallback。罕见字 / 繁体可能缺字(渲染为空白)
  • 变量与值标签:表格行 / 表头 / 标题 / 副标题优先显示变量标签与值标签,注释给出「标签 = 变量名」对应关系;数值列识别扩展到 <.001、≤0.05、1.2e-05、12.5%、1,204 等写法,并剔除行尾显著性星号
  • 共享样式收敛到 report_style.dart,屏幕 / HTML / PDF 三处的数值对齐、p 值格式与星号口径一致

文档 / Docs

  • 新增中英双语页面:语法语言(注释 / 宏 / INCLUDE / 定位 / .sps 往返)与输出与导出(输出树 / 三种格式 / 标签 / PDF 与字体说明)
  • 首页特性卡、README(中英)、分析页「导出」小节同步更新;docs:build 通过

质量 / Quality

  • dart analyze lib test:无问题
  • flutter test --exclude-tags "golden || benchmark":301 项;flutter test --tags golden:17 项(Windows 生成基线);packages/statkit 的 dart test:91 项
  • 新增测试:output_tree_test、report_style_test、report_pdf_test、report_labels_test;golden 用例补 OutputStore.reset(),修掉静态输出树在测试间串用的问题

构建环境 / Requirements

  • Flutter 3.41.9 stable(Dart SDK ^3.11.5)
  • statkit 0.5.1(v1.5.0 未改动统计内核;PDF 依赖 pdf ^3.12.0)

产物 / Artifacts

CI 会为本次发布构建并附加:Android APK、Windows x64(zip)、Linux x64(tar.gz)、macOS(zip)。


完整变更清单 / Full changelog:git log app-v1.4.0..app-v1.5.0