2012-04-22 22 views
2

私はHTMLコンテンツとしてのWordPressのビジュアルエディタに挿入するためのPandocを使用してHMTL5に値下げを変換するツールチェーンを使用していますしタグを変更する。は、特定の場所にある「ペア

を、それが画像を挿入することになると、ワードプレスは何を置きますフォームのHTMLテキストに

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

shortcodeと呼ばれている。これは。これは、COR動作しません、本当にマークダウンではなく、そのHTML出力用<q> ... </q>ペアにそれぞれ" ... "ペアを変換Pandocによって解釈されますすぐにワードプレスで。

は私が" ... "だけ独占的にワードプレスで入れていると私はに入れ、他のコンテンツと混同することはできません明確に定義された[caption ... ]角括弧内で発生するもの。

の変換を防ぐ に必要

Pandoc APIまたはHaskellについては、このテキスト断片をPandoc処理から除外するためのインラインのpaseser/filterを書くのには不十分です。 PandocとHaskellとの知り合いがなかったので、私がpandocメーリングリストで受けたアドバイスは、これまでのところ私の頭上を超えています。

私はPerlフィルタを書くことを考えましたが、非常に正当な理由でregexpsの使用を強く断念しました。

私はそれが後処理ステップとして、pandocを介して実行された後[caption ... ]ブロック内のテキストのみのため" ... "<q> ... </q>タグからの逆置換を行うための堅牢な方法があるかどうかを調べるためにここに求めています。

誰かがこれについてどうすればよいかお勧めしますか?

多くのありがとうございます。

答えて

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 [email protected](x:xs) 
    | isPrefixOf "[caption" str = insideCaption str 
    | otherwise     = x:outsideCaption xs 


insideCaption::String->String 
insideCaption []  = [] 
insideCaption (']':xs) = ']':outsideCaption xs 
insideCaption [email protected](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 

はそれが標準入力からstdoutに読みます:

[rothesay]Ygfijj: echo "testing <q> [caption<q></q>]" | ./test 
testing <q> [caption""] 
+0

ありがとうございました。私はコンパイルして実行し、それは動作します!しかし、2つの変更のために問題になるかもしれません:(1)その場所で実行することができますか、入力と同じ出力ファイルに書き込むか、またはstdinとstdoutからI/Oを受け入れますか? (2)「

」「

」タグのペアを削除する必要があることを理解しています。最初は '[' 'を最初に囲んだ後に' '

'のように先頭の[キャプションは'

[陽性]と2番目の* ']'の直前に来ます。再度、感謝します。 – chandra

+0

@chandra stdin/stdoutの使い方に関する提案を追加しました。あなたが言及した他の代入のためのサンプル入出力を提供できますか? – ygfijj

+0

ありがとう。私は今、同じファイルを読み書きできることを信じています。コメントボックスにサンプルI/Oを入力できません。この[link](http://www.mediafire.com/file/38is7n1bpie9h20/stackoverflow-comment.text)を見てください。 – chandra

関連する問題