#collection #file #generate #wheel #generator #import #loops

bin+lib hamster_wheel

循环代码生成器,允许在集合上生成代码

3 个不稳定版本

0.2.1 2019年7月30日
0.2.0 2019年7月29日
0.1.0 2019年7月27日

#9 in #wheel

MIT 许可证

66KB
1.5K SLoC

Hamster Wheel

Hamster Wheel 是一个循环代码生成器。通过指定一些集合和一个 .hamster_wheel 文件,可以生成所需的任何文本。

用法

安装 Rust 包 cargo install hamster_wheel 然后运行命令 hamster_wheel,将解释你目录及其子目录中的所有 .hamster_wheel 文件。

模板

/templates 目录中包含了一些用于各种编程语言的模板文件。Hamster Wheel 的一个主要动机是轻松生成本地化表单,因此包含了一些用于此目的的模板。如果你需要生成某些内容但没有提供模板,请继续阅读以了解如何编写自己的 .hamster_wheel 文件。

创建 .hamster_wheel 文件

完整文件的示例

{{ OUTPUT your/output_file.js }}
{{ IMPORT }}
name: yourCollection;
key: 123abc123abc123abc123;
{{ END }}
{{ LOOP(parentIndex) yourCollection as currentRow }}
    Parent Loop number {{ parentIndex }}!
    {{ LOOP currentRow as currentItem }}
        Item: {{ currentItem }}
    {{ END }}
{{ END }}

为了使文件能够成功解释,它必须具备以下条件

  1. hamster_wheel 扩展名
  2. 指定的输出文件
  3. 定义集合的导入
  4. 集合的循环
  5. 访问集合的访问器

以下将进行描述。

输出文件

.hamster_wheel 文件的第一件事必须是输出文件的声明。这可以通过以下行来完成

{{ OUTPUT your/output_file.js }}
THE REST OF YOUR CONTENT

注意,上面的内容是有效的文件。如果 test.hamster_wheel 包含上述内容,你将有一个名为 your/output_file.js 的文件,内容如下: THE REST OF YOUR CONTENT

导入

你可以以两种方式导入集合(仅支持 csv 内容)。

要导入用于文件的集合,你可以从 csv 文件导入

{{ IMPORT }}
name: yourVariableName;
path: you/input_file.csv;
{{ END }}

或从 Google Sheets 导入

{{ IMPORT }}
name: yourOtherVariable;
key: 123abc123abc123abc123;
{{ END }}

在两种情况下,都必须存在 name 选项,以便在文件的作用域中暴露它。如果你想要从你的机器导入文件,则必须存在 path 选项。如果你想导入 Google Sheet,则必须指定 key 选项。这个 key 是 Google Sheet URL 中的长字符串。为了让 Google Sheets 工作,该工作表必须有一个可共享的链接。另外,别忘了分号 ;

到此为止的示例文件

{{ OUTPUT your/output_file.js }}
THE REST OF YOUR CONTENT
{{ IMPORT }}
name: yourVariableName;
path: you/input_file.csv;
{{ END }}

导入集合的另一种方法是从 cli。你可以如下从命令行从一个文件导入集合

hamster_wheel file variableName ./my/file.csv

您可以从命令行按照以下方式导入来自Google Sheets的集合

hamster_wheel sheet variableName 123abc123abc123abc123

然后您可以使用该变量在所有将得到解释的.hamster_wheel文件中

导入定义了当前作用域中的变量,其中作用域通常由一个循环定义。

循环

现在您已经作用域中有变量了,您可以使用此语法来循环遍历它们

{{ LOOP yourCollection }}
    YOUR CONTENT
{{ END }}

假设您的作用域中有一个变量 yourCollection(并且您已指定输出文件),上面的代码应该会根据您的csv文件中的行数多次输出 YOUR CONTENT

Hamster wheel支持数组切片语法,您可以使用它来获取集合的切片(集合是零索引的)。

语法是 yourCollection[N, M] 其中M和N是整数或一个极端界限指示符 ..

示例: yourCollection[1, ..]:循环遍历yourCollection并跳过第一个元素。 yourCollection[2, ..]:循环遍历yourCollection并跳过前两个元素。 yourCollection[1, 4]:从索引1(包含)到4(不包含)获取元素。 yourCollection[.., 6]:从开始到索引6(不包含)获取所有元素。

使用切片的示例

{{ LOOP yourCollection[1, ..] }}
    YOUR CONTENT
{{ END }}

您可以将以下信息放入作用域中,以便在循环内使用,通过为它们分配变量名来实现

  1. 循环索引:这始终从零开始,每次迭代增加一。
  2. 集合索引:这是当前用于访问集合的索引。这意味着如果您正在对 yourCollection[5, ..] 进行循环,集合索引从5开始,每次迭代增加一。
  3. 当前项:这仅仅是 yourCollection[collectionIndex]

您可以使用以下语法将它们分配给变量

{{ LOOP(loopIndex, collectionIndex) yourCollection[1, ..] as currentItem }}
    YOUR CONTENT
{{ END }}

注意,您可以通过指定 LOOP (loopIndex) 而不是 LOOP (loopIndex, collectionIndex) 来省略 collectionIndex

循环遍历csv文件中所有项目的示例

{{ LOOP(parentIndex) yourCollection as currentRow }}
    Parent Loop number {{ parentIndex }}!
    {{ LOOP currentRow as currentItem }}
        Item: {{ currentItem }}
    {{ END }}
{{ END }}

在这个例子中,我们访问 currentItem 并显示它。

访问器

如上所示,要访问一个项目,您可以使用

{{ currentItem }}

您也可以使用括号来访问数组,例如 yourCollection[2]。另一种我们可以写上面示例的方法是

{{ LOOP(parentIndex, parentCollectionIndex) yourCollection}}
    Parent Loop {{ parentIndex }}!
    {{ LOOP(loopIndex, collectionIndex) yourCollection[parentCollectionIndex] }}
        Item: {{ yourCollection[parentCollectionIndex][collectionIndex] }}
    {{ END }}
{{ END }}

使用 as yourVariable 语法更为简洁,因此推荐使用,但此示例显示了您可以做事情的另一种方式。

就是这样

现在您知道了语法及其使用方法,您可以随心所欲地循环遍历集合。

依赖项

~20-30MB
~481K SLoC