我需要替换模板文件中的一些标签,因为标签是按顺序排序的。 例如:
\beqin{document}
text $1
test 3 Dolèren ipsum $2
$6
假设该文件名为template.tex,并且子句脚本调用如下:
script /path/template.tex a b c<br/>
它应该给我:
\begin{document}
text a
test 3 Dolèren ipsum b
(因为没有第六个输入而且因为没有$ 3而且因为没有第3个输入所以省略了$ 6)
简而言之,我需要一个类型为myfunc :: FilePath - &gt;的函数。 [String] - &gt; IO()
输出可能是标准输出。
至于语言,它可能是python或haskell。
是否有任何现有的lib可以做到?
我注定要使用parsec吗?或者是否有任何已知的方法可以简单地完成它?
请不要告诉我使用bash,因为我不受平台限制。
另外,标签$ 1 $ 2可能是其他内容,例如&lt;&lt; 1 $&lt;&lt;&lt; 2 $ ...
答案 0 :(得分:3)
您可以使用我的inserts
套餐。它提供了一种简单的死模板语法,但它与$
样式语法不同。
import Text.Template.Inserts
import qualified Data.ByteString.Char8 as S
doc :: S.ByteString
doc = "\beqin{document}\ntext {{1}}\ntest 3 Dolèren ipsum {{2}}\n{{6}}\n"
replace :: [S.ByteString] -> S.ByteString -> Maybe S.ByteString
replace vals name = case lookup name dict of
Nothing -> Just S.empty
Just replacement -> Just replacement
where dict :: [(S.ByteString, S.ByteString)]
dict = zip (map (S.pack . show) [1..]) vals
main = case parseTemplate doc of
Left err -> print err
Right t -> case runTemplate replace t of
Right output -> print output
Left e -> error "Impossible!"
答案 1 :(得分:0)
我认为包format中的renderFormatString函数正是你要找的。 p>