* Add regex for title text version of links Original parser matched: [name](http:://link) Add match for: [name](http:://link "title text") * Add tests and improve regex's * Several new tests in test_maddy_linkparser.cpp (Some with paths for future improvement, and one to ensure an overzealous future update doesn't disallow actually-used special characters like o-umlaut). * URLs now ignore leading/trailing spaces. * URLs now don't match on internal spaces or quotes. * Small grammar fix in CONTRIBUTING.md * Updated changelog.
5.3 KiB
Markdown Definitions
This specification defines which markdown syntax can be parsed by maddy. There is no HTML allowed in the markdown syntax - or said otherwise - it might destroy the output, if there was HTML in your markdown.
The Parser expects you to use spaces and not tabs for indentation in the markdown.
If a line starts with < and config->enabledParsers |= maddy::types::HTML_PARSER;
is set, it expects that the upcoming line is HTML and therefor will not be
surrounded by a paragraph.
Headlines
# h1 heading
## h2 heading
### h3 heading
#### h4 heading
##### h5 heading
###### h6 heading
results in:
<h1>h1 heading</h1>
<h2>h2 heading</h2>
<h3>h3 heading</h3>
<h4>h4 heading</h4>
<h5>h5 heading</h5>
<h6>h6 heading</h6>
Links
[Text of the link](http://example.com)
results in
<a href="http://example.com">Text of the link</a>
[Text of the link](http://example.com "title text")
results in
<a href="http://example.com" title="title text">Text of the link</a>
Lists
unordered
Characters "*", "+" or "-" to make an unordered "bullet" list are equivalent.
- unordered
* list
+ items
results in
<ul>
<li>unordered</li>
<li>list</li>
<li>items</li>
</ul>
* unordered
* list
* items
* in
+ an
- hierarchy
results in
<ul>
<li>unordered
<ul>
<li>list</li>
<li>items
<ul>
<li>in</li>
<li>an</li>
</ul>
</li>
<li>hierarchy</li>
</ul>
</li>
</ul>
ordered
1. ordered
2. list
3. items
results in
<ol>
<li>ordered</li>
<li>list</li>
<li>items</li>
</ol>
1. ordered
* list
* items
results in
<ol>
<li>ordered</li>
<li>list</li>
<li>items</li>
</ol>
1. ordered
* list
1. items
* in
1. an
* hierarchy
results in
<ol>
<li>ordered</li>
<li>list
<ol>
<li>items</li>
<li>in
<ol>
<li>an</li>
</ol>
</li>
<li>hierarchy</li>
</ol>
</li>
</ol>
combination
* combination
* of
1. unordered and
* ordered
* list
results in
<ul>
<li>combination</li>
<li>of
<ol>
<li>unordered and</li>
<li>ordered</li>
</ol>
</li>
<li>list</li>
</ul>
checklist
- [ ] some item
- [ ] another item
- [x] some checked item
results in
<ul class="checklist">
<li><label><input type="checkbox"/>some item
<ul class="checklist">
<li><label><input type="checkbox"/><span>another item</label></li>
</ul>
</label></li>
<li><label><input type="checkbox" checked="checked"/>some checked item</label></li>
</ul>
might not work in combination with other lists
Code Blocks
```
some code
```
results in
<pre><code>
some code
</code></pre>
```cpp
int a = 42;
```
results in
<pre class="cpp"><code>
int a = 42;
</code></pre>
Inline code
some text `some inline code` some other text
results in
some text <code>some inline code</code> some other text
quotes
> Some quote
results in
<blockqoute>
<p>Some quote</p>
</blockquote>
bold
**bold text**
__bold text__
results in
<strong>bold text</strong>
<strong>bold text</strong>
italic
*italic text*
results in
<i>italic text</i>
emphasized
This can be disabled by setting config->enabledParsers &= ~maddy::types::EMPHASIZED_PARSER;.
_emphasized text_
results in
<em>emphasized text</em>
strikethrough
~~striked through text~~
results in
<s>striked through text</s>
horizontal line
---
results in
<hr/>
break line
New\r\nLine
results in
New<br>
Line
Images

results in
<img src="http://example.com/example.png" alt="Image alt text"/>
Tables
|table>
Left header | middle header | last header
- | - | -
cell 1 | cell 2 | cell 3
cell 4 | cell 5 | cell 6
- | - | -
foot a | foot b | foot c
|<table
becomes
<table>
<thead>
<tr>
<th>Left header</th>
<th>middle header</th>
<th>last header</th>
</tr>
</thead>
<tbody>
<tr>
<td>cell 1</td>
<td>cell 2</td>
<td>cell 3</td>
</tr>
<tr>
<td>cell 4</td>
<td>cell 5</td>
<td>cell 6</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>foot a</td>
<td>foot b</td>
<td>foot c</td>
</tr>
</tfoot>
</table>
table header and footer are optional
LaTeX(MathJax) block support
To turn on the LaTeX support - which basically is only a MathJax support and makes sure, that formulas aren't internally checked for other parsers - it has to be enabled in config:
std::shared_ptr<maddy::ParserConfig> config = std::make_shared<maddy::ParserConfig>();
config->enabledParsers |= maddy::types::LATEX_BLOCK_PARSER;
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>(config);
std::string htmlOutput = parser->Parse(markdownInput);
After this you can do the following in Markdown:
$$x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}.$$
Which results in
$$x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}.$$\n