Templates 我应该使用什么通用模板处理器?

Templates 我应该使用什么通用模板处理器?,templates,language-agnostic,emacs,programming-languages,Templates,Language Agnostic,Emacs,Programming Languages,这是一个潜在的危险问题,因为跨学科的问题和答案会有偏见,但无论如何,我会尝试一下。大家精神都很好 那么,我们开始吧。我正在为Emacs编写一个主要的编辑模式,它几乎还不支持这种语言。现在我必须决定一种生成项目文件的方法。以下是未来任务的教学大纲: 模板必须表示项目目录树,而不仅仅是单个文件 结果文件的格式多种多样,可能包括类似SGML的语言,但不限于此。他们还必须生成类似C的源代码和eLisp源代码以及纯文本文件,例如README 模板必须在用户启动操作后进行批处理(如用户希望创建项目-必须在

这是一个潜在的危险问题,因为跨学科的问题和答案会有偏见,但无论如何,我会尝试一下。大家精神都很好

那么,我们开始吧。我正在为Emacs编写一个主要的编辑模式,它几乎还不支持这种语言。现在我必须决定一种生成项目文件的方法。以下是未来任务的教学大纲:

  • 模板必须表示项目目录树,而不仅仅是单个文件

  • 结果文件的格式多种多样,可能包括类似SGML的语言,但不限于此。他们还必须生成类似C的源代码和eLisp源代码以及纯文本文件,例如README

  • 模板必须在用户启动操作后进行批处理(如用户希望创建项目-必须在用户指定的目录中创建多个文件)。拥有监督创建的能力可能是有益的,但这不如完全自动运行流程的能力重要

附加功能:

  • 模板语言已经有了一个用户基础(有可能重用现有模板)

  • 模板可用于代码片段(包含空格,用户在编辑文件时调用代码生成例程后,空格将以交互方式填充)

  • 通过图形界面和命令行的跨平台性、易用性等明显特点


我做了一项研究,但我不会(现在)分享我的结果,所以我不会对答案产生偏见。回答这个问题的问题不是很难找到答案,而是很难从众多答案中选择一个。

几年前,我去解决了一个类似的问题,我想使用Emacs从UML图(cogre)中生成代码,并从项目规范中生成Makefiles。我第一次尝试使用Tempo,但是当我试图让模板嵌套时,我遇到了问题。我还调查了骨架,但这也不太符合计划

我最终使用了一点谷歌模板,喜欢它的语法,并开发了SRecode,只是从谷歌模板中借用了一些好的东西。SRecode是专门为机器生成的代码编写的。模板插入的交互(aka-tempo的编写目的)在SRecode中并不是第一流的。但是,对于从数据结构生成代码来说,它非常健壮,具有许多特性,并且自动填充变量。它与主模式密切配合,允许使用许多嵌套模板,并控制嵌套字典值。有一个子系统将使用语义标记并从中生成两种语言的代码。这意味着您可以使用语义分析一种语言中的代码,并使用这些标记使用SReocde生成另一种语言中的代码。漂亮!CEDET参考手册的许多部分都是以这种方式构建的


模板本身允许循环、if语句和include语句。SRecode中有几个例子可以用来制作“应用程序”,比如注释编写器,EDE使用它来创建Makefiles,这几乎正是您要做的。

我正在开发一个基于Mustache的系统,完全符合您描述的用例。模板语言本身是Mustache的一个非常简单的扩展,称为

我还发布了一个名为“渲染修饰模板”的命令行工具。我很想知道它是否能满足你的需要。我仍在向该工具添加功能,但尚未发布。谢谢。

另一个选项是,它提供“语言无关的项目引导,强调简单性”。安装需要

生成器对简单性的强调意味着学习如何制作模板非常容易。生成器还使您不必按文件路径引用模板–它在
~/.Generator
中查找模板


但是,如果不将这些文件复制到生成的项目中,就无法为模板本身编写
自述文件
许可证
文件。此外,在
Makefile
中编写的生成后命令将被复制到生成的
Makefile
,即使这些命令不再使用。最后,临时模板语言并没有提供一种方法来逃避它的
\uuuuu小写变量\uuuuuu
——尽管我想不出有哪种语言会存在这样的限制。

Groom非常简洁。非常感谢。