2

ツールチェーンを使用して、 Pandocを使用してマークダウンを HMTL5 に変換し、WordPress のビジュアル エディターに HTML コンテンツとして挿入しています。

画像を挿入する場合、WordPress はshortcodeフォームのと呼ばれるものを挿入します。

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

HTMLテキストに。" ... "これは実際にはマークダウンではありませんが、各ペア<q> ... </q>を HTML 出力用のペアに変換する Pandoc によって解釈されます。これは WordPress では正しく機能しません。

WordPress によって排他的に入力され、入力した他のコンテンツと混同できない、明確に定義された角括弧内にあるもののみの変換を防止する必要があります。" ... "[caption ... ]

Pandoc APIHaskellについて、このテキスト フラグメントを Pandoc 処理から除外するインライン paser/filter を作成するのに十分な知識がありません。Pandoc メーリング リストで受け取ったアドバイスは、Pandoc と Haskell についての知識が不足しているため、これまで頭を悩ませていました。

私は 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 = interact outsideCaption 

stdin から stdout に読み込むようにします。例:

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