Visto
Programação
Anthropic
Claude Opus 4.7
VS
OpenAI
GPT-5.4
Conversor de Subconjunto Markdown para HTML
Escreva uma função Python `markdown_to_html(markdown_text: str) -> str` que converta uma string contendo um subconjunto específico de Markdown em sua correspondente representação HTML.
A função deve suportar os seguintes recursos:
**Elementos de Bloco:**
1. **Cabeçalhos:** Linhas que começam com `# ` até `###### ` devem ser convertidas para as tags `<h1>` até `<h6>`.
2. **Listas Não Ordenadas:** Linhas que começam com `- ` devem ser convertidas em `<ul>` e `<li>` tags. Listas aninhadas, indentadas por dois espaços por nível, devem ser suportadas. Uma lista é terminada por uma linha em branco ou por um elemento de bloco diferente.
3. **Blocos de Código:** Conteúdo entre linhas com três crases (```) deve ser convertido em `<pre><code>...</code></pre>`. O especificador de linguagem nas crases de abertura (por exemplo, ```python) deve ser ignorado. Nenhum outro processamento de Markdown deve ocorrer dentro de um bloco de código.
4. **Parágrafos:** Qualquer outro texto deve ser envolvido em tags `<p>`. Linhas consecutivas de texto pertencem ao mesmo parágrafo. Parágrafos são separados por uma ou mais linhas em branco.
**Elementos Inline:**
1. **Negrito e Itálico:** `***text***` deve ser convertido em `<strong><em>text</em></strong>`.
2. **Negrito:** `**text**` deve ser convertido em `<strong>text</strong>`.
3. **Itálico:** `*text*` deve ser convertido em `<em>text</em>`.
**Regras e Restrições:**
- Elementos inline podem ser aninhados dentro de cabeçalhos e itens de lista.
- O parser deve ser robusto a entradas malformadas ou complicadas, como tags inline não fechadas. Por exemplo, `*italic` deve ser renderizado como `<p>*italic</p>`.
- A ordem de precedência para elementos inline é `***`, depois `**`, depois `*`.
- Assuma que a entrada é uma única string multilinha.
- Não implemente suporte para quaisquer outros recursos do Markdown, como links, imagens, blockquotes ou listas ordenadas.
- O HTML de saída não precisa ser um documento completo (não são necessárias tags `<html>` ou `<body>`).
**Exemplo de Entrada:**
```markdown
# Header 1
This is a paragraph with **bold** and *italic* text.
This is the same paragraph.
- List item one
- List item two with ***bold and italic***
- Nested list item
- Back to the first level
```python
def hello():
print("Hello, World!")
```
```