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

Compare commits

..

176 Commits

Author SHA1 Message Date
c26a2ee4bf Bump beta version 2018-06-11 19:15:32 +01:00
ba3b60d6e4 Merge pull request #641 from aidantwoods/fix/api-stability-complete-function-removal
Restore existence of protected API methods
2018-06-08 14:38:42 +01:00
0b1e6b8c86 Restore existence of protected API methods 2018-06-07 19:47:09 +01:00
1f69f7e697 Bump version 2018-05-08 22:46:15 +01:00
c83af0a7d5 Merge pull request #628 from aidantwoods/fix/revert-rawHtml-breaks-insertion
Preserve plain-text in AST to avoid blinding extensions to it
2018-05-08 22:41:44 +01:00
4686daf8c2 Preserve plain-text in AST to avoid blinding extensions to it 2018-05-08 22:32:57 +01:00
c9e7183cfa Merge pull request #627 from aidantwoods/fix/hidden-blocks
Intepret special "hidden" key as an empty element
2018-05-08 22:07:51 +01:00
9eed1104e7 Intepret special "hidden" key as an empty element 2018-05-08 21:54:30 +01:00
fd95703da5 Version bump 2018-05-07 14:26:12 +01:00
8d172a2994 Merge pull request #614 from aidantwoods/enhancement/performance-tweaks
General and performance tweaks
2018-05-07 11:18:21 +01:00
dfab7240a4 Merge pull request #621 from paukenba/master
Tilde characters may be escaped
2018-04-24 17:39:09 +01:00
113c6d2b21 Tilde characters may be escaped 2018-04-23 15:09:30 +02:00
a9764ec90f Remove complex string interpolation expressions 2018-04-14 15:27:06 +01:00
0a842fb5b1 Merge pull request #615 from aidantwoods/fix/old-handler-compat
Compatability fixes
2018-04-12 22:29:29 +01:00
7f4318dbdb PHP 5.3 == 💩 2018-04-12 22:22:53 +01:00
3e70819a20 Readability improvements, thanks @PhrozenByte 2018-04-12 22:16:25 +01:00
2bf7ca41a0 Add compat for extensions using old markup key. 2018-04-12 21:25:50 +01:00
b75fd409ff Must unset text key so that our destination is preferred as content 2018-04-12 21:10:09 +01:00
88a3f31dd7 Rewrite as one statement 2018-04-12 19:33:01 +01:00
726d4ef44a Sanity checks before starting regex engine 2018-04-09 18:09:45 +01:00
450a74fedf More expensive statement last 2018-04-09 18:09:45 +01:00
7e15d99d90 Remove regex from block rule 2018-04-09 18:09:44 +01:00
d2dd736e1b Remove regex from fenced code block
Also remove unused function
2018-04-09 18:09:44 +01:00
e74a5bd7ed In theory PHP stores the length of strings, so looking this up should be quick 2018-04-09 18:09:44 +01:00
b53aa74a72 Use standard library function 2018-04-09 18:09:44 +01:00
3ea08140b6 Remove use of array 2018-04-09 18:09:44 +01:00
c45e41950f Use standard library over while loop 2018-04-09 18:09:44 +01:00
2faba6fef5 Remove unneeded complete function 2018-04-09 18:09:44 +01:00
b42add3762 Make some regexes possesive 2018-04-09 18:09:43 +01:00
107223d3a0 Avoid recomputation 2018-04-09 18:09:43 +01:00
d4f1ac465c String interpolation is slightly faster than concat 2018-04-09 18:09:43 +01:00
d6e306d620 Optimise commonly used regexes to fail fast 2018-04-09 18:09:04 +01:00
dc5cf8770b The AST has high complexity here (and so traversal is hard anyway)
We gain quite a bit of a speed boost by working with text here
since this is a very common function
2018-04-09 18:09:04 +01:00
70f5c02d47 Use non-nestable values as keys for O(1) lookup 2018-04-09 18:09:04 +01:00
90ad738933 General readability 2018-04-09 18:09:04 +01:00
f2327023c1 No need to unset if not set 2018-04-09 18:09:04 +01:00
6f13f97674 Use mutating loop instead of array_map 2018-04-09 18:08:58 +01:00
8091e5586a Merge pull request #612 from aidantwoods/fix/table-columns
Table header should not be allowed to contain new lines
2018-04-09 16:53:07 +01:00
cb33daf0e6 Assert table header does not contain new lines 2018-04-09 16:38:03 +01:00
c440c91af5 Add failing test case 2018-04-09 16:32:36 +01:00
3514881e14 Merge pull request #611 from aidantwoods/enhancement/paragraph-block-semantics
Paragraph block semantics
2018-04-09 16:30:33 +01:00
043c55e4c6 Give paragraph block semantics for overloading 2018-04-09 15:12:17 +01:00
e4cd13350b Remove setLiteralBreaks 2018-04-09 15:11:45 +01:00
ae8067e862 Swap undefined type for type === 'Paragraph' for ease of reading
The way in which we use this assumes that it is a paragraph, for example
appending text into the handler argument — so there is no loss of
generality here, we're simply being explicit.
2018-04-09 14:48:48 +01:00
5353ebb524 Avoid needing two arrays
We only need to collect elements, we can discard finished blocks
2018-04-09 14:48:39 +01:00
39df7d4f8e Swap 'hidden' blocks for empty elements 2018-04-09 14:46:24 +01:00
50f15add44 Merge pull request #610 from aidantwoods/fix/lost-line-breaks
Fix lost line breaks
2018-04-09 14:19:38 +01:00
3f5b0ee781 Count number of interrupts 2018-04-09 14:13:10 +01:00
9a021b2130 Add failing test cases 2018-04-09 14:11:49 +01:00
43d25a74fe Fix function name 2018-04-08 18:40:50 +01:00
1d68e5506c Merge pull request #608 from aidantwoods/fix/recursion
Add seperate depth-first function instead of replacing recursive method
2018-04-08 18:02:17 +01:00
86940be224 Use mutating loop instead of creating new array 2018-04-08 17:49:36 +01:00
cdaf86b039 Add seperate depth-first function instead of replacing recursive method 2018-04-08 17:39:24 +01:00
1d65fb858a Restore file permission to that of 1.7.1 2018-04-08 14:30:23 +01:00
600db7e4de Bump version const to 1.8.0-beta-1 2018-04-08 02:46:30 +01:00
1be2a01de8 Merge pull request #607 from aidantwoods/update/readme-install-instructions
Update readme install instructions
2018-04-07 16:59:49 +01:00
f50ba3d803 Merge pull request #606 from erusev/revert-605-fix/this-php5.3-compat
Replace fix in "Explicitly capture $this for PHP 5.3"
2018-04-06 21:00:52 +01:00
387ef63888 Replace array reduce with foreach loop for PHP 5.3 compat 2018-04-06 20:55:27 +01:00
68be90348c Revert "Explicitly capture $this for PHP 5.3" 2018-04-06 20:50:34 +01:00
48b9f71bdc Merge pull request #605 from aidantwoods/fix/this-php5.3-compat
Explicitly capture $this for PHP 5.3
2018-04-06 20:44:32 +01:00
0039cd00f8 Explicitly capture $this for PHP 5.3 2018-04-06 20:40:25 +01:00
c6b717cc35 Merge pull request #604 from aidantwoods/fix/autobreak
Ensure autobreak false is honoured over empty name
2018-04-06 20:00:32 +01:00
8f3f61883d Merge pull request #603 from aidantwoods/fix/recursion
Apply depth first
2018-04-06 19:57:55 +01:00
4c9ea94d0c Apply depth first to avoid risk of segfault if closure creates subelements 2018-04-06 19:52:25 +01:00
32e69de014 Ensure autobreak false is honoured over empty name 2018-04-06 19:51:27 +01:00
201299ddc2 Merge pull request #602 from aidantwoods/enhancement/text-elements
Split some of `text` into `textElements`
2018-04-06 19:50:24 +01:00
557db7c179 Split some of text into textElements
`process` is no longer needed
2018-04-06 18:11:27 +01:00
0c0ed38290 Don't encourage downloading from master 2018-04-06 16:13:29 +01:00
798bda682e Update README.md
updated installation instructions. fixes #242
2018-04-06 16:09:36 +01:00
9b7b7348b4 Merge pull request #598 from aidantwoods/enhancement/set-literal-breaks
Add literalBreaks support
2018-04-06 15:06:45 +01:00
96581dbe16 Merge pull request #600 from aidantwoods/fix/code-block-closer
Fix fenced code block closer length rules
2018-04-05 18:46:49 +01:00
06b810cd4a Fix fenced code block closer to match CommonMark rules 2018-04-05 16:55:14 +01:00
38ea813b0e Add failing test case 2018-04-05 16:54:35 +01:00
24e48e91c8 Add literalBreaks support
Line breaks will be converted to <br />
2018-04-05 01:01:52 +01:00
e33f1a48c8 Merge pull request #596 from aidantwoods/enhancement/test-on-php72
Test on PHP 7.2
2018-04-02 19:56:02 +01:00
1c8f6bc253 Merge pull request #594 from aidantwoods/enhancement/ast-recursion-helper
Add recursive helper for AST
2018-04-02 19:53:58 +01:00
ed3e967fb6 Update README 2018-04-02 19:52:26 +01:00
3b3d13489b Test on PHP 7.2 2018-04-02 19:51:07 +01:00
498c88c4eb Merge pull request #589 from NathanBaulch/hashtag
Support #hashtag per CommonMark and GFM specs
2018-04-02 17:25:28 +01:00
772c919b05 Fix bug where empty atx headings would not be recognised (CommonMark)
Fixes #595
2018-04-02 17:18:01 +01:00
cf6d23de55 Rename hashtags enabled to strict mode
We can use this to seperate any intentional spec deviations from
spec behaviour so users can pick between compatability and spec
implementations
2018-04-02 17:18:01 +01:00
d0279cdd3b Enable #hashtag support via setting 2018-04-02 17:18:01 +01:00
8a90586218 Support #hashtag per CommonMark and GFM specs 2018-04-02 17:18:00 +01:00
390fa0da1b This is probably faster than duplicating the closure 2018-04-01 17:55:32 +01:00
9026b1abdb Add recursive helper for AST, use this for implementation of calling handler
recursively
2018-04-01 17:10:49 +01:00
68736f8800 Merge pull request #593 from aidantwoods/enhancement/process
Decouple manipulating final AST from `text` method
2018-04-01 16:37:44 +01:00
535110c57e Add process method so extensions may process final AST without
copying implementation of `text`
2018-03-31 23:23:12 +01:00
ce073c9baa Merge pull request #576 from aidantwoods/enhancement/moar-ast
Produce AST prior to render
2018-03-31 23:11:45 +01:00
e4d6c8f911 Add support for recursive handlers 2018-03-31 22:01:38 +01:00
cbe2e74d52 Merge pull request #592 from aidantwoods/fix/html-comment
Fix HTML comment endings
2018-03-30 19:28:40 +01:00
aa90dd481a Match CommonMark spec on HTML comments:
Start condition: line begins with the string `<!--`.
End condition: line contains the string `-->`.
2018-03-30 19:22:50 +01:00
20e592359f Add failing test case 2018-03-30 19:22:13 +01:00
9f1f5de387 Add recursive handle methods to generate entire AST for traversal 2018-03-28 20:59:56 +01:00
40b9da7837 Merge pull request #587 from aidantwoods/fix/ol-interrupt
Fix ordered list interrupt
2018-03-28 15:43:44 +01:00
a9c21447ce Only interrupt paragraph if starting with 1 2018-03-28 15:38:11 +01:00
a3e02c1d0e Add failing test case 2018-03-28 15:37:47 +01:00
40e797031e Old handler compatability layer 2018-03-28 03:42:38 +01:00
448b72a149 Merge pull request #586 from aidantwoods/fix/blockquote-adjacent
Fix merging of adjacent blockquotes
2018-03-28 03:31:36 +01:00
92e426e0e8 Fix merging of adjacent blockquotes 2018-03-28 03:27:09 +01:00
07216480db Change test to comply with CommonMark 2018-03-28 03:26:45 +01:00
caea783006 Add failing test case 2018-03-28 03:24:01 +01:00
d849d64611 Merge pull request #584 from aidantwoods/fix/tables
Permit 1 column tables with less delimiters
2018-03-27 23:18:41 +01:00
00e51ee424 Permit 1 column tables with less delimiters 2018-03-27 23:12:51 +01:00
0550c3eaf9 Merge pull request #583 from aidantwoods/fix/atx-headings
Fix trimming of internal #'s in ATX headers
2018-03-27 22:10:39 +01:00
790aed42ab Fix trimming of internal #'s 2018-03-27 22:04:11 +01:00
1c52cb6b5e Add failing test cases 2018-03-27 22:01:32 +01:00
ae13290221 Merge pull request #574 from aidantwoods/fix/remove-legacy-escaping
Remove legacy escaping
2018-03-27 13:18:30 +01:00
e16162e288 Merge pull request #582 from aidantwoods/fix/formatting
Formatting adjustments
2018-03-27 12:12:01 +01:00
244ea0aaa6 Remove some whitespace 2018-03-27 12:11:00 +01:00
2f291e0b2f Merge pull request #439 from aidantwoods/patch-4
Improve CommonMark mixed-marker list compliance
2018-03-27 11:31:34 +01:00
d2a73f9179 Trim whitespace 2018-03-27 11:23:04 +01:00
f594d4c18b Add more tests for CommonMark compliance 2018-03-27 11:20:04 +01:00
21cdd8a0b3 Merge branch 'master' into patch-4 2018-03-27 11:13:06 +01:00
a52d386250 Merge pull request #579 from aidantwoods/enhancement/gitignore
Add .gitignore for repo specific paths
2018-03-26 19:06:10 +01:00
dd9f4036ee Add .gitignore to export ignore in .gitattribtutes 2018-03-26 18:47:33 +01:00
e7fbbf537b Add repo specific paths to .gitignore 2018-03-26 18:45:34 +01:00
cac63f6fcb Merge pull request #578 from aidantwoods/fix/setext-heading-spaces
Fix setext heading space handling
2018-03-25 23:08:31 +01:00
f71bec00f4 Fix space handling in setext headings 2018-03-25 22:50:42 +01:00
913e04782f Add failing test cases to be fixed 2018-03-25 22:50:16 +01:00
1fa6b038af PHP 5.3 compat 2018-03-25 20:00:31 +01:00
e59fbd736d Remove 'markup' key exception for outputting via AST 2018-03-25 20:00:31 +01:00
8c14c5c239 Use rawHtml to provide conditional escaping for markup 2018-03-25 20:00:30 +01:00
0205a4cbe6 Use rawHtml to provide conditional escaping on special chars 2018-03-25 19:59:11 +01:00
011465bca6 Use rawHtml to provide conditional escaping for specialChars 2018-03-25 19:59:11 +01:00
adcba80502 Implement unmarked text via AST 2018-03-25 19:59:11 +01:00
65d7bc5013 Special casing for elements with no name 2018-03-25 19:59:11 +01:00
1a47e74be1 Quotes are permitted in escaped body 2018-03-25 19:59:05 +01:00
56cc41803a Merge pull request #514 from Daniel-KM/fix/consistency_follow
Added tests for consistency when a markdown follows a markup without blank line
2018-03-25 19:53:21 +01:00
d86d839677 Merge branch 'master' into fix/consistency_follow 2018-03-25 19:37:04 +01:00
d5ded2b935 Decouple handler argument from structure keys 2018-03-21 16:02:57 +00:00
098f24d189 Seperate handler delegation from AST
This also splits 'text' into 'text', 'elements', and
'element' to hopefully better communicate structure
2018-03-21 02:32:01 +00:00
eb55e426b9 Initial refactor to use AST 2018-03-21 02:18:34 +00:00
ced6187ca5 Merge pull request #575 from cebe/patch-3
Added inline example to README
2018-03-20 16:33:53 +00:00
972648ff64 Added inline example to README
see https://github.com/erusev/parsedown/issues/562
2018-03-20 16:56:40 +01:00
77dc0a090a Merge pull request #569 from aidantwoods/feature/unsafe-html
Add unsafeHtml option for extensions to use on trusted input
2018-03-18 21:58:48 +00:00
88dc949890 Refactor based on suggestion by @PhrozenByte 2018-03-18 20:17:12 +00:00
624a08b7eb Update commment 2018-03-15 19:55:33 +00:00
3fc54bc966 Allow extension to "vouch" for raw HTML they produce
Rename "unsafeHtml" to "rawHtml"
2018-03-15 19:46:03 +00:00
ef7ed7b66c Still grab the text if safe mode enabled, but output it escaped 2018-03-15 11:09:55 +00:00
e4c5be026d Further attempt to dissuade this feature's use 2018-03-15 11:00:03 +00:00
e6444bb57e Add unsafeHtml option for extensions to use on trusted input 2018-03-15 10:48:38 +00:00
a3265e7c6f Merge pull request #511 from aidantwoods/feature/null-name-element
Allow element to have no name
2018-03-15 09:41:16 +00:00
aac00ac742 Merge pull request #566 from aidantwoods/fix/email-autolink
Email autolink shouldn't be started by HTML tags
2018-03-10 00:06:59 +00:00
6830c3339f Readability
Thanks @PhrozenByte for the suggestion :)
2018-03-09 17:38:41 +00:00
19f1bb9353 Disable backtracking where the regex doesn't need it 2018-03-09 17:06:14 +00:00
721b885dd3 Fix #565 by validating email as defined in commonmark spec 2018-03-09 17:05:42 +00:00
f70d96479a Add test case for email surrounded by tags 2018-03-09 16:48:32 +00:00
72d30d33bc allow element to have no name 2018-03-01 01:17:32 +00:00
c05ef0c12a Merge branch 'aidantwoods-htmlblocks' into fix/consistency_follow 2017-06-23 00:00:00 +02:00
47e4163a68 Merge branch 'htmlblocks' of https://github.com/aidantwoods/parsedown into aidantwoods-htmlblocks 2017-06-23 00:00:00 +02:00
c05bff047a correct test to match CommonMark specified input for output 2017-06-22 00:03:12 +01:00
6a4afac0d0 remove ability for htmlblock to allow paragraph after if it closes on the same line 2017-06-22 00:02:03 +01:00
129f807e32 Inverted checks of consistency for markdown following markups. 2017-06-22 00:00:00 +02:00
be963a6531 Added tests for consistency when a markdown follows a markup without blank line. 2017-06-19 00:00:00 +02:00
1d0af35f10 update test to result generated by CommonMark reference parser 2017-03-29 18:26:07 +01:00
d7956e3ade blockmarkup ends on interrupt by newline (CommonMark compliance) 2017-03-29 18:25:56 +01:00
67e454e300 Merge pull request #2 from PhrozenByte/aidantwoods/patch-4
Use the list marker width to determine whether a list item is continued
2016-10-14 08:29:11 +01:00
a3836b1853 Handle subsequent list items which aren't indented sufficiently
Subsequent list items which aren't indented sufficiently are treated as part of the original list, see CommonMark spec example [#256](http://spec.commonmark.org/0.26/#example-256).
2016-10-13 20:44:02 +02:00
a9e1163c85 Fix code formatting 2016-10-13 19:52:38 +02:00
7b1529fff0 Use the list marker width to determine whether a list item is continued
This basically represents [list item parsing](http://spec.commonmark.org/0.26/#list-items), rule 1 of the CommonMark specs.
2016-10-13 19:51:32 +02:00
1d61f90bf9 Support list items starting with indented code 2016-10-13 19:47:06 +02:00
4b3b7df710 Support list items starting with a blank line
According to the CommonMark specs ([list items](http://spec.commonmark.org/0.26/#list-items), rule 3), list items starting with a blank line basically behave like as if the \n doesn't exist. Also see example [#241](http://spec.commonmark.org/0.26/#example-241).
2016-10-13 19:46:29 +02:00
30ff5c6e75 Remove unused $placeholder variable 2016-10-13 19:31:35 +02:00
bdf537e9d5 Fix ordered list start argument
See CommonMark spec examples [#226](http://spec.commonmark.org/0.26/#example-226) to #229
2016-10-13 19:30:50 +02:00
81025cd468 Revert "Break less previously passed CommonMarkWeak tests"
This reverts commit 2db3199510.
2016-10-13 19:25:43 +02:00
e691034861 Revert "Prevent failure with data set 77 in CommonMarkWeak"
This reverts commit 0a43799da4.
2016-10-13 19:25:37 +02:00
eb853da92a Revert "Prevent breaking remaining previously compliant CommonMarkWeak tests"
This reverts commit 6973302ca8.
2016-10-13 19:25:30 +02:00
6973302ca8 Prevent breaking remaining previously compliant CommonMarkWeak tests 2016-10-13 15:55:13 +01:00
0a43799da4 Prevent failure with data set 77 in CommonMarkWeak 2016-10-13 14:29:52 +01:00
2db3199510 Break less previously passed CommonMarkWeak tests 2016-10-12 18:10:44 +01:00
8965c7864f More appropriate tests for these changes 2016-10-11 20:55:59 +01:00
d26b33c20f Add ) as an ordered list marker
Also added marker check to ordered list case when deciding to continue the current list
2016-10-11 19:18:43 +01:00
d9679141fa Update test to comply with CommonMark 2016-10-11 13:50:47 +01:00
0bd61a73ed Check that the current line is a list before starting a new one 2016-10-11 13:48:38 +01:00
06c4344a71 Contextual limits on indentation stripping 2016-10-11 13:38:47 +01:00
c4d4a6800d (beginning to) improve commonmark compliance:lists
These changes aren't fit for merge, nor do they work correctly (yet)
2016-10-11 12:05:33 +01:00
48 changed files with 1231 additions and 493 deletions

1
.gitattributes vendored
View File

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

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
composer.lock
vendor/

View File

@ -12,6 +12,7 @@ matrix:
- php: 5.6
- php: 7.0
- php: 7.1
- php: 7.2
- php: nightly
- php: hhvm
- php: hhvm-nightly

File diff suppressed because it is too large Load Diff

View File

@ -19,12 +19,21 @@ Better Markdown Parser in PHP
* Super Fast
* Extensible
* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
* Tested in 5.3 to 7.1 and in HHVM
* Tested in 5.3 to 7.2 and in HHVM
* [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
### Installation
#### Composer
Install the [composer package] by running the following command:
Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown).
composer require erusev/parsedown
#### Manual
1. Download the "Source code" from the [latest release]
2. Include `Parsedown.php`
[composer package]: https://packagist.org/packages/erusev/parsedown "The Parsedown package on packagist.org"
[latest release]: https://github.com/erusev/parsedown/releases/latest "The latest release of Parsedown"
### Example
@ -32,6 +41,8 @@ Include `Parsedown.php` or install [the composer package](https://packagist.org/
$Parsedown = new Parsedown();
echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
// you can also parse inline markdown only
echo $Parsedown->line('Hello _Parsedown_!'); # prints: Hello <em>Parsedown</em>!
```
More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI).

43
test/ParsedownTest.php Normal file → Executable file
View File

@ -1,4 +1,5 @@
<?php
require 'SampleExtensions.php';
use PHPUnit\Framework\TestCase;
@ -12,7 +13,8 @@ class ParsedownTest extends TestCase
parent::__construct($name, $data, $dataName);
}
private $dirs, $Parsedown;
private $dirs;
protected $Parsedown;
/**
* @return array
@ -49,12 +51,47 @@ class ParsedownTest extends TestCase
$expectedMarkup = str_replace("\r", "\n", $expectedMarkup);
$this->Parsedown->setSafeMode(substr($test, 0, 3) === 'xss');
$this->Parsedown->setStrictMode(substr($test, 0, 6) === 'strict');
$actualMarkup = $this->Parsedown->text($markdown);
$this->assertEquals($expectedMarkup, $actualMarkup);
}
function testRawHtml()
{
$markdown = "```php\nfoobar\n```";
$expectedMarkup = '<pre><code class="language-php"><p>foobar</p></code></pre>';
$expectedSafeMarkup = '<pre><code class="language-php">&lt;p&gt;foobar&lt;/p&gt;</code></pre>';
$unsafeExtension = new UnsafeExtension;
$actualMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedMarkup, $actualMarkup);
$unsafeExtension->setSafeMode(true);
$actualSafeMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedSafeMarkup, $actualSafeMarkup);
}
function testTrustDelegatedRawHtml()
{
$markdown = "```php\nfoobar\n```";
$expectedMarkup = '<pre><code class="language-php"><p>foobar</p></code></pre>';
$expectedSafeMarkup = $expectedMarkup;
$unsafeExtension = new TrustDelegatedExtension;
$actualMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedMarkup, $actualMarkup);
$unsafeExtension->setSafeMode(true);
$actualSafeMarkup = $unsafeExtension->text($markdown);
$this->assertEquals($expectedSafeMarkup, $actualSafeMarkup);
}
function data()
{
$data = array();
@ -123,12 +160,12 @@ MARKDOWN_WITH_MARKUP;
<p>&lt;div&gt;<em>content</em>&lt;/div&gt;</p>
<p>sparse:</p>
<p>&lt;div&gt;
&lt;div class=&quot;inner&quot;&gt;
&lt;div class="inner"&gt;
<em>content</em>
&lt;/div&gt;
&lt;/div&gt;</p>
<p>paragraph</p>
<p>&lt;style type=&quot;text/css&quot;&gt;
<p>&lt;style type="text/css"&gt;
p {
color: red;
}

40
test/SampleExtensions.php Normal file
View File

@ -0,0 +1,40 @@
<?php
class UnsafeExtension extends Parsedown
{
protected function blockFencedCodeComplete($Block)
{
$text = $Block['element']['element']['text'];
unset($Block['element']['element']['text']);
// WARNING: There is almost always a better way of doing things!
//
// This example is one of them, unsafe behaviour is NOT needed here.
// Only use this if you trust the input and have no idea what
// the output HTML will look like (e.g. using an external parser).
$Block['element']['element']['rawHtml'] = "<p>$text</p>";
return $Block;
}
}
class TrustDelegatedExtension extends Parsedown
{
protected function blockFencedCodeComplete($Block)
{
$text = $Block['element']['element']['text'];
unset($Block['element']['element']['text']);
// WARNING: There is almost always a better way of doing things!
//
// This behaviour is NOT needed in the demonstrated case.
// Only use this if you are sure that the result being added into
// rawHtml is safe.
// (e.g. using an external parser with escaping capabilities).
$Block['element']['element']['rawHtml'] = "<p>$text</p>";
$Block['element']['element']['allowRawHtmlInSafeMode'] = true;
return $Block;
}
}

View File

@ -6,4 +6,8 @@
<h6>h6</h6>
<p>####### not a heading</p>
<h1>closed h1</h1>
<p>#</p>
<h1></h1>
<h2></h2>
<h1># of levels</h1>
<h1># of levels #</h1>
<h1>heading</h1>

View File

@ -15,3 +15,11 @@
# closed h1 #
#
##
# # of levels
# # of levels # #
#heading

View File

@ -6,3 +6,8 @@ echo $message;</code></pre>
<pre><code>&gt; not a quote
- not a list item
[not a reference]: http://foo.com</code></pre>
<hr />
<pre><code>foo
bar</code></pre>

View File

@ -8,3 +8,10 @@
> not a quote
- not a list item
[not a reference]: http://foo.com
---
foo
bar

View File

@ -1,12 +1,40 @@
<ul>
<li>li
<ul>
<li>li
<ul>
<li>li<ul>
<li>li<ul>
<li>li</li>
<li>li</li>
</ul></li>
<li>li</li>
</ul></li>
<li>li</li>
</ul>
</li>
<li>li</li>
</ul>
</li>
<li>li</li>
</ul>
<hr />
<ul>
<li>level 1<ul>
<li>level 2<ul>
<li>level 3<ul>
<li>level 4<ul>
<li>level 5</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr />
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
<li>i</li>
</ul>

View File

@ -4,3 +4,23 @@
- li
- li
- li
---
- level 1
- level 2
- level 3
- level 4
- level 5
---
- a
- b
- c
- d
- e
- f
- g
- h
- i

View File

@ -1 +1,2 @@
<p>my email is <a href="mailto:me@example.com">me@example.com</a></p>
<p>html tags shouldn't start an email autolink <strong>first.last@example.com</strong></p>

View File

@ -1 +1,3 @@
my email is <me@example.com>
html tags shouldn't start an email autolink <strong>first.last@example.com</strong>

View File

@ -9,3 +9,10 @@ echo $message;</code></pre>
echo "Hello World";
?&gt;
&lt;a href="http://auraphp.com" &gt;Aura Project&lt;/a&gt;</code></pre>
<pre><code>the following isn't quite enough to close
```
still a fenced code block</code></pre>
<pre><code>foo
bar</code></pre>

View File

@ -23,3 +23,16 @@ echo "Hello World";
?>
<a href="http://auraphp.com" >Aura Project</a>
```
````
the following isn't quite enough to close
```
still a fenced code block
````
```
foo
bar
```

View File

@ -3,3 +3,9 @@
<!--
multiline -->
<p>paragraph</p>
<!-- sss -->abc
<ul>
<li>abcd</li>
<li>bbbb</li>
<li>cccc</li>
</ul>

View File

@ -6,3 +6,9 @@ paragraph
multiline -->
paragraph
<!-- sss -->abc
* abcd
* bbbb
* cccc

View File

@ -1,6 +1,8 @@
<blockquote>
<p>quote
the rest of it</p>
</blockquote>
<blockquote>
<p>another paragraph
the rest of it</p>
</blockquote>

View File

@ -0,0 +1,3 @@
<div>Markup</div>
_No markdown_ without blank line for **strict** compliance with CommonMark.
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,4 @@
<div>Markup</div>
_No markdown_ without blank line for **strict** compliance with CommonMark.
**Markdown**

View File

@ -0,0 +1,4 @@
<div>One markup on
two lines</div>
_No markdown_
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,5 @@
<div>One markup on
two lines</div>
_No markdown_
**Markdown**

View File

@ -0,0 +1,3 @@
<div><p>Stripped markup</p></div>
_No markdown_
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,4 @@
<div><p>Stripped markup</p></div>
_No markdown_
**Markdown**

View File

@ -0,0 +1,3 @@
<div>First markup</div><p>and second markup on the same line.</p>
_No markdown_
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,4 @@
<div>First markup</div><p>and second markup on the same line.</p>
_No markdown_
**Markdown**

View File

@ -0,0 +1,4 @@
<div>First markup</div><p>and partial markup
on two lines.</p>
_No markdown_
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,5 @@
<div>First markup</div><p>and partial markup
on two lines.</p>
_No markdown_
**Markdown**

View File

@ -0,0 +1,4 @@
<div><p>Stripped markup
on two lines</p></div>
_No markdown_
<p><strong>Markdown</strong></p>

View File

@ -0,0 +1,5 @@
<div><p>Stripped markup
on two lines</p></div>
_No markdown_
**Markdown**

View File

@ -11,3 +11,6 @@
<ol start="123">
<li>one</li>
</ol>
<p>foo 1. the following should not start a list
100.<br />
200. </p>

View File

@ -9,3 +9,7 @@ repeating numbers:
large numbers:
123. one
foo 1. the following should not start a list
100.
200.

View File

@ -1,12 +1,18 @@
<hr>
paragraph
<hr/>
paragraph
<hr />
paragraph
<hr class="foo" id="bar" />
paragraph
<hr class="foo" id="bar"/>
paragraph
<hr class="foo" id="bar" >
paragraph

View File

@ -0,0 +1,12 @@
<h1>trailing space</h1>
<h2>trailing space</h2>
<h1>leading and trailing space</h1>
<h2>leading and trailing space</h2>
<h1>1 leading space</h1>
<h2>1 leading space</h2>
<h1>3 leading spaces</h1>
<h2>3 leading spaces</h2>
<p>too many leading spaces
==</p>
<p>too many leading spaces
--</p>

View File

@ -0,0 +1,29 @@
trailing space
==
trailing space
--
leading and trailing space
==
leading and trailing space
--
1 leading space
==
1 leading space
--
3 leading spaces
==
3 leading spaces
--
too many leading spaces
==
too many leading spaces
--

View File

@ -9,3 +9,18 @@
<blockquote>
<p>quote</p>
</blockquote>
<hr />
<blockquote>
<blockquote>
<blockquote>
<p>Info 1 text</p>
</blockquote>
</blockquote>
</blockquote>
<blockquote>
<blockquote>
<blockquote>
<p>Info 2 text</p>
</blockquote>
</blockquote>
</blockquote>

View File

@ -5,3 +5,9 @@ indented:
no space after `>`:
>quote
---
>>> Info 1 text
>>> Info 2 text

View File

@ -35,3 +35,41 @@
</tr>
</tbody>
</table>
<hr />
<table>
<thead>
<tr>
<th style="text-align: left;">header 1</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">cell 1.1</td>
</tr>
<tr>
<td style="text-align: left;">cell 2.1</td>
</tr>
</tbody>
</table>
<hr />
<table>
<thead>
<tr>
<th>header 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>cell 1.1</td>
</tr>
<tr>
<td>cell 2.1</td>
</tr>
</tbody>
</table>
<hr />
<p>Not a table, we haven't ended the paragraph:
header 1 | header 2
-------- | --------
cell 1.1 | cell 1.2
cell 2.1 | cell 2.2</p>

View File

@ -9,3 +9,25 @@ header 1 | header 2
:------- | --------
cell 1.1 | cell 1.2
cell 2.1 | cell 2.2
---
header 1
:-------
cell 1.1
cell 2.1
---
header 1
-------|
cell 1.1
cell 2.1
---
Not a table, we haven't ended the paragraph:
header 1 | header 2
-------- | --------
cell 1.1 | cell 1.2
cell 2.1 | cell 2.2

View File

@ -1,8 +1,6 @@
<div>
line 1
line 2
line 3
line 4
<p>line 2
line 3</p>
<p>line 4</p>
</div>

View File

@ -0,0 +1,13 @@
<h1>h1</h1>
<h2>h2</h2>
<h3>h3</h3>
<h4>h4</h4>
<h5>h5</h5>
<h6>h6</h6>
<p>####### not a heading</p>
<p>#not a heading</p>
<h1>closed h1</h1>
<h1></h1>
<h2></h2>
<h1># of levels</h1>
<h1># of levels #</h1>

View File

@ -0,0 +1,25 @@
# h1
## h2
### h3
#### h4
##### h5
###### h6
####### not a heading
#not a heading
# closed h1 #
#
##
# # of levels
# # of levels # #

View File

@ -1,3 +1,4 @@
<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>
<p>escaped ~~this~~</p>

View File

@ -3,3 +3,5 @@
here's ~~one~~ followed by ~~another one~~
~~ this ~~ is not one neither is ~this~
escaped \~\~this\~\~

View File

@ -2,9 +2,21 @@
<li>li</li>
<li>li</li>
</ul>
<p>mixed markers:</p>
<p>mixed unordered markers:</p>
<ul>
<li>li</li>
<li>li</li>
</ul>
<ul>
<li>li</li>
</ul>
<ul>
<li>li</li>
</ul>
<p>mixed ordered markers:</p>
<ol>
<li>starting at 1, list one</li>
<li>number 2, list one</li>
</ol>
<ol start="3">
<li>starting at 3, list two</li>
</ol>

View File

@ -1,8 +1,14 @@
- li
- li
mixed markers:
mixed unordered markers:
* li
+ li
- li
mixed ordered markers:
1. starting at 1, list one
2. number 2, list one
3) starting at 3, list two