From 4332fb9df0da35049e1e470faccf9fe9d3d6d9df Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Tue, 10 Dec 2024 20:47:55 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=83=96?= =?UTF-8?q?=E3=83=AD=E3=83=83=E3=82=AF=E5=BE=8C=E3=81=AE=E4=BF=AE=E9=A3=BE?= =?UTF-8?q?=E3=81=AE=E6=8A=BD=E5=87=BA=E3=82=92=E5=8E=B3=E5=AF=86=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ref. [1] で発見された問題。コードブロック後に改行を挟まずに文章を続け るとその文章がコード修飾指定のセクションとして抽出されて消失する問題。 対処法として改行を挿入する [2, 3] ことで回避できるが、改行がなくても正 しく表示されるようにしたい。ここでは、コード修飾の指定についてより厳密 な形式で抽出を行い、誤って関係ない物を抽出することを防ぐ [4]。 この変更のテストの過程で、既存のコード修飾の誤りが発見されたが対処した [5]。また、他にも消失している記述 [6] が発見されたが、[6] はこの変更に より自動的に修正されるので対処はしていない。 References: [1] https://github.com/cpprefjp/site/issues/1362#issuecomment-2482124298 [2] https://github.com/cpprefjp/site/commit/c747f4a71f9ab8a4dfaf1a21424e58bd5ed73f55 [3] https://github.com/cpprefjp/site/commit/5259ff6bc67ca8b95d5b9450555a4ca2de97a3ee [4] https://github.com/cpprefjp/markdown_to_html/pull/8#issuecomment-2527599901 [5] https://github.com/cpprefjp/site/commit/ebf8c8fd705a194adb7b3f83786dad9c843d143b [6] https://github.com/cpprefjp/site/blob/ebf8c8fd705a194adb7b3f83786dad9c843d143b/reference/generator/generator/iterator/op_increment.md?plain=1#L27 --- qualified_fenced_code.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/qualified_fenced_code.py b/qualified_fenced_code.py index 6509299..4eaf079 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`{3,})[ ]*(?P[a-zA-Z0-9_+-]*)(?P.*?)\n(?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*(?:[-*+]|[0-9]+\.)\s[^\n]*\[(?:meta|mathjax enable|link|color|italic)\b[^\n]*\][^\n]*\n' + +# 以下の正規表現は qualifier 行の連続を規定する。最初の qualifier が、閉じ ``` +# と同じレベルの箇条書きまたは番号リストの項目でなければそこで中断する。 +QUALIFIERS_RE_STRING = r'(?:(?!(?P=indent)(?:[-*+]|[0-9]+\.)\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) From 941d376cacf8e9edb6c2e81c3ab0d25951b968b2 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Tue, 10 Dec 2024 22:02:44 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E4=BF=AE?= =?UTF-8?q?=E9=A3=BE=E3=81=AE=E7=AE=87=E6=9D=A1=E6=9B=B8=E3=81=8D=E3=81=AF?= =?UTF-8?q?=20*=20=E3=81=A7=E3=81=82=E3=82=8B=E3=81=93=E3=81=A8=E3=82=92?= =?UTF-8?q?=E8=A6=81=E8=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qualified_fenced_code.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/qualified_fenced_code.py b/qualified_fenced_code.py index 4eaf079..2cde1cd 100644 --- a/qualified_fenced_code.py +++ b/qualified_fenced_code.py @@ -41,15 +41,15 @@ CODE_WRAP = '
%s
' LANG_TAG = ' class="%s"' -# qualifier の各行は以下の形式を持つことを要求する。箇条書きまたは番号リストの -# 項目であり、[meta ...], [mathjax enable ...], [link ...], [color ...], -# [italic] の何れかの修飾子が含まれていること。インデントレベルは少なくとも ``` -# と同じであること。 -QUALIFIER_LINE_RE_STRING = r'(?P=indent)\s*(?:[-*+]|[0-9]+\.)\s[^\n]*\[(?:meta|mathjax enable|link|color|italic)\b[^\n]*\][^\n]*\n' +# 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)(?:[-*+]|[0-9]+\.)\s)|(?P(?:%s)*))' % QUALIFIER_LINE_RE_STRING +# と同じレベルの "*" による箇条書きの項目でなければそこで中断する。 +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'\[(.*?)\]')