我正在使用工具链将 markdown 转换为 HMTL5,使用 Pandoc用于作为 HTML 内容插入 WordPress 的可视化编辑器。
在插入图像时,WordPress 放置了所谓的 shortcode
的形式
[caption id="attachment_100" align="aligncenter" width="300" caption="This is an image caption"]
插入 HTML 文本中。这并不是真正的 Markdown ,而是由 Pandoc 进行解释,翻译每个 " ... "
配对成 <q> ... </q>
对用于 HTML 输出。这在 WordPress 中无法正常工作。
我需要阻止 " ... "
的转换但仅限于那些出现在明确定义的 [caption ... ]
范围内的情况方括号是 WordPress 专门放入的,不能与我放入的其他内容混淆。
我对Pandoc API了解不够或Haskell编写一个内联 paseser/过滤器,以使该文本片段免于 Pandoc 处理。鉴于我对 Pandoc 和 Haskell 缺乏了解,到目前为止,我在 pandoc 邮件列表上收到的建议超出了我的理解范围。
我想过编写一个 Perl 过滤器,但由于非常充分的理由而被强烈劝阻不要使用正则表达式。
我在这里询问是否有一种可靠的方法可以从 <q> ... </q>
进行反向替换标签为" ... "
仅适用于 [caption ... ]
内的文本作为后处理步骤,在通过 pandoc 运行后进行阻止。
有人可以建议我如何解决这个问题吗?
非常感谢。
最佳答案
你想要这样的东西吗?
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""]
关于haskell - 将 <q> 和 </q> 标签更改为“特定位置的配对”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264587/