Skip to content

Commit e1f7fc7

Browse files
Merge pull request #9 from akinomyoga/strict-qualifier
コードブロック後の修飾の抽出を厳密化
2 parents 07b8fc6 + 941d376 commit e1f7fc7

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

qualified_fenced_code.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,17 @@
4141
CODE_WRAP = '<pre><code%s>%s</code></pre>'
4242
LANG_TAG = ' class="%s"'
4343

44-
QUALIFIED_FENCED_BLOCK_RE = re.compile(r'(?P<fence>`{3,})[ ]*(?P<lang>[a-zA-Z0-9_+-]*)(?P<lang_meta>.*?)\n(?P<code>.*?)(?<=\n)(?P<indent>[ \t]*)(?P=fence)[ ]*\n(?:(?=\n)|(?P<qualifies>.*?\n(?=\s*\n)))', re.MULTILINE | re.DOTALL)
44+
# qualifier の各行は以下の形式を持つことを要求する。"*" による箇条書きの項目で
45+
# あり、[meta ...], [mathjax enable ...], [link ...], [color ...], [italic] の
46+
# 何れかの修飾子が含まれていること。インデントレベルは少なくとも閉じ ``` と同じ
47+
# であること。
48+
QUALIFIER_LINE_RE_STRING = r'(?P=indent)\s*\*\s[^\n]*\[(?:meta|mathjax enable|link|color|italic)\b[^\n]*\][^\n]*\n'
49+
50+
# 以下の正規表現は qualifier 行の連続を規定する。最初の qualifier が、閉じ ```
51+
# と同じレベルの "*" による箇条書きの項目でなければそこで中断する。
52+
QUALIFIERS_RE_STRING = r'(?:(?!(?P=indent)\*\s)|(?P<qualifies>(?:%s)*))' % QUALIFIER_LINE_RE_STRING
53+
54+
QUALIFIED_FENCED_BLOCK_RE = re.compile(r'(?P<fence>`{3,})[ ]*(?P<lang>[a-zA-Z0-9_+-]*)(?P<lang_meta>.*?)\n(?P<code>.*?)(?<=\n)(?P<indent>[ \t]*)(?P=fence)[ ]*\n' + QUALIFIERS_RE_STRING, re.MULTILINE | re.DOTALL)
4555
QUALIFY_COMMAND_RE = re.compile(r'\[(.*?)\]')
4656
INDENT_RE = re.compile(r'^[ \t]+', re.MULTILINE)
4757

0 commit comments

Comments
 (0)