mirror of
https://github.com/erusev/parsedown.git
synced 2023-08-10 21:13:06 +03:00
Compare commits
36 Commits
0.9.4
...
1.0.0-rc.1
Author | SHA1 | Date | |
---|---|---|---|
6081954185 | |||
d841003c65 | |||
f310bbe13f | |||
2595f366d9 | |||
e5dc563804 | |||
e0901ee9c7 | |||
5316a2e0dd | |||
5be4491943 | |||
4e670129c8 | |||
159c3cede6 | |||
c10bde0174 | |||
24d872383c | |||
7ef45894a7 | |||
9bf64d2e31 | |||
886c620440 | |||
e156c418d6 | |||
1734f6fc85 | |||
d8650cd77c | |||
3fa9d62572 | |||
4f851205a7 | |||
0985c2ef29 | |||
9fd9262f16 | |||
a6756fd4fa | |||
1243fcf3e0 | |||
1e8d917f7a | |||
324eaf7c15 | |||
f972f7f15d | |||
688b761d32 | |||
b8bd12f565 | |||
7a20a9fb60 | |||
6fed312d3c | |||
d0784d1006 | |||
446fead459 | |||
ccbdfabaff | |||
bc30ad8e30 | |||
d9f325903a |
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
.DS_Store
|
||||
.idea
|
||||
nbproject
|
@ -1,8 +1,9 @@
|
||||
language: php
|
||||
|
||||
php:
|
||||
- 5.6
|
||||
- 5.5
|
||||
- 5.4
|
||||
- 5.3
|
||||
- 5.2
|
||||
- hhvm
|
||||
- hhvm
|
||||
|
@ -1,20 +0,0 @@
|
||||
Pull Requests
|
||||
-------------
|
||||
|
||||
Do create pull requests that:
|
||||
|
||||
* resolve an issue
|
||||
* improve an existing feature or text
|
||||
|
||||
Do not create pull requests that:
|
||||
|
||||
* introduce a feature or text
|
||||
* change the interface
|
||||
* change the coding style
|
||||
|
||||
If a pull request contains unrelated changes, they should be submitted as separate pull requests.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
By contributing to the project, you grant the creator of the project a perpetual, worldwide, irrevocable license to use, reproduce and distribute your contributions and derivative works. You also warrant that you are the sole owner of your contributions and that they are your original works of authorship.
|
2154
Parsedown.php
2154
Parsedown.php
File diff suppressed because it is too large
Load Diff
23
README.md
23
README.md
@ -2,19 +2,16 @@
|
||||
|
||||
Better [Markdown](http://en.wikipedia.org/wiki/Markdown) parser for PHP.
|
||||
|
||||
***
|
||||
|
||||
[ [demo](http://parsedown.org/demo) ] [ [tests](http://parsedown.org/tests/) ]
|
||||
|
||||
***
|
||||
- [Demo](http://parsedown.org/demo)
|
||||
- [Tests](http://parsedown.org/tests/)
|
||||
|
||||
### Features
|
||||
|
||||
* [fast](http://parsedown.org/speed)
|
||||
* [consistent](http://parsedown.org/consistency)
|
||||
* [Fast](http://parsedown.org/speed)
|
||||
* [Consistent](http://parsedown.org/consistency)
|
||||
* [GitHub Flavored](https://help.github.com/articles/github-flavored-markdown)
|
||||
* [tested](https://travis-ci.org/erusev/parsedown) in PHP 5.2, 5.3, 5.4, 5.5 and [hhvm](http://www.hhvm.com/)
|
||||
* friendly to international input
|
||||
* [Tested](https://travis-ci.org/erusev/parsedown) in PHP 5.2, 5.3, 5.4, 5.5, 5.6 and [hhvm](http://www.hhvm.com/)
|
||||
* Extensible
|
||||
|
||||
### Installation
|
||||
|
||||
@ -22,10 +19,8 @@ Include `Parsedown.php` or install [the composer package](https://packagist.org/
|
||||
|
||||
### Example
|
||||
|
||||
```php
|
||||
$text = 'Hello *Parsedown*!';
|
||||
``` php
|
||||
$Parsedown = new Parsedown();
|
||||
|
||||
$result = Parsedown::instance()->parse($text);
|
||||
|
||||
echo $result; # prints: <p>Hello <em>Parsedown</em>!</p>
|
||||
echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
|
||||
```
|
||||
|
@ -4,54 +4,64 @@ include 'Parsedown.php';
|
||||
|
||||
class Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
const provider_dir = 'data/';
|
||||
public function __construct($name = null, array $data = array(), $dataName = '')
|
||||
{
|
||||
$this->dataDir = dirname(__FILE__).'/data/';
|
||||
|
||||
/**
|
||||
* @dataProvider provider
|
||||
*/
|
||||
function test_($filename)
|
||||
{
|
||||
$path = $this->get_data_path();
|
||||
$markdown = file_get_contents($path . $filename . '.md');
|
||||
$expected_markup = file_get_contents($path . $filename . '.html');
|
||||
$expected_markup = str_replace("\r\n", "\n", $expected_markup);
|
||||
$expected_markup = str_replace("\r", "\n", $expected_markup);
|
||||
parent::__construct($name, $data, $dataName);
|
||||
}
|
||||
|
||||
$actual_markup = Parsedown::instance()->parse($markdown);
|
||||
private $dataDir;
|
||||
|
||||
$this->assertEquals($expected_markup, $actual_markup);
|
||||
}
|
||||
/**
|
||||
* @dataProvider data
|
||||
*/
|
||||
function test_($filename)
|
||||
{
|
||||
$markdown = file_get_contents($this->dataDir . $filename . '.md');
|
||||
|
||||
function provider()
|
||||
{
|
||||
$provider = array();
|
||||
$expectedMarkup = file_get_contents($this->dataDir . $filename . '.html');
|
||||
|
||||
$path = $this->get_data_path();
|
||||
$DirectoryIterator = new DirectoryIterator($path);
|
||||
$expectedMarkup = str_replace("\r\n", "\n", $expectedMarkup);
|
||||
$expectedMarkup = str_replace("\r", "\n", $expectedMarkup);
|
||||
|
||||
foreach ($DirectoryIterator as $Item)
|
||||
{
|
||||
if ($Item->isFile())
|
||||
{
|
||||
$filename = $Item->getFilename();
|
||||
$actualMarkup = Parsedown::instance()->text($markdown);
|
||||
|
||||
$extension = pathinfo($filename, PATHINFO_EXTENSION);
|
||||
$this->assertEquals($expectedMarkup, $actualMarkup);
|
||||
}
|
||||
|
||||
if ($extension !== 'md')
|
||||
continue;
|
||||
function data()
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$basename = $Item->getBasename('.md');
|
||||
if (file_exists($path.$basename.'.html')) {
|
||||
$provider [] = array($basename);
|
||||
}
|
||||
}
|
||||
}
|
||||
$Folder = new DirectoryIterator($this->dataDir);
|
||||
|
||||
return $provider;
|
||||
}
|
||||
foreach ($Folder as $File)
|
||||
{
|
||||
/** @var $File DirectoryIterator */
|
||||
|
||||
function get_data_path()
|
||||
{
|
||||
return dirname(__FILE__).'/'.self::provider_dir;
|
||||
}
|
||||
}
|
||||
if ( ! $File->isFile())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$filename = $File->getFilename();
|
||||
|
||||
$extension = pathinfo($filename, PATHINFO_EXTENSION);
|
||||
|
||||
if ($extension !== 'md')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$basename = $File->getBasename('.md');
|
||||
|
||||
if (file_exists($this->dataDir . $basename . '.html'))
|
||||
{
|
||||
$data []= array($basename);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
18
tests/data/aesthetic_table.html
Normal file
18
tests/data/aesthetic_table.html
Normal file
@ -0,0 +1,18 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>header 1</th>
|
||||
<th>header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>cell 1.1</td>
|
||||
<td>cell 1.2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cell 2.1</td>
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
4
tests/data/aesthetic_table.md
Normal file
4
tests/data/aesthetic_table.md
Normal file
@ -0,0 +1,4 @@
|
||||
| header 1 | header 2 |
|
||||
| -------- | -------- |
|
||||
| cell 1.1 | cell 1.2 |
|
||||
| cell 2.1 | cell 2.2 |
|
21
tests/data/aligned_table.html
Normal file
21
tests/data/aligned_table.html
Normal file
@ -0,0 +1,21 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="left">header 1</th>
|
||||
<th align="center">header 2</th>
|
||||
<th align="right">header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left">cell 1.1</td>
|
||||
<td align="center">cell 1.2</td>
|
||||
<td align="right">cell 1.3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">cell 2.1</td>
|
||||
<td align="center">cell 2.2</td>
|
||||
<td align="right">cell 2.3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
4
tests/data/aligned_table.md
Normal file
4
tests/data/aligned_table.md
Normal file
@ -0,0 +1,4 @@
|
||||
| header 1 | header 2 | header 2 |
|
||||
| :------- | :------: | -------: |
|
||||
| cell 1.1 | cell 1.2 | cell 1.3 |
|
||||
| cell 2.1 | cell 2.2 | cell 2.3 |
|
@ -1,8 +1,8 @@
|
||||
<pre><code><?php
|
||||
|
||||
$message = 'Hello World!';
|
||||
$message = 'Hello World!';
|
||||
echo $message;</code></pre>
|
||||
<hr />
|
||||
<pre><code>> not a quote
|
||||
<pre><code>> not a quote
|
||||
- not a list item
|
||||
[not a reference]: http://foo.com</code></pre>
|
@ -1,11 +1,10 @@
|
||||
<?php
|
||||
|
||||
$message = 'Hello World!';
|
||||
|
||||
$message = 'Hello World!';
|
||||
echo $message;
|
||||
|
||||
---
|
||||
|
||||
> not a quote
|
||||
> not a quote
|
||||
- not a list item
|
||||
[not a reference]: http://foo.com
|
||||
|
||||
[not a reference]: http://foo.com
|
@ -3,16 +3,10 @@
|
||||
<ul>
|
||||
<li>li
|
||||
<ul>
|
||||
<li>li
|
||||
<ul>
|
||||
<li>li</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>li</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>li</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>li</li>
|
||||
</ul>
|
@ -1,7 +1,6 @@
|
||||
- li
|
||||
- li
|
||||
- li
|
||||
- li
|
||||
- li
|
||||
- li
|
||||
- li
|
28
tests/data/html_simple.html
Normal file
28
tests/data/html_simple.html
Normal file
@ -0,0 +1,28 @@
|
||||
<p>Headings:</p>
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>blah</p>
|
||||
<H2 id="block">Block Elements</H2>
|
||||
<p>blah</p>
|
||||
<h3 id="span">
|
||||
Span Elements
|
||||
</h3>
|
||||
<p>blah</p>
|
||||
<p>Hr's:</p>
|
||||
<hr>
|
||||
<p>blah</p>
|
||||
<hr/>
|
||||
<p>blah</p>
|
||||
<hr />
|
||||
<p>blah</p>
|
||||
<hr>
|
||||
<p>blah</p>
|
||||
<hr/>
|
||||
<p>blah</p>
|
||||
<hr />
|
||||
<p>blah</p>
|
||||
<hr class="foo" id="bar" />
|
||||
<p>blah</p>
|
||||
<hr class="foo" id="bar"/>
|
||||
<p>blah</p>
|
||||
<hr class="foo" id="bar" >
|
||||
<p>blah</p>
|
39
tests/data/html_simple.md
Normal file
39
tests/data/html_simple.md
Normal file
@ -0,0 +1,39 @@
|
||||
Headings:
|
||||
|
||||
<h2 id="overview">Overview</h2>
|
||||
blah
|
||||
<H2 id="block">Block Elements</H2>
|
||||
blah
|
||||
<h3 id="span">
|
||||
Span Elements
|
||||
</h3>
|
||||
blah
|
||||
|
||||
Hr's:
|
||||
|
||||
<hr>
|
||||
blah
|
||||
|
||||
<hr/>
|
||||
blah
|
||||
|
||||
<hr />
|
||||
blah
|
||||
|
||||
<hr>
|
||||
blah
|
||||
|
||||
<hr/>
|
||||
blah
|
||||
|
||||
<hr />
|
||||
blah
|
||||
|
||||
<hr class="foo" id="bar" />
|
||||
blah
|
||||
|
||||
<hr class="foo" id="bar"/>
|
||||
blah
|
||||
|
||||
<hr class="foo" id="bar" >
|
||||
blah
|
37
tests/data/simple_table.html
Normal file
37
tests/data/simple_table.html
Normal file
@ -0,0 +1,37 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>header 1</th>
|
||||
<th>header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>cell 1.1</td>
|
||||
<td>cell 1.2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cell 2.1</td>
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr />
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="left">header 1</th>
|
||||
<th>header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left">cell 1.1</td>
|
||||
<td>cell 1.2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">cell 2.1</td>
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
11
tests/data/simple_table.md
Normal file
11
tests/data/simple_table.md
Normal file
@ -0,0 +1,11 @@
|
||||
header 1 | header 2
|
||||
-------- | --------
|
||||
cell 1.1 | cell 1.2
|
||||
cell 2.1 | cell 2.2
|
||||
|
||||
---
|
||||
|
||||
header 1 | header 2
|
||||
:------- | --------
|
||||
cell 1.1 | cell 1.2
|
||||
cell 2.1 | cell 2.2
|
@ -1,6 +1,6 @@
|
||||
<pre><code><?php
|
||||
|
||||
$message = 'Hello World!';
|
||||
$message = 'Hello World!';
|
||||
echo $message;
|
||||
|
||||
echo "following a blank line";</code></pre>
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
$message = 'Hello World!';
|
||||
$message = 'Hello World!';
|
||||
echo $message;
|
||||
|
||||
echo "following a blank line";
|
18
tests/data/table_inline_markdown.html
Normal file
18
tests/data/table_inline_markdown.html
Normal file
@ -0,0 +1,18 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><em>header</em> 1</th>
|
||||
<th>header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><em>cell</em> 1.1</td>
|
||||
<td><del>cell</del> 1.2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>cell</code> 2.1</td>
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
4
tests/data/table_inline_markdown.md
Normal file
4
tests/data/table_inline_markdown.md
Normal file
@ -0,0 +1,4 @@
|
||||
| _header_ 1 | header 2 |
|
||||
| ------------ | ------------ |
|
||||
| _cell_ 1.1 | ~~cell~~ 1.2 |
|
||||
| `cell` 2.1 | cell 2.2 |
|
@ -3,5 +3,6 @@
|
||||
<p>[one][404] with no definition</p>
|
||||
<p><a href="http://example.com">multiline
|
||||
one</a> defined on 2 lines</p>
|
||||
<p><a href="http://example.com">one</a> with an upper case label</p>
|
||||
<p><a href="http://example.com">one</a> with a mixed case label and an upper case definition</p>
|
||||
<p><a href="http://example.com">one</a> with the a label on the next line</p>
|
||||
<p><a href="http://example.com"><code>link</code></a></p>
|
@ -11,8 +11,11 @@
|
||||
[multiline
|
||||
one][website] defined on 2 lines
|
||||
|
||||
[one][label] with an upper case label
|
||||
[one][Label] with a mixed case label and an upper case definition
|
||||
|
||||
[LABEL]: http://example.com
|
||||
|
||||
[one]
|
||||
[1] with the a label on the next line
|
||||
|
||||
[`link`][website]
|
18
tests/data/untidy_table.html
Normal file
18
tests/data/untidy_table.html
Normal file
@ -0,0 +1,18 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>header 1</th>
|
||||
<th>header 2</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>cell 1.1</td>
|
||||
<td>cell 1.2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cell 2.1</td>
|
||||
<td>cell 2.2</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
4
tests/data/untidy_table.md
Normal file
4
tests/data/untidy_table.md
Normal file
@ -0,0 +1,4 @@
|
||||
| header 1 | header 2 |
|
||||
| ------------- | ----------- |
|
||||
| cell 1.1 | cell 1.2 |
|
||||
| cell 2.1 | cell 2.2 |
|
Reference in New Issue
Block a user