Skip to content

Commit 42daf6b

Browse files
committed
コードブロック後の修飾の抽出を厳密化
Ref. [1] で発見された問題。コードブロック後に改行を挟まずに文章を続け るとその文章がコード修飾指定のセクションとして抽出されて消失する問題。 対処法として改行を挿入する [2, 3] ことで回避できるが、改行がなくても正 しく表示されるようにしたい[4]。ここでは、コード修飾の指定についてより 厳密な形式で抽出を行い、誤って関係ない物を抽出することを防ぐ。 この変更のテストの過程で、既存のコード修飾の誤りが発見されたが対処した [5]。また、他にも消失している記述 [6] が発見されたが、[6] はこの変更に より自動的に修正されるので対処はしていない。 References: [1] cpprefjp/site#1362 (comment) [2] cpprefjp/site@c747f4a [3] cpprefjp/site@5259ff6 [4] cpprefjp#8 (comment) [5] cpprefjp/site@ebf8c8f [6] https://github.com/cpprefjp/site/blob/ebf8c8fd705a194adb7b3f83786dad9c843d143b/reference/generator/generator/iterator/op_increment.md?plain=1#L27
1 parent 07b8fc6 commit 42daf6b

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 ...],
46+
# [italic] の何れかの修飾子が含まれていること。インデントレベルは少なくとも ```
47+
# と同じであること。
48+
QUALIFIER_LINE_RE_STRING = r'(?P=indent)\s*(?:[-*+]|[0-9]+\.)\s[^\n]*\[(?:meta|mathjax enable|link|color|italic)\b[^\n]*\][^\n]*\n'
49+
50+
# 以下の正規表現は qualifier 行の連続を規定する。最初の qualifier が、閉じ ```
51+
# と同じレベルの箇条書きまたは番号リストの項目でなければそこで中断する。
52+
QUALIFIERS_RE_STRING = r'(?:(?!(?P=indent)(?:[-*+]|[0-9]+\.)\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)