如何将 m4 与 Python 一起使用并处理缩进和空格
How to use m4 with Python and dealing with indendentation and whitespace
是否有将 m4 与 Python 一起使用的通用策略?具体来说,Python 的空白要求使使用 m4 有点尴尬。例如下面的程序:
def foo():
pushdef(`X',` = ')
include(test01.def)
popdef(`X')
foo()
和 test01.def
一样
X(x,1)
X(y,2)
X(z,3)
生成 python 程序:
def foo():
x = 1
y = 2
z = 3
foo()
因此,缩进关闭。当然,我们可以用
来解决这个问题
def foo():
pushdef(`X',` = ')
include(test01.def)
popdef(`X')
foo()
但是,我觉得我们编辑的文件变得很难看,因为很难跟踪我们代码组织中的缩进。真的,我想要做的是使用第一个程序并让 m4 在包含之前吃掉前导空格。我不确定 m4 是否有可能吃掉前导空格。
此外,我知道有 Python 个特定的宏实用程序。但是,我 不 对使用这些感兴趣。我需要在许多不同的语言中使用这些 X 宏,例如在 C 和 LaTeX 中,我打算在每种情况下使用 m4,因为它很容易获得并且与语言无关。因此,如果可能的话,我真的在寻找 m4 解决方案。
是否可以接受以下内容?
define(INCLUDE_ON_NEW_LINE, `
include()')
`def foo():'
pushdef(`X',` = ')
INCLUDE_ON_NEW_LINE(`test01.def')
popdef(`X')
`foo()'
如果您觉得输出更令人满意,可以在上一行添加一个额外的 dnl
。并非我所有的报价都需要,但我喜欢谨慎。
但老实说,我发现您的“丑陋”解决方案更容易理解。为什么M4代码要像Python代码一样缩进?
是否有将 m4 与 Python 一起使用的通用策略?具体来说,Python 的空白要求使使用 m4 有点尴尬。例如下面的程序:
def foo():
pushdef(`X',` = ')
include(test01.def)
popdef(`X')
foo()
和 test01.def
一样
X(x,1)
X(y,2)
X(z,3)
生成 python 程序:
def foo():
x = 1
y = 2
z = 3
foo()
因此,缩进关闭。当然,我们可以用
来解决这个问题def foo():
pushdef(`X',` = ')
include(test01.def)
popdef(`X')
foo()
但是,我觉得我们编辑的文件变得很难看,因为很难跟踪我们代码组织中的缩进。真的,我想要做的是使用第一个程序并让 m4 在包含之前吃掉前导空格。我不确定 m4 是否有可能吃掉前导空格。
此外,我知道有 Python 个特定的宏实用程序。但是,我 不 对使用这些感兴趣。我需要在许多不同的语言中使用这些 X 宏,例如在 C 和 LaTeX 中,我打算在每种情况下使用 m4,因为它很容易获得并且与语言无关。因此,如果可能的话,我真的在寻找 m4 解决方案。
是否可以接受以下内容?
define(INCLUDE_ON_NEW_LINE, `
include()')
`def foo():'
pushdef(`X',` = ')
INCLUDE_ON_NEW_LINE(`test01.def')
popdef(`X')
`foo()'
如果您觉得输出更令人满意,可以在上一行添加一个额外的 dnl
。并非我所有的报价都需要,但我喜欢谨慎。
但老实说,我发现您的“丑陋”解决方案更容易理解。为什么M4代码要像Python代码一样缩进?