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

Compare commits

...

731 Commits

Author SHA1 Message Date
Aidan Woods
7d4c06cb52 Bump version 2019-03-17 17:19:07 +00:00
Aidan Woods
f7b66e6b20 Merge pull request #701 from aidantwoods/fix/spaces-in-class-names-1.8.x-beta
[1.8.x-beta] Fix spaces in class names
2019-03-17 17:10:10 +00:00
Aidan Woods
811bc32726 Fix test platforms 2019-03-17 17:04:25 +00:00
Aidan Woods
8fd5464c46 [1.8.x-beta] Fix spaces in class names 2019-03-17 17:01:52 +00:00
Aidan Woods
c26a2ee4bf Bump beta version 2018-06-11 19:15:32 +01:00
Aidan Woods
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
Aidan Woods
0b1e6b8c86 Restore existence of protected API methods 2018-06-07 19:47:09 +01:00
Aidan Woods
1f69f7e697 Bump version 2018-05-08 22:46:15 +01:00
Aidan Woods
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
Aidan Woods
4686daf8c2 Preserve plain-text in AST to avoid blinding extensions to it 2018-05-08 22:32:57 +01:00
Aidan Woods
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
Aidan Woods
9eed1104e7 Intepret special "hidden" key as an empty element 2018-05-08 21:54:30 +01:00
Aidan Woods
fd95703da5 Version bump 2018-05-07 14:26:12 +01:00
Aidan Woods
8d172a2994 Merge pull request #614 from aidantwoods/enhancement/performance-tweaks
General and performance tweaks
2018-05-07 11:18:21 +01:00
Aidan Woods
dfab7240a4 Merge pull request #621 from paukenba/master
Tilde characters may be escaped
2018-04-24 17:39:09 +01:00
Attila Vachter
113c6d2b21 Tilde characters may be escaped 2018-04-23 15:09:30 +02:00
Aidan Woods
a9764ec90f Remove complex string interpolation expressions 2018-04-14 15:27:06 +01:00
Aidan Woods
0a842fb5b1 Merge pull request #615 from aidantwoods/fix/old-handler-compat
Compatability fixes
2018-04-12 22:29:29 +01:00
Aidan Woods
7f4318dbdb PHP 5.3 == 💩 2018-04-12 22:22:53 +01:00
Aidan Woods
3e70819a20 Readability improvements, thanks @PhrozenByte 2018-04-12 22:16:25 +01:00
Aidan Woods
2bf7ca41a0 Add compat for extensions using old markup key. 2018-04-12 21:25:50 +01:00
Aidan Woods
b75fd409ff Must unset text key so that our destination is preferred as content 2018-04-12 21:10:09 +01:00
Aidan Woods
88a3f31dd7 Rewrite as one statement 2018-04-12 19:33:01 +01:00
Aidan Woods
726d4ef44a Sanity checks before starting regex engine 2018-04-09 18:09:45 +01:00
Aidan Woods
450a74fedf More expensive statement last 2018-04-09 18:09:45 +01:00
Aidan Woods
7e15d99d90 Remove regex from block rule 2018-04-09 18:09:44 +01:00
Aidan Woods
d2dd736e1b Remove regex from fenced code block
Also remove unused function
2018-04-09 18:09:44 +01:00
Aidan Woods
e74a5bd7ed In theory PHP stores the length of strings, so looking this up should be quick 2018-04-09 18:09:44 +01:00
Aidan Woods
b53aa74a72 Use standard library function 2018-04-09 18:09:44 +01:00
Aidan Woods
3ea08140b6 Remove use of array 2018-04-09 18:09:44 +01:00
Aidan Woods
c45e41950f Use standard library over while loop 2018-04-09 18:09:44 +01:00
Aidan Woods
2faba6fef5 Remove unneeded complete function 2018-04-09 18:09:44 +01:00
Aidan Woods
b42add3762 Make some regexes possesive 2018-04-09 18:09:43 +01:00
Aidan Woods
107223d3a0 Avoid recomputation 2018-04-09 18:09:43 +01:00
Aidan Woods
d4f1ac465c String interpolation is slightly faster than concat 2018-04-09 18:09:43 +01:00
Aidan Woods
d6e306d620 Optimise commonly used regexes to fail fast 2018-04-09 18:09:04 +01:00
Aidan Woods
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
Aidan Woods
70f5c02d47 Use non-nestable values as keys for O(1) lookup 2018-04-09 18:09:04 +01:00
Aidan Woods
90ad738933 General readability 2018-04-09 18:09:04 +01:00
Aidan Woods
f2327023c1 No need to unset if not set 2018-04-09 18:09:04 +01:00
Aidan Woods
6f13f97674 Use mutating loop instead of array_map 2018-04-09 18:08:58 +01:00
Aidan Woods
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
Aidan Woods
cb33daf0e6 Assert table header does not contain new lines 2018-04-09 16:38:03 +01:00
Aidan Woods
c440c91af5 Add failing test case 2018-04-09 16:32:36 +01:00
Aidan Woods
3514881e14 Merge pull request #611 from aidantwoods/enhancement/paragraph-block-semantics
Paragraph block semantics
2018-04-09 16:30:33 +01:00
Aidan Woods
043c55e4c6 Give paragraph block semantics for overloading 2018-04-09 15:12:17 +01:00
Aidan Woods
e4cd13350b Remove setLiteralBreaks 2018-04-09 15:11:45 +01:00
Aidan Woods
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
Aidan Woods
5353ebb524 Avoid needing two arrays
We only need to collect elements, we can discard finished blocks
2018-04-09 14:48:39 +01:00
Aidan Woods
39df7d4f8e Swap 'hidden' blocks for empty elements 2018-04-09 14:46:24 +01:00
Aidan Woods
50f15add44 Merge pull request #610 from aidantwoods/fix/lost-line-breaks
Fix lost line breaks
2018-04-09 14:19:38 +01:00
Aidan Woods
3f5b0ee781 Count number of interrupts 2018-04-09 14:13:10 +01:00
Aidan Woods
9a021b2130 Add failing test cases 2018-04-09 14:11:49 +01:00
Aidan Woods
43d25a74fe Fix function name 2018-04-08 18:40:50 +01:00
Aidan Woods
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
Aidan Woods
86940be224 Use mutating loop instead of creating new array 2018-04-08 17:49:36 +01:00
Aidan Woods
cdaf86b039 Add seperate depth-first function instead of replacing recursive method 2018-04-08 17:39:24 +01:00
Aidan Woods
1d65fb858a Restore file permission to that of 1.7.1 2018-04-08 14:30:23 +01:00
Aidan Woods
600db7e4de Bump version const to 1.8.0-beta-1 2018-04-08 02:46:30 +01:00
Aidan Woods
1be2a01de8 Merge pull request #607 from aidantwoods/update/readme-install-instructions
Update readme install instructions
2018-04-07 16:59:49 +01:00
Aidan Woods
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
Aidan Woods
387ef63888 Replace array reduce with foreach loop for PHP 5.3 compat 2018-04-06 20:55:27 +01:00
Aidan Woods
68be90348c Revert "Explicitly capture $this for PHP 5.3" 2018-04-06 20:50:34 +01:00
Aidan Woods
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
Aidan Woods
0039cd00f8 Explicitly capture $this for PHP 5.3 2018-04-06 20:40:25 +01:00
Aidan Woods
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
Aidan Woods
8f3f61883d Merge pull request #603 from aidantwoods/fix/recursion
Apply depth first
2018-04-06 19:57:55 +01:00
Aidan Woods
4c9ea94d0c Apply depth first to avoid risk of segfault if closure creates subelements 2018-04-06 19:52:25 +01:00
Aidan Woods
32e69de014 Ensure autobreak false is honoured over empty name 2018-04-06 19:51:27 +01:00
Aidan Woods
201299ddc2 Merge pull request #602 from aidantwoods/enhancement/text-elements
Split some of `text` into `textElements`
2018-04-06 19:50:24 +01:00
Aidan Woods
557db7c179 Split some of text into textElements
`process` is no longer needed
2018-04-06 18:11:27 +01:00
Aidan Woods
0c0ed38290 Don't encourage downloading from master 2018-04-06 16:13:29 +01:00
Carsten Brandt
798bda682e Update README.md
updated installation instructions. fixes #242
2018-04-06 16:09:36 +01:00
Aidan Woods
9b7b7348b4 Merge pull request #598 from aidantwoods/enhancement/set-literal-breaks
Add literalBreaks support
2018-04-06 15:06:45 +01:00
Aidan Woods
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
Aidan Woods
06b810cd4a Fix fenced code block closer to match CommonMark rules 2018-04-05 16:55:14 +01:00
Aidan Woods
38ea813b0e Add failing test case 2018-04-05 16:54:35 +01:00
Aidan Woods
24e48e91c8 Add literalBreaks support
Line breaks will be converted to <br />
2018-04-05 01:01:52 +01:00
Aidan Woods
e33f1a48c8 Merge pull request #596 from aidantwoods/enhancement/test-on-php72
Test on PHP 7.2
2018-04-02 19:56:02 +01:00
Aidan Woods
1c8f6bc253 Merge pull request #594 from aidantwoods/enhancement/ast-recursion-helper
Add recursive helper for AST
2018-04-02 19:53:58 +01:00
Aidan Woods
ed3e967fb6 Update README 2018-04-02 19:52:26 +01:00
Aidan Woods
3b3d13489b Test on PHP 7.2 2018-04-02 19:51:07 +01:00
Aidan Woods
498c88c4eb Merge pull request #589 from NathanBaulch/hashtag
Support #hashtag per CommonMark and GFM specs
2018-04-02 17:25:28 +01:00
Aidan Woods
772c919b05 Fix bug where empty atx headings would not be recognised (CommonMark)
Fixes #595
2018-04-02 17:18:01 +01:00
Aidan Woods
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
Nathan Baulch
d0279cdd3b Enable #hashtag support via setting 2018-04-02 17:18:01 +01:00
Nathan Baulch
8a90586218 Support #hashtag per CommonMark and GFM specs 2018-04-02 17:18:00 +01:00
Aidan Woods
390fa0da1b This is probably faster than duplicating the closure 2018-04-01 17:55:32 +01:00
Aidan Woods
9026b1abdb Add recursive helper for AST, use this for implementation of calling handler
recursively
2018-04-01 17:10:49 +01:00
Aidan Woods
68736f8800 Merge pull request #593 from aidantwoods/enhancement/process
Decouple manipulating final AST from `text` method
2018-04-01 16:37:44 +01:00
Aidan Woods
535110c57e Add process method so extensions may process final AST without
copying implementation of `text`
2018-03-31 23:23:12 +01:00
Aidan Woods
ce073c9baa Merge pull request #576 from aidantwoods/enhancement/moar-ast
Produce AST prior to render
2018-03-31 23:11:45 +01:00
Aidan Woods
e4d6c8f911 Add support for recursive handlers 2018-03-31 22:01:38 +01:00
Aidan Woods
cbe2e74d52 Merge pull request #592 from aidantwoods/fix/html-comment
Fix HTML comment endings
2018-03-30 19:28:40 +01:00
Aidan Woods
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
Aidan Woods
20e592359f Add failing test case 2018-03-30 19:22:13 +01:00
Aidan Woods
9f1f5de387 Add recursive handle methods to generate entire AST for traversal 2018-03-28 20:59:56 +01:00
Aidan Woods
40b9da7837 Merge pull request #587 from aidantwoods/fix/ol-interrupt
Fix ordered list interrupt
2018-03-28 15:43:44 +01:00
Aidan Woods
a9c21447ce Only interrupt paragraph if starting with 1 2018-03-28 15:38:11 +01:00
Aidan Woods
a3e02c1d0e Add failing test case 2018-03-28 15:37:47 +01:00
Aidan Woods
40e797031e Old handler compatability layer 2018-03-28 03:42:38 +01:00
Aidan Woods
448b72a149 Merge pull request #586 from aidantwoods/fix/blockquote-adjacent
Fix merging of adjacent blockquotes
2018-03-28 03:31:36 +01:00
Aidan Woods
92e426e0e8 Fix merging of adjacent blockquotes 2018-03-28 03:27:09 +01:00
Aidan Woods
07216480db Change test to comply with CommonMark 2018-03-28 03:26:45 +01:00
Aidan Woods
caea783006 Add failing test case 2018-03-28 03:24:01 +01:00
Aidan Woods
d849d64611 Merge pull request #584 from aidantwoods/fix/tables
Permit 1 column tables with less delimiters
2018-03-27 23:18:41 +01:00
Aidan Woods
00e51ee424 Permit 1 column tables with less delimiters 2018-03-27 23:12:51 +01:00
Aidan Woods
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
Aidan Woods
790aed42ab Fix trimming of internal #'s 2018-03-27 22:04:11 +01:00
Aidan Woods
1c52cb6b5e Add failing test cases 2018-03-27 22:01:32 +01:00
Aidan Woods
ae13290221 Merge pull request #574 from aidantwoods/fix/remove-legacy-escaping
Remove legacy escaping
2018-03-27 13:18:30 +01:00
Aidan Woods
e16162e288 Merge pull request #582 from aidantwoods/fix/formatting
Formatting adjustments
2018-03-27 12:12:01 +01:00
Aidan Woods
244ea0aaa6 Remove some whitespace 2018-03-27 12:11:00 +01:00
Aidan Woods
2f291e0b2f Merge pull request #439 from aidantwoods/patch-4
Improve CommonMark mixed-marker list compliance
2018-03-27 11:31:34 +01:00
Aidan Woods
d2a73f9179 Trim whitespace 2018-03-27 11:23:04 +01:00
Aidan Woods
f594d4c18b Add more tests for CommonMark compliance 2018-03-27 11:20:04 +01:00
Aidan Woods
21cdd8a0b3 Merge branch 'master' into patch-4 2018-03-27 11:13:06 +01:00
Aidan Woods
a52d386250 Merge pull request #579 from aidantwoods/enhancement/gitignore
Add .gitignore for repo specific paths
2018-03-26 19:06:10 +01:00
Aidan Woods
dd9f4036ee Add .gitignore to export ignore in .gitattribtutes 2018-03-26 18:47:33 +01:00
Aidan Woods
e7fbbf537b Add repo specific paths to .gitignore 2018-03-26 18:45:34 +01:00
Aidan Woods
cac63f6fcb Merge pull request #578 from aidantwoods/fix/setext-heading-spaces
Fix setext heading space handling
2018-03-25 23:08:31 +01:00
Aidan Woods
f71bec00f4 Fix space handling in setext headings 2018-03-25 22:50:42 +01:00
Aidan Woods
913e04782f Add failing test cases to be fixed 2018-03-25 22:50:16 +01:00
Aidan Woods
1fa6b038af PHP 5.3 compat 2018-03-25 20:00:31 +01:00
Aidan Woods
e59fbd736d Remove 'markup' key exception for outputting via AST 2018-03-25 20:00:31 +01:00
Aidan Woods
8c14c5c239 Use rawHtml to provide conditional escaping for markup 2018-03-25 20:00:30 +01:00
Aidan Woods
0205a4cbe6 Use rawHtml to provide conditional escaping on special chars 2018-03-25 19:59:11 +01:00
Aidan Woods
011465bca6 Use rawHtml to provide conditional escaping for specialChars 2018-03-25 19:59:11 +01:00
Aidan Woods
adcba80502 Implement unmarked text via AST 2018-03-25 19:59:11 +01:00
Aidan Woods
65d7bc5013 Special casing for elements with no name 2018-03-25 19:59:11 +01:00
Aidan Woods
1a47e74be1 Quotes are permitted in escaped body 2018-03-25 19:59:05 +01:00
Aidan Woods
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
Aidan Woods
d86d839677 Merge branch 'master' into fix/consistency_follow 2018-03-25 19:37:04 +01:00
Aidan Woods
d5ded2b935 Decouple handler argument from structure keys 2018-03-21 16:02:57 +00:00
Aidan Woods
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
Aidan Woods
eb55e426b9 Initial refactor to use AST 2018-03-21 02:18:34 +00:00
Aidan Woods
ced6187ca5 Merge pull request #575 from cebe/patch-3
Added inline example to README
2018-03-20 16:33:53 +00:00
Carsten Brandt
972648ff64 Added inline example to README
see https://github.com/erusev/parsedown/issues/562
2018-03-20 16:56:40 +01:00
Aidan Woods
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
Aidan Woods
88dc949890 Refactor based on suggestion by @PhrozenByte 2018-03-18 20:17:12 +00:00
Aidan Woods
624a08b7eb Update commment 2018-03-15 19:55:33 +00:00
Aidan Woods
3fc54bc966 Allow extension to "vouch" for raw HTML they produce
Rename "unsafeHtml" to "rawHtml"
2018-03-15 19:46:03 +00:00
Aidan Woods
ef7ed7b66c Still grab the text if safe mode enabled, but output it escaped 2018-03-15 11:09:55 +00:00
Aidan Woods
e4c5be026d Further attempt to dissuade this feature's use 2018-03-15 11:00:03 +00:00
Aidan Woods
e6444bb57e Add unsafeHtml option for extensions to use on trusted input 2018-03-15 10:48:38 +00:00
Aidan Woods
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
Aidan Woods
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
Aidan Woods
6830c3339f Readability
Thanks @PhrozenByte for the suggestion :)
2018-03-09 17:38:41 +00:00
Aidan Woods
19f1bb9353 Disable backtracking where the regex doesn't need it 2018-03-09 17:06:14 +00:00
Aidan Woods
721b885dd3 Fix #565 by validating email as defined in commonmark spec 2018-03-09 17:05:42 +00:00
Aidan Woods
f70d96479a Add test case for email surrounded by tags 2018-03-09 16:48:32 +00:00
Aidan Woods
92e9c27ba0 Merge pull request #563 from luizbills/master
bump version
2018-03-08 01:11:30 +00:00
Luiz Paulo "Bills
9857334186 bump version 2018-03-07 22:04:55 -03:00
Luiz Paulo "Bills
ae7e8e5067 bump version 2018-03-07 21:51:35 -03:00
Emanuil Rusev
253822057a refactor who uses it section in readme a bit more 2018-03-02 17:46:45 +02:00
Emanuil Rusev
a18bf495ed refactor who uses it section in readme 2018-03-02 17:40:21 +02:00
Emanuil Rusev
e5bf9560d7 add Laravel to who uses it 2018-03-02 17:37:16 +02:00
Aidan Woods
33b51eaefa Fix typo 2018-03-02 01:16:27 +00:00
Aidan Woods
d686a50292 Merge pull request #557 from aidantwoods/documentation/safe-mode
Talk about safe mode in the README
2018-03-01 19:59:44 +00:00
Aidan Woods
f3068df45a Remove extra line breaks 2018-03-01 19:54:58 +00:00
Aidan Woods
9b1f54b9d3 Lets be consistent with hyphenation 2018-03-01 18:45:38 +00:00
Aidan Woods
90439ef882 Rewrite section 2018-03-01 18:44:11 +00:00
Aidan Woods
72d30d33bc allow element to have no name 2018-03-01 01:17:32 +00:00
Aidan Woods
97dd037e6f Merge pull request #561 from PhrozenByte/patch-3
Add mbstring dependency to composer.json
2018-02-28 23:47:01 +00:00
Daniel Rudolf
fa89f0d743 Add mbstring dependency to composer.json 2018-02-28 20:42:25 +01:00
Aidan Woods
d638fd8a25 Merge pull request #560 from PhrozenByte/patch-2
Travis: Issue build error when Parsedown::version isn't up-to-date
2018-02-28 19:09:57 +00:00
Daniel Rudolf
cc53d5ae29 Travis: Issue build error when Parsedown::version isn't up-to-date 2018-02-28 20:04:45 +01:00
Aidan Woods
45f40696f6 Merge pull request #559 from PhrozenByte/patch-1
Update "Who uses it"
2018-02-28 18:07:37 +00:00
Aidan Woods
e8f3d4efc0 Merge pull request #558 from harikt/issue-232
Add test case to make sure issue 232 no longer exists
2018-02-28 18:02:14 +00:00
Daniel Rudolf
096e164756 Update README.md
Sort "Who uses it" alphabetically, add Laravel + Pico
2018-02-28 18:59:34 +01:00
Hari KT
e2f3961f80 Add test case to make sure issue 232 no longer exists 2018-02-28 23:25:38 +05:30
Aidan Woods
e941dcc3f0 Merge pull request #525 from aidantwoods/fix/infostring
Properly support fenced code block infostring
2018-02-28 17:06:25 +00:00
Aidan Woods
c192001a7e Merge pull request #433 from aidantwoods/patch-3
Fix Issue #358 – preventing double nested links
2018-02-28 17:05:58 +00:00
Aidan Woods
48a053fe29 Merge pull request #423 from PhrozenByte/bugfix/CommonMarkTest
Fix CommonMark test
2018-02-28 17:05:24 +00:00
Aidan Woods
5057e505d8 Merge pull request #475 from aidantwoods/loose-lists
Loose lists
2018-02-28 17:05:00 +00:00
Aidan Woods
ad62bf5a6f Talk about safe mode in the README 2018-02-28 17:03:46 +00:00
Emanuil Rusev
6678d59be4 Merge pull request #495 from aidantwoods/anti-xss
Prevent various XSS attacks [rebase and update of #276]
2018-02-28 13:41:37 +02:00
Emanuil Rusev
c999a4b61b improve readme 2018-01-29 20:55:30 +02:00
Emanuil Rusev
e938ab4ffe improve readme 2018-01-29 20:54:40 +02:00
Emanuil Rusev
e69374af0d improve readme 2018-01-29 20:52:27 +02:00
Aidan Woods
722b776684 Test multiple multiline lists 2018-01-29 14:38:19 +01:00
Aidan Woods
7fd92a8fbd update tests 2018-01-29 14:38:19 +01:00
Aidan Woods
0e1043a8d6 consistent li items for loose list 2018-01-29 14:38:19 +01:00
Emanuil Rusev
1196ed9512 Merge pull request #548 from m1guelpf-forks/patch-1
Update license year
2018-01-01 18:48:54 +02:00
Miguel Piedrafita
1244122b84 Update LICENSE.txt 2018-01-01 14:09:31 +01:00
Miguel Piedrafita
d98d60aaf3 Update license year 2017-12-31 22:10:48 +01:00
Emanuil Rusev
296ebf0e60 Merge pull request #429 from pablotheissen/patch-1
Support html tags containing dashes
2017-11-19 11:15:43 +02:00
Emanuil Rusev
a60ba300b1 Merge pull request #540 from jbafford/patch-1
Fix typo in README
2017-11-15 10:31:22 +02:00
John Bafford
089789dfff Fix typo in README 2017-11-14 17:13:31 -05:00
Daniel Rudolf
03e1a6ac02 Merge branch 'master' into bugfix/CommonMarkTest
Conflicts:
	.travis.yml
	test/CommonMarkTest.php
	test/ParsedownTest.php
	test/bootstrap.php
2017-11-14 22:09:25 +01:00
Emanuil Rusev
fbe3fe878f Merge pull request #539 from gabriel-caruso/phpunit
Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase
2017-11-14 22:44:03 +02:00
Gabriel Caruso
09827f542c Rewrite Travis CI 2017-11-14 15:19:24 -02:00
Gabriel Caruso
70ef6f5521 Make Travis CI use installed PHPUnit version, not global one 2017-11-14 13:21:11 -02:00
Gabriel Caruso
691e36b1f2 Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase 2017-11-11 00:56:03 -02:00
Emanuil Rusev
af6affdc2c improve readme 2017-11-06 16:54:00 +02:00
Emanuil Rusev
9cf41f27ab improve readme 2017-10-22 16:01:34 +03:00
Emanuil Rusev
16aadff2ed improve readme 2017-10-22 16:00:43 +03:00
Emanuil Rusev
07c937583d improve readme 2017-10-22 15:57:58 +03:00
Aidan Woods
4404201175 Properly support fenced code block infostring
Reference: http://spec.commonmark.org/0.28/#info-string
2017-08-20 10:28:46 +01:00
Daniel Berthereau
c05ef0c12a Merge branch 'aidantwoods-htmlblocks' into fix/consistency_follow 2017-06-23 00:00:00 +02:00
Daniel Berthereau
47e4163a68 Merge branch 'htmlblocks' of https://github.com/aidantwoods/parsedown into aidantwoods-htmlblocks 2017-06-23 00:00:00 +02:00
Aidan Woods
c05bff047a correct test to match CommonMark specified input for output 2017-06-22 00:03:12 +01:00
Aidan Woods
6a4afac0d0 remove ability for htmlblock to allow paragraph after if it closes on the same line 2017-06-22 00:02:03 +01:00
Daniel Berthereau
129f807e32 Inverted checks of consistency for markdown following markups. 2017-06-22 00:00:00 +02:00
Daniel Berthereau
be963a6531 Added tests for consistency when a markdown follows a markup without blank line. 2017-06-19 00:00:00 +02:00
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
Aidan Woods
67c3efbea0 according to https://tools.ietf.org/html/rfc3986#section-3 the colon is a required part of the syntax, other methods of achieving the colon character (as to browser interpretation) should be taken care of by htmlencoding that is done on all attribute content 2017-05-10 16:57:18 +01:00
Emanuil Rusev
593ffd45a3 Merge pull request #406 from adrilo/patch-1
Create .gitattributes
2017-05-10 12:28:53 +03:00
Aidan Woods
bbb7687f31 safeMode will either apply all sanitisation techniques to an element or none (note that encoding HTML entities is done regardless because it speaks to character context, and that the only attributes/elements we should permit are the ones we actually mean to create) 2017-05-09 19:31:36 +01:00
Aidan Woods
b1e5aebaf6 add single safeMode option that encompasses protection from link destination xss and plain markup based xss into a single on/off switch 2017-05-09 19:22:58 +01:00
Aidan Woods
c63b690a79 remove duplicates 2017-05-09 14:50:15 +01:00
Aidan Woods
226f636360 remove $safe flag 2017-05-07 13:45:59 +01:00
Aidan Woods
2e4afde68d faster check substr at beginning of string 2017-05-06 16:32:51 +01:00
Aidan Woods
dc30cb441c add more protocols to the whitelist 2017-05-05 21:32:27 +01:00
Emanuil Rusev
f76b10aaab update readme 2017-05-04 10:28:55 +03:00
Aidan Woods
054ba3c487 urlencode urls that are potentially unsafe:
this should break urls that attempt to include a protocol, or port (these are absolute URLs and should have a whitelisted protocol for use)
but URLs that are relative, or relative from the site root should be preserved (though characters non essential for the URL structure may be urlencoded)

this approach has significant advantages over attempting to locate something like `javascript:alert(1)` or `javascript&colon;alert(1)` (which are both valid) because browsers have been known to ignore ridiculous characters when encountered (meaning something like `jav\ta\0\0script&colon;alert(1)` would be xss :( ). Instead of trying to chase down a way to interpret a URL to decide whether there is a protocol, this approach ensures that two essential characters needed to achieve a colon are encoded `:` (obviously) and `;` (from `&colon;`). If these characters appear in a relative URL then they are equivalent to their URL encoded form and so this change will be non breaking for that case.
2017-05-03 17:01:27 +01:00
Aidan Woods
4bae1c9834 whitelist regex for good attribute (no
no chars that could form a delimiter allowed
2017-05-03 00:39:01 +01:00
Aidan Woods
aee3963e6b jpeg, not jpg 2017-05-02 19:55:03 +01:00
Aidan Woods
4dc98b635d whitelist changes:
* add gif and jpg as allowed data images
* ensure that user controlled content fall only in the "data section" of the data URI (and does not intersect content-type definition in any way (best to be safe than sorry ;-)))
  "data section" as defined in: https://tools.ietf.org/html/rfc2397#section-3
2017-05-02 19:48:25 +01:00
Aidan Woods
e4bb12329e array_keys is probably faster 2017-05-02 01:32:24 +01:00
Aidan Woods
6d0156d707 dump attributes that contain characters that are impossible for validity, or very unlikely 2017-05-02 00:48:48 +01: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
131ba75851 filter onevent attributes 2017-05-01 15:44:04 +01:00
Aidan Woods
924b26e16c replace hhvm nightly with nightly 2017-05-01 03:57:07 +01:00
Aidan Woods
af04ac92e2 add xss tests 2017-05-01 03:33:49 +01:00
Aidan Woods
6bb66db00f anti-xss
protect all attributes and content from xss via element method
filter special attributes (a href, img src)
expand url whitelist slightly to permit data images and mailto links
2017-05-01 03:25:07 +01:00
naNuke
b3d45c4bb9 Add html escaping to all attributes capable of holding user input. 2017-05-01 02:00:38 +01:00
naNuke
1d4296f34d Customizable whitelist of schemas for safeLinks 2017-05-01 01:58:34 +01:00
naNuke
bf5105cb1a Improve safeLinks with whitelist. 2017-05-01 01:58:34 +01:00
naNuke
1140613fc7 Prevent various XSS attacks 2017-05-01 01:58:34 +01:00
Aidan Woods
1d0af35f10 update test to result generated by CommonMark reference parser 2017-03-29 18:26:07 +01:00
Aidan Woods
d7956e3ade blockmarkup ends on interrupt by newline (CommonMark compliance) 2017-03-29 18:25:56 +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
Aidan Woods
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
Daniel Rudolf
ae0211a84c Travis: Add PHP nightly 2016-10-13 22:17:03 +02:00
Daniel Rudolf
a9f696f7bb Improve CommonMark spec example regex
CommonMark spec example [#170](http://spec.commonmark.org/0.26/#example-170) has a empty HTML result.
2016-10-13 22:16:46 +02:00
Daniel Rudolf
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
Daniel Rudolf
a9e1163c85 Fix code formatting 2016-10-13 19:52:38 +02:00
Daniel Rudolf
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
Daniel Rudolf
1d61f90bf9 Support list items starting with indented code 2016-10-13 19:47:06 +02:00
Daniel Rudolf
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
Daniel Rudolf
30ff5c6e75 Remove unused $placeholder variable 2016-10-13 19:31:35 +02:00
Daniel Rudolf
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
Daniel Rudolf
81025cd468 Revert "Break less previously passed CommonMarkWeak tests"
This reverts commit 2db3199510.
2016-10-13 19:25:43 +02:00
Daniel Rudolf
e691034861 Revert "Prevent failure with data set 77 in CommonMarkWeak"
This reverts commit 0a43799da4.
2016-10-13 19:25:37 +02:00
Daniel Rudolf
eb853da92a Revert "Prevent breaking remaining previously compliant CommonMarkWeak tests"
This reverts commit 6973302ca8.
2016-10-13 19:25:30 +02:00
Aidan Woods
6973302ca8 Prevent breaking remaining previously compliant CommonMarkWeak tests 2016-10-13 15:55:13 +01:00
Aidan Woods
0a43799da4 Prevent failure with data set 77 in CommonMarkWeak 2016-10-13 14:29:52 +01:00
Aidan Woods
2db3199510 Break less previously passed CommonMarkWeak tests 2016-10-12 18:10:44 +01:00
Daniel Rudolf
2423644d72 Move test/CommonMarkTest.php to test/CommonMarkTestStrict.php
Add parameter `$id` to CommonMark tests
2016-10-12 02:02:55 +02:00
Aidan Woods
8965c7864f More appropriate tests for these changes 2016-10-11 20:55:59 +01:00
Aidan Woods
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
Aidan Woods
d9679141fa Update test to comply with CommonMark 2016-10-11 13:50:47 +01:00
Aidan Woods
0bd61a73ed Check that the current line is a list before starting a new one 2016-10-11 13:48:38 +01:00
Aidan Woods
06c4344a71 Contextual limits on indentation stripping 2016-10-11 13:38:47 +01:00
Aidan Woods
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
Daniel Rudolf
be671e72a3 Don't let Travis skip Parsedown's phpunit tests 2016-10-09 14:21:17 +02:00
Daniel Rudolf
f0587d41a9 Add test/CommonMarkTestWeak.php to .travis.yml
Failing tests don't break builds on purpose, Parsedown doesn't fully comply with the CommonMark specs at the moment. We should switch to test/CommonMarkTest.php later, see #423 for details.
2016-10-09 14:17:03 +02: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
Aidan Woods
3aef89b399 Line handler may prevent specified element nesting
Swap `under_scores` for `camelCasing`
2016-10-08 17:54:04 +01: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
543a6c4175 Line handler may prevent specified element nesting
Check if array is empty to shave some performance hits in the case than no non nestables are present.
2016-10-04 18:59:36 +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
a81aedeb10 Line handler may prevent specified element nesting
Removed granularity controls – elements are assumed to be non nestable indefinitely once declared.
2016-10-04 15:27:11 +01:00
Aidan Woods
50952b3243 Line handler may prevent specified element nesting
This commit serves to add comments detailing parts of the new functionality, and to adjust syntax preferences to match that of the surrounding document. The commit title also now reflects the most significant change made.
2016-10-02 18:26:13 +01:00
Aidan Woods
4d3600f273 Extend disallowed assertion depth capabilities
I've built on the functionality of feature 1. in the previous commit to allow non nestables to be asserted indefinitely, or to a specified depth.
2016-10-02 17:37:08 +01:00
Aidan Woods
d6d5f53ff4 Fix Issue #358 – preventing double nested links
1. Add the ability for a parsed element to enforce that the line handler not parse any (immediate) child elements of a specified type.
2. Use 1. to allow parsed Url elements to tell the line handler not to parse any child Links or Urls where they are immediate children.
2016-10-01 15:56:14 +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
pablotheissen
1a44cbd62c Update Parsedown.php
Made parsedown compatible with html-tags containing dashes.
see https://github.com/erusev/parsedown/issues/407#issuecomment-248833563
2016-09-22 12:21:39 +02:00
Daniel Rudolf
73dbe2fd17 Remove PHPUnit bootstrap in favour of composer 2016-09-05 22:04:46 +02:00
Daniel Rudolf
33a23fbfb2 Refactor PHPUnit bootstrap
This allows Parsedown extensions (like Parsedown Extra) to reuse existing Parsedown tests. See erusev/parsedown-extra#96 for details.
2016-09-05 21:10:23 +02: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
Daniel Rudolf
228d5f4754 Improve test/CommonMarkTestWeak.php 2016-09-05 15:31:07 +02:00
Daniel Rudolf
2cacfb8da4 Improve test/CommonMarkTestWeak.php 2016-09-05 15:17:52 +02:00
Daniel Rudolf
d33e736fa3 Add test/CommonMarkTestWeak.php 2016-09-05 14:38:47 +02:00
Daniel Rudolf
3a46a31e09 Fix test/CommonMarkTest.php example regex 2016-09-05 14:37:34 +02:00
Daniel Rudolf
e1bcc1c472 Fix test/CommonMarkTest.php 2016-09-05 04:51:28 +02: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
Emanuil Rusev
b9e5228e92 version 1.5.3 2015-04-29 23:22:24 +03:00
Emanuil Rusev
31c8856f53 Merge pull request #312 from garoevans/patch-1
Fix check against $matches
2015-04-24 08:24:06 +03:00
Emanuil Rusev
d5823ad622 Merge pull request #295 from hkdobrev/nightly
Test on nightly releases of PHP (7.0) and HHVM
2015-04-24 01:44:07 +03:00
Gareth Evans
6736ba9a04 Fix check against $matches
Fixes inline reference links with int 0 as reference

The link [link][0] where [0] is set at the bottom of the md file current breaks and it's truthy value is false.
2015-04-20 16:24:11 +01:00
Emanuil Rusev
468d1e3da8 improve readme 2015-03-18 20:44:57 +02:00
Emanuil Rusev
7aa1d97bba improve readme 2015-03-18 20:43:30 +02:00
Emanuil Rusev
f768f9c63f improve readme 2015-03-18 20:42:44 +02:00
Emanuil Rusev
aa83968534 improve readme 2015-03-18 20:41:23 +02:00
Emanuil Rusev
85eadccc05 Merge pull request #297 from hkdobrev/patch-1
Remove "tested in PHP 5.2"
2015-03-18 20:39:40 +02:00
Haralan Dobrev
c94fa12d67 Remove "tested on PHP 5.2"
It is no longer tested on PHP 5.2 in Travis CI.

See https://github.com/erusev/parsedown/pull/286
2015-03-18 17:15:00 +02:00
Emanuil Rusev
11e02d45fa improve readme 2015-03-18 16:20:28 +02:00
Emanuil Rusev
ecd53f9add improve readme 2015-03-18 16:16:51 +02:00
Emanuil Rusev
844b2f49ea Merge pull request #249 from HelpingHand1/patch-1
Updated readme to display travis-ci.org build test
2015-03-18 16:08:13 +02:00
Haralan Dobrev
b2ad712644 Test on nightly releases of PHP (7.0) and HHVM
See https://github.com/erusev/parsedown/issues/294

See 12bf1c6d05 (commitcomment-10090016)

Nightly releases are allowed to fail since they are not stable and
could fail in unpredictable ways.

New versions of PHP could be added as they are released.
I think they should not be in the allowed to fail part of the matrix then.
2015-03-09 10:14:57 +02:00
Emanuil Rusev
65116c3cb0 Merge pull request #286 from henriquemoody/travis
Remove PHP version 5.2 from Travis builds
2015-02-09 01:04:08 +02:00
Henrique Moody
147003107a Remove PHP version 5.2 from Travis builds 2015-02-08 21:00:50 -02:00
Emanuil Rusev
618b26056c Merge pull request #284 from jstanden/master
Fixes #283
2015-02-04 00:39:05 +02:00
Jeff Standen
b828fe7c8d Fixes #283 2015-02-03 13:58:47 -08:00
Emanuil Rusev
6c9df528aa Merge pull request #280 from kelunik/master
Fixes PHP 7 compatibility
2015-02-02 02:33:38 +02:00
Niklas Keller
cb8cc57742 Fixes #279 2015-02-02 00:58:24 +01:00
Emanuil Rusev
9da19c1108 version 1.5.1 2015-01-24 15:01:47 +02:00
Emanuil Rusev
ffd9d3b407 improve tests 2015-01-24 14:37:40 +02:00
Emanuil Rusev
e94ecf4adc resolve #277 2015-01-24 14:21:55 +02:00
Emanuil Rusev
4d3079b908 resolve #274 2015-01-24 14:03:05 +02:00
Emanuil Rusev
70e7a17380 update readme 2015-01-24 04:54:01 +02:00
Emanuil Rusev
9518c8e384 improve readme 2015-01-24 04:51:13 +02:00
Emanuil Rusev
c581284231 improve readme 2015-01-24 02:33:41 +02:00
Emanuil Rusev
cb1940255a improve readme 2015-01-24 01:31:49 +02:00
Emanuil Rusev
93d0ec9397 improve readme 2015-01-24 01:27:48 +02:00
Emanuil Rusev
9c6e7e880a improve readme 2015-01-24 01:26:59 +02:00
Emanuil Rusev
2d62e29625 improve readme 2015-01-24 01:21:16 +02:00
Emanuil Rusev
595f33871e improve readme 2015-01-24 01:18:49 +02:00
Emanuil Rusev
97e1e0efaa improve readme 2015-01-24 01:15:08 +02:00
Emanuil Rusev
648419467a clean up 2015-01-21 01:32:20 +02:00
Emanuil Rusev
6ddb6b2b33 resolve #90 2015-01-19 17:11:13 +02:00
Emanuil Rusev
0008e69a83 clean up 2015-01-19 17:09:51 +02:00
Emanuil Rusev
c664785485 inline methods should be able to handle unmarked inline elements 2015-01-19 17:05:10 +02:00
Emanuil Rusev
bdf0ef024e setter variables should not be private 2015-01-18 19:38:57 +02:00
Emanuil Rusev
21a3e8790a no need for a separate method for every special character 2015-01-16 03:57:47 +02:00
Emanuil Rusev
e5e8d02934 improve order of methods 2015-01-16 03:18:07 +02:00
Emanuil Rusev
7ff0f97811 improve performance 2015-01-16 02:59:51 +02:00
Emanuil Rusev
596350d1f5 improve names of elements 2015-01-16 02:49:55 +02:00
Emanuil Rusev
2cbd3010e4 url elements should not be restricted to http 2015-01-16 02:31:58 +02:00
Emanuil Rusev
3b4aa6bff7 change the parsing order of tag elements to improve performance 2015-01-16 01:46:43 +02:00
Emanuil Rusev
05a8f16e95 improve CommonMark compliance 2015-01-16 01:44:35 +02:00
Emanuil Rusev
79d924040a improve CommonMark compliance 2015-01-16 01:24:02 +02:00
Emanuil Rusev
b4a8eb3315 resolve #156 2015-01-16 00:04:18 +02:00
Emanuil Rusev
4383cce85b resolve #143 2015-01-15 22:31:31 +02:00
Emanuil Rusev
ada39109e4 resolve #189 2015-01-15 22:04:02 +02:00
Emanuil Rusev
a06cdfb814 improve fix for #184 2015-01-15 21:32:18 +02:00
Emanuil Rusev
6bee326c92 resolve #184 2015-01-15 21:10:09 +02:00
Emanuil Rusev
3fe867d294 update readme 2015-01-15 18:28:11 +02:00
Emanuil Rusev
f08d017bcb resolve #196 2015-01-15 02:45:45 +02:00
Emanuil Rusev
e61a6114b0 resolve #175 2015-01-15 02:37:20 +02:00
Emanuil Rusev
9ed72ccd09 resolve #126 2015-01-15 02:24:39 +02:00
Emanuil Rusev
09e1184d9f resolve #265 2015-01-15 00:56:12 +02:00
Emanuil Rusev
2de60a9a8b improve readme 2015-01-13 15:28:18 +02:00
Emanuil Rusev
73a75299f5 improve readme 2015-01-13 15:18:35 +02:00
Emanuil Rusev
0d28808392 void markup blocks be marked 2015-01-12 23:24:13 +02:00
Emanuil Rusev
78960cf792 improve formatting 2015-01-12 18:53:24 +02:00
Emanuil Rusev
8f2e9c7cf6 definitions are blocks
in the old implementation it wasn’t possible to have multiline
definitions
2015-01-12 18:52:17 +02:00
Emanuil Rusev
3eb6d349f0 "src" and "alt" attributes should come first 2015-01-12 02:58:08 +02:00
Emanuil Rusev
859b1b10c1 update tests 2015-01-12 02:57:20 +02:00
Emanuil Rusev
08b01a1a29 blocks should be able to return markup 2015-01-12 02:55:00 +02:00
Emanuil Rusev
1686b2fbff we no longer call inline elements spans 2015-01-12 02:55:00 +02:00
Emanuil Rusev
15a32fcd0e no need to know the structure of markup blocks 2015-01-12 02:55:00 +02:00
Emanuil Rusev
4aca208f96 update readme 2015-01-11 16:23:43 +02:00
Emanuil Rusev
cedf96a64e update readme 2015-01-11 16:04:19 +02:00
Emanuil Rusev
9f58363e4b Merge pull request #260 from rhukster/master
Fix for Parsedown stripping classes on images supported by ParsedownExtra
2015-01-11 14:50:08 +02:00
Emanuil Rusev
6b4a459f97 Merge pull request #261 from naNuke/master
breaksEnabled fix
2015-01-11 14:08:17 +02:00
naNuke
05bf198d26 breaksEnabled fix 2015-01-11 06:12:01 +01:00
Andy Miller
30234a58fa No longer needed in this solution 2015-01-10 19:44:30 -07:00
Andy Miller
03ff22c7df Attempted fix for stripped classes on images with ParsedownExtra - re: https://github.com/erusev/parsedown-extra/issues/32 2015-01-10 19:40:39 -07:00
Emanuil Rusev
098f188552 update readme 2015-01-10 14:53:08 +02:00
Emanuil Rusev
e68a458105 improve consistency 2015-01-10 14:22:54 +02:00
Emanuil Rusev
86a27b48bc update readme 2015-01-10 03:43:48 +02:00
Emanuil Rusev
c45dee6850 update readme 2015-01-10 03:41:29 +02:00
Emanuil Rusev
06135cd75a improve CommonMark compliance 2015-01-10 02:45:51 +02:00
Emanuil Rusev
7d3af6bf83 update commonmark test 2015-01-09 00:08:14 +02:00
Emanuil Rusev
dfacf7a71a add urlsLinked setter 2015-01-08 16:13:55 +02:00
Emanuil Rusev
fd0d8125e7 introduce more structure to parsing of unmarked inlines 2015-01-08 15:19:43 +02:00
Emanuil Rusev
b1be886d65 improve names of protected members 2015-01-05 15:05:18 +02:00
Emanuil Rusev
19bc6a7083 update variable names to match updated member names 2015-01-05 14:22:06 +02:00
Emanuil Rusev
b5efe98e2f improve names of protected members 2015-01-05 14:22:06 +02:00
Emanuil Rusev
5639ef7d69 fix PHPDoc 2015-01-05 14:22:06 +02:00
Emanuil Rusev
d42fcdc423 improve readme 2015-01-05 14:18:36 +02:00
Emanuil Rusev
d29d879ec6 separate parsing of inlines that don't have markers to improve simplicity 2015-01-04 18:37:24 +02:00
Emanuil Rusev
c9b4de3c9d resolve #253 2014-12-21 13:51:16 +02:00
Emanuil Rusev
38cc1ca7e0 resolve #251 2014-12-16 13:58:33 +02:00
Emanuil Rusev
23c4097fde restore support for PHP 5.2 2014-12-15 13:59:37 +02:00
Emanuil Rusev
05e87566a9 Merge branch 'master' of https://github.com/erusev/parsedown 2014-12-15 01:08:15 +02:00
Emanuil Rusev
ac68800717 improve extensibility 2014-12-15 01:07:29 +02:00
Emanuil Rusev
1aade35c5e update test 2014-12-15 00:56:22 +02:00
Emanuil Rusev
361febf7c6 improve CommonMark compliance 2014-12-15 00:52:03 +02:00
HelpingHand1
4b7d7cdef2 updated readme.md per comment by cebe 2014-12-13 13:01:40 -05:00
Emanuil Rusev
715f7572ad improve readme 2014-12-12 02:30:45 +02:00
Emanuil Rusev
907bd11613 improve readme 2014-12-11 15:30:40 +02:00
Emanuil Rusev
56c6169822 improve readme 2014-12-11 14:34:58 +02:00
HelpingHand1
97e667ab30 Updated readme to display travis-ci.org build test 2014-12-10 18:13:48 -05:00
Emanuil Rusev
6d54fda73a improve readme 2014-12-10 20:37:33 +02:00
Emanuil Rusev
3b5e4e23ec improve readme 2014-12-10 20:36:15 +02:00
Emanuil Rusev
85ee06898b resolve #182 2014-12-10 17:19:05 +02:00
Emanuil Rusev
4c24e68b42 Merge remote-tracking branch 'origin/commonmark'
Conflicts:
	Parsedown.php
	phpunit.xml.dist
	test/ParsedownTest.php
2014-12-06 02:50:54 +02:00
Emanuil Rusev
094cb88dac update test 2014-12-02 23:53:19 +02:00
Emanuil Rusev
7ab3c60a77 improve CommonMark compliance 2014-12-02 22:23:43 +02:00
Emanuil Rusev
2438c1a43d improve output readability 2014-11-29 23:53:38 +02:00
Emanuil Rusev
46196c1ac3 markup formatting shouldn't impact results 2014-11-29 22:58:42 +02:00
Emanuil Rusev
aa3d4d6eb7 simplify 2014-11-29 21:39:42 +02:00
Emanuil Rusev
6fb534bc34 improve consistency 2014-11-29 21:34:46 +02:00
Emanuil Rusev
28a202ee9e simplify 2014-11-29 20:18:23 +02:00
Emanuil Rusev
e46be110fb Merge branch 'master' into commonmark 2014-11-29 16:42:04 +02:00
Emanuil Rusev
495e7ac73b resolve #247 2014-11-29 04:29:14 +02:00
Emanuil Rusev
5bc6d90f8b resolve #248 2014-11-28 14:03:12 +02:00
Emanuil Rusev
9816507a75 markup should preserve empty lines 2014-11-19 20:18:56 +02:00
Emanuil Rusev
7000cbc2d2 improve readme 2014-11-12 22:27:29 +02:00
Emanuil Rusev
6df242bc97 improve readme 2014-11-12 03:37:36 +02:00
Emanuil Rusev
f4453fd729 improve readme 2014-11-12 03:36:17 +02:00
Emanuil Rusev
d8011c00ab improve readme 2014-11-09 13:40:39 +02:00
Emanuil Rusev
da5d75e97e resolve #209 2014-10-29 22:29:46 +02:00
Emanuil Rusev
2adb87ef41 Merge pull request #236 from naNuke/escapeComment
Ignore html comments as well with markupEscape option.
2014-10-10 21:11:23 +03:00
naNuke
74926c9831 Add test of escaped html comment. 2014-10-10 20:07:41 +02:00
naNuke
68f3aea036 Ignore html comments as well with markupEscape option. 2014-10-10 19:07:25 +02:00
Emanuil Rusev
f91e4dece3 improve consistency 2014-09-26 13:06:40 +03:00
Emanuil Rusev
c62365adc4 improve extensibility of test case 2014-09-26 02:06:16 +03:00
Emanuil Rusev
bb7a3f41e3 improve readme 2014-09-22 12:01:39 +03:00
Emanuil Rusev
f64c1387f8 fix indents 2014-09-22 02:52:45 +03:00
Emanuil Rusev
59c77e706b improve consistency 2014-09-22 02:36:42 +03:00
Emanuil Rusev
e0965ce09b Merge pull request #224 from hkdobrev/no-markup-option
Add `noMarkup` option to escape user HTML
2014-09-21 23:19:23 +03:00
Haralan Dobrev
0a3fde3774 Add noMarkup option to escape user HTML
Resolves #106.

This change introduces a new option - `noMarkup`. You could set it the
`setNoMarkup()` method similar to the `setBreaksEnabled()` one.

Example usage:

``` php
<?php

$parsedown = new Parsedown();
$parsedown->setNoMarkup(true);
$parsedown->text('<div><strong>*Some text*</strong></div>');

// Outputs:
// <p>&lt;div>&lt;strong><em>Some text</em>&lts;/strong>&lt;/div></p>
```
2014-09-20 14:53:19 +03:00
Emanuil Rusev
93f7b26427 imp 2014-09-14 01:14:40 +03:00
Emanuil Rusev
d53c7dbcd9 Merge pull request #221 from hkdobrev/commonmark-renaming
Rename everything to CommonMark
2014-09-14 00:29:04 +03:00
Haralan Dobrev
42222e6b01 Rename everything to CommonMark 2014-09-14 00:11:18 +03:00
Emanuil Rusev
e1cb3b7b23 improve readme 2014-09-13 00:11:56 +03:00
Emanuil Rusev
5bf56ea041 improve readme 2014-09-12 23:52:06 +03:00
Emanuil Rusev
9e98ed04de improve readme 2014-09-11 15:47:59 +03:00
Emanuil Rusev
1c89e6f771 improve readme 2014-09-09 14:30:17 +03:00
Emanuil Rusev
e7d160049e Merge pull request #218 from hkdobrev/common-mark
Rename Standard Markdown to CommonMark
2014-09-06 01:17:15 +03:00
Haralan Dobrev
ce4a29aec5 Rename Standard Markdown to CommonMark
http://blog.codinghorror.com/standard-markdown-is-now-common-markdown/

2d37920c39
2014-09-06 01:12:35 +03:00
Emanuil Rusev
8ecf828777 Merge pull request #217 from hkdobrev/standard-markdown
Standard markdown
2014-09-05 23:38:01 +03:00
Haralan Dobrev
c18ff7f370 Add Docblock and attribution to JS test runner 2014-09-05 23:28:07 +03:00
Haralan Dobrev
6f1fac9823 Add Standard Markdown testsuite.
You could run the Parsedown testsuite only with:
    phpunit --testsuite ParsedownTests

And you could run the Standard Markdown one with:
    phpunit --testsuite StandardMarkdown

See more at http://standardmarkdown.com/
2014-09-05 23:12:33 +03:00
Emanuil Rusev
0220a93010 Merge pull request #208 from apfelbox/max-h6
Limit generated headlines to h6
2014-08-26 09:31:52 +03:00
Jannik Zschiesche
512cc1f065 Limit generated headlines to h6 2014-08-25 21:06:03 +02:00
Emanuil Rusev
9437766539 Merge pull request #200 from hkdobrev/html-attributes-slashes
Allow slashes in HTML attributes
2014-08-14 01:27:48 +03:00
Haralan Dobrev
1127681d56 Allow slashes in HTML attributes 2014-08-13 23:54:52 +03:00
Emanuil Rusev
e33ac1c56e improve readme 2014-06-18 12:27:25 +03:00
Emanuil Rusev
d24439ada0 improve test suite 2014-05-21 23:20:46 +03:00
Emanuil Rusev
1ae100beab improve comment 2014-05-17 17:37:17 +03:00
Emanuil Rusev
82a5a78a36 improve readme 2014-05-17 17:13:00 +03:00
Emanuil Rusev
4ede4340ab improve readme 2014-05-16 03:34:43 +03:00
Emanuil Rusev
170a6bf770 improve readme 2014-05-16 01:27:54 +03:00
Emanuil Rusev
21db821324 improve readme 2014-05-16 01:15:21 +03:00
Emanuil Rusev
b384839d15 update readme 2014-05-14 20:07:52 +03:00
Emanuil Rusev
2da10d277b resolve #105 2014-05-14 13:14:49 +03:00
Emanuil Rusev
532b5ede35 resolve #129 2014-05-14 01:11:05 +03:00
Emanuil Rusev
2bd2f81f4f methods should not have more than one optional parameters 2014-05-12 16:18:00 +03:00
Emanuil Rusev
e318e66de5 improve consistency 2014-05-12 00:41:00 +03:00
Emanuil Rusev
0820d0a607 paragraph doesn't have to use a type 2014-05-12 00:34:47 +03:00
Emanuil Rusev
b8d1cfe91a improve extensibility 2014-05-11 22:31:02 +03:00
Emanuil Rusev
d85a233611 Merge pull request #171 from scarwu/master
identifyEscapeSequence() needs Array check
2014-05-11 20:57:05 +03:00
ScarWu
973d4a866d add array check 2014-05-11 23:36:01 +08:00
Emanuil Rusev
d19c2b6942 improve names 2014-05-10 16:28:00 +03:00
Emanuil Rusev
4dde57451d fix consecutive reference links 2014-05-06 17:05:49 +03:00
Emanuil Rusev
44686c4f1e improve extensibility 2014-05-06 01:12:27 +03:00
Emanuil Rusev
db02ecf259 "reference" is a definition 2014-05-05 14:43:31 +03:00
Emanuil Rusev
aa004d4595 improve code organisation 2014-05-05 14:39:40 +03:00
Emanuil Rusev
1bb65457ed remove unnecessary comments 2014-05-05 13:46:26 +03:00
Emanuil Rusev
0c9a4af8ab improve naming consistency 2014-05-03 18:02:06 +03:00
Emanuil Rusev
cc94c1b584 resolve #167 2014-05-02 18:21:10 +03:00
Emanuil Rusev
e8d8801db4 resolve #135 2014-05-01 02:44:35 +03:00
Emanuil Rusev
521803cdcd resolve #136 2014-05-01 02:42:01 +03:00
Emanuil Rusev
0eb480324c resolve #145 2014-05-01 02:02:14 +03:00
Emanuil Rusev
7c78aff578 resolve #163 2014-05-01 01:47:14 +03:00
Emanuil Rusev
2a5f99547c resolve #162 2014-05-01 01:05:31 +03:00
Emanuil Rusev
e373391e7d resolve #164 2014-05-01 00:29:21 +03:00
Emanuil Rusev
9fa415bcc5 resolve #160 2014-04-28 21:54:38 +03:00
Emanuil Rusev
37416b5f07 simplify folder name 2014-04-28 21:53:34 +03:00
Emanuil Rusev
83d3e3dbbf improve readability 2014-04-28 02:27:05 +03:00
Emanuil Rusev
307a987cb6 improve naming consistency 2014-04-28 02:14:46 +03:00
Emanuil Rusev
eab3cbf255 remove unnecessary nesting 2014-04-28 02:10:18 +03:00
Emanuil Rusev
cf7f32f891 definitions are not blocks 2014-04-27 01:54:52 +03:00
Emanuil Rusev
4150e00dc4 remove composer dependency 2014-04-26 01:09:28 +03:00
Emanuil Rusev
22affa124b travis should be able to run tests in 5.2 2014-04-26 01:06:15 +03:00
Emanuil Rusev
5e95242318 improve code consistency 2014-04-26 01:06:14 +03:00
Emanuil Rusev
504991a04e Merge pull request #158 from hkdobrev/travis-composer
Run composer install in Travis CI before tests
2014-04-25 00:06:06 +03:00
Haralan Dobrev
3d84201d74 Run composer install in Travis CI before tests
Tests are using the Composer autoloader since: cd1c030362

Because of that Composer should have actually dumped the autoloader in the `vendor/` folder,
before the tests are ran.
2014-04-25 00:01:20 +03:00
Emanuil Rusev
4f027386b1 "complete" calls should be more consistent 2014-04-24 23:52:42 +03:00
Emanuil Rusev
cd1c030362 tests should use autoloader 2014-04-24 22:44:30 +03:00
Emanuil Rusev
6081954185 resolve #154 2014-04-18 00:19:22 +03:00
Emanuil Rusev
d841003c65 fenced code blocks should respect indnetation 2014-04-17 23:09:10 +03:00
Emanuil Rusev
f310bbe13f nested calls to lines should not reset reference definitions 2014-04-17 15:07:09 +03:00
Emanuil Rusev
2595f366d9 texts should not share reference definitions 2014-04-17 14:43:45 +03:00
Emanuil Rusev
e5dc563804 replace tabs with spaces 2014-04-17 13:34:17 +03:00
Emanuil Rusev
e0901ee9c7 remove CONTRIBUTING.md 2014-04-17 11:47:53 +03:00
Emanuil Rusev
5316a2e0dd improve readme 2014-04-17 11:22:49 +03:00
Emanuil Rusev
5be4491943 make parser class more extensible 2014-04-17 10:59:35 +03:00
Emanuil Rusev
4e670129c8 simplify test class 2014-04-17 10:46:07 +03:00
Emanuil Rusev
159c3cede6 move deprecated methods to the bottom of the class 2014-04-17 01:11:30 +03:00
Emanuil Rusev
c10bde0174 common rules should be in a global .gitignore 2014-03-24 23:08:52 +02:00
Emanuil Rusev
24d872383c resolve #140 2014-03-19 00:58:26 +02:00
Emanuil Rusev
7ef45894a7 Merge pull request #128 from wkpark/fixup_table
resolve #125 using strpos()
2014-02-28 14:05:10 +02:00
Won-Kyu Park
9bf64d2e31 resolve #125 using strpos() 2014-02-27 23:58:24 +09:00
Emanuil Rusev
886c620440 Merge pull request #122 from wkpark/marker_index
use $closestMarkerIndex
2014-02-27 14:14:14 +02:00
Won-Kyu Park
e156c418d6 fixup regression due to commit 59907ff7 "simplify em/strong routine"
use $closestMarkerIndex correctly
2014-02-26 14:14:56 +09:00
Emanuil Rusev
1734f6fc85 Merge pull request #124 from hkdobrev/psr-2-bc
Add set_breaks_enabled() as an alias for BC
2014-02-25 00:48:28 +02:00
Haralan Dobrev
d8650cd77c Add set_breaks_enabled() as an alias for BC
Backwards-compatibility is kept with versions before PSR-2 naming.

See http://git.io/SsTarw
2014-02-25 00:43:09 +02:00
Emanuil Rusev
3fa9d62572 psr-2 names 2014-02-24 01:38:58 +02:00
Emanuil Rusev
4f851205a7 simplify content types 2014-02-24 00:55:34 +02:00
Emanuil Rusev
0985c2ef29 fix [0] reference labels 2014-02-23 23:43:18 +02:00
Emanuil Rusev
9fd9262f16 implement tables 2014-02-23 18:55:34 +02:00
Emanuil Rusev
a6756fd4fa resolve #117 2014-02-22 12:35:54 +02:00
Emanuil Rusev
1243fcf3e0 simplify example 2014-02-21 02:49:59 +02:00
Emanuil Rusev
1e8d917f7a replace synopsis with a more appropriate word 2014-02-21 02:26:23 +02:00
Emanuil Rusev
324eaf7c15 move synopsis to the top 2014-02-21 02:23:17 +02:00
Emanuil Rusev
f972f7f15d arrange methods 2014-02-21 02:22:31 +02:00
Emanuil Rusev
688b761d32 remove obsolete variables 2014-02-21 02:02:36 +02:00
Emanuil Rusev
b8bd12f565 parser should be less dependent on compiler 2014-02-21 01:54:23 +02:00
Emanuil Rusev
7a20a9fb60 Merge pull request #114 from wkpark/fixup_reference_label
fixup internal reference labling to make code more readable
2014-02-20 13:41:18 +02:00
Won-Kyu Park
6fed312d3c fixup internal reference labling to make code more readable 2014-02-19 13:30:46 +09:00
Emanuil Rusev
d0784d1006 Merge pull request #110 from wkpark/hr_heading
support HTML hr and headings
2014-02-17 21:29:57 +02:00
Won-Kyu Park
446fead459 simple html cases 2014-02-17 23:33:56 +09:00
Won-Kyu Park
ccbdfabaff support HR and headings as block markups 2014-02-17 23:31:08 +09:00
Emanuil Rusev
bc30ad8e30 Merge pull request #98 from hkdobrev/php-5.6
Run the testsuite on PHP 5.6
2014-02-12 21:45:52 +02:00
Haralan Dobrev
d9f325903a Run the testsuite on PHP 5.6 2014-02-12 19:13:14 +02:00
Emanuil Rusev
d29ff18299 resolve #92 2014-02-06 14:16:14 +02:00
Emanuil Rusev
95e9878fb0 improve tests 2014-02-06 02:37:09 +02:00
Emanuil Rusev
611aed179d simplify reference 2014-02-06 02:36:22 +02:00
Emanuil Rusev
abb88d59fa fix reference 2014-02-06 02:36:11 +02:00
Emanuil Rusev
14ab6d46fe resolve #82 2014-02-06 00:10:18 +02:00
Emanuil Rusev
ebfdace4c6 reference labels should be case insensitive 2014-02-05 14:18:05 +02:00
Emanuil Rusev
ba7f377290 resolve #88, resolve #81 2014-02-05 14:03:43 +02:00
Emanuil Rusev
548a6f7945 resolve #89 2014-02-05 14:03:43 +02:00
Emanuil Rusev
7a4d3c0f18 Merge pull request #85 from cebe/simplify-tests
simplify testing and improved output
2014-02-04 03:46:39 -08:00
Emanuil Rusev
7f68a3a2e1 improve contributing guidelines 2014-02-04 01:49:55 +02:00
Emanuil Rusev
7193e634b2 Merge pull request #84 from wkpark/fix-em-strong
simplify em/strong routine
2014-02-03 05:28:20 -08:00
Carsten Brandt
45c01d4673 simplify testing and improved output 2014-02-03 11:23:54 +01:00
Won-Kyu Park
59907ff757 simplify em/strong routine
retry to search em/strong markers to fix nested em/strong correctly
2014-02-03 16:48:28 +09:00
Emanuil Rusev
6e93b68692 outdented is shorter and probably more accurate 2014-02-02 23:41:58 +02:00
Emanuil Rusev
5a525be070 improve contributing guidelines 2014-02-02 23:23:50 +02:00
Emanuil Rusev
f5f1706e58 improve consistency of list item 2014-02-02 22:27:22 +02:00
Emanuil Rusev
b257d0ecaa add contributing guidelines 2014-02-02 22:14:53 +02:00
Emanuil Rusev
a7510b97e7 dense list items that follow sparse ones should not be rendered as sparse ones 2014-01-31 03:03:52 +02:00
Emanuil Rusev
e9098aebfa improve parsing of list item and code block by measuring line indentation 2014-01-31 02:19:18 +02:00
Emanuil Rusev
72f4a375ef Merge pull request #69 from KaneCohen/master 2014-01-29 15:16:00 -08:00
Kane Cohen
07b738b1c8 Remove one unnecessary /u flag. 2014-01-29 23:05:05 +00:00
Kane Cohen
f7181ee9b6 Remove /u flag from '*' chars. Add /u to urls. 2014-01-29 22:57:29 +00:00
Emanuil Rusev
0ce6caf81e Merge pull request #72 from cebe/code-edge
some edge case tests for the code tag
2014-01-29 14:31:39 -08:00
Carsten Brandt
d3c975d4d8 some edge case tests for the code tag 2014-01-29 15:36:41 +01:00
Kane Cohen
55f360a591 Add unicode support for strong/em regex. 2014-01-29 10:30:21 +00:00
Emanuil Rusev
215ff63594 improve comments 2014-01-29 02:14:59 +02:00
Emanuil Rusev
3d581dcaa9 simplify names of block types 2014-01-27 22:21:58 +02:00
Emanuil Rusev
bbce965a9a read-only fields should be static 2014-01-27 00:58:18 +02:00
Emanuil Rusev
6069fdac81 refactor parsing of html 2014-01-27 00:10:24 +02:00
Emanuil Rusev
0f090e1a6e remove trailing line break 2014-01-27 00:08:55 +02:00
Emanuil Rusev
618ab4e156 improve layout of class members 2014-01-26 19:53:24 +02:00
Emanuil Rusev
7661b7c8f9 simplify comments 2014-01-26 19:14:44 +02:00
Emanuil Rusev
8f6495ce86 ternaries should not do more than assign a value 2014-01-26 19:13:08 +02:00
Emanuil Rusev
250ba80356 expression assignments should be separate 2014-01-26 19:05:24 +02:00
Emanuil Rusev
3ac9b96e57 element » block 2014-01-26 13:47:56 +02:00
Emanuil Rusev
b764deca66 improve comments 2014-01-26 03:36:25 +02:00
Emanuil Rusev
65ef541fda improve comments 2014-01-25 18:47:44 +02:00
Emanuil Rusev
c7b6d0235d unset brackets should not be separated 2014-01-25 14:53:39 +02:00
Emanuil Rusev
1a2124daae Merge pull request #65 from hkdobrev/comments-imperative
Use imperative tense in comments
2014-01-25 04:53:19 -08:00
Haralan Dobrev
bf6c9a6db2 Use imperative tense in comments 2014-01-24 01:47:44 +02:00
Emanuil Rusev
0494c6b274 improve comments 2014-01-24 01:28:03 +02:00
Emanuil Rusev
3e0c010c1f improve comments 2014-01-23 23:48:38 +02:00
Emanuil Rusev
3a5eecc23d replace logical operators with conditionals to improve readability 2014-01-23 22:46:49 +02:00
Emanuil Rusev
c8c5ae9df8 control structures should use braces 2014-01-23 22:34:02 +02:00
Emanuil Rusev
843786c07c improve comments 2014-01-23 22:08:06 +02:00
Emanuil Rusev
0c61f71e3f rtrim » chop 2014-01-23 13:07:15 +02:00
Emanuil Rusev
01a147c574 replace tabs with spaces to improve compatibility with psr-2 2014-01-23 00:57:36 +02:00
Emanuil Rusev
f0fbdaa6ca backtick within code span 2014-01-22 21:28:29 +02:00
Emanuil Rusev
e20c0a29bd nested elements should render on a new line 2014-01-22 21:28:29 +02:00
Emanuil Rusev
712dd23d30 simplify parsing of list 2014-01-22 21:28:29 +02:00
Emanuil Rusev
68f2871996 resolve #3 2014-01-22 21:28:29 +02:00
Emanuil Rusev
17e7e33847 name image title test 2014-01-22 21:28:29 +02:00
Emanuil Rusev
7cb9646d98 simplify compiling of links 2014-01-22 21:28:29 +02:00
Emanuil Rusev
325bdd9ff6 improve readme 2014-01-21 23:15:02 +02:00
Emanuil Rusev
2a0700abda resolve #61 2014-01-20 22:19:23 +02:00
Emanuil Rusev
4e83d79d76 setters should know nothing 2014-01-20 09:26:25 +02:00
Emanuil Rusev
354842fd6e simplify compiling 2014-01-19 23:34:20 +02:00
Emanuil Rusev
2b73e94c6c simplify parsing of escaped characters 2014-01-19 22:49:43 +02:00
Emanuil Rusev
0182812d6c remove unnecessary blank lines 2014-01-19 15:37:05 +02:00
Emanuil Rusev
f5dd3455f9 resolve #58 2014-01-19 00:52:07 +02:00
Emanuil Rusev
1017f22cdd fix paragraph list 2014-01-18 16:45:39 +02:00
Emanuil Rusev
88854955d6 take $inline_tags out of the method 2014-01-18 16:45:39 +02:00
Emanuil Rusev
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
Emanuil Rusev
fee5b71998 improve readme 2014-01-17 01:33:20 +02:00
Emanuil Rusev
149b687ee7 improve tests 2014-01-17 01:25:41 +02:00
Emanuil Rusev
98b17e3354 setext heading doesn't have to use regex 2014-01-17 01:23:25 +02:00
Emanuil Rusev
da966b83f1 atx heading doesn't have to use regex 2014-01-17 00:36:11 +02:00
Emanuil Rusev
b9ab495cb4 parse method doesn't have to use regex 2014-01-16 23:43:34 +02:00
Emanuil Rusev
408cb5c21f code block doesn't have to use regex 2014-01-16 23:43:12 +02:00
Emanuil Rusev
5dd0e8cb7b $deindented_line >= ... doesn't make sense 2014-01-16 23:39:56 +02:00
Emanuil Rusev
5521afde31 refactor $element 2014-01-13 23:45:31 +02:00
Emanuil Rusev
4317add3a2 add hhvm to PHP versions to test against 2013-12-28 14:57:25 +02:00
Emanuil Rusev
47d8a1382b implement automatic line breaks as an option 2013-12-26 23:43:25 +02:00
Emanuil Rusev
fd42f2e864 improve tests 2013-12-26 21:55:33 +02:00
Emanuil Rusev
c0b7155572 implement link titles 2013-12-26 21:53:48 +02:00
Emanuil Rusev
be366b63ea improve parsing of emphasis
**strong** and *em* and **strong** and *em*
2013-12-24 23:40:12 +02:00
Emanuil Rusev
68484504ca separate compiling of link / image
there are 2 types of input that produce link / image
2013-12-24 16:05:13 +02:00
Emanuil Rusev
4fecd91f7d span elements should get parsed on a first-come, first-served basis 2013-12-24 03:17:23 +02:00
Emanuil Rusev
9dae844a6e post-increment operators should not be separated 2013-12-22 02:03:53 +02:00
Emanuil Rusev
df6fe915c6 Merge pull request #48 from kaamaru/master
Fix HTML Bug
2013-12-18 10:36:06 -08:00
kaamaru
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
Emanuil Rusev
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
Emanuil Rusev
179862bd6e improve readme 2013-12-15 03:32:34 +02:00
malorisdead
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
Emanuil Rusev
51a08fad85 improve parsing of emphasis 2013-12-07 17:21:36 +02:00
Emanuil Rusev
7fb08f334a improve comments 2013-12-07 10:54:05 +02:00
Emanuil Rusev
85ad014f74 parse code span after recursive types to resolve #44 2013-12-06 01:43:55 +02:00
Emanuil Rusev
22336a1bcc simplify special characters test 2013-12-06 00:45:26 +02:00
Emanuil Rusev
f713e380ee add comment for automatic link 2013-12-06 00:29:51 +02:00
Emanuil Rusev
5b01915a63 interrupted list items should not add nonexistent empty lines 2013-12-06 00:15:17 +02:00
Emanuil Rusev
18d112a614 improve readme 2013-12-03 23:19:50 +02:00
Emanuil Rusev
1b9641ad03 improve readme 2013-12-03 22:49:50 +02:00
Emanuil Rusev
8baf537c12 resolve #40 2013-12-02 23:26:43 +02:00
Emanuil Rusev
05823567bc simplify comments 2013-12-02 23:02:15 +02:00
Emanuil Rusev
b7029ab176 improve readme 2013-12-01 00:10:30 +02:00
Emanuil Rusev
102a947c7a improve readme 2013-11-23 15:58:58 +02:00
Emanuil Rusev
7bb70186c1 simplify test for em strong 2013-11-23 13:35:15 +02:00
Emanuil Rusev
3225c66863 ***strong em** inside of em* should produce valid markup 2013-11-23 13:19:06 +02:00
Emanuil Rusev
d6dc5ba25b update introduction text to match website 2013-11-23 09:26:44 +02:00
Emanuil Rusev
f5451a9eff Merge pull request #37 from hkdobrev/htmlspecialshars-utf8 2013-11-22 13:23:21 -08:00
Haralan Dobrev
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
Emanuil Rusev
28064a63b3 simplify encoding of special characters 2013-11-22 21:57:21 +02:00
Emanuil Rusev
800aac5b56 Merge pull request #36 from josephok/patch-1 2013-11-22 11:21:38 -08:00
josephok
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
Emanuil Rusev
ddc5b7e2dd implement URL auto-linking 2013-11-22 00:20:45 +02:00
Emanuil Rusev
5a563008aa implement GFM strikethrough 2013-11-21 13:39:00 +02:00
Emanuil Rusev
b6f795962f resolve #21 2013-11-21 00:59:30 +02:00
Emanuil Rusev
cdb2646063 update readme to match website 2013-11-20 23:10:03 +02:00
Emanuil Rusev
e3b8026e39 build should no longer allow failures 2013-11-18 22:39:44 +02:00
Emanuil Rusev
d96f668c42 update test case to make it run on PHP 5.2 2013-11-18 22:29:15 +02:00
Emanuil Rusev
96bf75bd91 remove goto to provide support for PHP 5.2 2013-11-18 21:42:00 +02:00
Emanuil Rusev
67b51794d8 implement fenced code block to resolve #2 2013-11-17 16:52:31 +02:00
Emanuil Rusev
a9d6232705 array_shift » unset to simplify code base and improve performance 2013-11-17 13:21:49 +02:00
Emanuil Rusev
b91629ad94 organize evaluation blocks into switch statements to improve code readability 2013-11-17 12:48:01 +02:00
Emanuil Rusev
24d300ea5d $pure_line » $deindented_line 2013-11-17 01:52:40 +02:00
Emanuil Rusev
d54712b989 simplify comments 2013-11-17 01:52:40 +02:00
Emanuil Rusev
6ef043ba7d arrange compile cases 2013-11-17 01:52:40 +02:00
Emanuil Rusev
fe27b70bdb block » markup 2013-11-17 01:52:40 +02:00
Emanuil Rusev
18d3dbf4f6 simplify comments 2013-11-17 01:52:40 +02:00
Emanuil Rusev
4758f58f73 remove double semicolons 2013-11-17 01:52:40 +02:00
Emanuil Rusev
5fa3eb1b2f parse_inline_elements » parse_span_elements to match the specs 2013-11-17 01:52:40 +02:00
Emanuil Rusev
38300323a6 simplify readme 2013-11-16 18:45:13 +02:00
Emanuil Rusev
96609329b9 improve readme 2013-11-16 09:51:01 +02:00
Emanuil Rusev
e497acb6dc escape sequences with double digit codes do not get decoded properly 2013-11-16 02:05:31 +02:00
Emanuil Rusev
30e436ec7d simplify tests 2013-11-16 02:05:31 +02:00
Emanuil Rusev
3972f18881 improve readme 2013-11-14 00:50:00 +02:00
Emanuil Rusev
4fb12be60a improve introduction 2013-11-13 01:52:59 +02:00
Emanuil Rusev
f8b07611d3 homepage » home 2013-11-13 01:47:38 +02:00
Emanuil Rusev
21d7f75f5b improve readme 2013-11-13 01:38:29 +02:00
Emanuil Rusev
a4fb0651d5 resolve #27 2013-11-13 01:07:39 +02:00
Emanuil Rusev
50a58eab16 Merge pull request #29 from hkdobrev/multi-line-emphasis
Allow multi-line emphasis. Fix #28.
2013-11-12 12:46:05 -08:00
Haralan Dobrev
1f347e17eb Allow multi-line emphasis. Fix #28. 2013-11-12 19:22:17 +02:00
Emanuil Rusev
df3db71698 add 5.2 to PHP versions to test against 2013-11-10 11:02:18 +02:00
Emanuil Rusev
a37f5ff31e improve tests 2013-11-10 10:44:52 +02:00
Emanuil Rusev
8e6f4cf7b8 leading spaces should not get trimmed 2013-11-09 22:23:56 +02:00
Emanuil Rusev
ee9a1e92c0 remove goto comment 2013-11-09 00:40:13 +02:00
Emanuil Rusev
689ef24cc5 strip trailing spaces 2013-11-08 23:40:00 +02:00
Emanuil Rusev
4403fe4d96 labels of reference links should be case insensitive 2013-11-08 21:59:26 +02:00
192 changed files with 3789 additions and 1320 deletions

6
.gitattributes vendored Normal file
View File

@@ -0,0 +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

5
.gitignore vendored
View File

@@ -1,3 +1,2 @@
.DS_Store composer.lock
.idea vendor/
nbproject

View File

@@ -1,6 +1,28 @@
language: php language: php
php: dist: trusty
- 5.5 sudo: false
- 5.4
- 5.3 matrix:
include:
- php: 5.3
dist: precise
- php: 5.4
- php: 5.5
- php: 5.6
- php: 7.0
- php: 7.1
- php: 7.2
- php: 7.3
- php: nightly
fast_finish: true
allow_failures:
- php: nightly
install:
- composer install --prefer-dist --no-interaction --no-progress
script:
- vendor/bin/phpunit
- vendor/bin/phpunit test/CommonMarkTestWeak.php || true
- '[ -z "$TRAVIS_TAG" ] || [ "$TRAVIS_TAG" == "$(php -r "require(\"Parsedown.php\"); echo Parsedown::version;")" ]'

View File

@@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2013 Emanuil Rusev, erusev.com Copyright (c) 2013-2018 Emanuil Rusev, erusev.com
Permission is hereby granted, free of charge, to any person obtaining a copy of Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in this software and associated documentation files (the "Software"), to deal in
@@ -17,4 +17,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

2625
Parsedown.php Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,97 @@
## Parsedown PHP > I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC.
Parsedown is a parser for Markdown. It parses Markdown text the way people do. First, it divides texts into blocks. Then it looks at how these blocks start and how they relate to each other. Finally, it looks for special characters to identify inline elements. As a result, Parsedown is (super) fast, consistent and clean. ## Parsedown
[Explorer (demo)](http://parsedown.org/explorer/) [![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown)
[Tests](http://parsedown.org/tests/) <!--[![Total Downloads](http://img.shields.io/packagist/dt/erusev/parsedown.svg?style=flat-square)](https://packagist.org/packages/erusev/parsedown)-->
Better Markdown Parser in PHP
[Demo](http://parsedown.org/demo) |
[Benchmarks](http://parsedown.org/speed) |
[Tests](http://parsedown.org/tests/) |
[Documentation](https://github.com/erusev/parsedown/wiki/)
### Features
* One File
* No Dependencies
* Super Fast
* Extensible
* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
* Tested in 5.3 to 7.2 and in HHVM
* [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
### Installation ### 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 ### Example
``` php
$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).
### Security
Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself.
To tell Parsedown that it is processing untrusted user-input, use the following:
```php ```php
$text = 'Hello **Parsedown**!'; $parsedown = new Parsedown;
$parsedown->setSafeMode(true);
```
$result = Parsedown::instance()->parse($text); If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/).
echo $result; # prints: <p>Hello <strong>Parsedown</strong>!</p> In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above.
```
#### Security of Parsedown Extensions
Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS.
### Escaping HTML
> ⚠️  **WARNING:** This method isn't safe from XSS!
If you wish to escape HTML **in trusted input**, you can use the following:
```php
$parsedown = new Parsedown;
$parsedown->setMarkupEscaped(true);
```
Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`.
### 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 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.
**Is it compliant with CommonMark?**
It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve.
**Who uses it?**
[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.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](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2).

View File

@@ -12,7 +12,22 @@
"homepage": "http://erusev.com" "homepage": "http://erusev.com"
} }
], ],
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35"
},
"autoload": { "autoload": {
"psr-0": {"Parsedown": ""} "psr-0": {"Parsedown": ""}
},
"autoload-dev": {
"psr-0": {
"TestParsedown": "test/",
"ParsedownTest": "test/",
"CommonMarkTest": "test/",
"CommonMarkTestWeak": "test/"
}
} }
} }

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"> <phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuites> <testsuites>
<testsuite> <testsuite>
<file>tests/Test.php</file> <file>test/ParsedownTest.php</file>
</testsuite> </testsuite>
</testsuites> </testsuites>
</phpunit> </phpunit>

View File

@@ -0,0 +1,71 @@
<?php
/**
* Test Parsedown against the CommonMark spec
*
* @link http://commonmark.org/ CommonMark
*/
class CommonMarkTestStrict extends PHPUnit_Framework_TestCase
{
const SPEC_URL = 'https://raw.githubusercontent.com/jgm/CommonMark/master/spec.txt';
protected $parsedown;
protected function setUp()
{
$this->parsedown = new TestParsedown();
$this->parsedown->setUrlsLinked(false);
}
/**
* @dataProvider data
* @param $id
* @param $section
* @param $markdown
* @param $expectedHtml
*/
public function testExample($id, $section, $markdown, $expectedHtml)
{
$actualHtml = $this->parsedown->text($markdown);
$this->assertEquals($expectedHtml, $actualHtml);
}
/**
* @return array
*/
public function data()
{
$spec = file_get_contents(self::SPEC_URL);
if ($spec === false) {
$this->fail('Unable to load CommonMark spec from ' . self::SPEC_URL);
}
$spec = str_replace("\r\n", "\n", $spec);
$spec = strstr($spec, '<!-- END TESTS -->', true);
$matches = array();
preg_match_all('/^`{32} example\n((?s).*?)\n\.\n(?:|((?s).*?)\n)`{32}$|^#{1,6} *(.*?)$/m', $spec, $matches, PREG_SET_ORDER);
$data = array();
$currentId = 0;
$currentSection = '';
foreach ($matches as $match) {
if (isset($match[3])) {
$currentSection = $match[3];
} else {
$currentId++;
$markdown = str_replace('→', "\t", $match[1]);
$expectedHtml = isset($match[2]) ? str_replace('→', "\t", $match[2]) : '';
$data[$currentId] = array(
'id' => $currentId,
'section' => $currentSection,
'markdown' => $markdown,
'expectedHtml' => $expectedHtml
);
}
}
return $data;
}
}

View File

@@ -0,0 +1,63 @@
<?php
require_once(__DIR__ . '/CommonMarkTestStrict.php');
/**
* Test Parsedown against the CommonMark spec, but less aggressive
*
* The resulting HTML markup is cleaned up before comparison, so examples
* which would normally fail due to actually invisible differences (e.g.
* superfluous whitespaces), don't fail. However, cleanup relies on block
* element detection. The detection doesn't work correctly when a element's
* `display` CSS property is manipulated. According to that this test is only
* a interim solution on Parsedown's way to full CommonMark compatibility.
*
* @link http://commonmark.org/ CommonMark
*/
class CommonMarkTestWeak extends CommonMarkTestStrict
{
protected $textLevelElementRegex;
protected function setUp()
{
parent::setUp();
$textLevelElements = $this->parsedown->getTextLevelElements();
array_walk($textLevelElements, function (&$element) {
$element = preg_quote($element, '/');
});
$this->textLevelElementRegex = '\b(?:' . implode('|', $textLevelElements) . ')\b';
}
/**
* @dataProvider data
* @param $id
* @param $section
* @param $markdown
* @param $expectedHtml
*/
public function testExample($id, $section, $markdown, $expectedHtml)
{
$expectedHtml = $this->cleanupHtml($expectedHtml);
$actualHtml = $this->parsedown->text($markdown);
$actualHtml = $this->cleanupHtml($actualHtml);
$this->assertEquals($expectedHtml, $actualHtml);
}
protected function cleanupHtml($markup)
{
// invisible whitespaces at the beginning and end of block elements
// however, whitespaces at the beginning of <pre> elements do matter
$markup = preg_replace(
array(
'/(<(?!(?:' . $this->textLevelElementRegex . '|\bpre\b))\w+\b[^>]*>(?:<' . $this->textLevelElementRegex . '[^>]*>)*)\s+/s',
'/\s+((?:<\/' . $this->textLevelElementRegex . '>)*<\/(?!' . $this->textLevelElementRegex . ')\w+\b>)/s'
),
'$1',
$markup
);
return $markup;
}
}

199
test/ParsedownTest.php Executable file
View File

@@ -0,0 +1,199 @@
<?php
require 'SampleExtensions.php';
use PHPUnit\Framework\TestCase;
class ParsedownTest extends TestCase
{
final function __construct($name = null, array $data = array(), $dataName = '')
{
$this->dirs = $this->initDirs();
$this->Parsedown = $this->initParsedown();
parent::__construct($name, $data, $dataName);
}
private $dirs;
protected $Parsedown;
/**
* @return array
*/
protected function initDirs()
{
$dirs []= dirname(__FILE__).'/data/';
return $dirs;
}
/**
* @return Parsedown
*/
protected function initParsedown()
{
$Parsedown = new TestParsedown();
return $Parsedown;
}
/**
* @dataProvider data
* @param $test
* @param $dir
*/
function test_($test, $dir)
{
$markdown = file_get_contents($dir . $test . '.md');
$expectedMarkup = file_get_contents($dir . $test . '.html');
$expectedMarkup = str_replace("\r\n", "\n", $expectedMarkup);
$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();
foreach ($this->dirs as $dir)
{
$Folder = new DirectoryIterator($dir);
foreach ($Folder as $File)
{
/** @var $File DirectoryIterator */
if ( ! $File->isFile())
{
continue;
}
$filename = $File->getFilename();
$extension = pathinfo($filename, PATHINFO_EXTENSION);
if ($extension !== 'md')
{
continue;
}
$basename = $File->getBasename('.md');
if (file_exists($dir . $basename . '.html'))
{
$data []= array($basename, $dir);
}
}
}
return $data;
}
public function test_no_markup()
{
$markdownWithHtml = <<<MARKDOWN_WITH_MARKUP
<div>_content_</div>
sparse:
<div>
<div class="inner">
_content_
</div>
</div>
paragraph
<style type="text/css">
p {
color: red;
}
</style>
comment
<!-- html comment -->
MARKDOWN_WITH_MARKUP;
$expectedHtml = <<<EXPECTED_HTML
<p>&lt;div&gt;<em>content</em>&lt;/div&gt;</p>
<p>sparse:</p>
<p>&lt;div&gt;
&lt;div class="inner"&gt;
<em>content</em>
&lt;/div&gt;
&lt;/div&gt;</p>
<p>paragraph</p>
<p>&lt;style type="text/css"&gt;
p {
color: red;
}
&lt;/style&gt;</p>
<p>comment</p>
<p>&lt;!-- html comment --&gt;</p>
EXPECTED_HTML;
$parsedownWithNoMarkup = new TestParsedown();
$parsedownWithNoMarkup->setMarkupEscaped(true);
$this->assertEquals($expectedHtml, $parsedownWithNoMarkup->text($markdownWithHtml));
}
public function testLateStaticBinding()
{
$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);
}
}

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;
}
}

9
test/TestParsedown.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
class TestParsedown extends Parsedown
{
public function getTextLevelElements()
{
return $this->textLevelElements;
}
}

View 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>

View File

@@ -0,0 +1,4 @@
| header 1 | header 2 |
| -------- | -------- |
| cell 1.1 | cell 1.2 |
| cell 2.1 | cell 2.2 |

View File

@@ -0,0 +1,21 @@
<table>
<thead>
<tr>
<th style="text-align: left;">header 1</th>
<th style="text-align: center;">header 2</th>
<th style="text-align: right;">header 2</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">cell 1.1</td>
<td style="text-align: center;">cell 1.2</td>
<td style="text-align: right;">cell 1.3</td>
</tr>
<tr>
<td style="text-align: left;">cell 2.1</td>
<td style="text-align: center;">cell 2.2</td>
<td style="text-align: right;">cell 2.3</td>
</tr>
</tbody>
</table>

View 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 |

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>
<h1>closed h1</h1>
<h1></h1>
<h2></h2>
<h1># of levels</h1>
<h1># of levels #</h1>
<h1>heading</h1>

25
test/data/atx_heading.md Normal file
View File

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

View File

@@ -0,0 +1,12 @@
<div>_content_</div>
<p>paragraph</p>
<div>
<div class="inner">
_content_
</div>
</div>
<style type="text/css">
p {color: #789;}
</style>
<div>
<a href="/">home</a></div>

View File

@@ -0,0 +1,16 @@
<div>_content_</div>
paragraph
<div>
<div class="inner">
_content_
</div>
</div>
<style type="text/css">
p {color: #789;}
</style>
<div>
<a href="/">home</a></div>

13
test/data/code_block.html Normal file
View File

@@ -0,0 +1,13 @@
<pre><code>&lt;?php
$message = 'Hello World!';
echo $message;</code></pre>
<hr />
<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>

17
test/data/code_block.md Normal file
View File

@@ -0,0 +1,17 @@
<?php
$message = 'Hello World!';
echo $message;
---
> not a quote
- not a list item
[not a reference]: http://foo.com
---
foo
bar

6
test/data/code_span.html Normal file
View File

@@ -0,0 +1,6 @@
<p>a <code>code span</code></p>
<p><code>this is also a codespan</code> trailing text</p>
<p><code>and look at this one!</code></p>
<p>single backtick in a code span: <code>`</code></p>
<p>backtick-delimited string in a code span: <code>`foo`</code></p>
<p><code>sth `` sth</code></p>

11
test/data/code_span.md Normal file
View File

@@ -0,0 +1,11 @@
a `code span`
`this is also a codespan` trailing text
`and look at this one!`
single backtick in a code span: `` ` ``
backtick-delimited string in a code span: `` `foo` ``
`sth `` sth`

View File

@@ -0,0 +1,9 @@
<blockquote>
<h2>header</h2>
<p>paragraph</p>
<ul>
<li>li</li>
</ul>
<hr />
<p>paragraph</p>
</blockquote>

View File

@@ -0,0 +1,10 @@
> header
> ------
>
> paragraph
>
> - li
>
> ---
>
> paragraph

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

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

View File

@@ -0,0 +1,7 @@
- paragraph
paragraph
- paragraph
> quote

View File

@@ -0,0 +1,40 @@
<ul>
<li>li<ul>
<li>li<ul>
<li>li</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

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

8
test/data/em_strong.html Normal file
View File

@@ -0,0 +1,8 @@
<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>
<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>

15
test/data/em_strong.md Normal file
View File

@@ -0,0 +1,15 @@
___em strong___
___em strong_ strong__
__strong _em strong___
__strong _em strong_ strong__
***em strong***
***em strong* strong**
**strong *em strong***
**strong *em strong* strong**

2
test/data/email.html Normal file
View File

@@ -0,0 +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>

3
test/data/email.md Normal file
View File

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

8
test/data/emphasis.html Normal file
View File

@@ -0,0 +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><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>

13
test/data/emphasis.md Normal file
View File

@@ -0,0 +1,13 @@
_underscore_, *asterisk*, _one two_, *three four*, _a_, *b*
**strong** and *em* and **strong** and *em*
_line
line
line_
this_is_not_an_emphasis
an empty emphasis __ ** is not an emphasis
*mixed **double and* single asterisk** spans

6
test/data/escaping.html Normal file
View File

@@ -0,0 +1,6 @@
<p>escaped *emphasis*.</p>
<p><code>escaped \*emphasis\* in a code span</code></p>
<pre><code>escaped \*emphasis\* in a code block</code></pre>
<p>\ ` * _ { } [ ] ( ) > # + - . !</p>
<p><em>one_two</em> <strong>one_two</strong></p>
<p><em>one*two</em> <strong>one*two</strong></p>

11
test/data/escaping.md Normal file
View File

@@ -0,0 +1,11 @@
escaped \*emphasis\*.
`escaped \*emphasis\* in a code span`
escaped \*emphasis\* in a code block
\\ \` \* \_ \{ \} \[ \] \( \) \> \# \+ \- \. \!
_one\_two_ __one\_two__
*one\*two* **one\*two**

View File

@@ -0,0 +1,18 @@
<pre><code>&lt;?php
$message = 'fenced code block';
echo $message;</code></pre>
<pre><code>tilde</code></pre>
<pre><code class="language-php">echo 'language identifier';</code></pre>
<pre><code class="language-c#">echo 'language identifier with non words';</code></pre>
<pre><code class="language-html+php">&lt;?php
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

@@ -0,0 +1,38 @@
```
<?php
$message = 'fenced code block';
echo $message;
```
~~~
tilde
~~~
```php
echo 'language identifier';
```
```c#
echo 'language identifier with non words';
```
```html+php
<?php
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

@@ -0,0 +1,5 @@
<hr />
<hr />
<hr />
<hr />
<hr />

View File

@@ -0,0 +1,9 @@
---
- - -
- - -
***
___

View File

@@ -0,0 +1,11 @@
<!-- single line -->
<p>paragraph</p>
<!--
multiline -->
<p>paragraph</p>
<!-- sss -->abc
<ul>
<li>abcd</li>
<li>bbbb</li>
<li>cccc</li>
</ul>

14
test/data/html_comment.md Normal file
View File

@@ -0,0 +1,14 @@
<!-- single line -->
paragraph
<!--
multiline -->
paragraph
<!-- sss -->abc
* abcd
* bbbb
* cccc

View File

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

1
test/data/html_entity.md Normal file
View File

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

View File

@@ -0,0 +1,2 @@
<p><img src="/md.png" alt="Markdown Logo" /></p>
<p>![missing reference]</p>

View File

@@ -0,0 +1,5 @@
![Markdown Logo][image]
[image]: /md.png
![missing reference]

View File

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

3
test/data/image_title.md Normal file
View File

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

View File

@@ -0,0 +1,4 @@
<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 followed by <a href="http://cnn.com">another</a></p>
<p>an <a href="http://example.com" title="Example">explicit</a> reference link with a title</p>

View File

@@ -0,0 +1,13 @@
an [implicit] reference link
[implicit]: http://example.com
an [implicit][] reference link with an empty link definition
an [implicit][] reference link followed by [another][]
[another]: http://cnn.com
an [explicit][example] reference link with a title
[example]: http://example.com "Example"

File diff suppressed because one or more lines are too long

13
test/data/inline_link.md Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
<p><a href="http://example.com" title="Title">single quotes</a></p>
<p><a href="http://example.com" title="Title">double quotes</a></p>
<p><a href="http://example.com" title="">single quotes blank</a></p>
<p><a href="http://example.com" title="">double quotes blank</a></p>
<p><a href="http://example.com" title="2 Words">space</a></p>
<p><a href="http://example.com/url-(parentheses)" title="Title">parentheses</a></p>

View File

@@ -0,0 +1,11 @@
[single quotes](http://example.com 'Title')
[double quotes](http://example.com "Title")
[single quotes blank](http://example.com '')
[double quotes blank](http://example.com "")
[space](http://example.com "2 Words")
[parentheses](http://example.com/url-(parentheses) "Title")

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,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,5 @@
> quote
the rest of it
> another paragraph
the rest of it

4
test/data/lazy_list.html Normal file
View File

@@ -0,0 +1,4 @@
<ul>
<li>li
the rest of it</li>
</ul>

2
test/data/lazy_list.md Normal file
View File

@@ -0,0 +1,2 @@
- li
the rest of it

View File

@@ -1,2 +1,2 @@
<p>line<br /> <p>line<br />
line</p> line</p>

View File

@@ -1,2 +1,2 @@
line line
line line

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

@@ -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 @@
<ol>
<li>
<p>One
First body copy</p>
</li>
<li>
<p>Two
Last body copy</p>
</li>
</ol>

View File

@@ -0,0 +1,5 @@
1. One
First body copy
2. Two
Last body copy

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,16 @@
<ol>
<li>one</li>
<li>two</li>
</ol>
<p>repeating numbers:</p>
<ol>
<li>one</li>
<li>two</li>
</ol>
<p>large numbers:</p>
<ol start="123">
<li>one</li>
</ol>
<p>foo 1. the following should not start a list
100.<br />
200. </p>

15
test/data/ordered_list.md Normal file
View File

@@ -0,0 +1,15 @@
1. one
2. two
repeating numbers:
1. one
1. two
large numbers:
123. one
foo 1. the following should not start a list
100.
200.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +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,9 @@
<ul>
<li>
<p>li</p>
<ul>
<li>li</li>
<li>li</li>
</ul>
</li>
</ul>

View File

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

View File

@@ -1,5 +1,5 @@
<h1>h1</h1> <h1>h1</h1>
<h2>h2</h2> <h2>h2</h2>
<h2>single character</h2> <h2>single character</h2>
<p>not a header</p> <p>not a header</p>
<hr /> <hr />

View File

@@ -1,12 +1,12 @@
h1 h1
== ==
h2 h2
-- --
single character single character
- -
not a header not a header
------------ ------------

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>

Some files were not shown because too many files have changed in this diff Show More