Compare commits

...

48 Commits

Author SHA1 Message Date
Emanuil Rusev 6598f3860c
update readme 2020-08-09 17:12:21 +03:00
Emanuil Rusev 1e5080190c
update readme
we already say "warning" in bold and upper case — the warning emoji feels unnecessary
2020-08-09 17:06:19 +03:00
Emanuil Rusev 1610e4747c
Merge pull request #741 from GrahamCampbell/patch-1
Update .travis.yml
2020-02-18 12:38:52 +02:00
Emanuil Rusev 3159a9d3cd
Merge pull request #751 from jeanmonod/patch-1
Update GitHub flavored markdown url
2020-01-22 09:53:45 +02:00
Jeanmonod David dbee8ab4f2
Update GitHub flavored markdown url 2020-01-21 22:07:12 +01:00
Graham Campbell dba4125b59
Update .travis.yml 2019-12-20 00:05:10 +00:00
Aidan Woods bfaa76d370
Reflect travis breadth in README
Closes https://github.com/erusev/parsedown/issues/692
2019-04-07 16:36:22 +01:00
Aidan Woods 3825db53a2 Merge branch '1.8.x-beta' 2019-04-06 17:58:29 +01:00
Aidan Woods fe7a50eceb
New release due to mislabeled previous tag 2019-03-17 18:47:21 +00:00
Aidan Woods bce642f2d7
7.3 was released 2019-03-17 18:38:54 +00:00
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 21c8c792de
Merge pull request #698 from cybernet/patch-1
Symfony Demo link update
2019-03-14 18:49:20 +00:00
cybernet 6ca29539e1
Symfony Demo link update 2019-03-12 20:49:21 +00:00
Emanuil Rusev a503c1a69b composer/composer#7990 2019-03-02 12:08:48 +02:00
Emanuil Rusev 819c68899d
Simplify installation instructions 2018-12-28 13:17:22 +02:00
Emanuil Rusev 4c2d79fc6a
More consistent code blocks in readme 2018-12-28 12:50:30 +02:00
Emanuil Rusev 48a2fb26fe
Add badges to readme 2018-12-28 12:47:13 +02:00
Emanuil Rusev 33b79d2446
More logo padding and no underline 2018-12-28 02:21:55 +02:00
Emanuil Rusev d6d2d96459
Add repo name as h1 2018-12-28 02:19:44 +02:00
Emanuil Rusev d5b6ab5198
Readme logo to be centered 2018-12-28 02:14:25 +02:00
Emanuil Rusev 15e8439c7f
Back to smaller padding in readme logo 2018-12-28 02:04:16 +02:00
Emanuil Rusev ff6148f9b9
Improve readme badges 2018-12-28 01:56:45 +02:00
Emanuil Rusev dfd8657bc5
h1 around logo in readme 2018-12-28 01:28:59 +02:00
Emanuil Rusev ee64646765
More padding for logo in readme 2018-12-28 01:21:51 +02:00
Emanuil Rusev c956090b55
Update readme logo 2018-12-28 01:07:49 +02:00
Emanuil Rusev 0be26550f3
Update readme logo 2018-12-28 00:55:48 +02:00
Emanuil Rusev 8e26a65a6f
More consistent letter case in readme 2018-12-28 00:41:14 +02:00
Emanuil Rusev 2a24a8583b
More consistent formatting in readme 2018-12-28 00:36:04 +02:00
Emanuil Rusev 1d55344e92
Simpler readme header 2018-12-27 23:59:37 +02:00
Emanuil Rusev 5dc8d1cc39
Simpler readme examples 2018-12-27 23:51:07 +02:00
Emanuil Rusev 33cf0f0b99
Centered header in readme 2018-12-27 23:46:53 +02:00
Emanuil Rusev dc1ff7d6c2
Remove horizontal rule from readme 2018-12-27 22:50:39 +02:00
Emanuil Rusev 0f0987571d
Bigger headings in readme 2018-12-27 22:32:54 +02:00
Emanuil Rusev 18eaa649b5
Add logo to readme 2018-12-27 22:23:17 +02:00
Aidan Woods e124572b60
Merge pull request #675 from andreybolonin/patch-1
add php 7.3
2018-11-16 07:45:32 +00:00
Andrey Bolonin 1686a34469
add php 7.3 to allow_failures 2018-11-16 09:34:17 +02:00
Aidan Woods 2bd7113c55
Merge pull request #676 from aidantwoods/fix/uninitialized-string-offset
Fix access to potentially uninitialised offset
2018-11-06 21:49:46 +00:00
Aidan Woods 29fce0ec37
Fix access to potentially uninitialised offset 2018-11-06 21:10:23 +00:00
Andrey Bolonin b0bbc275d4
add php 7.3 2018-10-31 15:48:28 +02:00
Aidan Woods 72f9ca92ae
Merge pull request #671 from aidantwoods/fix/line-ending-standardisation
Ensure line-breaks get standardised when using Parsedown via `line` method
2018-10-16 18:51:05 +01:00
Aidan Woods 89c3fa05d9
Ensure line-breaks get standardised when using via `line` method
As noted in https://github.com/erusev/parsedown/pull/624 there are
occasions where line break standardisation is assumed (e.g. where
`inlineCode` replaces line breaks with a space).

Closes #624
2018-10-16 18:41:42 +01:00
Aidan Woods 69163d6e88
Merge pull request #670 from tillkruss/patch-1
Add "tel:" to whitelist
2018-10-14 21:48:40 +01:00
Till Krüss 3a0c964291
Add "tel:" to whitelist 2018-10-02 16:38:21 -07:00
Aidan Woods 1829106e60
Merge pull request #668 from itshoro/block-heading-min
remove redundant header level cap
2018-09-19 21:28:02 +01:00
horodev 464f5f9329 removed min function as it is redundant in the context 2018-09-19 17:36:40 +02:00
3 changed files with 69 additions and 45 deletions

View File

@ -1,25 +1,25 @@
language: php
dist: trusty
sudo: false
matrix:
include:
- php: 5.3
dist: precise
- php: 5.4
dist: trusty
- php: 5.5
dist: trusty
- php: 5.6
dist: xenial
- php: 7.0
dist: xenial
- php: 7.1
dist: bionic
- php: 7.2
- php: nightly
- php: hhvm
- php: hhvm-nightly
fast_finish: true
allow_failures:
- php: nightly
- php: hhvm-nightly
dist: bionic
- php: 7.3
dist: bionic
- php: 7.4
dist: bionic
install:
- composer install --prefer-dist --no-interaction --no-progress

View File

@ -17,7 +17,7 @@ class Parsedown
{
# ~
const version = '1.8.0-beta-5';
const version = '1.8.0-beta-7';
# ~
@ -107,6 +107,7 @@ class Parsedown
'ftp://',
'ftps://',
'mailto:',
'tel:',
'data:image/png;base64,',
'data:image/gif;base64,',
'data:image/jpeg;base64,',
@ -469,7 +470,21 @@ class Parsedown
if ($infostring !== '')
{
$Element['attributes'] = array('class' => "language-$infostring");
/**
* https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes
* Every HTML element may have a class attribute specified.
* The attribute, if specified, must have a value that is a set
* of space-separated tokens representing the various classes
* that the element belongs to.
* [...]
* The space characters, for the purposes of this specification,
* are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab),
* U+000A LINE FEED (LF), U+000C FORM FEED (FF), and
* U+000D CARRIAGE RETURN (CR).
*/
$language = substr($infostring, 0, strcspn($infostring, " \t\n\f\r"));
$Element['attributes'] = array('class' => "language-$language");
}
$Block = array(
@ -541,7 +556,7 @@ class Parsedown
$Block = array(
'element' => array(
'name' => 'h' . min(6, $level),
'name' => 'h' . $level,
'handler' => array(
'function' => 'lineElements',
'argument' => $text,
@ -1119,6 +1134,9 @@ class Parsedown
protected function lineElements($text, $nonNestables = array())
{
# standardize line breaks
$text = str_replace(array("\r\n", "\r"), "\n", $text);
$Elements = array();
$nonNestables = (empty($nonNestables)
@ -1476,7 +1494,7 @@ class Parsedown
protected function inlineSpecialCharacter($Excerpt)
{
if ($Excerpt['text'][1] !== ' ' and strpos($Excerpt['text'], ';') !== false
if (substr($Excerpt['text'], 1, 1) !== ' ' and strpos($Excerpt['text'], ';') !== false
and preg_match('/^&(#?+[0-9a-zA-Z]++);/', $Excerpt['text'], $matches)
) {
return array(

View File

@ -1,60 +1,61 @@
> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC.
<!-- ![Parsedown](https://i.imgur.com/yE8afYV.png) -->
## Parsedown
<p align="center"><img alt="Parsedown" src="https://i.imgur.com/fKVY6Kz.png" width="240" /></p>
[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown)
<!--[![Total Downloads](http://img.shields.io/packagist/dt/erusev/parsedown.svg?style=flat-square)](https://packagist.org/packages/erusev/parsedown)-->
<h1>Parsedown</h1>
Better Markdown Parser in PHP
[![Build Status](https://travis-ci.org/erusev/parsedown.svg)](https://travis-ci.org/erusev/parsedown)
[![Total Downloads](https://poser.pugx.org/erusev/parsedown/d/total.svg)](https://packagist.org/packages/erusev/parsedown)
[![Version](https://poser.pugx.org/erusev/parsedown/v/stable.svg)](https://packagist.org/packages/erusev/parsedown)
[![License](https://poser.pugx.org/erusev/parsedown/license.svg)](https://packagist.org/packages/erusev/parsedown)
[Demo](http://parsedown.org/demo) |
[Benchmarks](http://parsedown.org/speed) |
[Tests](http://parsedown.org/tests/) |
[Documentation](https://github.com/erusev/parsedown/wiki/)
Better Markdown Parser in PHP - <a href="http://parsedown.org/demo">Demo</a>.
### Features
## Features
* One File
* No Dependencies
* Super Fast
* [Super Fast](http://parsedown.org/speed)
* Extensible
* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown)
* Tested in 5.3 to 7.2 and in HHVM
* [GitHub flavored](https://github.github.com/gfm)
* [Tested](http://parsedown.org/tests/) in 5.3 to 7.3
* [Markdown Extra extension](https://github.com/erusev/parsedown-extra)
### Installation
#### Composer
Install the [composer package] by running the following command:
## Installation
Install the [composer package]:
composer require erusev/parsedown
#### Manual
1. Download the "Source code" from the [latest release]
2. Include `Parsedown.php`
Or download the [latest release] and 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
```php
$Parsedown = new Parsedown();
echo $Parsedown->text('Hello _Parsedown_!'); # prints: <p>Hello <em>Parsedown</em>!</p>
// you can also parse inline markdown only
```
You can also parse inline markdown only:
```php
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
## 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
$parsedown = new Parsedown;
$parsedown->setSafeMode(true);
$Parsedown->setSafeMode(true);
```
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/).
@ -65,18 +66,19 @@ In both cases you should strongly consider employing defence-in-depth measures,
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!
## 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);
$Parsedown->setMarkupEscaped(true);
```
Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`.
### Questions
## Questions
**How does Parsedown work?**
@ -90,8 +92,12 @@ It passes most of the CommonMark tests. Most of the tests that don't pass deal w
**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).
[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/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).
**What else should I know?**
I also make [Nota](https://nota.md/) — a writing app designed for Markdown files :)