Markdown チェッカーで中かっこ {} フロータグを検証します。

Markdown チェッカーで中かっこ {} フロータグを検証します。

作成者が md ファイルを検証するために使用する Markdown バリデーターがあり、その検査の 1 つは、md ファイルで無効な Liquid タグを検証する Liquid タグの検証です。私の要件は、中かっこが正しく使用され、正しく終了したことを確認する検証を追加することです。たとえば、作成者が5つの{sで開いた場合は、5つの閉じる}も必要です。しかし、我々はまた、この検証からコードブロックを除外する必要があります。コードブロック内の括弧は検証しないでください。コードブロックは、スペース4つのインデント、バックティック3つ、またはバックティック1つです。

bracecountopen=$(grep -o -i '{' $file | wc -l);
bracecountclose=$(grep -o -i '}' $file | wc -l);
if [ "$bracecountopen" != "$bracecountclose" ]; then
    throw error
fi

コードブロックを除外するために使用されます。

var+=$(grep '^\ \ \ \ [^>]' $file);
while IFS= read -n1 char; do
    if [[ "$char" == "\`" ]]; then
        if [ $flag = 1 ]; then
            flag=0;
            continue
        fi
        flag=1;
    fi
    if [ $flag = 1 ]; then
        # var+=$char;
        echo ""
    fi
done <$file

codebraceopen=$(echo "$var" | grep -o -i '{' | wc -l)
codebraceclose=$(echo "$var" | grep -o -i '}' | wc -l)
let "bracecountopen=bracecountopen - codebraceopen"
let "bracecountclose=bracecountclose - codebraceclose"

これは正しいアプローチですか?これを達成するためのより良いロジックはありますか?ここでの問題は、一部の作成者がバックティックでコードブロックを開始する前にタブまたは4つのスペースを追加して内容が「var」に2回表示され、バックティック検証だけでなく4つのスペースについても計算されることです。この問題をどのように解決しますか?

ベストアンサー1

これは完全な答えではありませんが、開いている中awk括弧({})の数を計算するために使用できるコードは次のとおりです。

codebraceopen=$(echo "$var" | awk '{n+=gsub("\{","",$0)} END {print n}' )
codebraceclose=$(echo "$var" | awk '{n+=gsub("\}","",$0)} END {print n}')

これは同様の構文を正しく処理するのに役立ちます}}} {{{(コメントで述べたように)。

同じ手法を使用して、バックティック、バックスラッシュなどを計算できます。

おすすめ記事