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

Merge branch 'master' into bugfix/CommonMarkTest

Conflicts:
	.travis.yml
	test/CommonMarkTest.php
	test/ParsedownTest.php
	test/bootstrap.php
This commit is contained in:
Daniel Rudolf 2017-11-14 22:09:25 +01:00
commit 03e1a6ac02
No known key found for this signature in database
GPG Key ID: A061F02CD8DE4538
9 changed files with 60 additions and 28 deletions

5
.gitattributes vendored Normal file
View File

@ -0,0 +1,5 @@
# Ignore all tests for archive
/test export-ignore
/.gitattributes export-ignore
/.travis.yml export-ignore
/phpunit.xml.dist export-ignore

View File

@ -1,24 +1,28 @@
language: php language: php
php: dist: trusty
- 7.0 sudo: false
- 5.6
- 5.5
- 5.4
- 5.3
- nightly
- hhvm
- hhvm-nightly
matrix: matrix:
include:
- php: 5.3
dist: precise
- php: 5.4
- php: 5.5
- php: 5.6
- php: 7.0
- php: 7.1
- php: nightly
- php: hhvm
- php: hhvm-nightly
fast_finish: true fast_finish: true
allow_failures: allow_failures:
- php: nightly - php: nightly
- php: hhvm-nightly - php: hhvm-nightly
install: install:
- composer install - composer install --prefer-dist --no-interaction --no-progress
script: script:
- phpunit - vendor/bin/phpunit
- phpunit test/CommonMarkTestWeak.php || true - vendor/bin/phpunit test/CommonMarkTestWeak.php || true

View File

@ -448,7 +448,7 @@ class Parsedown
return $Block; return $Block;
} }
$Block['element']['text']['text'] .= "\n".$Line['body'];; $Block['element']['text']['text'] .= "\n".$Line['body'];
return $Block; return $Block;
} }
@ -515,6 +515,16 @@ class Parsedown
), ),
); );
if($name === 'ol')
{
$listStart = stristr($matches[0], '.', true);
if($listStart !== '1')
{
$Block['element']['attributes'] = array('start' => $listStart);
}
}
$Block['li'] = array( $Block['li'] = array(
'name' => 'li', 'name' => 'li',
'handler' => 'li', 'handler' => 'li',
@ -1194,7 +1204,7 @@ class Parsedown
$remainder = $Excerpt['text']; $remainder = $Excerpt['text'];
if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches)) if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches))
{ {
$Element['text'] = $matches[1]; $Element['text'] = $matches[1];
@ -1207,7 +1217,7 @@ class Parsedown
return; return;
} }
if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches)) if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches))
{ {
$Element['attributes']['href'] = $matches[1]; $Element['attributes']['href'] = $matches[1];
@ -1529,10 +1539,10 @@ class Parsedown
'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
'i', 'rp', 'del', 'code', 'strike', 'marquee', 'i', 'rp', 'del', 'code', 'strike', 'marquee',
'q', 'rt', 'ins', 'font', 'strong', 'q', 'rt', 'ins', 'font', 'strong',
's', 'tt', 'sub', 'mark', 's', 'tt', 'kbd', 'mark',
'u', 'xm', 'sup', 'nobr', 'u', 'xm', 'sub', 'nobr',
'var', 'ruby', 'sup', 'ruby',
'wbr', 'span', 'var', 'span',
'time', 'wbr', 'time',
); );
} }

View File

@ -1,4 +1,4 @@
> You might also like [Caret](http://caret.io?ref=parsedown) - our Markdown editor for Mac / Windows / Linux. > You might also like [Caret](https://caret.io?ref=parsedown) - our Markdown editor for Mac / Windows / Linux.
## Parsedown ## Parsedown
@ -15,10 +15,11 @@ Better Markdown Parser in PHP
### Features ### Features
* One File * One File
* No Dependencies
* Super Fast * Super Fast
* Extensible * Extensible
* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) * [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
* Tested in 5.3 to 7.0 and in HHVM * Tested in 5.3 to 7.1 and in HHVM
* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) * [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
### Installation ### Installation
@ -35,11 +36,15 @@ echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</e
More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI).
### Security
Parsedown does not sanitize the HTML that it generates. When you deal with untrusted content (ex: user commnets) you should also use a HTML sanitizer like [HTML Purifier](http://htmlpurifier.org/).
### Questions ### Questions
**How does Parsedown work?** **How does Parsedown work?**
It tries to read Markdown like a human. First, it looks at the lines. Its interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line start with a `-` then it perhaps belong to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). It tries to read Markdown like a human. First, it looks at the lines. Its interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines).
We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages.
@ -49,7 +54,7 @@ It passes most of the CommonMark tests. Most of the tests that don't pass deal w
**Who uses it?** **Who uses it?**
[phpDocumentor](http://www.phpdoc.org/), [October CMS](http://octobercms.com/), [Bolt CMS](http://bolt.cm/), [Kirby CMS](http://getkirby.com/), [Grav CMS](http://getgrav.org/), [Statamic CMS](http://www.statamic.com/), [Herbie CMS](http://www.getherbie.org/), [RaspberryPi.org](http://www.raspberrypi.org/) and [more](https://www.versioneye.com/php/erusev:parsedown/references). [phpDocumentor](http://www.phpdoc.org/), [October CMS](http://octobercms.com/), [Bolt CMS](http://bolt.cm/), [Kirby CMS](http://getkirby.com/), [Grav CMS](http://getgrav.org/), [Statamic CMS](http://www.statamic.com/), [Herbie CMS](http://www.getherbie.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents).
**How can I help?** **How can I help?**

View File

@ -15,6 +15,9 @@
"require": { "require": {
"php": ">=5.3.0" "php": ">=5.3.0"
}, },
"require-dev": {
"phpunit/phpunit": "^4.8.35"
},
"autoload": { "autoload": {
"psr-0": {"Parsedown": ""} "psr-0": {"Parsedown": ""}
}, },

View File

@ -1,6 +1,8 @@
<?php <?php
class ParsedownTest extends PHPUnit_Framework_TestCase use PHPUnit\Framework\TestCase;
class ParsedownTest extends TestCase
{ {
final function __construct($name = null, array $data = array(), $dataName = '') final function __construct($name = null, array $data = array(), $dataName = '')
{ {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -8,6 +8,6 @@
<li>two</li> <li>two</li>
</ol> </ol>
<p>large numbers:</p> <p>large numbers:</p>
<ol> <ol start="123">
<li>one</li> <li>one</li>
</ol> </ol>