2.5.5 regression: strong emphasis adjacent to word/CJK chars fails when content starts or ends with punctuation
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 58/100
Línea de trabajo
Comienza con Markdown._do_italics_and_bold() y GFMItalicAndBoldProcessor, comparando la ruta de expresiones regulares de 2.5.4 con la ruta del procesador de 2.5.5. Ejecuta las reproducciones mínima y más larga contra ambas versiones y añade cobertura de regresión que demuestre que el texto alfanumérico o CJK adyacente con puntuación renderiza el mismo HTML de énfasis fuerte que 2.5.4.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
After upgrading from markdown2 2.5.4 to 2.5.5, strong emphasis sometimes stops parsing when all of these are true:
- the
**...**span is adjacent to alphanumeric or CJK text without surrounding spaces - the emphasized content starts or ends with punctuation, for example Chinese quotes or parentheses
On 2.5.4 these cases render correctly. On 2.5.5 the parser leaves literal ** in the output, and in longer inputs it can also emit malformed mixed HTML.
This reproduces with the default parser configuration, no extras required.
Related to #679 because it also looks like an emphasis-regression in the recent parser changes, but this one reproduces without middle-word-em and with plain markdown2.markdown(...).
Minimal repro
import markdown2
cases = [
'a**“b”**c',
'**“b”**c',
'a**(b)**c',
]
print('version:', markdown2.__version__)
for text in cases:
print('INPUT :', text)
print('OUTPUT:', markdown2.markdown(text).strip())
print()
2.5.4
<p>a<strong>“b”</strong>c</p>
<p><strong>“b”</strong>c</p>
<p>a<strong>(b)</strong>c</p>
2.5.5
<p>a**“b”**c</p>
<p>**“b”**c</p>
<p>a**(b)**c</p>
Longer repro that produces malformed mixed HTML
import markdown2
text = '* **示例**:系统会使用**(方案A)**或**(方案B)**进行处理。'
print(markdown2.markdown(text))
2.5.4
<ul>
<li><strong>示例</strong>:系统会使用<strong>(方案A)</strong>或<strong>(方案B)</strong>进行处理。</li>
</ul>
2.5.5
<ul>
<li><strong>示例</strong>:系统会使用**(方案A)<strong>或</strong>(方案B)**进行处理。</li>
</ul>
Suspected regression window
Looking at the source, Markdown._do_italics_and_bold() changed between these versions:
2.5.4
text = self._strong_re.sub(r"<strong>\\2</strong>", text)
text = self._em_re.sub(r"<em>\\2</em>", text)
2.5.5
if not self._iab_processor:
self._iab_processor = GFMItalicAndBoldProcessor(self, None)
if self._iab_processor.test(text):
text = self._iab_processor.run(text)
So this looks related to the switch to GFMItalicAndBoldProcessor as the default implementation for _do_italics_and_bold().
Environment
- Python: 3.14.0
- markdown2: 2.5.4 vs 2.5.5
- OS: Windows 11
- Lenguaje dominante
- Python
- Estrellas
- 2.8k
- Forks
- 459
- Merge medio
- 2 d 19 h
- PR fusionados (30 d)
- 4
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de trentm/python-markdown2
-
Add py.typed marker Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
trentm/python-markdown2#696 ·
-
More XSS's in safe mode Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
trentm/python-markdown2#726 ·
-
Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
trentm/python-markdown2#707 ·
-
Bug
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
trentm/python-markdown2#679 · 2 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
trentm/python-markdown2#635 · 2 comentarios ·
Todos los issues de trentm/python-markdown2
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
stephrobert/dsoxlab#238 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
sublimehq/package_control#1780 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
nwg-piotr/nwg-displays#145 ·