Support raw HTML content in the Content Editor
## Problem to solve
Writing raw HTML inline with Markdown is a fairly common use case. Given the Content Editor is an HTML editor, it presents us with a little bit of a dilemma. When someone writes valid HTML in the editor, how would we know whether the intent was to render that back out to Markdown or as raw HTML.
## Example
A few examples to illustrate the problem.
### Basic formatting HTML for extra control
Someone familiar with Markdown and HTML may find it easier to write HTML in order to be more explicit about their intended formatting. For example,
**Input**
```html
## Problem to solve
Writing raw <a href="#html" target="_blank">HTML</a> inline with Markdown <br/> is a fairly common use case.
```
**Output**
```html
<h2>Problem to solve</h2
<p>Writing raw <a href="#html" target="_blank">HTML</a> inline with Markdown <br/> is a fairly common use case.</p>
```
Here the author wants to make sure the link opens in `_blank` and insert a line break. It's possible to do this with Markdown, but the author has chosen not to. The expectation here is that the inline HTML would be parsed out to Markdown accurately. It would be _unexpected_ if the inclusion of the `<br/>` tag converted this whole line into an HTML "block" and prevented proper rendering in the Content Editor.
### Add classes or other attributes
Another common use case is to add attributes to content, something not supported with CommonMark.
**Input**
```html
This is some content.
<p class="warning">And this is a warning!</p>
Now we have some more content.
```
**Output**
```html
<p>This is some content.</p>
<p class="warning">And this is a warning!</p>
<p>Now we have some more content.</p>
```
In this case, there's no way for the Content Editor to know how to style a `warning` so it makes sense that this line of content should be treated as raw HTML inline with the Markdown file.
### Create complex tables, layouts, or use unsupported tags
Similarly to the attributes, there are many HTML tags that don't map to Markdown syntax. And in the case of tables, there are limits to what the Markdown extensions can provide. Some people find it necessary to write HTML in order to provide more complex layouts or use unsupported tags. In this case you would also expect that the Content Editor simply allow you to write the raw HTML in a "block" and it would not attempt to write it back out as Markdown.
epic