Repository navigation
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