1
0
mirror of https://github.com/erusev/parsedown.git synced 2023-08-10 21:13:06 +03:00

Compare commits

..

64 Commits
0.5.0 ... 0.9.0

Author SHA1 Message Date
f0fbdaa6ca backtick within code span 2014-01-22 21:28:29 +02:00
e20c0a29bd nested elements should render on a new line 2014-01-22 21:28:29 +02:00
712dd23d30 simplify parsing of list 2014-01-22 21:28:29 +02:00
68f2871996 resolve #3 2014-01-22 21:28:29 +02:00
17e7e33847 name image title test 2014-01-22 21:28:29 +02:00
7cb9646d98 simplify compiling of links 2014-01-22 21:28:29 +02:00
325bdd9ff6 improve readme 2014-01-21 23:15:02 +02:00
2a0700abda resolve #61 2014-01-20 22:19:23 +02:00
4e83d79d76 setters should know nothing 2014-01-20 09:26:25 +02:00
354842fd6e simplify compiling 2014-01-19 23:34:20 +02:00
2b73e94c6c simplify parsing of escaped characters 2014-01-19 22:49:43 +02:00
0182812d6c remove unnecessary blank lines 2014-01-19 15:37:05 +02:00
f5dd3455f9 resolve #58 2014-01-19 00:52:07 +02:00
1017f22cdd fix paragraph list 2014-01-18 16:45:39 +02:00
88854955d6 take $inline_tags out of the method 2014-01-18 16:45:39 +02:00
654dd74074 lines that start with inline html should not get parsed as block-level markup, should resolve #54 and #57 2014-01-18 16:45:39 +02:00
fee5b71998 improve readme 2014-01-17 01:33:20 +02:00
149b687ee7 improve tests 2014-01-17 01:25:41 +02:00
98b17e3354 setext heading doesn't have to use regex 2014-01-17 01:23:25 +02:00
da966b83f1 atx heading doesn't have to use regex 2014-01-17 00:36:11 +02:00
b9ab495cb4 parse method doesn't have to use regex 2014-01-16 23:43:34 +02:00
408cb5c21f code block doesn't have to use regex 2014-01-16 23:43:12 +02:00
5dd0e8cb7b $deindented_line >= ... doesn't make sense 2014-01-16 23:39:56 +02:00
5521afde31 refactor $element 2014-01-13 23:45:31 +02:00
4317add3a2 add hhvm to PHP versions to test against 2013-12-28 14:57:25 +02:00
47d8a1382b implement automatic line breaks as an option 2013-12-26 23:43:25 +02:00
fd42f2e864 improve tests 2013-12-26 21:55:33 +02:00
c0b7155572 implement link titles 2013-12-26 21:53:48 +02:00
be366b63ea improve parsing of emphasis
**strong** and *em* and **strong** and *em*
2013-12-24 23:40:12 +02:00
68484504ca separate compiling of link / image
there are 2 types of input that produce link / image
2013-12-24 16:05:13 +02:00
4fecd91f7d span elements should get parsed on a first-come, first-served basis 2013-12-24 03:17:23 +02:00
9dae844a6e post-increment operators should not be separated 2013-12-22 02:03:53 +02:00
df6fe915c6 Merge pull request #48 from kaamaru/master
Fix HTML Bug
2013-12-18 10:36:06 -08:00
576b0ea761 Fix HTML Bug
If you add markdown after HTML on the same line, all the remaining markdown will not be parsed.

Demo:
Add "<span></span> *test*" without quotes to the top of a markdown page on it's own line and then parse.
2013-12-18 12:32:49 +00:00
0f027dc04b Merge pull request #47 from malorisdead/link-titles
Add ability to specify link titles on inline and reference links.
2013-12-15 14:56:12 -08:00
179862bd6e improve readme 2013-12-15 03:32:34 +02:00
019a4af2af Added ability to specify link titles to inline and reference links.
Fixed whitespace bug with reference link regex.
Updated tests.
2013-12-14 02:13:53 -05:00
51a08fad85 improve parsing of emphasis 2013-12-07 17:21:36 +02:00
7fb08f334a improve comments 2013-12-07 10:54:05 +02:00
85ad014f74 parse code span after recursive types to resolve #44 2013-12-06 01:43:55 +02:00
22336a1bcc simplify special characters test 2013-12-06 00:45:26 +02:00
f713e380ee add comment for automatic link 2013-12-06 00:29:51 +02:00
5b01915a63 interrupted list items should not add nonexistent empty lines 2013-12-06 00:15:17 +02:00
18d112a614 improve readme 2013-12-03 23:19:50 +02:00
1b9641ad03 improve readme 2013-12-03 22:49:50 +02:00
8baf537c12 resolve #40 2013-12-02 23:26:43 +02:00
05823567bc simplify comments 2013-12-02 23:02:15 +02:00
b7029ab176 improve readme 2013-12-01 00:10:30 +02:00
102a947c7a improve readme 2013-11-23 15:58:58 +02:00
7bb70186c1 simplify test for em strong 2013-11-23 13:35:15 +02:00
3225c66863 ***strong em** inside of em* should produce valid markup 2013-11-23 13:19:06 +02:00
d6dc5ba25b update introduction text to match website 2013-11-23 09:26:44 +02:00
f5451a9eff Merge pull request #37 from hkdobrev/htmlspecialshars-utf8 2013-11-22 13:23:21 -08:00
849a89b121 Use UTF-8 encoding for htmlspecialchars. See #36.
Prior to PHP 5.4.0 the default encoding for `htmlentities()`
and `htmlspecialchars` is "ISO-8859-1". For PHP 5.4+ is "UTF-8".

This ensures always the right encoding is used no matter the PHP version
and the locale settings.
2013-11-22 23:06:20 +02:00
28064a63b3 simplify encoding of special characters 2013-11-22 21:57:21 +02:00
800aac5b56 Merge pull request #36 from josephok/patch-1 2013-11-22 11:21:38 -08:00
b15d40e8a3 Update Parsedown.php
Changes the htmlentities() to htmlspecialchars(). The htmlentities() has some problems encoding non-english words(like Chinese)
2013-11-22 23:05:26 +08:00
ddc5b7e2dd implement URL auto-linking 2013-11-22 00:20:45 +02:00
5a563008aa implement GFM strikethrough 2013-11-21 13:39:00 +02:00
b6f795962f resolve #21 2013-11-21 00:59:30 +02:00
cdb2646063 update readme to match website 2013-11-20 23:10:03 +02:00
e3b8026e39 build should no longer allow failures 2013-11-18 22:39:44 +02:00
d96f668c42 update test case to make it run on PHP 5.2 2013-11-18 22:29:15 +02:00
96bf75bd91 remove goto to provide support for PHP 5.2 2013-11-18 21:42:00 +02:00
54 changed files with 784 additions and 356 deletions

View File

@ -5,7 +5,4 @@ php:
- 5.4
- 5.3
- 5.2
matrix:
allow_failures:
- php: 5.2
- hhvm

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,20 @@
## Parsedown
Parsedown is a Markdown parser for PHP. It is fast, consistent and easy to use.
Better [Markdown](http://en.wikipedia.org/wiki/Markdown) parser for PHP.
[Home](http://parsedown.org) &middot; [Demo](http://parsedown.org/explorer/) &middot; [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)
* [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
### Installation
@ -11,9 +23,9 @@ Include `Parsedown.php` or install [the composer package](https://packagist.org/
### Example
```php
$text = 'Hello **Parsedown**!';
$text = 'Hello *Parsedown*!';
$result = Parsedown::instance()->parse($text);
echo $result; # prints: <p>Hello <strong>Parsedown</strong>!</p>
echo $result; # prints: <p>Hello <em>Parsedown</em>!</p>
```

View File

@ -5,7 +5,7 @@ include 'Parsedown.php';
class Test extends PHPUnit_Framework_TestCase
{
const provider_dir = 'data/';
/**
* @dataProvider provider
*/
@ -15,33 +15,41 @@ class Test extends PHPUnit_Framework_TestCase
$this->assertEquals($expected_markup, $actual_markup);
}
function provider()
{
$provider = array();
$DirectoryIterator = new DirectoryIterator(__DIR__ . '/' . self::provider_dir);
$path = dirname(__FILE__).'/';
$DirectoryIterator = new DirectoryIterator($path . '/' . self::provider_dir);
foreach ($DirectoryIterator as $Item)
{
if ($Item->isFile() and $Item->getExtension() === 'md')
if ($Item->isFile())
{
$filename = $Item->getFilename();
$extension = pathinfo($filename, PATHINFO_EXTENSION);
if ($extension !== 'md')
continue;
$basename = $Item->getBasename('.md');
$markdown = file_get_contents(__DIR__ . '/' . self::provider_dir . $basename . '.md');
$markdown = file_get_contents($path . '/' . self::provider_dir . $basename . '.md');
if (!$markdown)
continue;
$expected_markup = file_get_contents(__DIR__ . '/' . self::provider_dir . $basename . '.html');
$expected_markup = file_get_contents($path . '/' . self::provider_dir . $basename . '.html');
$expected_markup = str_replace("\r\n", "\n", $expected_markup);
$expected_markup = str_replace("\r", "\n", $expected_markup);
$provider [] = array($markdown, $expected_markup);
}
}
return $provider;
}
}
}

View File

@ -4,4 +4,5 @@
<h4>h4</h4>
<h5>h5</h5>
<h6>h6</h6>
<h1>closed h1</h1>
<h1>closed h1</h1>
<p>#</p>

View File

@ -10,4 +10,6 @@
###### h6
# closed h1 #
# closed h1 #
#

View File

@ -1,9 +1,5 @@
<div>content</div>
<hr style="background: #eaa;" />
<p>nested elements:</p>
<div>_content_</div>
<p>sparse:</p>
<div>
parent
<div>
child
</div>
_content_
</div>

View File

@ -1,12 +1,7 @@
<div>content</div>
<div>_content_</div>
<hr style="background: #eaa;" />
nested elements:
sparse:
<div>
parent
<div>
child
</div>
_content_
</div>

View File

@ -0,0 +1,2 @@
<p><em><code>code</code></em> <strong><code>code</code></strong></p>
<p><em><code>code</code><strong><code>code</code></strong><code>code</code></em></p>

View File

@ -0,0 +1,4 @@
_`code`_ __`code`__
*`code`**`code`**`code`*

View File

@ -1,5 +1,8 @@
<p><strong><em>em strong</em></strong></p>
<p><strong><em>one</em> at the start</strong></p>
<p><strong>one at the <em>end</em></strong></p>
<p><strong>one <em>in the</em> middle</strong></p>
<p><strong>one with <em>asterisks</em></strong></p>
<p><strong><em>em strong</em> strong</strong></p>
<p><strong>strong <em>em strong</em></strong></p>
<p><strong>strong <em>em strong</em> strong</strong></p>
<p><strong><em>em strong</em></strong></p>
<p><strong><em>em strong</em> strong</strong></p>
<p><strong>strong <em>em strong</em></strong></p>
<p><strong>strong <em>em strong</em> strong</strong></p>

View File

@ -1,9 +1,15 @@
___em strong___
___one_ at the start__
___em strong_ strong__
__one at the _end___
__strong _em strong___
__one _in the_ middle__
__strong _em strong_ strong__
**one with *asterisks***
***em strong***
***em strong* strong**
**strong *em strong***
**strong *em strong* strong**

1
tests/data/email.html Normal file
View File

@ -0,0 +1 @@
<p>my email is <a href="mailto:me@example.com">me@example.com</a></p>

1
tests/data/email.md Normal file
View File

@ -0,0 +1 @@
my email is <me@example.com>

View File

@ -1,5 +1,8 @@
<p><em>underscore</em>, <em>asterisk</em>, <em>one two</em>, <em>three four</em>, <em>a</em>, <em>b</em></p>
<p><em>multiline
emphasis</em></p>
<p>_ this _ is not an emphasis, neither is _ this_, _this _, or _this*</p>
<p>an empty emphasis __ ** is not an emphasis</p>
<p><strong>strong</strong> and <em>em</em> and <strong>strong</strong> and <em>em</em></p>
<p><em>line
line
line</em></p>
<p>this_is_not_an_emphasis</p>
<p>an empty emphasis __ ** is not an emphasis</p>
<p>*mixed *<em>double and</em> single asterisk** spans</p>

View File

@ -1,8 +1,13 @@
_underscore_, *asterisk*, _one two_, *three four*, _a_, *b*
_multiline
emphasis_
**strong** and *em* and **strong** and *em*
_ this _ is not an emphasis, neither is _ this_, _this _, or _this*
_line
line
line_
an empty emphasis __ ** is not an emphasis
this_is_not_an_emphasis
an empty emphasis __ ** is not an emphasis
*mixed **double and* single asterisk** spans

View File

@ -2,4 +2,5 @@
$message = 'fenced code block';
echo $message;</code></pre>
<pre><code>tilde</code></pre>
<pre><code>tilde</code></pre>
<pre><code class="language-php">echo 'language identifier';</code></pre>

View File

@ -7,4 +7,8 @@ echo $message;
~~~
tilde
~~~
~~~
```php
echo 'language identifier';
```

View File

@ -0,0 +1 @@
<p>&amp; &copy; &#123;</p>

View File

@ -0,0 +1 @@
&amp; &copy; &#123;

View File

@ -1 +1 @@
<p><img alt="Markdown Logo" src="/md.png"></p>
<p><img alt="Markdown Logo" src="/md.png" /></p>

View File

@ -1,3 +1,3 @@
![Markdown Logo][image]
[image]: /md.png
[image]: /md.png

View File

@ -0,0 +1 @@
<p><img alt="alt" src="/md.png" title="title" /></p>

View File

@ -0,0 +1 @@
![alt](/md.png "title")

View File

@ -1,2 +1,3 @@
<p>an <a href="http://example.com">implicit</a> reference link</p>
<p>an <a href="http://example.com">implicit</a> reference link with an empty link definition</p>
<p>an <a href="http://example.com">implicit</a> reference link with an empty link definition</p>
<p>an <a href="http://example.com" title="Example">explicit</a> reference link with a title</p>

View File

@ -2,4 +2,8 @@ an [implicit] reference link
[implicit]: http://example.com
an [implicit][] reference link with an empty link definition
an [implicit][] reference link with an empty link definition
an [explicit][example] reference link with a title
[example]: http://example.com "Example"

View File

@ -1,2 +1,4 @@
<p><a href="http://example.com">link</a></p>
<p><a href="http://example.com"><img alt="MD Logo" src="http://parsedown.org/md.png"></a></p>
<p><a href="http://example.com">link</a> and <a href="/tests/">another link</a></p>
<p><a href="http://example.com"><code>link</code></a></p>
<p><a href="http://example.com"><img alt="MD Logo" src="http://parsedown.org/md.png" /></a></p>
<p><a href="http://example.com"><img alt="MD Logo" src="http://parsedown.org/md.png" /> and text</a></p>

View File

@ -1,3 +1,7 @@
[link](http://example.com)
[link](http://example.com) and [another link](/tests/)
[![MD Logo](http://parsedown.org/md.png)](http://example.com)
[`link`](http://example.com)
[![MD Logo](http://parsedown.org/md.png)](http://example.com)
[![MD Logo](http://parsedown.org/md.png) and text](http://example.com)

View File

@ -0,0 +1 @@
<p><a href="http://example.com" title="Example">single quotes</a> and <a href="http://example.com" title="Example">double quotes</a></p>

View File

@ -0,0 +1 @@
[single quotes](http://example.com 'Example') and [double quotes](http://example.com "Example")

View File

@ -0,0 +1,7 @@
<ul>
<li>
<p>li</p>
<p>line
line</p>
</li>
</ul>

View File

@ -0,0 +1,4 @@
- li
line
line

View File

@ -0,0 +1,10 @@
<div>
_parent_
<div>
_child_
</div>
<pre>
_adopted child_
</pre>
</div>
<p><em>outside</em></p>

View File

@ -0,0 +1,11 @@
<div>
_parent_
<div>
_child_
</div>
<pre>
_adopted child_
</pre>
</div>
_outside_

View File

@ -0,0 +1,12 @@
<p>paragraph</p>
<ul>
<li>li</li>
<li>li</li>
</ul>
<p>paragraph</p>
<ul>
<li>
<p>li</p>
</li>
<li>li</li>
</ul>

View File

@ -0,0 +1,9 @@
paragraph
- li
- li
paragraph
* li
* li

View File

@ -0,0 +1 @@
<p><a href="http://example.com" title="Title">single quotes</a> and <a href="http://example.com" title="Title">double quotes</a></p>

View File

@ -0,0 +1 @@
[single quotes](http://example.com 'Title') and [double quotes](http://example.com "Title")

View File

@ -0,0 +1,4 @@
<hr />
<p>attributes:</p>
<hr style="background: #9bd;" />
<p>...</p>

View File

@ -0,0 +1,7 @@
<hr />
attributes:
<hr style="background: #9bd;" />
...

View File

@ -1,3 +1,4 @@
<p>an <b>important</b> <a href=''>link</a></p>
<p>broken<br/>
line</p>
line</p>
<p><b>inline tag</b> at the beginning</p>

View File

@ -1,4 +1,6 @@
an <b>important</b> <a href=''>link</a>
broken<br/>
line
line
<b>inline tag</b> at the beginning

View File

@ -1,7 +1,6 @@
<p>AT&amp;T has an ampersand in their name</p>
<p>AT&amp;T is another way to write it</p>
<p>this &amp; that</p>
<p>4 &lt; 5 and 6 > 5</p>
<p><a href="http://example.com/autolink?a=1&amp;b=2">http://example.com/autolink?a=1&amp;b=2</a> </p>
<p><a href="http://example.com/autolink?a=1&amp;b=2">http://example.com/autolink?a=1&amp;b=2</a></p>
<p><a href="/script?a=1&amp;b=2">inline link</a></p>
<p><a href="http://example.com/?a=1&amp;b=2">reference link</a></p>

View File

@ -1,12 +1,10 @@
AT&T has an ampersand in their name
AT&T is another way to write it
this & that
4 < 5 and 6 > 5
<http://example.com/autolink?a=1&b=2>
<http://example.com/autolink?a=1&b=2>
[inline link](/script?a=1&b=2)

View File

@ -0,0 +1,3 @@
<p><del>strikethrough</del></p>
<p>here's <del>one</del> followed by <del>another one</del></p>
<p>~~ this ~~ is not one neither is ~this~</p>

View File

@ -0,0 +1,5 @@
~~strikethrough~~
here's ~~one~~ followed by ~~another one~~
~~ this ~~ is not one neither is ~this~

View File

@ -0,0 +1,6 @@
<p><em>em <strong>strong em</strong></em></p>
<p><em><strong>strong em</strong> em</em></p>
<p><em>em <strong>strong em</strong> em</em></p>
<p><em>em <strong>strong em</strong></em></p>
<p><em><strong>strong em</strong> em</em></p>
<p><em>em <strong>strong em</strong> em</em></p>

11
tests/data/strong_em.md Normal file
View File

@ -0,0 +1,11 @@
*em **strong em***
***strong em** em*
*em **strong em** em*
_em __strong em___
___strong em__ em_
_em __strong em__ em_

View File

@ -0,0 +1,6 @@
<pre><code>&lt;?php
$message = 'Hello World!';
echo $message;
echo "following a blank line";</code></pre>

View File

@ -0,0 +1,6 @@
<?php
$message = 'Hello World!';
echo $message;
echo "following a blank line";

View File

@ -3,4 +3,5 @@
<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 an upper case label</p>
<p><a href="http://example.com"><code>link</code></a></p>

View File

@ -13,4 +13,6 @@ one][website] defined on 2 lines
[one][label] with an upper case label
[LABEL]: http://example.com
[LABEL]: http://example.com
[`link`][website]

View File

@ -0,0 +1,2 @@
<p>an autolink <a href="http://example.com">http://example.com</a></p>
<p>inside of brackets [<a href="http://example.com">http://example.com</a>], inside of braces {<a href="http://example.com">http://example.com</a>}, inside of parentheses (<a href="http://example.com">http://example.com</a>)</p>

View File

@ -0,0 +1,3 @@
an autolink http://example.com
inside of brackets [http://example.com], inside of braces {http://example.com}, inside of parentheses (http://example.com)