ConTeXt、YAML 和 Ansible

ConTeXt、YAML 和 Ansible

我正在读TUG 采访帕夫尼特·阿罗拉今年的组织者是谁TUG 会议在多伦多举行有一件事引起了我的注意。Arora 先生描述了如何使用 ConTeXt 来开发“规范驱动的文档”,并强调 YAML 是他目前专业工作的主要依据。YAML有些人可能知道它是人类可读的数据序列化语言,但对我个人而言,更重要的是它是用来编写剧本的语言Ansible,一种广泛使用的配置、管理和编排软件。

不幸的是,我不太能理解上面文章中描述的 ConTeXt 和 YAML 之间的联系,所以在这里我请求帮助。有人能帮我描述一下 ConTeXt 和 YAML 之间的关系吗?我有一个模糊的想法,那就是可以用 ConTeXt 编写 Ansible 剧本,然后可以将其“TeX”成 YAML 剧本,也可以将其“TeX”成可打印的文档。这个想法当然不是原创的,人们会认出 Don Knuth 的网络它既可以生成 Pascal 代码,又可以生成可打印的 TeX 文档。

答案1

我用过lyaml产生一个无用的最小示例(它更像是一个概念证明)。

我在 Debian GNU/Linux 上安装了该软件包lua-yaml。我必须对文件进行符号链接

/usr/share/lua/5.2/lyaml.lua
/usr/lib/x86_64-linux-gnu/lua/5.2/yaml.so

到工作目录,因为 ConTeXt 只搜索/usr/local/... 我。

\startluacode
local lyaml = require "lyaml"

function parseyaml(buf)
    local input  = buffers.getcontent(buf)
    local struct = lyaml.load(input, { all = true })
    for _,section in pairs(struct) do
       context.startitemize()
       for title,element in pairs(section) do
          context.item(title)
          context.startitemize()
          for _,entry in pairs(element) do
             context.item(entry)
          end
          context.stopitemize()
       end
       context.stopitemize()
    end
end
\stopluacode

\startbuffer[grocery]
---
# A list of tasty fruits
fruits:
    - Apple
    - Orange
    - Strawberry
    - Mango
---
fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
...
\stopbuffer

\starttext

\startpacked
  \ctxlua{parseyaml("grocery")}  
\stoppacked

\stoptext

在此处输入图片描述

相关内容