2

我正在使用工具链将 Markdown 转换为 HMTL5,使用Pandoc作为 HTML 内容插入 WordPress 的可视化编辑器。

在插入图像时,WordPress 将所谓的 ashortcode形式

[caption id="attachment_100" align="aligncenter" width="300" caption="This is an image caption"]

到 HTML 文本中。这并不是真正的降价,而是由 Pandoc 解释的,它将每一" ... "对转换<q> ... </q>为 HTML 输出对。这在 WordPress 中无法正常工作。

我需要防止转换" ... "那些出现在明确定义的[caption ... ]方括号内的内容,这些方括号专门由 WordPress 放入,并且不能与我放入的其他内容混淆。

我对Pandoc APIHaskell的了解还不够,无法编写一个内联的 paseser/filter 来免除这个文本片段的 Pandoc 处理。鉴于我对 Pandoc 和 Haskell 不熟悉,到目前为止,我在 pandoc 邮件列表上收到的建议已经超出了我的想象。

我曾想过编写一个 Perl 过滤器,但出于非常充分的理由强烈反对使用正则表达式。

我在这里询问是否有一种可靠的方法可以在通过 pandoc 运行块后,将<q> ... </q>标签反向替换为" ... "仅用于块内的文本,作为后处理步骤。[caption ... ]

有人可以建议我怎么做吗?

非常感谢。

4

1 回答 1

2

你想要这样的东西吗?

import Data.List
import System.IO

main = do
   inh  <- openFile "input.txt"  ReadMode
   outh <- openFile "output.txt" WriteMode
   str <- hGetContents inh
   hPutStrLn outh (outsideCaption str) 
   hClose inh
   hClose outh

outsideCaption::String->String
outsideCaption [] = []
outsideCaption str@(x:xs)
    | isPrefixOf "[caption" str = insideCaption str
    | otherwise                 = x:outsideCaption xs


insideCaption::String->String
insideCaption []       = []
insideCaption (']':xs) = ']':outsideCaption xs
insideCaption str@(x:xs)
    | (isPrefixOf "<q>"  str) = '\"':insideCaption (drop 3 str)
    | (isPrefixOf "</q>" str) = '\"':insideCaption (drop 4 str)
    |  otherwise              = x   :insideCaption         xs

这段代码读取一个名为“input.txt”的文件,执行您描述的替换并将结果打印到“output.txt”。

将当前的 main 替换为:

main = interact outsideCaption 

使其从标准输入读取到标准输出,例如:

[rothesay]Ygfijj: echo "testing <q> [caption<q></q>]" | ./test 
testing <q> [caption""] 
于 2012-04-22T20:20:40.847 回答