Markdown 검사기에서 중괄호 {} 유동 태그 유효성을 검사합니다.

Markdown 검사기에서 중괄호 {} 유동 태그 유효성을 검사합니다.

작성자가 md 파일의 유효성을 검사하는 데 사용하는 Markdown 유효성 검사기가 있으며 검사 중 하나는 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'에 두 번 나타나고 백틱 확인뿐만 아니라 4개의 공백에 대해 계산된다는 것입니다. 이 문제를 어떻게 해결하나요?

답변1

이는 완전한 답변은 아니지만 awk여는 중괄호( {})의 수를 계산하는 데 사용할 수 있는 코드는 다음과 같습니다.

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

이는 유사한 구문을 올바르게 처리하는 데 도움이 됩니다 }}} {{{(주석에서 언급했듯이).

동일한 기술을 사용하여 백틱, 백슬래시 등을 계산할 수 있습니다.

관련 정보