2012-04-24 2 views
15

下線付きのテキストが必要です。markdown - マークダウンイタリック体を使用せずにアンダースコアをエスケープしてもかまいませんか?

コードではないため、コードフォーマットを使用したくありません。

私は、マークダウンをへの指示として扱うのをやめて、イタリック体であるです。

\で_each_underscore(!を参照)をエスケープすることはできますが、合計20個あり、ソースでは見栄えが悪く、メンテナンスが難しく、DRYではありません。

他のオプションはありますか?

答えて

13

特定のスタックオーバーフローのサーバーサイドのC#バージョンMarkdownSharp(それはoptional behaviorだ場合)とクライアント側のJavaScriptバージョンPageDownの一部の値下げ実装–は、だけでなく、例えばGitHub's flavor –は、あなたが記述した理由のためにMarkdown仕様から逸脱しています。

Stack Overflowについては、Three Markdown GotchasMarkdown, One Year Laterの2つのブログ記事を参照してください。

これはMarkdownの一般的な批判であるため、この動作をユーザーが設定できるようにする実装が増えているか、より厳密なバージョンにするだけです。したがって、使用している実装によって異なります。

John GruberのオリジナルのPerl実装(つまり「トン数の正規表現置換」)に基づいたポートを使用している場合は、この変更を自分で行うのはかなり簡単です。関連する関数は_DoItalicsAndBold(オリジナルのPerlバージョン、対決/ PageDown)、DoItalicsAndBold(MarkdownSharp)、_do_italics_and_bold(python-markdown2)などと呼ばれる可能性があります。スタックオーバーフローの上に、ここで使用されている厳格な正規表現のための私達のPageDown version of that function

ルック:

function _DoItalicsAndBold(text) { 

    // <strong> must go first: 
    text = text.replace(/([\W_]|^)(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\2([\W_]|$)/g, 
    "$1<strong>$3</strong>$4"); 

    text = text.replace(/([\W_]|^)(\*|_)(?=\S)([^\r\*_]*?\S)\2([\W_]|$)/g, 
    "$1<em>$3</em>$4"); 

    return text; 
} 
関連する問題