mirror of
https://github.com/KnpLabs/KnpMarkdownBundle.git
synced 2024-06-09 09:22:12 +02:00
Compare commits
64 commits
Author | SHA1 | Date | |
---|---|---|---|
9a8e23f69f | |||
091cff2698 | |||
dc113af854 | |||
9e2d994506 | |||
80e724bb6c | |||
7dd53fca23 | |||
129a09ce3f | |||
4f439a0d56 | |||
59ab364807 | |||
68aaf27531 | |||
54c72caaf7 | |||
2e716d1b64 | |||
643203872b | |||
b22717883f | |||
c018169d4e | |||
2b779a4eb3 | |||
63c755a578 | |||
74ded9e121 | |||
664c3bf82b | |||
b839e4358f | |||
cdd1aeec0c | |||
98710f8f2a | |||
972faeb8cf | |||
547f137ea8 | |||
b9e547fb67 | |||
83d78eb5c7 | |||
289f0327bb | |||
a87b16a141 | |||
f782aae4f7 | |||
823f0d8d89 | |||
7e0b145307 | |||
6decbb73f9 | |||
88932cc74d | |||
9de7a9f400 | |||
7afd756126 | |||
90ff78064e | |||
24f6c74239 | |||
86433a9433 | |||
69862cc6f6 | |||
5fb3d1c269 | |||
fa322f2a92 | |||
fadc9120b8 | |||
da45d3c76d | |||
eb31781090 | |||
7074f295ce | |||
5baa80f676 | |||
843b3d0c9b | |||
5e83a6a9ba | |||
d575814dd3 | |||
7238cc264e | |||
6dba9b29bc | |||
a81befb20f | |||
bd574d776b | |||
a63663cce6 | |||
a172d73960 | |||
dd17fd825c | |||
182b7cc670 | |||
a960290f36 | |||
d462ba15b9 | |||
1cb9e62d4d | |||
b23e8d965b | |||
25663d724b | |||
0f8ec028e9 | |||
f93e8da815 |
91
.github/workflows/phpunit.yaml
vendored
Normal file
91
.github/workflows/phpunit.yaml
vendored
Normal file
|
@ -0,0 +1,91 @@
|
|||
name: PHPUnit
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
phpunit:
|
||||
name: "PHPUnit - PHP ${{ matrix.php-version }}"
|
||||
runs-on: ubuntu-20.04
|
||||
continue-on-error: false
|
||||
env:
|
||||
SYMFONY_REQUIRE: ${{matrix.symfony-require}}
|
||||
SYMFONY_DEPRECATIONS_HELPER: ${{matrix.symfony-deprecations-helper}}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-version:
|
||||
- "7.4"
|
||||
- "8.0"
|
||||
- "8.1"
|
||||
deps:
|
||||
- "stable"
|
||||
symfony-require:
|
||||
- "5.4.*"
|
||||
symfony-deprecations-helper:
|
||||
- "5"
|
||||
include:
|
||||
- symfony-require: "4.4.*"
|
||||
php-version: "7.4"
|
||||
deps: "low"
|
||||
symfony-deprecations-helper: ""
|
||||
|
||||
- symfony-require: "4.4.*"
|
||||
php-version: "7.4"
|
||||
deps: "stable"
|
||||
symfony-deprecations-helper: "5"
|
||||
|
||||
- symfony-require: "6.0.*"
|
||||
php-version: "8.0"
|
||||
deps: "stable"
|
||||
symfony-deprecations-helper: "5"
|
||||
|
||||
- symfony-require: "6.0.*"
|
||||
php-version: "8.1"
|
||||
deps: "stable"
|
||||
symfony-deprecations-helper: "5"
|
||||
|
||||
fail-fast: true
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install PHP with extensions
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
coverage: none
|
||||
php-version: ${{ matrix.php-version }}
|
||||
extensions: mbstring, intl, pdo, pdo_sqlite, sqlite3
|
||||
ini-values: date.timezone=UTC
|
||||
|
||||
- name: Validate composer.json and composer.lock
|
||||
run: composer validate --strict
|
||||
|
||||
- name: Install dependencies with Composer
|
||||
run: composer update --no-interaction --prefer-dist --optimize-autoloader --prefer-stable
|
||||
|
||||
- name: Cache dependencies installed with Composer
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.composer/cache
|
||||
key: "php-${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}"
|
||||
restore-keys: "php-${{ matrix.php-version }}-composer-locked-"
|
||||
|
||||
- name: Install stable dependencies with Composer
|
||||
run: composer update --no-interaction --prefer-dist --prefer-stable
|
||||
if: "${{ matrix.deps == 'stable' }}"
|
||||
|
||||
- name: Install dev dependencies with Composer
|
||||
run: composer update --no-interaction --prefer-dist
|
||||
if: "${{ matrix.deps == 'dev' }}"
|
||||
|
||||
- name: Install lowest possible dependencies with Composer
|
||||
run: composer update --no-interaction --prefer-dist --prefer-stable --prefer-lowest
|
||||
if: "${{ matrix.deps == 'low' }}"
|
||||
|
||||
- name: Install PHPUnit
|
||||
run: composer run-script test install
|
||||
|
||||
- name: Run tests
|
||||
run: composer run-script test -v
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
|||
.phpunit.result.cache
|
||||
phpunit.xml
|
||||
var/
|
||||
vendor/*
|
||||
composer.lock
|
||||
Tests/fixtures/app/cache
|
||||
|
|
46
.travis.yml
46
.travis.yml
|
@ -1,39 +1,39 @@
|
|||
language: php
|
||||
|
||||
sudo: false
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.composer/cache/files
|
||||
- $HOME/symfony-bridge/.phpunit
|
||||
|
||||
php:
|
||||
- 5.5
|
||||
- 5.6
|
||||
- 7.0
|
||||
- 7.1
|
||||
env:
|
||||
global:
|
||||
- PHPUNIT_FLAGS="-v"
|
||||
- SYMFONY_PHPUNIT_DIR="$HOME/symfony-bridge/.phpunit"
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
# Test against lowest bounds of dependencies to ensure they are right
|
||||
- php: 5.6
|
||||
env: COMPOSER_FLAGS='--prefer-lowest --prefer-stable'
|
||||
# Test against dev versions of dependencies
|
||||
- php: 5.6
|
||||
env: deps=dev
|
||||
# test the latest release (including beta releases)
|
||||
- php: 7.1
|
||||
env: deps=beta
|
||||
- php: 7.2
|
||||
- php: 7.3
|
||||
env: deps=low
|
||||
- php: 7.4
|
||||
- php: 8.0
|
||||
|
||||
before_install:
|
||||
- if [ "$deps" = 'beta' ]; then perl -pi -e 's/^}$/,"minimum-stability":"beta"}/' composer.json; fi;
|
||||
- if [ "$deps" = 'dev' ]; then perl -pi -e 's/^}$/,"minimum-stability":"dev"}/' composer.json; fi;
|
||||
- phpenv config-rm xdebug.ini || true
|
||||
- composer global require --no-progress --no-scripts --no-plugins symfony/flex dev-main
|
||||
|
||||
install:
|
||||
- composer update $COMPOSER_FLAGS
|
||||
- |
|
||||
if [[ $deps = low ]]; then
|
||||
export SYMFONY_DEPRECATIONS_HELPER=weak
|
||||
composer update --prefer-dist --prefer-lowest --prefer-stable
|
||||
else
|
||||
composer update --prefer-dist
|
||||
fi
|
||||
- ./vendor/bin/simple-phpunit install
|
||||
|
||||
script: phpunit --coverage-text
|
||||
|
||||
notifications:
|
||||
email:
|
||||
- travis@knplabs.com
|
||||
script:
|
||||
- composer validate --strict --no-check-lock
|
||||
- ./vendor/bin/simple-phpunit $PHPUNIT_FLAGS
|
|
@ -12,11 +12,10 @@ class Configuration implements ConfigurationInterface
|
|||
*
|
||||
* @return TreeBuilder
|
||||
*/
|
||||
public function getConfigTreeBuilder()
|
||||
public function getConfigTreeBuilder(): TreeBuilder
|
||||
{
|
||||
$treeBuilder = new TreeBuilder('knp_markdown');
|
||||
// BC layer for symfony/config < 4.2
|
||||
$rootNode = method_exists($treeBuilder, 'getRootNode') ? $treeBuilder->getRootNode() : $treeBuilder->root('knp_markdown');
|
||||
$rootNode = $treeBuilder->getRootNode();
|
||||
|
||||
$rootNode
|
||||
->addDefaultsIfNotSet()
|
||||
|
|
|
@ -50,7 +50,7 @@ class MarkdownHelper implements HelperInterface
|
|||
*
|
||||
* @return string The default charset
|
||||
*/
|
||||
public function getCharset()
|
||||
public function getCharset(): string
|
||||
{
|
||||
return $this->charset;
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ class MarkdownParser extends MarkdownExtra implements MarkdownParserInterface
|
|||
/**
|
||||
* Simplify detab
|
||||
*/
|
||||
public function detab($text)
|
||||
public function detab($text): string
|
||||
{
|
||||
return str_replace("\t", str_repeat(' ', $this->tab_width), $text);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class Min extends MarkdownParser
|
|||
$this->features[$name] = false;
|
||||
}
|
||||
|
||||
return parent::__construct($features);
|
||||
parent::__construct($features);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,14 @@
|
|||
> **WARNING:** This bundle is **abandoned** in favor of [markdown_to_html](https://twig.symfony.com/doc/3.x/filters/markdown_to_html.html)
|
||||
> Twig filter. Please, consider using it instead. Migration should be easy because it also supports
|
||||
> `michelf/php-markdown` Markdown parser that is used in this project under the hood.
|
||||
|
||||
Provide markdown conversion (based on [Michel Fortin work](https://github.com/michelf/php-markdown)) to your Symfony projects.
|
||||
|
||||
[![Build Status](https://secure.travis-ci.org/KnpLabs/KnpMarkdownBundle.svg)](http://travis-ci.org/KnpLabs/KnpMarkdownBundle)
|
||||
|
||||
![ci.yml](https://github.com/tacman/KnpMarkdownBundle/actions/workflows/ci.yml/badge.svg)
|
||||
![php.yml](https://github.com/tacman/KnpMarkdownBundle/actions/workflows/php.yml/badge.svg)
|
||||
|
||||
## INSTALLATION
|
||||
|
||||
Add KnpMarkdownBundle to your project via [Composer](https://getcomposer.org/):
|
||||
|
@ -52,6 +59,11 @@ In Twig, you can use the `markdown` filter:
|
|||
{# Use default parser #}
|
||||
{{ my_data|markdown }}
|
||||
|
||||
{# If my_data is entered by a user, escape HTML tags before printing it #}
|
||||
{{ my_data|escape|markdown }}
|
||||
{# or strip HTML tags #}
|
||||
{{ my_data|striptags|markdown }}
|
||||
|
||||
{# Or select specific parser #}
|
||||
{{ my_data|markdown('parserName') }}
|
||||
```
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
namespace Knp\Bundle\MarkdownBundle\Twig\Extension;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\TwigFilter;
|
||||
|
||||
class MarkdownTwigExtension extends \Twig_Extension
|
||||
class MarkdownTwigExtension extends AbstractExtension
|
||||
{
|
||||
private $parserManager;
|
||||
|
||||
|
@ -13,19 +15,19 @@ class MarkdownTwigExtension extends \Twig_Extension
|
|||
$this->parserManager = $parserManager;
|
||||
}
|
||||
|
||||
public function getFilters()
|
||||
public function getFilters(): array
|
||||
{
|
||||
return array(
|
||||
new \Twig_SimpleFilter('markdown', array($this, 'markdown'), array('is_safe' => array('html'))),
|
||||
new TwigFilter('markdown', array($this, 'markdown'), array('is_safe' => array('html'))),
|
||||
);
|
||||
}
|
||||
|
||||
public function markdown($text, $parser = null)
|
||||
public function markdown($text, $parser = null): string
|
||||
{
|
||||
return $this->parserManager->transform($text, $parser);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
public function getName(): string
|
||||
{
|
||||
return 'markdown';
|
||||
}
|
||||
|
|
|
@ -18,15 +18,18 @@
|
|||
],
|
||||
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"symfony/framework-bundle": "~2.8|~3.0|^4.0",
|
||||
"symfony/dependency-injection": "~2.8|~3.0|^4.0",
|
||||
"michelf/php-markdown": "~1.4"
|
||||
"php": "^7.4|^8.0",
|
||||
"symfony/framework-bundle": "^4.4|^5.0|^6.0",
|
||||
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
|
||||
"michelf/php-markdown": "^1.9"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.5",
|
||||
"symfony/templating": "~2.8|~3.0|^4.0"
|
||||
"symfony/phpunit-bridge": "^4.4.11|^5.0|^6.0",
|
||||
"symfony/templating": "^4.4|^5.0|^6.0",
|
||||
"phpstan/phpstan": "^1.2",
|
||||
"phpstan/phpstan-symfony": "^1.0"
|
||||
},
|
||||
"abandoned": "twig/markdown-extra",
|
||||
"suggest": {
|
||||
"symfony/twig-bundle": "to use the Twig markdown filter",
|
||||
"ext-sundown": "to use optional support for php-sundown extension instead of php implementation"
|
||||
|
@ -38,6 +41,18 @@
|
|||
}
|
||||
},
|
||||
|
||||
"scripts": {
|
||||
"test": [
|
||||
"php ./vendor/bin/simple-phpunit"
|
||||
]
|
||||
},
|
||||
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Knp\\Bundle\\MarkdownBundle\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Knp\\Bundle\\MarkdownBundle\\": ""
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<phpunit backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
<!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html -->
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
|
||||
backupGlobals="false"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="false"
|
||||
bootstrap="./vendor/autoload.php"
|
||||
failOnRisky="true"
|
||||
failOnWarning="true"
|
||||
failOnIncomplete="false"
|
||||
>
|
||||
<php>
|
||||
<server name="SYMFONY_PHPUNIT_VERSION" value="9.5" />
|
||||
</php>
|
||||
|
||||
<coverage processUncoveredFiles="true">
|
||||
<include>
|
||||
<directory>.</directory>
|
||||
</include>
|
||||
<exclude>
|
||||
<directory>tests</directory>
|
||||
<directory>vendor</directory>
|
||||
</exclude>
|
||||
</coverage>
|
||||
<testsuites>
|
||||
<testsuite name="Markdown Test Suite">
|
||||
<directory>./Tests/</directory>
|
||||
<directory>tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>./</directory>
|
||||
<exclude>
|
||||
<directory>./Resources</directory>
|
||||
<directory>./Tests</directory>
|
||||
<directory>./vendor</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
|
|
|
@ -2,13 +2,14 @@
|
|||
|
||||
namespace Knp\Bundle\MarkdownBundle\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Knp\Bundle\MarkdownBundle\Parser\MarkdownParser as Parser;
|
||||
|
||||
class EscapingTest extends \PHPUnit_Framework_TestCase
|
||||
class EscapingTest extends TestCase
|
||||
{
|
||||
protected $parser;
|
||||
|
||||
public function setUp()
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->parser = new Parser();
|
||||
}
|
|
@ -3,8 +3,9 @@
|
|||
namespace Knp\Bundle\MarkdownBundle\Tests;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Parser\MarkdownParser as Parser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class FeatureTest extends \PHPUnit_Framework_TestCase
|
||||
class FeatureTest extends TestCase
|
||||
{
|
||||
public function testParser()
|
||||
{
|
||||
|
@ -754,10 +755,10 @@ EOF;
|
|||
// asserting a few things instead of comparing full final HTML
|
||||
// because a few minor things have changed over versions of Michelf
|
||||
// With assertContains(), tests will pass across all versions
|
||||
$this->assertContains('<p>That\'s some text with a footnote.<sup id="fnref:1"><a href="#fn:1"', $actualHtml);
|
||||
$this->assertContains('<div class="footnotes"', $actualHtml);
|
||||
$this->assertContains('<li id="fn:1"', $actualHtml);
|
||||
$this->assertContains('<p>And that\'s the footnote. <a href="#fnref:1" class="footnote-backref"', $actualHtml);
|
||||
$this->assertStringContainsString('<p>That\'s some text with a footnote.<sup id="fnref:1"><a href="#fn:1"', $actualHtml);
|
||||
$this->assertStringContainsString('<div class="footnotes"', $actualHtml);
|
||||
$this->assertStringContainsString('<li id="fn:1"', $actualHtml);
|
||||
$this->assertStringContainsString('<p>And that\'s the footnote. <a href="#fnref:1" class="footnote-backref"', $actualHtml);
|
||||
}
|
||||
|
||||
/**
|
|
@ -4,14 +4,16 @@ namespace Knp\Bundle\MarkdownBundle\Tests;
|
|||
|
||||
use Knp\Bundle\MarkdownBundle\KnpMarkdownBundle;
|
||||
use Knp\Bundle\MarkdownBundle\Parser\MarkdownParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
||||
use Symfony\Component\Routing\RouteCollectionBuilder;
|
||||
|
||||
class IntegrationTest extends \PHPUnit_Framework_TestCase
|
||||
class IntegrationTest extends TestCase
|
||||
{
|
||||
public function testServicesAvailable()
|
||||
{
|
||||
|
@ -29,7 +31,7 @@ class IntegrationKernel extends Kernel
|
|||
|
||||
private $cacheDir;
|
||||
|
||||
public function registerBundles()
|
||||
public function registerBundles(): iterable
|
||||
{
|
||||
return [
|
||||
new FrameworkBundle(),
|
||||
|
@ -37,16 +39,20 @@ class IntegrationKernel extends Kernel
|
|||
];
|
||||
}
|
||||
|
||||
protected function configureRoutes(RouteCollectionBuilder $routes)
|
||||
protected function configureRoutes(RoutingConfigurator $routes)
|
||||
{
|
||||
}
|
||||
|
||||
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
|
||||
{
|
||||
$c->setParameter('kernel.secret', '1234');
|
||||
|
||||
$c->loadFromExtension('framework', [
|
||||
'secret' => 'F00',
|
||||
'router' => ['utf8' => true]
|
||||
]);
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
public function getCacheDir(): string
|
||||
{
|
||||
if (null === $this->cacheDir) {
|
||||
$this->cacheDir = sys_get_temp_dir().'/'.rand(100, 999);
|
|
@ -5,8 +5,9 @@ namespace Knp\Bundle\MarkdownBundle\Tests\Parser;
|
|||
use Knp\Bundle\MarkdownBundle\Helper\MarkdownHelper;
|
||||
use Knp\Bundle\MarkdownBundle\Tests\fixtures\app\TestKernel;
|
||||
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ParserManagerTest extends \PHPUnit_Framework_TestCase
|
||||
class ParserManagerTest extends TestCase
|
||||
{
|
||||
public function testIntegration()
|
||||
{
|
|
@ -3,8 +3,9 @@
|
|||
namespace Knp\Bundle\MarkdownBundle\Tests;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Parser\Preset as Preset;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class PresetTest extends \PHPUnit_Framework_TestCase
|
||||
class PresetTest extends TestCase
|
||||
{
|
||||
public function testMax()
|
||||
{
|
|
@ -12,7 +12,7 @@ use Symfony\Component\HttpKernel\Kernel;
|
|||
|
||||
class TestKernel extends Kernel
|
||||
{
|
||||
public function registerBundles()
|
||||
public function registerBundles(): iterable
|
||||
{
|
||||
return array(
|
||||
new FrameworkBundle(),
|
||||
|
@ -31,4 +31,4 @@ class TestKernel extends Kernel
|
|||
$c->setAlias('markdown.parser.parser_manager.public', new Alias('markdown.parser.parser_manager', true));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue