文本片段的接口与输出约定[#43]
modules/literate.plant提供code-chunk、chunk-tree和program-code。片段是不可变的Scheme值,子片段通过值引用组合;所有HTML内容都使用既有subtree、paragraph、link和code-block节点,不需要修改Grove renderer。
code-chunk接受字符串和已有片段值,文本按参数顺序拼接。这个写法在声明时需要片段值已经可用:
(define helper
(code-chunk "lp-helper" "辅助函数"
"(define (identity x) x)
"))
(define main
(code-chunk "lp-main" "入口" helper
"(write (identity 42))
"))
在文章中调用chunk-tree展示片段,调用program-code指定输出文件。展示用的代码框不会执行内容;真正调用code-chunk会创建片段值,字符串内的Scheme定义仍不执行。
program-code在code-block上附加项目属性literate-output;(lp forester)的lp-artifacts renderer遍历内容IR生成源码artifact,Flora在project.scm登记它。片段样式通过具名style literate-code与literate-uses接入,继续使用当前日夜配色。
文本片段的范围是值组合与源码输出,不建立LP实例或检查Scheme binding。引用必须指向已定义的片段值,因此不会出现依赖环;缺失变量会在读取文章时失败。跨文章展示可以使用Forester link或transclude,跨文章的代码值复用则应抽到项目模块中。