diff --git a/qualified_fenced_code.py b/qualified_fenced_code.py index 6509299..2cde1cd 100644 --- a/qualified_fenced_code.py +++ b/qualified_fenced_code.py @@ -41,7 +41,17 @@ CODE_WRAP = '
%s
'
LANG_TAG = ' class="%s"'
-QUALIFIED_FENCED_BLOCK_RE = re.compile(r'(?P.*?)(?<=\n)(?P[ \t]*)(?P=fence)[ ]*\n(?:(?=\n)|(?P.*?\n(?=\s*\n)))', re.MULTILINE | re.DOTALL)
+# qualifier の各行は以下の形式を持つことを要求する。"*" による箇条書きの項目で
+# あり、[meta ...], [mathjax enable ...], [link ...], [color ...], [italic] の
+# 何れかの修飾子が含まれていること。インデントレベルは少なくとも閉じ ``` と同じ
+# であること。
+QUALIFIER_LINE_RE_STRING = r'(?P=indent)\s*\*\s[^\n]*\[(?:meta|mathjax enable|link|color|italic)\b[^\n]*\][^\n]*\n'
+
+# 以下の正規表現は qualifier 行の連続を規定する。最初の qualifier が、閉じ ```
+# と同じレベルの "*" による箇条書きの項目でなければそこで中断する。
+QUALIFIERS_RE_STRING = r'(?:(?!(?P=indent)\*\s)|(?P(?:%s)*))' % QUALIFIER_LINE_RE_STRING
+
+QUALIFIED_FENCED_BLOCK_RE = re.compile(r'(?P`{3,})[ ]*(?P[a-zA-Z0-9_+-]*)(?P.*?)\n(?P.*?)(?<=\n)(?P[ \t]*)(?P=fence)[ ]*\n' + QUALIFIERS_RE_STRING, re.MULTILINE | re.DOTALL)
QUALIFY_COMMAND_RE = re.compile(r'\[(.*?)\]')
INDENT_RE = re.compile(r'^[ \t]+', re.MULTILINE)