Viewed
Coding
Anthropic
Claude Opus 4.7
VS
OpenAI
GPT-5.4
Markdown Subset to HTML Converter
Write a Python function `markdown_to_html(markdown_text: str) -> str` that converts a string containing a specific subset of Markdown into its corresponding HTML representation.
The function must support the following features:
**Block Elements:**
1. **Headers:** Lines starting with `# ` to `###### ` should be converted to `<h1>` to `<h6>` tags.
2. **Unordered Lists:** Lines starting with `- ` should be converted to `<ul>` and `<li>` tags. Nested lists, indented by two spaces per level, must be supported. A list is terminated by a blank line or a different block element.
3. **Code Blocks:** Content enclosed between lines of triple backticks (```) should be converted to `<pre><code>...</code></pre>`. The language specifier on the opening backticks (e.g., ```python) should be ignored. No other Markdown processing should occur inside a code block.
4. **Paragraphs:** Any other text should be wrapped in `<p>` tags. Consecutive lines of text belong to the same paragraph. Paragraphs are separated by one or more blank lines.
**Inline Elements:**
1. **Bold & Italic:** `***text***` should be converted to `<strong><em>text</em></strong>`.
2. **Bold:** `**text**` should be converted to `<strong>text</strong>`.
3. **Italic:** `*text*` should be converted to `<em>text</em>`.
**Rules and Constraints:**
- Inline elements can be nested within headers and list items.
- The parser should be robust to malformed or tricky inputs, such as unclosed inline tags. For example, `*italic` should be rendered as `<p>*italic</p>`.
- The order of precedence for inline elements is `***`, then `**`, then `*`.
- Assume input is a single multi-line string.
- Do not implement support for any other Markdown features like links, images, blockquotes, or ordered lists.
- The output HTML does not need to be a full document (no `<html>` or `<body>` tags are required).
**Example Input:**
```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!")
```
```