1
0
mirror of https://github.com/erusev/parsedown.git synced 2025-09-04 20:25:27 +02:00

Compare commits

...

103 Commits
1.5.3 ... 1.6.3

Author SHA1 Message Date
Emanuil Rusev
728952b90a Merge pull request #499 from aidantwoods/fix/hhvm
Fix hhvm build failure
2017-05-14 17:47:48 +03:00
Aidan Woods
c82af01bd6 add sudo false 2017-05-14 14:39:09 +01:00
Emanuil Rusev
593ffd45a3 Merge pull request #406 from adrilo/patch-1
Create .gitattributes
2017-05-10 12:28:53 +03:00
Emanuil Rusev
f76b10aaab update readme 2017-05-04 10:28:55 +03:00
Emanuil Rusev
29ad172261 Merge pull request #496 from aidantwoods/fix/ditch-hhvm-nightly
replace hhvm nightly with nightly
2017-05-01 19:35:36 +03:00
Aidan Woods
924b26e16c replace hhvm nightly with nightly 2017-05-01 03:57:07 +01:00
Emanuil Rusev
4367f89a74 attempt to fix failing builds on 5.3 2017-03-29 19:30:24 +03:00
Emanuil Rusev
1bf24f7334 add kbd to text-level elements 2017-03-29 19:04:15 +03:00
Emanuil Rusev
0a09d5ad45 update tests to reflect changes in phpunit 6.0 2017-03-23 20:21:18 +02:00
Emanuil Rusev
3fc442b078 Merge pull request #484 from hkdobrev/patch-1
Add Symfony demo to "Who uses it?"
2017-03-10 09:41:24 +02:00
Haralan Dobrev
bd0e31a7dd Add Symfony demo to "Who uses it?"
409a65b373/composer.json (L24)
2017-03-10 01:04:53 +02:00
Emanuil Rusev
dfaf03639a Merge pull request #480 from pjona/patch-1
Removed double semicolon
2017-03-08 23:21:03 +02:00
Marek Skiba
7081afe8cb Removed double semicolon 2017-03-02 12:43:51 +01:00
Emanuil Rusev
4b6493999a Merge pull request #465 from aidantwoods/patch-8
Trim surrounding whitespace from URL in inlineLink
2017-01-23 09:45:19 +02:00
Aidan Woods
0172d779d7 Trim surrounding whitespace from URL in inlineLink
Fixes https://github.com/erusev/parsedown-extra/issues/103
2017-01-21 11:06:41 +00:00
Emanuil Rusev
cc5b38ca39 Merge pull request #459 from gene-sis/fix_inlineLink_regex
fix_inlineLink_regex
2017-01-07 16:51:03 +02:00
gene_sis
48351504de adjust two regex pattern within inlineLink() to reduce backtracking
add test with base64 image
2017-01-07 00:45:38 +01:00
Emanuil Rusev
20ff8bbb57 Merge pull request #447 from greut/phpunit-from-extra
Fix include from ParsedownTest
2016-11-02 17:56:58 +02:00
Yoan Blanc
bc21988fe5 Fix include from ParsedownTest
I wasn't able to run all the tests from ParsedownExtra because of it.
2016-11-02 09:27:35 +01:00
Emanuil Rusev
e3c3e28554 Merge pull request #446 from jamesevickery/master
Grammar update
2016-10-25 17:39:55 +03:00
James Vickery
f053740132 Merge pull request #1 from erusev/master
Merge pull request #445 from jamesevickery/master
2016-10-25 15:24:11 +01:00
James Vickery
7a92a31739 Grammar update 2016-10-25 15:22:17 +01:00
Emanuil Rusev
6eca8796fb Merge pull request #445 from jamesevickery/master
Tiny grammar correction
2016-10-25 17:21:57 +03:00
James Vickery
8876c0984e Tiny grammar correction 2016-10-25 15:10:22 +01:00
Emanuil Rusev
cbc4b3f612 Merge pull request #436 from grogy/php71
Added PHP version 7.1 for tests
2016-10-09 13:04:16 +03:00
Václav Makeš
0080ef218e Added PHP version 7.1 for tests 2016-10-09 01:58:47 +02:00
Emanuil Rusev
f4e0234af0 Merge pull request #431 from aidantwoods/patch-2
Allow parsedown to specify list start attribute
2016-10-05 22:55:34 +03:00
Aidan Woods
5c22531e4d Allow parsedown to specify list start attribute
Syntax preferences
2016-10-05 18:27:54 +01:00
Aidan Woods
3978e33fd0 Allow parsedown to specify list start attribute
Remove github added tabs on blank lines
2016-10-05 18:17:12 +01:00
Aidan Woods
a37797ef34 Allow parsedown to specify list start attribute
Syntax preferences to match surrounding code
2016-10-05 18:15:47 +01:00
Aidan Woods
e3cd271f16 Allow parsedown to specify list start attribute
Performance: Swap preg_replace for stristr to obtain list start
2016-10-05 15:44:34 +01:00
Aidan Woods
f0b7b61c16 Allow parsedown to specify list start attribute
Should fix compatibility for PHP 5.3
2016-10-05 11:36:27 +01:00
Aidan Woods
ed41fcf3d6 Allow parsedown to specify list start attribute
oops
2016-10-05 10:06:40 +01:00
Aidan Woods
1fa8fae301 Allow parsedown to specify list start attribute
Readability improvements
2016-10-05 10:03:21 +01:00
Aidan Woods
932bafe0f0 update test for new feature 2016-10-04 17:43:37 +01:00
Aidan Woods
ac857809ab update test for new feature 2016-10-04 17:41:57 +01:00
Aidan Woods
846274996a Update ordered_list.html 2016-10-04 17:28:43 +01:00
Aidan Woods
c145a75848 update test for new feature 2016-10-04 15:44:50 +01:00
Aidan Woods
f17aa0438a Update Parsedown.php 2016-09-27 02:15:35 +01:00
Aidan Woods
38f4027d5e Update Parsedown.php
Okay, so maybe I should have looked 20 lines or so above where I made the edit in the element function – looks like it already supports adding attributes ;p
Have amended the change to blocklist to use the already existing functionality, and have reverted the change that I made to the element function.
2016-09-27 02:15:09 +01:00
Aidan Woods
2cee8d8a2d Update Parsedown.php
Looks like I might need to return the pattern which was used previously
Reverting last change as build still failed

This build will still fail, but I'm hoping it will only fair where the list start value has been inserted
2016-09-27 01:23:22 +01:00
Aidan Woods
cceefafd55 test
Attempting to determine which function change is causing test jobs to fail (in unexpected ways)
2016-09-27 01:16:00 +01:00
Aidan Woods
1c58e9d8d5 oops
oops
2016-09-27 00:57:57 +01:00
Aidan Woods
2772b034c6 Update Parsedown.php
(I think this should work)
Allow parsedown to specify list start attribute (see: https://github.com/erusev/parsedown/issues/100#issuecomment-249729602)
2016-09-27 00:53:51 +01:00
Emanuil Rusev
a2ed1592bd Merge pull request #424 from hkdobrev/patch-1
Update URL to dependants
2016-09-05 16:55:29 +03:00
Haralan Dobrev
3d7a473aa9 Update URL to dependants
As Packagist has now implemented the feature of listing packages
depending on another package, VersionEye is no longer needed for that.

As VersionEye scrapes the Packagist API to do the same, the original
source of information should be preferred.
2016-09-05 16:38:38 +03:00
Emanuil Rusev
f671ae7364 improve readme 2016-07-27 11:05:24 +03:00
Adrien Loison
b5951e08c6 Create .gitattributes
When using this library, all the files related to tests can be ignored. Tests are only useful when working on the library itself.
2016-06-24 14:18:01 +02:00
Emanuil Rusev
490a8f35a4 remove incompatible comment 2016-03-09 19:02:39 +02:00
Emanuil Rusev
94688f21cc improve readme 2016-01-07 19:36:51 +02:00
Emanuil Rusev
693f2c4842 Merge pull request #377 from PhrozenByte/patch-1
Update composer.json requirements
2016-01-07 19:14:25 +02:00
Daniel Rudolf
9545a295cf README.md: Add PHP 5.3+ requirement 2016-01-07 16:48:43 +01:00
Daniel Rudolf
3d649081e5 Update composer.json requirements
Fixes #374
2016-01-06 19:44:53 +01:00
Emanuil Rusev
32de2cedcc Merge pull request #373 from getgrav/master
Simple changes to make Parsedown more pluggable
2015-12-19 16:39:29 +02:00
Andy Miller
e7443a2bd8 Fixed really sorry spelling errors 2015-12-18 20:45:14 -07:00
Andy Miller
10a7ff776c Left as-is 2015-12-17 10:48:21 -07:00
Andy Miller
5ad15b87fa Break out method_exists checks into extendable methods to allow for better pluggability 2015-12-17 10:46:44 -07:00
Andy Miller
b166cab9a2 Make lines protected to allow for extendability 2015-12-17 10:46:04 -07:00
Emanuil Rusev
0f974bf34f improve readme 2015-11-26 15:08:28 +02:00
Emanuil Rusev
3d7cdeec5f remove duplicate item in: who uses it 2015-11-14 09:54:17 +02:00
Emanuil Rusev
97953b193e add Grav CMS to: who uses it 2015-11-14 09:52:07 +02:00
Emanuil Rusev
c046a6b646 Merge pull request #361 from grogy/php7-readme
remove PHP 7.0 from allow failures in tests + improve readme
2015-10-31 20:08:48 +02:00
Emanuil Rusev
f1fefc257c improve readme 2015-10-31 16:13:42 +02:00
Emanuil Rusev
6f23ec8203 improve readme 2015-10-31 15:52:07 +02:00
Emanuil Rusev
23d4544986 improve readme 2015-10-31 15:51:14 +02:00
Emanuil Rusev
5a4ff5d189 improve readme 2015-10-31 15:49:56 +02:00
Václav Makeš
50ac4a06e8 remove PHP 7.0 from allow failures in tests + improve readme 2015-10-31 01:55:49 +01:00
Emanuil Rusev
003af26499 improve readme 2015-10-31 00:45:21 +02:00
Emanuil Rusev
aa63058a88 improve readme 2015-10-31 00:38:24 +02:00
Emanuil Rusev
15d56cdd27 improve readme 2015-10-31 00:37:38 +02:00
Emanuil Rusev
93d77b0b47 improve readme 2015-10-31 00:35:04 +02:00
Emanuil Rusev
c8072a1987 add link to caret.io in readme 2015-10-31 00:33:11 +02:00
Emanuil Rusev
b008290917 Merge pull request #359 from tbreuss/master
Add Herbie CMS to "Who uses it?"
2015-10-25 16:42:45 +02:00
Thomas Breuss
9928c933d8 Add Herbie CMS to "Who uses it?" 2015-10-25 13:33:13 +01:00
Emanuil Rusev
ddb3bd2107 Merge pull request #357 from donatj/master
Parsedown library shouldn't be executable
2015-10-21 01:43:13 +03:00
Jesse Donat
e603c2378d Parsedown library shouldn't be executable 2015-10-20 15:16:36 -05:00
Emanuil Rusev
3ebbd730b5 1.6.0 2015-10-04 19:44:32 +03:00
Emanuil Rusev
1f02626ed6 add link to caret.io 2015-10-01 18:47:31 +03:00
Emanuil Rusev
fa005fdb95 Merge pull request #336 from hkdobrev/late-static-binding
Use late static binding for Parsedown::instance()
2015-08-13 15:16:23 +03:00
Haralan Dobrev
5f40cab3e7 Use late static binding for Parsedown::instance()
Fixes erusev/parsedown-extra#67.

This introduces PHP 5.3+ late static binding to the Singleton pattern in Parsedown.
It will return an instance of Parsedown which inherits the class which
called the `instance()` method rather than always returning instance of just `Parsedown`.

Tests are testing this feature with a test class which inherits from Parsedown.
Notice that calling `instance()` with the default arguments after an instance of
`Parsedown` was already created, it will return it even though it is from just
an instance of `Parsedown`. So this is fixing the problem just partially.
2015-08-13 13:29:33 +03:00
Emanuil Rusev
0e89e3714b 1.5.4 2015-08-03 12:24:05 +03:00
Emanuil Rusev
6b24125f06 clean up 2015-07-31 17:01:14 +03:00
Emanuil Rusev
a589bcac79 resolve #342 2015-07-31 01:33:21 +03:00
Emanuil Rusev
a9dfc97ddc opening code fence doesn't need 2 regex groups 2015-07-16 16:57:13 +03:00
Emanuil Rusev
28774a4359 improve readme 2015-07-15 11:59:59 +03:00
Emanuil Rusev
b8b5711ee5 improve readme 2015-07-15 11:59:40 +03:00
Emanuil Rusev
9579e5f5e5 improve readme 2015-07-15 11:57:45 +03:00
Emanuil Rusev
7f7f6418a3 improve readme 2015-07-15 09:21:38 +03:00
Emanuil Rusev
ee81967749 improve readme 2015-07-03 17:11:23 +03:00
Emanuil Rusev
96e0810188 improve readme 2015-07-03 17:11:08 +03:00
Emanuil Rusev
99bd1bd678 improve readme 2015-07-03 17:06:52 +03:00
Emanuil Rusev
e7a6a06166 improve readme 2015-07-03 16:46:25 +03:00
Emanuil Rusev
eca5bb8262 improve readme 2015-07-03 16:45:22 +03:00
Emanuil Rusev
1312908056 improve readme 2015-07-03 16:42:47 +03:00
Emanuil Rusev
76b7d7babd improve readme 2015-07-03 16:39:51 +03:00
Emanuil Rusev
ba802c1c8d replace the term "incomplete" 2015-07-02 01:01:14 +03:00
Emanuil Rusev
438874e9a8 improve line 2015-06-25 01:05:05 +03:00
Emanuil Rusev
8e26f45dee improve readme 2015-06-15 17:38:15 +03:00
Emanuil Rusev
e2bb3eaaf8 clean up 2015-06-15 12:28:35 +03:00
Emanuil Rusev
0de61e7b3a improve readme 2015-06-15 12:09:57 +03:00
Emanuil Rusev
5b72dceb26 improve readme 2015-06-15 00:10:09 +03:00
Emanuil Rusev
95699c9ba6 improve readme 2015-06-14 22:55:21 +03:00
Emanuil Rusev
790066e9a7 improve readme 2015-05-26 13:37:45 +03:00
11 changed files with 124 additions and 57 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,16 +1,18 @@
language: php
php:
- 7.1
- 7.0
- 5.6
- 5.5
- 5.4
- 5.3
- hhvm
- hhvm-nightly
- nightly
matrix:
fast_finish: true
allow_failures:
- php: 7.0
- php: hhvm-nightly
- php: nightly
sudo: false

100
Parsedown.php Executable file → Normal file
View File

@@ -17,7 +17,7 @@ class Parsedown
{
# ~
const version = '1.5.3';
const version = '1.6.0';
# ~
@@ -107,12 +107,6 @@ class Parsedown
# ~
protected $DefinitionTypes = array(
'[' => array('Reference'),
);
# ~
protected $unmarkedBlockTypes = array(
'Code',
);
@@ -121,7 +115,7 @@ class Parsedown
# Blocks
#
private function lines(array $lines)
protected function lines(array $lines)
{
$CurrentBlock = null;
@@ -169,7 +163,7 @@ class Parsedown
# ~
if (isset($CurrentBlock['incomplete']))
if (isset($CurrentBlock['continuable']))
{
$Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
@@ -181,12 +175,10 @@ class Parsedown
}
else
{
if (method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
if ($this->isBlockCompletable($CurrentBlock['type']))
{
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
}
unset($CurrentBlock['incomplete']);
}
}
@@ -224,9 +216,9 @@ class Parsedown
$Block['identified'] = true;
}
if (method_exists($this, 'block'.$blockType.'Continue'))
if ($this->isBlockContinuable($blockType))
{
$Block['incomplete'] = true;
$Block['continuable'] = true;
}
$CurrentBlock = $Block;
@@ -253,7 +245,7 @@ class Parsedown
# ~
if (isset($CurrentBlock['incomplete']) and method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
{
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
}
@@ -286,6 +278,16 @@ class Parsedown
return $markup;
}
protected function isBlockContinuable($Type)
{
return method_exists($this, 'block'.$Type.'Continue');
}
protected function isBlockCompletable($Type)
{
return method_exists($this, 'block'.$Type.'Complete');
}
#
# Code
@@ -394,16 +396,16 @@ class Parsedown
protected function blockFencedCode($Line)
{
if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
{
$Element = array(
'name' => 'code',
'text' => '',
);
if (isset($matches[2]))
if (isset($matches[1]))
{
$class = 'language-'.$matches[2];
$class = 'language-'.$matches[1];
$Element['attributes'] = array(
'class' => $class,
@@ -446,7 +448,7 @@ class Parsedown
return $Block;
}
$Block['element']['text']['text'] .= "\n".$Line['body'];;
$Block['element']['text']['text'] .= "\n".$Line['body'];
return $Block;
}
@@ -513,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(
'name' => 'li',
'handler' => 'li',
@@ -673,7 +685,9 @@ class Parsedown
if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
{
if (in_array($matches[1], $this->textLevelElements))
$element = strtolower($matches[1]);
if (in_array($element, $this->textLevelElements))
{
return;
}
@@ -987,15 +1001,13 @@ class Parsedown
{
$markup = '';
$unexaminedText = $text;
# $excerpt is based on the first occurrence of a marker
$markerPosition = 0;
while ($excerpt = strpbrk($unexaminedText, $this->inlineMarkerList))
while ($excerpt = strpbrk($text, $this->inlineMarkerList))
{
$marker = $excerpt[0];
$markerPosition += strpos($unexaminedText, $marker);
$markerPosition = strpos($text, $marker);
$Excerpt = array('text' => $excerpt, 'context' => $text);
@@ -1008,34 +1020,42 @@ class Parsedown
continue;
}
if (isset($Inline['position']) and $Inline['position'] > $markerPosition) # position is ahead of marker
# makes sure that the inline belongs to "our" marker
if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
{
continue;
}
# sets a default inline position
if ( ! isset($Inline['position']))
{
$Inline['position'] = $markerPosition;
}
# the text that comes before the inline
$unmarkedText = substr($text, 0, $Inline['position']);
# compile the unmarked text
$markup .= $this->unmarkedText($unmarkedText);
# compile the inline
$markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
# remove the examined text
$text = substr($text, $Inline['position'] + $Inline['extent']);
$unexaminedText = $text;
$markerPosition = 0;
continue 2;
}
$unexaminedText = substr($excerpt, 1);
# the marker does not belong to an inline
$markerPosition ++;
$unmarkedText = substr($text, 0, $markerPosition + 1);
$markup .= $this->unmarkedText($unmarkedText);
$text = substr($text, $markerPosition + 1);
}
$markup .= $this->unmarkedText($text);
@@ -1184,7 +1204,7 @@ class Parsedown
$remainder = $Excerpt['text'];
if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches))
{
$Element['text'] = $matches[1];
@@ -1197,7 +1217,7 @@ class Parsedown
return;
}
if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches))
{
$Element['attributes']['href'] = $matches[1];
@@ -1476,7 +1496,7 @@ class Parsedown
return self::$instances[$name];
}
$instance = new self();
$instance = new static();
self::$instances[$name] = $instance;
@@ -1519,10 +1539,10 @@ class Parsedown
'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
'i', 'rp', 'del', 'code', 'strike', 'marquee',
'q', 'rt', 'ins', 'font', 'strong',
's', 'tt', 'sub', 'mark',
'u', 'xm', 'sup', 'nobr',
'var', 'ruby',
'wbr', 'span',
'time',
's', 'tt', 'kbd', 'mark',
'u', 'xm', 'sub', 'nobr',
'sup', 'ruby',
'var', 'span',
'wbr', 'time',
);
}

View File

@@ -1,3 +1,5 @@
> You might also like [Caret](https://caret.io?ref=parsedown) - our Markdown editor for Mac / Windows / Linux.
## Parsedown
[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown)
@@ -5,15 +7,18 @@
Better Markdown Parser in PHP
[See Demo](http://parsedown.org/demo)
[Demo](http://parsedown.org/demo) |
[Benchmarks](http://parsedown.org/speed) |
[Tests](http://parsedown.org/tests/) |
[Documentation](https://github.com/erusev/parsedown/wiki/)
### Features
* [Fast](http://parsedown.org/speed)
* [Consistent](http://parsedown.org/consistency)
* One File
* Super Fast
* Extensible
* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
* [Tested](http://parsedown.org/tests/) in PHP 5.3, 5.4, 5.5, 5.6 and [HHVM](http://www.hhvm.com/)
* [Extensible](https://github.com/erusev/parsedown/wiki/Writing-Extensions)
* Tested in 5.3 to 7.1 and in HHVM
* [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
### Installation
@@ -28,13 +33,13 @@ $Parsedown = new Parsedown();
echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
```
More examples in [the wiki](https://github.com/erusev/parsedown/wiki/Usage) 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).
### Questions
**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.
@@ -44,8 +49,8 @@ It passes most of the CommonMark tests. Most of the tests that don't pass deal w
**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/), [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?**
Use it, star it, share it and if you feel generous, [donate some money](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2).
Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2).

View File

@@ -12,7 +12,10 @@
"homepage": "http://erusev.com"
}
],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-0": {"Parsedown": ""}
}
}
}

View File

@@ -136,4 +136,24 @@ EXPECTED_HTML;
$parsedownWithNoMarkup->setMarkupEscaped(true);
$this->assertEquals($expectedHtml, $parsedownWithNoMarkup->text($markdownWithHtml));
}
public function testLateStaticBinding()
{
include __DIR__ . '/TestParsedown.php';
$parsedown = Parsedown::instance();
$this->assertInstanceOf('Parsedown', $parsedown);
// After instance is already called on Parsedown
// subsequent calls with the same arguments return the same instance
$sameParsedown = TestParsedown::instance();
$this->assertInstanceOf('Parsedown', $sameParsedown);
$this->assertSame($parsedown, $sameParsedown);
$testParsedown = TestParsedown::instance('test late static binding');
$this->assertInstanceOf('TestParsedown', $testParsedown);
$sameInstanceAgain = TestParsedown::instance('test late static binding');
$this->assertSame($testParsedown, $sameInstanceAgain);
}
}

5
test/TestParsedown.php Normal file
View File

@@ -0,0 +1,5 @@
<?php
class TestParsedown extends Parsedown
{
}

View File

@@ -1,3 +1,7 @@
<?php
include 'Parsedown.php';
include 'Parsedown.php';
if ( ! class_exists('\PHPUnit_Framework_TestCase')) {
class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');
}

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>
</ol>
<p>large numbers:</p>
<ol>
<ol start="123">
<li>one</li>
</ol>