pax_global_header00006660000000000000000000000064136273376100014522gustar00rootroot0000000000000052 comment=52f52f56a5e1bb01e490f95558f30830139e1a6f php-league-commonmark-1.3.1/000077500000000000000000000000001362733761000157145ustar00rootroot00000000000000php-league-commonmark-1.3.1/.editorconfig000066400000000000000000000003341362733761000203710ustar00rootroot00000000000000; top-most EditorConfig file root = true # All files. [*] end_of_line = LF indent_style = space indent_size = 4 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [.travis.yml] indent_size = 2 php-league-commonmark-1.3.1/.github/000077500000000000000000000000001362733761000172545ustar00rootroot00000000000000php-league-commonmark-1.3.1/.github/CONTRIBUTING.md000066400000000000000000000031211362733761000215020ustar00rootroot00000000000000# Contributing Contributions are **welcome** and will be fully **credited**. We accept contributions via Pull Requests on [GitHub](https://github.com/thephpleague/commonmark). ## Project Goals Please keep these project goals in mind as you propose changes: * Fully support the [CommonMark spec] (100% compliance) * Provide an extensible parser/renderer which users may customize as needed * Continuously improve performance without sacrificing quality or compliance * Match the underlying logic of the official reference implementations of CommonMark ## Pull Requests - **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](https://pear.php.net/package/PHP_CodeSniffer). - **Add tests!** - Your patch won't be accepted if it doesn't have tests. - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. - **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. - **Create feature branches** - Don't ask us to pull from your master branch. - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting. ## Running Tests ``` bash $ composer test ``` **Happy coding**! php-league-commonmark-1.3.1/.github/FUNDING.yml000066400000000000000000000001171362733761000210700ustar00rootroot00000000000000github: colinodell patreon: colinodell tidelift: packagist/league%2fcommonmark php-league-commonmark-1.3.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001362733761000214375ustar00rootroot00000000000000php-league-commonmark-1.3.1/.github/ISSUE_TEMPLATE/1_Bug_report.md000066400000000000000000000007361362733761000243170ustar00rootroot00000000000000--- name: 🐛 Bug Report about: Report errors and problems --- **Version(s) affected**: x.y.z **Description** **How to reproduce** **Possible Solution** **Additional context** php-league-commonmark-1.3.1/.github/ISSUE_TEMPLATE/2_Feature_request.md000066400000000000000000000005721362733761000253510ustar00rootroot00000000000000--- name: 🚀 Feature Request about: RFC and ideas for new features and improvements --- **Description** **Example** php-league-commonmark-1.3.1/.github/ISSUE_TEMPLATE/3_Security_issue.md000066400000000000000000000005101362733761000252160ustar00rootroot00000000000000--- name: ⛔ Security Issue about: See the README instructions for reporting security issues --- ⚠ PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure with us. php-league-commonmark-1.3.1/.github/SECURITY.md000066400000000000000000000015161362733761000210500ustar00rootroot00000000000000# SECURITY POLICY ## Supported Versions When a new **minor** version (`1.x`) is released, the previous one will continue to receive security and bug fixes for *at least* 3 months. When a new **major** version is released (`1.0`, `2.0`, etc), the previous one (`0.19.x`) will receive bug fixes for *at least* 3 months and security updates for 6 months after that new release comes out. (This policy may change in the future and exceptions may be made on a case-by-case basis.) ## Reporting a Vulnerability If you discover a security vulnerability within this package, please use the [Tidelift security contact form](https://tidelift.com/security) or email Colin O'Dell at . All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. php-league-commonmark-1.3.1/.github/stale.yml000066400000000000000000000012671362733761000211150ustar00rootroot00000000000000# Number of days of inactivity before an issue becomes stale daysUntilStale: 60 # Number of days of inactivity before a stale issue is closed daysUntilClose: 21 # Issues with these labels will never be considered stale exemptLabels: - pinned - on hold - security # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: false php-league-commonmark-1.3.1/.gitignore000066400000000000000000000001421362733761000177010ustar00rootroot00000000000000/.idea/ /build/ /docs/_site/ /docs/Gemfile.lock composer.lock composer.phar /vendor/ phpunit.xml php-league-commonmark-1.3.1/.phpstorm.meta.php000066400000000000000000000073201362733761000213060ustar00rootroot00000000000000 * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPSTORM_META { expectedArguments(\League\CommonMark\Context::setEncoding(), 0, 'UTF-8', 'ASCII'); expectedArguments(\League\CommonMark\Cursor::__construct(), 1, 'UTF-8', 'ASCII'); expectedArguments(\League\CommonMark\HtmlElement::__construct(), 0, 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kdb', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'pre', 'progress', 'q', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr'); expectedArguments(\League\CommonMark\Block\Element\Heading::__construct(), 0, 1, 2, 3, 4, 5, 6); expectedReturnValues(\League\CommonMark\Block\Element\Heading::getLevel(), 1, 2, 3, 4, 5, 6); registerArgumentsSet('league_commonmark_htmlblock_types', \League\CommonMark\Block\Element\HtmlBlock::TYPE_1_CODE_CONTAINER, \League\CommonMark\Block\Element\HtmlBlock::TYPE_2_COMMENT, \League\CommonMark\Block\Element\HtmlBlock::TYPE_3, \League\CommonMark\Block\Element\HtmlBlock::TYPE_4, \League\CommonMark\Block\Element\HtmlBlock::TYPE_5_CDATA, \League\CommonMark\Block\Element\HtmlBlock::TYPE_6_BLOCK_ELEMENT, \League\CommonMark\Block\Element\HtmlBlock::TYPE_7_MISC_ELEMENT); expectedArguments(\League\CommonMark\Block\Element\HtmlBlock::__construct(), 0, argumentsSet('league_commonmark_htmlblock_types')); expectedArguments(\League\CommonMark\Block\Element\HtmlBlock::setType(), 0, argumentsSet('league_commonmark_htmlblock_types')); expectedReturnValues(\League\CommonMark\Block\Element\HtmlBlock::getType(), argumentsSet('league_commonmark_htmlblock_types')); expectedArguments(\League\CommonMark\Util\RegexHelper::getHtmlBlockOpenRegex(), 0, argumentsSet('league_commonmark_htmlblock_types')); expectedArguments(\League\CommonMark\Util\RegexHelper::getHtmlBlockCloseRegex(), 0, argumentsSet('league_commonmark_htmlblock_types')); registerArgumentsSet('league_commonmark_newline_types', \League\CommonMark\Inline\Element\Newline::HARDBREAK, \League\CommonMark\Inline\Element\Newline::SOFTBREAK); expectedArguments(\League\CommonMark\Inline\Element\Newline::__construct(), 0, argumentsSet('league_commonmark_newline_types')); expectedReturnValues(\League\CommonMark\Inline\Element\Newline::getType(), argumentsSet('league_commonmark_newline_types')); registerArgumentsSet('league_commonmark_options', 'renderer', 'enable_em', 'enable_strong', 'use_asterisk', 'use_underscore', 'unordered_list_markers', 'html_input', 'allow_unsafe_links', 'max_nesting_level'); expectedArguments(\League\CommonMark\EnvironmentInterface::getConfig(), 0, argumentsSet('league_commonmark_options')); expectedArguments(\League\CommonMark\Util\ConfigurationInterface::get(), 0, argumentsSet('league_commonmark_options')); expectedArguments(\League\CommonMark\Util\ConfigurationInterface::set(), 0, argumentsSet('league_commonmark_options')); } php-league-commonmark-1.3.1/.ripstech/000077500000000000000000000000001362733761000176135ustar00rootroot00000000000000php-league-commonmark-1.3.1/.ripstech/README.md000066400000000000000000000005461362733761000210770ustar00rootroot00000000000000## RIPS Security Scanning The folks at [RIPSTech](https://www.ripstech.com/) have graciously provided us with a complementary [RIPS SaaS](https://www.ripstech.com/product/) license to help check this project for vulnerabilities and keep it secure. This folder contains a number of entry points for their software to run security tests against the library. php-league-commonmark-1.3.1/.ripstech/converter.php000066400000000000000000000007551362733761000223420ustar00rootroot00000000000000 Environment::HTML_INPUT_ESCAPE, 'allow_unsafe_links' => false, ]); echo $converter->convertToHtml($_GET['input']); $converter = new CommonMarkConverter([ 'html_input' => Environment::HTML_INPUT_STRIP, 'allow_unsafe_links' => false, ]); echo $converter->convertToHtml($_GET['input']); php-league-commonmark-1.3.1/.ripstech/link-rendering.php000066400000000000000000000010111362733761000232250ustar00rootroot00000000000000setConfiguration(new Configuration([ 'allow_unsafe_links' => false, ])); $inline = new Link($_GET['url'], $_GET['label'], $_GET['title']); $fakeRenderer = new FakeHtmlRenderer(); echo $renderer->render($inline, $fakeRenderer); php-league-commonmark-1.3.1/.ripstech/xml-escape.php000066400000000000000000000001731362733761000223630ustar00rootroot00000000000000 for more details. ### Added - Added new `max_nesting_level` setting (#243) - Added minor performance optimizations to `Cursor` ### Changed - Minimum PHP version is now 5.6.5. - All full and partial regular expressions in `RegexHelper` are now defined as constants instead of being built on-the-fly. - `Cursor::saveState()` now returns an `array` instead of a `CursorState` object. - `Cursor::restoreState()` now accepts an `array` parameter instead of a `CursorState` object. - Saving/restoring the Cursor state no longer tracks things that don't change (like the text content). - `RegexHelper` is now `final`. - References to `InlineContainer` changed to new `InlineContainerInterface` interface. - `MiscExtension::addInlineParser()` and `MiscExtension::addBlockRenderer()` now return `$this` instead of nothing. ### Fixed - Fixed `Reference::normalizeReference()` not properly collapsing whitespace to a single space ### Deprecated - `RegexHelper::getInstance()` and all instance (non-static) methods have been deprecated. - The `InlineContainer` interface has been deprecated. Use `InlineContainerInterface` instead. ### Removed - Removed support for PHP 5.4 and 5.5. - Removed `CursorState` class - Removed all previous deprecations: - `Cursor::getFirstNonSpacePosition()` - `Cursor::getFirstNonSpaceCharacter()` - `Cursor::advanceWhileMatches()` - `Cursor::advanceToFirstNonSpace()` - `ElementRendererInterface::escape()` - `HtmlRenderer::escape()` - `RegexHelper::REGEX_UNICODE_WHITESPACE` - `RegexHelper::getLinkDestinationRegex()` ## [0.16.0] - 2017-10-30 This release contains breaking changes, several performance improvements, and two deprecations: ### Added - Added new `Xml` utility class; moved HTML/XML escaping logic into there (see deprecations below) ### Changed - `Environment::getInlineParsersForCharacter()` now returns an empty array (instead of `null`) when no matching parsers are found - Three utility classes are now marked `final`: - `Html5Entities` - `LinkParserHelper` - `UrlEncoder` ### Fixed - Improved performance of several methods (for a 10% overall performance boost - #292) ### Deprecated The following methods were deprecated and are scheduled for removal in 0.17.0 or 1.0.0 (whichever comes first). See for more information. - `Cursor::advanceWhileMatches()` deprecated; use `Cursor::match()` instead. - `HtmlRenderer::escape()` deprecated; use `Xml::escape()` instead. ### Removed - Removed `DelimiterStack::findFirstMatchingOpener()` which was previously deprecated in 0.15.0 ## [0.15.7] - 2017-10-26 ### Fixed - Improved performance of `Cursor::advanceBy()` (for a 16% performance boost) ## [0.15.6] - 2017-08-08 ### Fixed - Fixed URI normalization not properly encoding/decoding special characters in certain cases (#287) ## [0.15.5] - 2017-08-05 This release bumps spec compliance to 0.28 without breaking changes to the API. ### Added - Project is now tested against PHP 7.2 ### Changed - Bumped CommonMark spec target to 0.28 - Changed internal implementation of `LinkParserHelper::parseLinkDestination()` to allow nested parens - Changed precedence of strong/emph when both nestings are possible (rule 14) - Allow tabs before and after ATX closing header ### Fixed - Fixed HTML type 6 block regex matching against `
` (it shouldn't) and not matching `

<h1>Alternative content</h1>

<h1>Alternative content</h1>


foo</plaintext> MD; $expected = <<<'HTML' &lt;title>My Cool Website&lt;/title> &lt;textarea> foo=bar &lt;/textarea> &lt;style>* { display: none; &lt;/style> <p>&lt;xmp>Itallic font should be marked up using the <i> and </i> tags.&lt;/xmp></p> &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/dQw4w9WgXcQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe> <p>&lt;noembed><h1>Alternative content</h1>&lt;/noembed></p> &lt;noframes><h1>Alternative content</h1>&lt;/noframes> <hr> &lt;script type="application/javascript">alert('XSS is fun!')&lt;/script> &lt;plaintext>foo&lt;/plaintext> HTML; $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new DisallowedRawHtmlExtension()); $converter = new CommonMarkConverter([], $environment); $this->assertSame($expected, $converter->convertToHtml($input)); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/GithubFlavoredMarkdownExtensionTest.php������0000664�0000000�0000000�00000002361�13627337610�0033054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional\Extension; use League\CommonMark\GithubFlavoredMarkdownConverter; use League\CommonMark\Tests\Functional\AbstractSpecTest; class GithubFlavoredMarkdownExtensionTest extends AbstractSpecTest { protected function setUp() { $this->converter = new GithubFlavoredMarkdownConverter(); } protected function getFileName(): string { return __DIR__ . '/../../../vendor/github/gfm/test/spec.txt'; } public function dataProvider() { foreach ($this->loadSpecExamples() as $title => $data) { // In the GFM spec, standard CommonMark tests are tagged 'example' // and we don't want to test those (because we test those against the // official CommonMark spec), but we DO want to test the GFM-specific ones // which will be tagged something like 'example autolink' if ($data['type'] !== 'example') { yield $title => $data; } } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/InlinesOnly/���������������������������������0000775�0000000�0000000�00000000000�13627337610�0025437�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/InlinesOnly/InlinesOnlyFunctionalTest.php����0000664�0000000�0000000�00000003646�13627337610�0033307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional\Extension\InlinesOnly; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Converter; use League\CommonMark\DocParser; use League\CommonMark\Environment; use League\CommonMark\Extension\InlinesOnly\InlinesOnlyExtension; use League\CommonMark\HtmlRenderer; use PHPUnit\Framework\TestCase; /** * Tests the extension against sample files */ class InlinesOnlyFunctionalTest extends TestCase { /** * @var CommonMarkConverter */ protected $converter; protected function setUp() { $environment = new Environment(); $environment->addExtension(new InlinesOnlyExtension()); $this->converter = new Converter( new DocParser($environment), new HtmlRenderer($environment) ); } /** * @param string $markdown Markdown to parse * @param string $html Expected result * * @dataProvider dataProvider */ public function testExample($markdown, $html) { $actualResult = $this->converter->convertToHtml($markdown); $failureMessage = 'Unexpected result'; $failureMessage .= "\n=== markdown ===============\n" . $markdown; $failureMessage .= "\n=== expected ===============\n" . $html; $failureMessage .= "\n=== got ====================\n" . $actualResult; $this->assertEquals($html, $actualResult, $failureMessage); } /** * @return array */ public function dataProvider() { $markdown = file_get_contents(__DIR__ . '/inlines.md'); $html = file_get_contents(__DIR__ . '/inlines.html'); return [ [$markdown, $html], ]; } } ������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/InlinesOnly/inlines.html���������������������0000664�0000000�0000000�00000000406�13627337610�0027766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<strong>Bold text</strong> normal text Normal text and <em>italics text</em> too. Documentation is at <a href="https://commonmark.thephpleague.com">https://commonmark.thephpleague.com</a>. # This header will NOT be rendered in an h1 tag Two line breaks above ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/InlinesOnly/inlines.md�����������������������0000664�0000000�0000000�00000000303�13627337610�0027416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������**Bold text** normal text Normal text and _italics text_ too. Documentation is at <https://commonmark.thephpleague.com>. # This header will NOT be rendered in an h1 tag Two line breaks above �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/SmartPunct/����������������������������������0000775�0000000�0000000�00000000000�13627337610�0025274�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/SmartPunct/SmartPunctFunctionalTest.php������0000664�0000000�0000000�00000006370�13627337610�0032776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\SmartPunct; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Converter; use League\CommonMark\DocParser; use League\CommonMark\Environment; use League\CommonMark\Extension\SmartPunct\SmartPunctExtension; use League\CommonMark\HtmlRenderer; use PHPUnit\Framework\TestCase; /** * Tests the parser against the CommonMark spec */ class SmartPunctFunctionalTest extends TestCase { /** * @var CommonMarkConverter */ protected $converter; protected function setUp() { $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new SmartPunctExtension()); $this->converter = new Converter( new DocParser($environment), new HtmlRenderer($environment) ); } /** * @param string $markdown Markdown to parse * @param string $html Expected result * @param string $section Section of the spec * @param int $number Example number * * @dataProvider dataProvider */ public function testExample($markdown, $html, $section, $number) { $actualResult = $this->converter->convertToHtml($markdown); $failureMessage = sprintf('Unexpected result ("%s" section, example #%d)', $section, $number); $failureMessage .= "\n=== markdown ===============\n" . $markdown; $failureMessage .= "\n=== expected ===============\n" . $html; $failureMessage .= "\n=== got ====================\n" . $actualResult; $this->assertEquals($html, $actualResult, $failureMessage); } /** * @return array */ public function dataProvider() { $filename = __DIR__ . '/../../../../vendor/commonmark/commonmark.js/test/smart_punct.txt'; if (($data = file_get_contents($filename)) === false) { $this->fail(sprintf('Failed to load spec from %s', $filename)); } $matches = []; // Normalize newlines for platform independence $data = preg_replace('/\r\n?/', "\n", $data); $data = preg_replace('/<!-- END TESTS -->.*$/', '', $data); preg_match_all('/^`{32} example\n([\s\S]*?)^\.\n([\s\S]*?)^`{32}$|^#{1,6} *(.*)$/m', $data, $matches, PREG_SET_ORDER); $examples = []; $currentSection = ''; $exampleNumber = 0; foreach ($matches as $match) { if (isset($match[3])) { $currentSection = $match[3]; } else { $exampleNumber++; $markdown = $match[1]; $markdown = str_replace('→', "\t", $markdown); $examples[] = [ 'markdown' => $markdown, 'html' => $match[2], 'section' => $currentSection, 'number' => $exampleNumber, ]; } } return $examples; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/���������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024223�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/LocalDataTest.php����������������������0000664�0000000�0000000�00000004470�13627337610�0027425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php declare(strict_types=1); /* * This is part of the league/commonmark package. * * (c) Martin Hasoň <martin.hason@gmail.com> * (c) Webuni s.r.o. <info@webuni.cz> * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional\Extension\Table; use League\CommonMark\DocParser; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Environment; use League\CommonMark\Extension\Table\TableExtension; use League\CommonMark\HtmlRenderer; use PHPUnit\Framework\TestCase; /** * @internal */ class LocalDataTest extends TestCase { private $environment; private $parser; protected function setUp(): void { $this->environment = Environment::createCommonMarkEnvironment(); $this->environment->addExtension(new TableExtension()); $this->parser = new DocParser($this->environment); } /** * @dataProvider dataProvider */ public function testRenderer(string $markdown, string $html, string $testName): void { $renderer = new HtmlRenderer($this->environment); $this->assertCommonMark($renderer, $markdown, $html, $testName); } /** * @return array */ public function dataProvider() { $ret = []; foreach (glob(__DIR__ . '/data/*.md') as $markdownFile) { $testName = basename($markdownFile, '.md'); $markdown = file_get_contents($markdownFile); $html = file_get_contents(__DIR__ . '/data/' . $testName . '.html'); $ret[] = [$markdown, $html, $testName]; } return $ret; } protected function assertCommonMark(ElementRendererInterface $renderer, $markdown, $html, $testName): void { $documentAST = $this->parser->parse($markdown); $actualResult = $renderer->renderBlock($documentAST); $failureMessage = sprintf('Unexpected result for "%s" test', $testName); $failureMessage .= "\n=== markdown ===============\n" . $markdown; $failureMessage .= "\n=== expected ===============\n" . $html; $failureMessage .= "\n=== got ====================\n" . $actualResult; $this->assertEquals($html, $actualResult, $failureMessage); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/����������������������������������0000775�0000000�0000000�00000000000�13627337610�0025134�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/aesthetic_table.html��������������0000664�0000000�0000000�00000000300�13627337610�0031133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<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> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/aesthetic_table.md����������������0000664�0000000�0000000�00000000140�13627337610�0030571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| header 1 | header 2 | | -------- | -------- | | cell 1.1 | cell 1.2 | | cell 2.1 | cell 2.2 | ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/aligned_table.html����������������0000664�0000000�0000000�00000000564�13627337610�0030601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th align="left">header 1</th> <th align="center">header 2</th> <th align="right">header 2</th> </tr> </thead> <tbody> <tr> <td align="left">cell 1.1</td> <td align="center">cell 1.2</td> <td align="right">cell 1.3</td> </tr> <tr> <td align="left">cell 2.1</td> <td align="center">cell 2.2</td> <td align="right">cell 2.3</td> </tr> </tbody> </table> ��������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/aligned_table.md������������������0000664�0000000�0000000�00000000214�13627337610�0030225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| header 1 | header 2 | header 2 | | :------- | :------: | -------: | | cell 1.1 | cell 1.2 | cell 1.3 | | cell 2.1 | cell 2.2 | cell 2.3 | ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/end_whitespaces.html��������������0000664�0000000�0000000�00000000261�13627337610�0031166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>Th 1</th> <th>Th 2</th> <th>Th 3</th> <th></th> </tr> </thead> <tbody> <tr> <td>td1</td> <td>td2</td> <td>td3</td> <td>td4</td> </tr> </tbody> </table> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/end_whitespaces.md����������������0000664�0000000�0000000�00000000132�13627337610�0030617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| Th 1 | Th 2 | Th 3 | | |------|------|------|-----| | td1 | td2 | td3 | td4 | ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/simple_table.html�����������������0000664�0000000�0000000�00000000656�13627337610�0030471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<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> <hr /> <table> <thead> <tr> <th align="left">header 1</th> <th>header 2</th> </tr> </thead> <tbody> <tr> <td align="left">cell 1.1</td> <td>cell 1.2</td> </tr> <tr> <td align="left">cell 2.1</td> <td>cell 2.2</td> </tr> </tbody> </table> ����������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/simple_table.md�������������������0000664�0000000�0000000�00000000246�13627337610�0030120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������header 1 | header 2 -------- | -------- cell 1.1 | cell 1.2 cell 2.1 | cell 2.2 --- header 1 | header 2 :------- | -------- cell 1.1 | cell 1.2 cell 2.1 | cell 2.2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/single_column_table.html����������0000664�0000000�0000000�00000000600�13627337610�0032023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> </tbody> </table> <table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> <tr> <td>`</td> </tr> </tbody> </table> <table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> <tr> <td>| not a cell |</td> </tr> </tbody> </table> ��������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/single_column_table.md������������0000664�0000000�0000000�00000000246�13627337610�0031465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| header 1 | | -------- | | cell 1.1 | | header 1 | | -------- | | cell 1.1 | `| not a cell |` | header 1 | | -------- | | cell 1.1 | \| not a cell \| ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������single_column_table_and_block_elements.html���������������������������������������������������������0000664�0000000�0000000�00000000373�13627337610�0035643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�php-league-commonmark-1.3.1/tests/functional/Extension/Table/data������������������������������������������������������������������������������������������������������<p>Paragraph</p> <table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> <tr> <td>Not a paragraph</td> </tr> </tbody> </table> <p>Paragraph</p> <p>Paragraph and not a table | header 1 | | -------- | | cell 1.1 |</p> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������single_column_table_and_block_elements.md�����������������������������������������������������������0000664�0000000�0000000�00000000217�13627337610�0035274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�php-league-commonmark-1.3.1/tests/functional/Extension/Table/data������������������������������������������������������������������������������������������������������Paragraph | header 1 | | -------- | | cell 1.1 | Not a paragraph Paragraph Paragraph and not a table | header 1 | | -------- | | cell 1.1 | ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/single_column_table_caption.html��0000664�0000000�0000000�00000000506�13627337610�0033545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> <tr> <td>[Simple table]</td> </tr> </tbody> </table> <table> <thead> <tr> <th>header 1</th> </tr> </thead> <tbody> <tr> <td>cell 1.1</td> </tr> <tr> <td>[Not a caption]</td> </tr> <tr> <td>[Simple table 2]</td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/single_column_table_caption.md����0000664�0000000�0000000�00000000211�13627337610�0033172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| header 1 | | -------- | | cell 1.1 | [Simple table] | header 1 | | -------- | | cell 1.1 | | [Not a caption] [Simple table 2]���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-aligned.html����������������0000664�0000000�0000000�00000000332�13627337610�0030510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th align="center">th(center)</th> <th align="right">th(right)</th> </tr> </thead> <tbody> <tr> <td>td</td> <td align="center">td</td> <td align="right">td</td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-aligned.md������������������0000664�0000000�0000000�00000000125�13627337610�0030144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������th | th(center) | th(right) ---|:----------:|----------: td | td | td�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-and-block-elements.html�����0000664�0000000�0000000�00000000665�13627337610�0032562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<h1>H1</h1> <h2>H2</h2> <table> <thead> <tr> <th>th</th> <th>th</th> </tr> </thead> <tbody> <tr> <td>td</td> <td>td</td> </tr> </tbody> </table> <ul> <li>list</li> <li>list</li> </ul> <p>Paragraph th | th ---|--- td | td</p> <table> <thead> <tr> <th>th</th> <th>th</th> </tr> </thead> <tbody> <tr> <td>td</td> <td>td</td> </tr> <tr> <td>Paragraph</td> <td></td> </tr> </tbody> </table> <p>Paragraph th | th ---|--- td | td Paragraph</p> ���������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-and-block-elements.md�������0000664�0000000�0000000�00000000254�13627337610�0032210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������H1 ==== H2 ---- th | th ---|--- td | td * list * list Paragraph th | th ---|--- td | td th | th ---|--- td | td Paragraph Paragraph th | th ---|--- td | td Paragraph ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-caption.html����������������0000664�0000000�0000000�00000001411�13627337610�0030541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<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> <tr> <td>[Simple table]</td> <td></td> </tr> </tbody> </table> <table> <thead> <tr> <th align="left">First Header</th> <th align="center">Second Header</th> <th align="right">Third Header</th> </tr> </thead> <tbody> <tr> <td align="left">First row</td> <td align="center">Data</td> <td align="right">Very long data entry</td> </tr> <tr> <td align="left">Second row</td> <td align="center"><strong>Cell</strong></td> <td align="right"><em>Cell</em></td> </tr> <tr> <td align="left">[<em>Prototype</em> table][reference_table]</td> <td align="center"></td> <td align="right"></td> </tr> </tbody> </table> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-caption.md������������������0000664�0000000�0000000�00000001411�13627337610�0030175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<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> <tr> <td>[Simple table]</td> <td></td> </tr> </tbody> </table> <table> <thead> <tr> <th align="left">First Header</th> <th align="center">Second Header</th> <th align="right">Third Header</th> </tr> </thead> <tbody> <tr> <td align="left">First row</td> <td align="center">Data</td> <td align="right">Very long data entry</td> </tr> <tr> <td align="left">Second row</td> <td align="center"><strong>Cell</strong></td> <td align="right"><em>Cell</em></td> </tr> <tr> <td align="left">[<em>Prototype</em> table][reference_table]</td> <td align="center"></td> <td align="right"></td> </tr> </tbody> </table> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-inline-styles-in-cell.html��0000664�0000000�0000000�00000000243�13627337610�0033226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th>th <code>code</code></th> </tr> </thead> <tbody> <tr> <td>td</td> <td>td <strong>strong</strong></td> </tr> </tbody> </table> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-inline-styles-in-cell.md����0000664�0000000�0000000�00000000071�13627337610�0032661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������th | th `code` ---| ----------------- td | td **strong** �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-invalid-body.html�����������0000664�0000000�0000000�00000000217�13627337610�0031470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th>th</th> <th>th</th> </tr> </thead> <tbody> <tr> <td>td</td> <td>td</td> <td></td> </tr> </tbody> </table> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-invalid-body.md�������������0000664�0000000�0000000�00000000043�13627337610�0031121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������th | th | th ---|----|---- td | td ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-outer-pipe.html�������������0000664�0000000�0000000�00000000171�13627337610�0031177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th>th</th> </tr> </thead> <tbody> <tr> <td>td</td> <td>td</td> </tr> </tbody> </table> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-outer-pipe.md���������������0000664�0000000�0000000�00000000040�13627337610�0030626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| th | th | | ---| -- td | td | ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-pipe-in-cell.html�����������0000664�0000000�0000000�00000000200�13627337610�0031355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th>th and |</th> </tr> </thead> <tbody> <tr> <td>t|d</td> <td>td</td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-pipe-in-cell.md�������������0000664�0000000�0000000�00000000103�13627337610�0031013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| th | th and \| | | ----- | ---------- | | t\|d | td | �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-zero.html�������������������0000664�0000000�0000000�00000000170�13627337610�0030064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th>th</th> <th>th</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>td</td> </tr> </tbody> </table> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table-zero.md���������������������0000664�0000000�0000000�00000000030�13627337610�0027513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������th | th ---| -- 0 | td ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table_inline_markdown.html��������0000664�0000000�0000000�00000000530�13627337610�0032347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<table> <thead> <tr> <th><em>header</em> 1</th> <th><strong>header 2</strong></th> </tr> </thead> <tbody> <tr> <td><em>cell</em> 1.1</td> <td><strong>cell</strong> 1.2</td> </tr> <tr> <td>`</td> <td>` 2.1</td> </tr> <tr> <td><code>|</code> 2.1</td> <td><a href="/">link</a></td> </tr> <tr> <td>_cell_ 4.1</td> <td></td> </tr> </tbody> </table> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/table_inline_markdown.md����������0000664�0000000�0000000�00000000300�13627337610�0031776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| _header_ 1 | **header 2** | | ------------ | ------------ | | _cell_ 1.1 | **cell** 1.2 | | `|` 2.1 | \| 2.2 | | `\|` 2.1 | [link](/) | | \_cell\_ 4.1 | | ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/untidy_table.html�����������������0000664�0000000�0000000�00000000300�13627337610�0030476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<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> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/Extension/Table/data/untidy_table.md�������������������0000664�0000000�0000000�00000000172�13627337610�0030141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������| header 1 | header 2 | | ------------- | ----------- | | cell 1.1 | cell 1.2 | | cell 2.1 | cell 2.2 | ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/HtmlInputTest.php��������������������������������������0000664�0000000�0000000�00000004453�13627337610�0024523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use PHPUnit\Framework\TestCase; class HtmlInputTest extends TestCase { public function testDefaultConfig() { $input = file_get_contents(__DIR__ . '/data/html_input/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/html_input/unsafe_output.html')); $converter = new CommonMarkConverter(); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } public function testAllowHtmlInputConfig() { $input = file_get_contents(__DIR__ . '/data/html_input/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/html_input/unsafe_output.html')); $converter = new CommonMarkConverter(['html_input' => Environment::HTML_INPUT_ALLOW]); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } public function testEscapeHtmlInputConfig() { $input = file_get_contents(__DIR__ . '/data/html_input/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/html_input/escaped_output.html')); $converter = new CommonMarkConverter(['html_input' => Environment::HTML_INPUT_ESCAPE]); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } public function testStripHtmlInputConfig() { $input = file_get_contents(__DIR__ . '/data/html_input/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/html_input/safe_output.html')); $converter = new CommonMarkConverter(['html_input' => Environment::HTML_INPUT_STRIP]); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/LocalDataTest.php��������������������������������������0000664�0000000�0000000�00000004224�13627337610�0024417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; use League\CommonMark\CommonMarkConverter; use PHPUnit\Framework\TestCase; use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\SplFileInfo; /** * Tests the parser against locally-stored examples * * This is particularly useful for testing minor variations allowed by the spec * or small regressions not tested by the spec. */ class LocalDataTest extends TestCase { /** * @var CommonMarkConverter */ protected $converter; protected function setUp() { $this->converter = new CommonMarkConverter(); } /** * @param string $markdown Markdown to parse * @param string $html Expected result * @param string $testName Name of the test * * @dataProvider dataProvider */ public function testExample($markdown, $html, $testName) { $actualResult = $this->converter->convertToHtml($markdown); $failureMessage = sprintf('Unexpected result for "%s" test', $testName); $failureMessage .= "\n=== markdown ===============\n" . $markdown; $failureMessage .= "\n=== expected ===============\n" . $html; $failureMessage .= "\n=== got ====================\n" . $actualResult; $this->assertEquals($html, $actualResult, $failureMessage); } /** * @return array */ public function dataProvider() { $finder = new Finder(); $finder->files() ->in(__DIR__ . '/data') ->depth('== 0') ->name('*.md'); $ret = []; /** @var SplFileInfo $markdownFile */ foreach ($finder as $markdownFile) { $testName = $markdownFile->getBasename('.md'); $markdown = $markdownFile->getContents(); $html = file_get_contents(__DIR__ . '/data/' . $testName . '.html'); $ret[] = [$markdown, $html, $testName]; } return $ret; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/MaximumNestingLevelTest.php����������������������������0000664�0000000�0000000�00000002335�13627337610�0026531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; use League\CommonMark\CommonMarkConverter; use PHPUnit\Framework\TestCase; class MaximumNestingLevelTest extends TestCase { public function testThatWeCanHitTheLimit() { $converter = new CommonMarkConverter(['max_nesting_level' => 2]); $markdown = '> > Foo'; $expected = '<blockquote> <blockquote> <p>Foo</p> </blockquote> </blockquote> '; $this->assertEquals($expected, $converter->convertToHtml($markdown)); } public function testThatWeCannotExceedTheLimit() { $converter = new CommonMarkConverter(['max_nesting_level' => 2]); $markdown = '> > > > > > Foo'; $expected = '<blockquote> <blockquote> <p>&gt; &gt; &gt; &gt; Foo</p> </blockquote> </blockquote> '; $this->assertEquals($expected, $converter->convertToHtml($markdown)); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/RegressionTest.php�������������������������������������0000664�0000000�0000000�00000001233�13627337610�0024710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; /** * Tests the parser against the CommonMark spec */ class RegressionTest extends AbstractSpecTest { protected function getFileName(): string { return __DIR__ . '/../../vendor/commonmark/commonmark.js/test/regression.txt'; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/SafeLinksTest.php��������������������������������������0000664�0000000�0000000�00000002527�13627337610�0024456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; use League\CommonMark\CommonMarkConverter; use PHPUnit\Framework\TestCase; class SafeLinksTest extends TestCase { public function testDefaultConfig() { $input = file_get_contents(__DIR__ . '/data/safe_links/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/safe_links/unsafe_output.html')); $converter = new CommonMarkConverter(); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } public function testSafeConfig() { $input = file_get_contents(__DIR__ . '/data/safe_links/input.md'); $expectedOutput = trim(file_get_contents(__DIR__ . '/data/safe_links/safe_output.html')); $converter = new CommonMarkConverter(['allow_unsafe_links' => false]); $actualOutput = trim($converter->convertToHtml($input)); $this->assertEquals($expectedOutput, $actualOutput); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/SpecTest.php�������������������������������������������0000664�0000000�0000000�00000001217�13627337610�0023464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional; /** * Tests the parser against the CommonMark spec */ class SpecTest extends AbstractSpecTest { protected function getFileName(): string { return __DIR__ . '/../../vendor/commonmark/commonmark.js/test/spec.txt'; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/��������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022131�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/atx_heading.html����������������������������������0000664�0000000�0000000�00000000220�13627337610�0025264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<h1>H1</h1> <h2>H2</h2> <h3>H3</h3> <h4>H4</h4> <h5>H5</h5> <h6>H6</h6> <h1>H1</h1> <h2>H2</h2> <h3>H3</h3> <h4>H4</h4> <h5>H5</h5> <h6>H6</h6> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/atx_heading.md������������������������������������0000664�0000000�0000000�00000000200�13627337610�0024716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# H1 ## H2 ### H3 #### H4 ##### H5 ###### H6 # H1 # ## H2 ## ### H3 ### #### H4 #### ##### H5 ##### ###### H6 ###### ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/�����������������������������������������0000775�0000000�0000000�00000000000�13627337610�0023742�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/asterisks.html���������������������������0000664�0000000�0000000�00000000166�13627337610�0026643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><em>Foo</em> <strong>bar</strong> <strong><em>hello</em> world</strong></p> <p>_Foo_ __bar__ ___hello_ world__</p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/disabled.html����������������������������0000664�0000000�0000000�00000000116�13627337610�0026375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>*Foo* **bar** ***hello* world**</p> <p>_Foo_ __bar__ ___hello_ world__</p> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/em.html����������������������������������0000664�0000000�0000000�00000000152�13627337610�0025227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><em>Foo</em> **bar** **<em>hello</em> world**</p> <p><em>Foo</em> __bar__ __<em>hello</em> world__</p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/emstrong.html����������������������������0000664�0000000�0000000�00000000236�13627337610�0026467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><em>Foo</em> <strong>bar</strong> <strong><em>hello</em> world</strong></p> <p><em>Foo</em> <strong>bar</strong> <strong><em>hello</em> world</strong></p> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/input.md���������������������������������0000664�0000000�0000000�00000000101�13627337610�0025413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������*Foo* **bar** ***hello* world** _Foo_ __bar__ ___hello_ world__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/strong.html������������������������������0000664�0000000�0000000�00000000202�13627337610�0026136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>*Foo* <strong>bar</strong> *<strong>hello* world</strong></p> <p>_Foo_ <strong>bar</strong> _<strong>hello_ world</strong></p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/emphasis/underscores.html�������������������������0000664�0000000�0000000�00000000166�13627337610�0027167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>*Foo* **bar** ***hello* world**</p> <p><em>Foo</em> <strong>bar</strong> <strong><em>hello</em> world</strong></p> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/entities.html�������������������������������������0000664�0000000�0000000�00000000027�13627337610�0024642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>&amp; before ©</p> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/entities.md���������������������������������������0000664�0000000�0000000�00000000020�13627337610�0024267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������& before &copy; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/html_input/���������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024314�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/html_input/escaped_output.html��������������������0000664�0000000�0000000�00000000222�13627337610�0030222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������&lt;div onclick="alert('XSS')"&gt;click me&lt;/div&gt; &lt;script&gt;alert("XSS")&lt;/script&gt; &lt;script&gt; alert("XSS"); &lt;/script&gt; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/html_input/input.md�������������������������������0000664�0000000�0000000�00000000160�13627337610�0025772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div onclick="alert('XSS')">click me</div> <script>alert("XSS")</script> <script> alert("XSS"); </script> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/html_input/safe_output.html�����������������������0000664�0000000�0000000�00000000002�13627337610�0027530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/html_input/unsafe_output.html���������������������0000664�0000000�0000000�00000000156�13627337610�0030105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<div onclick="alert('XSS')">click me</div> <script>alert("XSS")</script> <script> alert("XSS"); </script> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/list_regressions.html�����������������������������0000664�0000000�0000000�00000001117�13627337610�0026415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<ul> <li>list</li> </ul> <hr /> <hr /> <ul> <li> <p>foo</p> <pre><code> bar </code></pre> </li> </ul> <hr /> <hr /> <ul> <li> <pre><code> code </code></pre> </li> </ul> <hr /> <hr /> <ul> <li> <p>foo</p> <pre><code> bar </code></pre> </li> </ul> <hr /> <hr /> <ul> <li> <p>foo</p> <pre><code> bar </code></pre> </li> </ul> <hr /> <hr /> <ol> <li> <pre><code> hi </code></pre> </li> </ol> <hr /> <hr /> <ul> <li> <p>foo</p> <pre><code> bar </code></pre> </li> </ul> <hr /> <hr /> <ul> <li>foo <ul> <li>bar</li> </ul> </li> </ul> <hr /> <hr /> <ul> <li>foo <ul> <li>bar</li> </ul> </li> </ul> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/list_regressions.md�������������������������������0000664�0000000�0000000�00000000320�13627337610�0026044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ - list --- --- - foo bar --- --- - code --- --- - foo bar --- --- - foo bar --- --- 1. hi --- --- - foo bar --- --- * foo * bar --- --- * foo * bar����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe/���������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0023047�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe/input.md�������������������������������������0000664�0000000�0000000�00000000770�13627337610�0024534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Click me](javascript:alert('XSS')) <javascript:alert("XSS")> <div onclick="alert('XSS')">click me</div> <script>alert("XSS")</script> <script> alert("XSS"); </script> ![Inline image](data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7)��������php-league-commonmark-1.3.1/tests/functional/data/safe/safe_output.html�����������������������������0000664�0000000�0000000�00000000650�13627337610�0026274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><a>Click me</a></p> <p><a>javascript:alert(&quot;XSS&quot;)</a></p> <p><img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="Inline image" /></p>����������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe/unsafe_output.html���������������������������0000664�0000000�0000000�00000001125�13627337610�0026635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><a href="javascript:alert('XSS')">Click me</a></p> <p><a href="javascript:alert(%22XSS%22)">javascript:alert(&quot;XSS&quot;)</a></p> <div onclick="alert('XSS')">click me</div> <script>alert("XSS")</script> <script> alert("XSS"); </script> <p><img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="Inline image" /></p>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe_links/���������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024247�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe_links/input.md�������������������������������0000664�0000000�0000000�00000007144�13627337610�0025736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Click me](javascript:alert('XSS')) [Click me](java%0Ascript:alert("XSS")) <javascript:alert("XSS")> ![Inline image](data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7) ![Inline image](xx" onerror="javascript:alert(1)) <javas\x00cript:javascript:alert(1)> <javas\x01cript:javascript:alert(1)> <javas\x02cript:javascript:alert(1)> <javas\x03cript:javascript:alert(1)> <javas\x04cript:javascript:alert(1)> <javas\x05cript:javascript:alert(1)> <javas\x06cript:javascript:alert(1)> <javas\x07cript:javascript:alert(1)> <javas\x08cript:javascript:alert(1)> javas\x09cript:javascript:alert(1)> <javas\x0Acript:javascript:alert(1)> <javas\x0Bcript:javascript:alert(1)> <javas\x0Ccript:javascript:alert(1)> <javas\x0Dcript:javascript:alert(1)> <javascript\x3Ajavascript:alert(1)> <\x0Bjavascript:javascript:alert(1)> <\x0Fjavascript:javascript:alert(1)> <\xC2\xA0javascript:javascript:alert(1)> <\x05javascript:javascript:alert(1)> <\xE1\xA0\x8Ejavascript:javascript:alert(1)> <\x18javascript:javascript:alert(1)> <\x11javascript:javascript:alert(1)> <\xE2\x80\x88javascript:javascript:alert(1)> <\xE2\x80\x89javascript:javascript:alert(1)> <\xE2\x80\x80javascript:javascript:alert(1)> <\x17javascript:javascript:alert(1)> <\x03javascript:javascript:alert(1)> <\x0Ejavascript:javascript:alert(1)> <\x1Ajavascript:javascript:alert(1)> <\x00javascript:javascript:alert(1)> <\x10javascript:javascript:alert(1)> <\xE2\x80\x82javascript:javascript:alert(1)> <\x20javascript:javascript:alert(1)> <\x13javascript:javascript:alert(1)> <\x09javascript:javascript:alert(1)> <\xE2\x80\x8Ajavascript:javascript:alert(1)> <\x14javascript:javascript:alert(1)> <\x19javascript:javascript:alert(1)> <\xE2\x80\xAFjavascript:javascript:alert(1)> <\x1Fjavascript:javascript:alert(1)> <\xE2\x80\x81javascript:javascript:alert(1)> <\x1Djavascript:javascript:alert(1)> <\xE2\x80\x87javascript:javascript:alert(1)> <\x07javascript:javascript:alert(1)> <\xE1\x9A\x80javascript:javascript:alert(1)> <\xE2\x80\x83javascript:javascript:alert(1)> <\x04javascript:javascript:alert(1)> <\x01javascript:javascript:alert(1)> <\x08javascript:javascript:alert(1)> <\xE2\x80\x84javascript:javascript:alert(1)> <\xE2\x80\x86javascript:javascript:alert(1)> <\xE3\x80\x80javascript:javascript:alert(1)> <\x12javascript:javascript:alert(1)> <\x0Djavascript:javascript:alert(1)> <\x0Ajavascript:javascript:alert(1)> <\x0Cjavascript:javascript:alert(1)> <\x15javascript:javascript:alert(1)> <\xE2\x80\xA8javascript:javascript:alert(1)> <\x16javascript:javascript:alert(1)> <\x02javascript:javascript:alert(1)> <\x1Bjavascript:javascript:alert(1)> <\x06javascript:javascript:alert(1)> <\xE2\x80\xA9javascript:javascript:alert(1)> <\xE2\x80\x85javascript:javascript:alert(1)> <\x1Ejavascript:javascript:alert(1)> <\xE2\x81\x9Fjavascript:javascript:alert(1)> <\x1Cjavascript:javascript:alert(1)> <javascript\x00:javascript:alert(1)> <javascript\x3A:javascript:alert(1)> <javascript\x09:javascript:alert(1)> <javascript\x0D:javascript:alert(1)> <javascript\x0A:javascript:alert(1)> <java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)> <jav&#65ascript:javascript:alert(1)> <jav&#97ascript:javascript:alert(1)> <jAvAsCrIpT:alert(1)> [XSS](javascript:alert%28&#039;XSS&#039;%29) [XSS](javascript&colon;alert%28&#039;XSS&#039;%29) [XSS](javascript&amp;colon;alert%28&#039;XSS&#039;%29) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe_links/safe_output.html�����������������������0000664�0000000�0000000�00000011054�13627337610�0027474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><a>Click me</a></p> <p><a href="java%0Ascript:alert(%22XSS%22)">Click me</a></p> <p><a>javascript:alert(&quot;XSS&quot;)</a></p> <p><img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="Inline image" /></p> <p>![Inline image](xx&quot; onerror=&quot;javascript:alert(1))</p> <p>&lt;javas\x00cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x01cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x02cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x03cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x04cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x05cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x06cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x07cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x08cript:javascript:alert(1)&gt;</p> <p>javas\x09cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Acript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Bcript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Ccript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Dcript:javascript:alert(1)&gt;</p> <p>&lt;javascript\x3Ajavascript:alert(1)&gt;</p> <p>&lt;\x0Bjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\xC2\xA0javascript:javascript:alert(1)&gt;</p> <p>&lt;\x05javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE1\xA0\x8Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\x18javascript:javascript:alert(1)&gt;</p> <p>&lt;\x11javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x88javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x89javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\x17javascript:javascript:alert(1)&gt;</p> <p>&lt;\x03javascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x00javascript:javascript:alert(1)&gt;</p> <p>&lt;\x10javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x82javascript:javascript:alert(1)&gt;</p> <p>&lt;\x20javascript:javascript:alert(1)&gt;</p> <p>&lt;\x13javascript:javascript:alert(1)&gt;</p> <p>&lt;\x09javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x8Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x14javascript:javascript:alert(1)&gt;</p> <p>&lt;\x19javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xAFjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x81javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Djavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x87javascript:javascript:alert(1)&gt;</p> <p>&lt;\x07javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE1\x9A\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x83javascript:javascript:alert(1)&gt;</p> <p>&lt;\x04javascript:javascript:alert(1)&gt;</p> <p>&lt;\x01javascript:javascript:alert(1)&gt;</p> <p>&lt;\x08javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x84javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x86javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE3\x80\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\x12javascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Djavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Cjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x15javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xA8javascript:javascript:alert(1)&gt;</p> <p>&lt;\x16javascript:javascript:alert(1)&gt;</p> <p>&lt;\x02javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Bjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x06javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xA9javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x85javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x81\x9Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Cjavascript:javascript:alert(1)&gt;</p> <p>&lt;javascript\x00:javascript:alert(1)&gt;</p> <p>&lt;javascript\x3A:javascript:alert(1)&gt;</p> <p>&lt;javascript\x09:javascript:alert(1)&gt;</p> <p>&lt;javascript\x0D:javascript:alert(1)&gt;</p> <p>&lt;javascript\x0A:javascript:alert(1)&gt;</p> <p>&lt;java&amp;#1&amp;#2&amp;#3&amp;#4&amp;#5&amp;#6&amp;#7&amp;#8&amp;#11&amp;#12script:javascript:alert(1)&gt;</p> <p>&lt;jav&amp;#65ascript:javascript:alert(1)&gt;</p> <p>&lt;jav&amp;#97ascript:javascript:alert(1)&gt;</p> <p><a>jAvAsCrIpT:alert(1)</a></p> <p><a>XSS</a></p> <p><a>XSS</a></p> <p><a href="javascript&amp;colon;alert%28'XSS'%29">XSS</a></p> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/functional/data/safe_links/unsafe_output.html���������������������0000664�0000000�0000000�00000011317�13627337610�0030041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p><a href="javascript:alert('XSS')">Click me</a></p> <p><a href="java%0Ascript:alert(%22XSS%22)">Click me</a></p> <p><a href="javascript:alert(%22XSS%22)">javascript:alert(&quot;XSS&quot;)</a></p> <p><img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="Inline image" /></p> <p>![Inline image](xx&quot; onerror=&quot;javascript:alert(1))</p> <p>&lt;javas\x00cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x01cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x02cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x03cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x04cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x05cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x06cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x07cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x08cript:javascript:alert(1)&gt;</p> <p>javas\x09cript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Acript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Bcript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Ccript:javascript:alert(1)&gt;</p> <p>&lt;javas\x0Dcript:javascript:alert(1)&gt;</p> <p>&lt;javascript\x3Ajavascript:alert(1)&gt;</p> <p>&lt;\x0Bjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\xC2\xA0javascript:javascript:alert(1)&gt;</p> <p>&lt;\x05javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE1\xA0\x8Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\x18javascript:javascript:alert(1)&gt;</p> <p>&lt;\x11javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x88javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x89javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\x17javascript:javascript:alert(1)&gt;</p> <p>&lt;\x03javascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x00javascript:javascript:alert(1)&gt;</p> <p>&lt;\x10javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x82javascript:javascript:alert(1)&gt;</p> <p>&lt;\x20javascript:javascript:alert(1)&gt;</p> <p>&lt;\x13javascript:javascript:alert(1)&gt;</p> <p>&lt;\x09javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x8Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x14javascript:javascript:alert(1)&gt;</p> <p>&lt;\x19javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xAFjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x81javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Djavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x87javascript:javascript:alert(1)&gt;</p> <p>&lt;\x07javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE1\x9A\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x83javascript:javascript:alert(1)&gt;</p> <p>&lt;\x04javascript:javascript:alert(1)&gt;</p> <p>&lt;\x01javascript:javascript:alert(1)&gt;</p> <p>&lt;\x08javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x84javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x86javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE3\x80\x80javascript:javascript:alert(1)&gt;</p> <p>&lt;\x12javascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Djavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Ajavascript:javascript:alert(1)&gt;</p> <p>&lt;\x0Cjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x15javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xA8javascript:javascript:alert(1)&gt;</p> <p>&lt;\x16javascript:javascript:alert(1)&gt;</p> <p>&lt;\x02javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Bjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x06javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\xA9javascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x80\x85javascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Ejavascript:javascript:alert(1)&gt;</p> <p>&lt;\xE2\x81\x9Fjavascript:javascript:alert(1)&gt;</p> <p>&lt;\x1Cjavascript:javascript:alert(1)&gt;</p> <p>&lt;javascript\x00:javascript:alert(1)&gt;</p> <p>&lt;javascript\x3A:javascript:alert(1)&gt;</p> <p>&lt;javascript\x09:javascript:alert(1)&gt;</p> <p>&lt;javascript\x0D:javascript:alert(1)&gt;</p> <p>&lt;javascript\x0A:javascript:alert(1)&gt;</p> <p>&lt;java&amp;#1&amp;#2&amp;#3&amp;#4&amp;#5&amp;#6&amp;#7&amp;#8&amp;#11&amp;#12script:javascript:alert(1)&gt;</p> <p>&lt;jav&amp;#65ascript:javascript:alert(1)&gt;</p> <p>&lt;jav&amp;#97ascript:javascript:alert(1)&gt;</p> <p><a href="jAvAsCrIpT:alert(1)">jAvAsCrIpT:alert(1)</a></p> <p><a href="javascript:alert%28'XSS'%29">XSS</a></p> <p><a href="javascript:alert%28'XSS'%29">XSS</a></p> <p><a href="javascript&amp;colon;alert%28'XSS'%29">XSS</a></p> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/�������������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0020035�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/�������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0021067�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/�����������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022460�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/AbstractBlockTest.php��������������������������0000664�0000000�0000000�00000005744�13627337610�0026561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\ContextInterface; use League\CommonMark\Inline\Element\AbstractInline; use PHPUnit\Framework\TestCase; class AbstractBlockTest extends TestCase { public function testSetParent() { $block = $this->getMockForAbstractClass(AbstractBlock::class); $parent = $this->createMock(AbstractBlock::class); self::getMethod('setParent')->invoke($block, $parent); $this->assertSame($parent, $block->parent()); self::getMethod('setParent')->invoke($block, null); $this->assertNull($block->parent()); } /** * @expectedException \InvalidArgumentException */ public function testSetParentWithInvalidNode() { $block = $this->getMockForAbstractClass(AbstractBlock::class); $inline = $this->getMockForAbstractClass(AbstractInline::class); self::getMethod('setParent')->invoke($block, $inline); } public function testGetStartLine() { $block = $this->getMockForAbstractClass(AbstractBlock::class); self::getProperty('startLine')->setValue($block, 42); $this->assertEquals(42, $block->getStartLine()); } public function testGetSetEndLine() { $block = $this->getMockForAbstractClass(AbstractBlock::class); $block->setEndLine(42); $this->assertEquals(42, $block->getEndLine()); } public function testFinalize() { $block = $this->getMockForAbstractClass(AbstractBlock::class); $this->assertTrue($block->isOpen()); $context = $this->getMockForAbstractClass(ContextInterface::class); $context->method('getTip')->willReturn($this->getMockForAbstractClass(AbstractBlock::class)); $block->finalize($context, 7); $this->assertFalse($block->isOpen()); $this->assertEquals(7, $block->getEndLine()); // Try to re-finalize - there should be no effect $block->finalize($context, 42); $this->assertFalse($block->isOpen()); $this->assertEquals(7, $block->getEndLine()); } private static function getMethod(string $name): \ReflectionMethod { $class = new \ReflectionClass(AbstractBlock::class); $method = $class->getMethod($name); $method->setAccessible(true); return $method; } private static function getProperty(string $name): \ReflectionProperty { $class = new \ReflectionClass(AbstractBlock::class); $property = $class->getProperty($name); $property->setAccessible(true); return $property; } } ����������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/DocumentTest.php�������������������������������0000664�0000000�0000000�00000003253�13627337610�0025612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\Document; use League\CommonMark\Cursor; use League\CommonMark\Reference\ReferenceMap; use League\CommonMark\Reference\ReferenceMapInterface; use PHPUnit\Framework\TestCase; class DocumentTest extends TestCase { public function testDefaultConstructorAndGetReferenceMap() { $document = new Document(); $this->assertInstanceOf(ReferenceMap::class, $document->getReferenceMap()); } public function testReferenceMapPassedIntoConstructor() { $map = $this->createMock(ReferenceMapInterface::class); $document = new Document($map); $this->assertSame($map, $document->getReferenceMap()); } public function testCanContain() { $document = new Document(); $block = $this->createMock(AbstractBlock::class); $this->assertTrue($document->canContain($block)); } public function testIsCode() { $document = new Document(); $this->assertFalse($document->isCode()); } public function testMatchesNextLine() { $document = new Document(); $cursor = $this->createMock(Cursor::class); $this->assertTrue($document->matchesNextLine($cursor)); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/FencedCodeTest.php�����������������������������0000664�0000000�0000000�00000004705�13627337610�0026016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Element\FencedCode; use League\CommonMark\Context; use PHPUnit\Framework\TestCase; class FencedCodeTest extends TestCase { public function testConstructorAndGetters() { $fencedCode = new FencedCode(3, '~', 4); $this->assertEquals(3, $fencedCode->getLength()); $this->assertEquals('~', $fencedCode->getChar()); $this->assertEquals(4, $fencedCode->getOffset()); } public function testSetChar() { $fencedCode = new FencedCode(3, '~', 4); $fencedCode->setChar('`'); $this->assertEquals('`', $fencedCode->getChar()); } public function testSetLength() { $fencedCode = new FencedCode(3, '~', 4); $fencedCode->setLength(4); $this->assertEquals(4, $fencedCode->getLength()); } public function testSetOffset() { $fencedCode = new FencedCode(3, '~', 4); $fencedCode->setOffset(6); $this->assertEquals(6, $fencedCode->getOffset()); } public function testCanContain() { $fencedCode = new FencedCode(3, '~', 4); $block = $this->createMock(AbstractBlock::class); $this->assertFalse($fencedCode->canContain($block)); } public function testIsCode() { $fencedCode = new FencedCode(3, '~', 4); $this->assertTrue($fencedCode->isCode()); } public function testFinalizeAndGetInfo() { $fencedCode = new FencedCode(3, '~', 4); $fencedCode->addLine('ruby startline=3'); $fencedCode->addLine('hello world'); $context = $this->createMock(Context::class); $context->method('getTip')->willReturn(new Document()); $fencedCode->finalize($context, 7); $this->assertEquals('ruby startline=3', $fencedCode->getInfo()); $this->assertEquals(['ruby', 'startline=3'], $fencedCode->getInfoWords()); $this->assertEquals("hello world\n", $fencedCode->getStringContent()); } } �����������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/HeadingTest.php��������������������������������0000664�0000000�0000000�00000002531�13627337610�0025371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\Heading; use League\CommonMark\Cursor; use PHPUnit\Framework\TestCase; class HeadingTest extends TestCase { public function testConstructorAndGetLevel() { $heading = new Heading(1, 'CommonMark'); $this->assertEquals(1, $heading->getLevel()); } public function testCanContain() { $heading = new Heading(1, 'CommonMark'); $block = $this->createMock(AbstractBlock::class); $this->assertFalse($heading->canContain($block)); } public function testIsCode() { $heading = new Heading(1, 'CommonMark'); $this->assertFalse($heading->isCode()); } public function testMatchesNextLine() { $heading = new Heading(1, 'CommonMark'); $cursor = $this->createMock(Cursor::class); $this->assertFalse($heading->matchesNextLine($cursor)); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/HtmlBlockTest.php������������������������������0000664�0000000�0000000�00000002526�13627337610�0025715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\HtmlBlock; use PHPUnit\Framework\TestCase; class HtmlBlockTest extends TestCase { public function testConstructor() { $htmlBlock = new HtmlBlock(HtmlBlock::TYPE_3); $this->assertSame(HtmlBlock::TYPE_3, $htmlBlock->getType()); } public function testGetSetType() { $htmlBlock = new HtmlBlock(HtmlBlock::TYPE_3); $htmlBlock->setType(HtmlBlock::TYPE_4); $this->assertSame(HtmlBlock::TYPE_4, $htmlBlock->getType()); } public function testCanContain() { $htmlBlock = new HtmlBlock(HtmlBlock::TYPE_3); $block = $this->createMock(AbstractBlock::class); $this->assertFalse($htmlBlock->canContain($block)); } public function testIsCode() { $htmlBlock = new HtmlBlock(HtmlBlock::TYPE_3); $this->assertTrue($htmlBlock->isCode()); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/IndentedCodeTest.php���������������������������0000664�0000000�0000000�00000001701�13627337610�0026355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\IndentedCode; use PHPUnit\Framework\TestCase; class IndentedCodeTest extends TestCase { public function testCanContain() { $indentedCode = new IndentedCode(); $block = $this->createMock(AbstractBlock::class); $this->assertFalse($indentedCode->canContain($block)); } public function testIsCode() { $indentedCode = new IndentedCode(); $this->assertTrue($indentedCode->isCode()); } } ���������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/ListBlockTest.php������������������������������0000664�0000000�0000000�00000002200�13627337610�0025711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\ListBlock; use League\CommonMark\Block\Element\ListData; use PHPUnit\Framework\TestCase; class ListBlockTest extends TestCase { public function testConstructorAndGetListData() { $listData = $this->createMock(ListData::class); $listBlock = new ListBlock($listData); $this->assertSame($listData, $listBlock->getListData()); } public function testSetTight() { $listData = $this->createMock(ListData::class); $listBlock = new ListBlock($listData); $listBlock->setTight(true); $this->assertTrue($listBlock->isTight()); $listBlock->setTight(false); $this->assertFalse($listBlock->isTight()); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/ListItemTest.php�������������������������������0000664�0000000�0000000�00000001466�13627337610�0025572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\ListData; use League\CommonMark\Block\Element\ListItem; use PHPUnit\Framework\TestCase; class ListItemTest extends TestCase { public function testConstructorAndGetListData() { $listData = $this->createMock(ListData::class); $listBlock = new ListItem($listData); $this->assertSame($listData, $listBlock->getListData()); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Element/ThematicBreakTest.php��������������������������0000664�0000000�0000000�00000002305�13627337610�0026534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Element; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\ThematicBreak; use League\CommonMark\Cursor; use PHPUnit\Framework\TestCase; class ThematicBreakTest extends TestCase { public function testCanContain() { $thematicBreak = new ThematicBreak(); $block = $this->createMock(AbstractBlock::class); $this->assertFalse($thematicBreak->canContain($block)); } public function testIsCode() { $thematicBreak = new ThematicBreak(); $this->assertFalse($thematicBreak->isCode()); } public function testMatchesNextLine() { $thematicBreak = new ThematicBreak(); $cursor = $this->createMock(Cursor::class); $this->assertFalse($thematicBreak->matchesNextLine($cursor)); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Parser/������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022323�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Parser/ListParserTest.php������������������������������0000664�0000000�0000000�00000013053�13627337610�0025766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Parser; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Element\ListBlock; use League\CommonMark\Block\Element\ListItem; use League\CommonMark\Block\Parser\ListParser; use League\CommonMark\Context; use League\CommonMark\Cursor; use League\CommonMark\Environment; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; final class ListParserTest extends TestCase { public function testOrderedListStartingAtOne() { $input = '1. Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_ORDERED, $container->getListData()->type); $this->assertSame(1, $container->getListData()->start); } public function testOrderedListStartingAtTwo() { $input = '2. Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_ORDERED, $container->getListData()->type); $this->assertSame(2, $container->getListData()->start); } public function testUnorderedListWithDashMarker() { $input = '- Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_UNORDERED, $container->getListData()->type); $this->assertSame('-', $container->getListData()->bulletChar); } public function testUnorderedListWithAsteriskMarker() { $input = '* Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_UNORDERED, $container->getListData()->type); $this->assertSame('*', $container->getListData()->bulletChar); } public function testUnorderedListWithPlusMarker() { $input = '+ Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_UNORDERED, $container->getListData()->type); $this->assertSame('+', $container->getListData()->bulletChar); } public function testUnorderedListWithCustomMarker() { $input = '^ Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $parser->setConfiguration(new Configuration(['unordered_list_markers' => ['^']])); $this->assertTrue($parser->parse($context, $cursor)); $container = $context->getContainer(); $this->assertTrue($container instanceof ListItem); /** @var ListItem $container */ $this->assertSame(ListBlock::TYPE_UNORDERED, $container->getListData()->type); $this->assertSame('^', $container->getListData()->bulletChar); } public function testUnorderedListWithDisabledMarker() { $input = '+ Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $parser->setConfiguration(new Configuration(['unordered_list_markers' => ['-', '*']])); $this->assertFalse($parser->parse($context, $cursor)); } public function testInvalidListMarkerConfiguration() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Invalid configuration option "unordered_list_markers": value must be an array of strings'); $input = '+ Foo'; $context = new Context(new Document(), new Environment()); $context->setNextLine($input); $cursor = new Cursor($input); $parser = new ListParser(); $parser->setConfiguration(new Configuration(['unordered_list_markers' => '-'])); $parser->parse($context, $cursor); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/����������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022635�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/BlockQuoteRendererTest.php��������������������0000664�0000000�0000000�00000004462�13627337610�0027753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\BlockQuote; use League\CommonMark\Block\Renderer\BlockQuoteRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeEmptyHtmlRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class BlockQuoteRendererTest extends TestCase { /** * @var BlockQuoteRenderer */ protected $renderer; protected function setUp() { $this->renderer = new BlockQuoteRenderer(); } public function testRenderEmptyBlockQuote() { $block = new BlockQuote(); $block->data['attributes'] = ['id' => 'id']; $fakeRenderer = new FakeEmptyHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('blockquote', $result->getTagName()); $this->assertEmpty($result->getContents(true)); $this->assertEquals(['id' => 'id'], $result->getAllAttributes()); } public function testRenderBlockQuote() { $block = new BlockQuote(); $block->data['attributes'] = ['id' => 'id']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('blockquote', $result->getTagName()); $this->assertContains('::blocks::', $result->getContents(true)); $this->assertEquals(['id' => 'id'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/DocumentRendererTest.php����������������������0000664�0000000�0000000�00000003513�13627337610�0027455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Renderer\DocumentRenderer; use League\CommonMark\Tests\Unit\FakeEmptyHtmlRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class DocumentRendererTest extends TestCase { /** * @var DocumentRenderer */ protected $renderer; protected function setUp() { $this->renderer = new DocumentRenderer(); } public function testRenderEmptyDocument() { $block = new Document(); $fakeRenderer = new FakeEmptyHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertEmpty($result); } public function testRenderDocument() { $block = new Document(); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('::blocks::', $result); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/FencedCodeRendererTest.php��������������������0000664�0000000�0000000�00000006372�13627337610�0027664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Element\FencedCode; use League\CommonMark\Block\Renderer\FencedCodeRenderer; use League\CommonMark\Context; use League\CommonMark\Environment; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class FencedCodeRendererTest extends TestCase { /** * @var FencedCodeRenderer */ protected $renderer; protected function setUp() { $this->renderer = new FencedCodeRenderer(); } public function testRenderWithLanguageSpecified() { $document = new Document(); $context = new Context($document, new Environment()); $block = new FencedCode(3, '~', 0); $block->addLine('php'); $block->addLine('echo "hello world!";'); $block->data['attributes'] = ['id' => 'foo', 'class' => 'bar']; $document->appendChild($block); $block->finalize($context, 1); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('pre', $result->getTagName()); $code = $result->getContents(false); $this->assertTrue($code instanceof HtmlElement); $this->assertEquals('code', $code->getTagName()); $this->assertContains('bar language-php', $code->getAttribute('class')); $this->assertContains('hello world', $code->getContents(true)); } public function testRenderWithoutLanguageSpecified() { $document = new Document(); $context = new Context($document, new Environment()); $block = new FencedCode(3, '~', 0); $block->addLine(''); $block->addLine('echo "hello world!";'); $block->data['attributes'] = ['id' => 'foo', 'class' => 'bar']; $document->appendChild($block); $block->finalize($context, 1); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('pre', $result->getTagName()); $code = $result->getContents(false); $this->assertTrue($code instanceof HtmlElement); $this->assertEquals('code', $code->getTagName()); $this->assertEquals('bar', $code->getAttribute('class')); $this->assertContains('hello world', $code->getContents(true)); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/HeadingRendererTest.php�����������������������0000664�0000000�0000000�00000004115�13627337610�0027235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\Heading; use League\CommonMark\Block\Renderer\HeadingRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class HeadingRendererTest extends TestCase { /** * @var HeadingRenderer */ protected $renderer; protected function setUp() { $this->renderer = new HeadingRenderer(); } /** * @param int $level * @param string $expectedTag * * @dataProvider dataForTestRender */ public function testRender($level, $expectedTag) { $block = new Heading($level, 'test'); $block->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals($expectedTag, $result->getTagName()); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } public function dataForTestRender() { return [ [1, 'h1'], [2, 'h2'], [3, 'h3'], [4, 'h4'], [5, 'h5'], [6, 'h6'], ]; } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/HtmlBlockRendererTest.php���������������������0000664�0000000�0000000�00000010673�13627337610�0027563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\HtmlBlock; use League\CommonMark\Block\Renderer\HtmlBlockRenderer; use League\CommonMark\Environment; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; class HtmlBlockRendererTest extends TestCase { /** * @var HtmlBlockRenderer */ protected $renderer; protected function setUp() { $this->renderer = new HtmlBlockRenderer(); $this->renderer->setConfiguration(new Configuration()); } public function testRender() { /** @var HtmlBlock|\PHPUnit_Framework_MockObject_MockObject $block */ $block = $this->getMockBuilder(\League\CommonMark\Block\Element\HtmlBlock::class) ->setConstructorArgs([HtmlBlock::TYPE_6_BLOCK_ELEMENT]) ->getMock(); $block->expects($this->any()) ->method('getStringContent') ->will($this->returnValue('<button>Test</button>')); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('<button>Test</button>', $result); } public function testRenderAllowHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_ALLOW, ])); /** @var HtmlBlock|\PHPUnit_Framework_MockObject_MockObject $block */ $block = $this->getMockBuilder(\League\CommonMark\Block\Element\HtmlBlock::class) ->setConstructorArgs([HtmlBlock::TYPE_6_BLOCK_ELEMENT]) ->getMock(); $block->expects($this->any()) ->method('getStringContent') ->will($this->returnValue('<button>Test</button>')); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('<button>Test</button>', $result); } public function testRenderEscapeHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_ESCAPE, ])); /** @var HtmlBlock|\PHPUnit_Framework_MockObject_MockObject $block */ $block = $this->getMockBuilder(\League\CommonMark\Block\Element\HtmlBlock::class) ->setConstructorArgs([HtmlBlock::TYPE_6_BLOCK_ELEMENT]) ->getMock(); $block->expects($this->any()) ->method('getStringContent') ->will($this->returnValue('<button class="test">Test</button>')); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('&lt;button class="test"&gt;Test&lt;/button&gt;', $result); } public function testRenderStripHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_STRIP, ])); /** @var HtmlBlock|\PHPUnit_Framework_MockObject_MockObject $block */ $block = $this->getMockBuilder(\League\CommonMark\Block\Element\HtmlBlock::class) ->setConstructorArgs([HtmlBlock::TYPE_6_BLOCK_ELEMENT]) ->getMock(); $block->expects($this->any()) ->method('getStringContent') ->will($this->returnValue('<button>Test</button>')); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertEquals('', $result); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ���������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/IndentedCodeRendererTest.php������������������0000664�0000000�0000000�00000004426�13627337610�0030230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Element\IndentedCode; use League\CommonMark\Block\Renderer\IndentedCodeRenderer; use League\CommonMark\Context; use League\CommonMark\Environment; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class IndentedCodeRendererTest extends TestCase { /** * @var IndentedCodeRenderer */ protected $renderer; protected function setUp() { $this->renderer = new IndentedCodeRenderer(); } public function testRender() { $document = new Document(); $context = new Context($document, new Environment()); $block = new IndentedCode(); $block->data['attributes'] = ['id' => 'foo']; $block->addLine('echo "hello world!";'); $document->appendChild($block); $block->finalize($context, 1); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('pre', $result->getTagName()); $code = $result->getContents(false); $this->assertTrue($code instanceof HtmlElement); $this->assertEquals('code', $code->getTagName()); $this->assertNull($code->getAttribute('class')); $this->assertEquals(['id' => 'foo'], $code->getAllAttributes()); $this->assertContains('hello world', $code->getContents(true)); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/ListBlockRendererTest.php���������������������0000664�0000000�0000000�00000006557�13627337610�0027600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\ListBlock; use League\CommonMark\Block\Element\ListData; use League\CommonMark\Block\Renderer\ListBlockRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class ListBlockRendererTest extends TestCase { /** * @var ListBlockRenderer */ protected $renderer; protected function setUp() { $this->renderer = new ListBlockRenderer(); } /** * @param int|null $listStart * @param mixed $expectedAttributeValue * * @dataProvider dataForTestOrderedListStartingNumber */ public function testRenderOrderedList($listStart = null, $expectedAttributeValue = null) { $list = $this->createOrderedListBlock($listStart); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($list, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('ol', $result->getTagName()); $this->assertSame($expectedAttributeValue, $result->getAttribute('start')); $this->assertContains('::blocks::', $result->getContents(true)); $this->assertEquals('foo', $result->getAttribute('id')); } public function dataForTestOrderedListStartingNumber() { return [ [null, null], [0, '0'], [1, null], [2, '2'], [42, '42'], ]; } public function testRenderUnorderedList() { $list = $this->createUnorderedListBlock(); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($list, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('ul', $result->getTagName()); $this->assertContains('::blocks::', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } /** * @param int $start * * @return ListBlock */ private function createOrderedListBlock($start) { $data = new ListData(); $data->type = ListBlock::TYPE_ORDERED; $data->start = $start; $block = new ListBlock($data); $block->data['attributes'] = ['id' => 'foo']; return $block; } /** * @return ListBlock */ protected function createUnorderedListBlock() { $data = new ListData(); $data->type = ListBlock::TYPE_UNORDERED; $block = new ListBlock($data); $block->data['attributes'] = ['id' => 'foo']; return $block; } } �������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/ListItemRendererTest.php����������������������0000664�0000000�0000000�00000003332�13627337610�0027430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\ListData; use League\CommonMark\Block\Element\ListItem; use League\CommonMark\Block\Renderer\ListItemRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class ListItemRendererTest extends TestCase { /** * @var ListItemRenderer */ protected $renderer; protected function setUp() { $this->renderer = new ListItemRenderer(); } public function testRenderUnorderedList() { $block = new ListItem(new ListData()); $block->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('li', $result->getTagName()); $this->assertEquals('<li id="foo">::blocks::</li>', $result->__toString()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/ParagraphRendererTest.php���������������������0000664�0000000�0000000�00000003327�13627337610�0027607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\Paragraph; use League\CommonMark\Block\Renderer\ParagraphRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class ParagraphRendererTest extends TestCase { /** * @var ParagraphRenderer */ protected $renderer; protected function setUp() { $this->renderer = new ParagraphRenderer(); } public function testRender() { $block = new Paragraph(); $block->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('p', $result->getTagName()); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Block/Renderer/ThematicBreakRendererTest.php�����������������0000664�0000000�0000000�00000003045�13627337610�0030402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Block\Renderer; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Block\Element\ThematicBreak; use League\CommonMark\Block\Renderer\ThematicBreakRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class ThematicBreakRendererTest extends TestCase { /** * @var ThematicBreakRenderer */ protected $renderer; protected function setUp() { $this->renderer = new ThematicBreakRenderer(); } public function testRender() { $block = new ThematicBreak(); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($block, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('hr', $result->getTagName()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(BlockElement\AbstractBlock::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/CommonMarkConverterTest.php����������������������������������0000664�0000000�0000000�00000004472�13627337610�0025350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\CommonMarkConverter; use League\CommonMark\ConfigurableEnvironmentInterface; use League\CommonMark\Environment; use League\CommonMark\Extension\CommonMarkCoreExtension; use PHPUnit\Framework\TestCase; class CommonMarkConverterTest extends TestCase { public function testEmptyConstructor() { $converter = new CommonMarkConverter(); $expectedEnvironment = Environment::createCommonMarkEnvironment(); $environment = $converter->getEnvironment(); $this->assertCount(1, $environment->getExtensions()); $this->assertInstanceOf(CommonMarkCoreExtension::class, $environment->getExtensions()[0]); $this->assertEquals($expectedEnvironment->getConfig(), $environment->getConfig()); } public function testConfigOnlyConstructor() { $config = ['foo' => 'bar']; $converter = new CommonMarkConverter($config); $environment = $converter->getEnvironment(); $this->assertCount(1, $environment->getExtensions()); $this->assertInstanceOf(CommonMarkCoreExtension::class, $environment->getExtensions()[0]); $this->assertArrayHasKey('foo', $environment->getConfig()); } public function testEnvironmentAndConfigConstructor() { $config = ['foo' => 'bar']; $mockEnvironment = $this->createMock(ConfigurableEnvironmentInterface::class); $mockEnvironment->expects($this->once()) ->method('mergeConfig') ->with($config); $converter = new CommonMarkConverter($config, $mockEnvironment); $environment = $converter->getEnvironment(); $this->assertSame($mockEnvironment, $environment); } /** * @expectedException \League\CommonMark\Exception\UnexpectedEncodingException */ public function testConvertingInvalidUTF8() { $converter = new CommonMarkConverter(); $converter->convertToHtml("\x09\xca\xca"); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/ConverterTest.php��������������������������������������������0000664�0000000�0000000�00000002176�13627337610�0023363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Converter; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject; class ConverterTest extends TestCase { public function testInvokeReturnsSameOutputAsConvertToHtml() { $inputMarkdown = '**Strong**'; $expectedHtml = '<strong>Strong</strong>'; /** @var Converter|PHPUnit_Framework_MockObject_MockObject $converter */ $converter = $this->getMockBuilder(Converter::class) ->disableOriginalConstructor() ->setMethods(['convertToHtml']) ->getMock(); $converter->method('convertToHtml')->with($inputMarkdown)->willReturn($expectedHtml); $this->assertSame($expectedHtml, $converter($inputMarkdown)); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/CursorTest.php�����������������������������������������������0000664�0000000�0000000�00000030513�13627337610�0022665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Cursor; use PHPUnit\Framework\TestCase; class CursorTest extends TestCase { public function testConstructor() { $cursor = new Cursor('foo'); $this->assertEquals('foo', $cursor->getLine()); } /** * @param $string * @param $expectedPosition * @param $expectedCharacter * * @dataProvider dataForTestingNextNonSpaceMethods */ public function testGetNextNonSpacePosition($string, $expectedPosition, $expectedCharacter) { $cursor = new Cursor($string); $this->assertEquals($expectedPosition, $cursor->getNextNonSpacePosition()); } /** * @param $string * @param $expectedPosition * @param $expectedCharacter * * @dataProvider dataForTestingNextNonSpaceMethods */ public function testGetNextNonSpaceCharacter($string, $expectedPosition, $expectedCharacter) { $cursor = new Cursor($string); $this->assertEquals($expectedCharacter, $cursor->getNextNonSpaceCharacter()); } public function dataForTestingNextNonSpaceMethods() { return [ ['', 0, null], [' ', 1, null], [' ', 2, null], ['foo', 0, 'f'], [' foo', 1, 'f'], [' foo', 2, 'f'], ['тест', 0, 'т'], [' т', 1, 'т'], ]; } /** * @param $string * @param $position * @param $expectedValue * * @dataProvider dataForGetIndentTest */ public function testGetIndent($string, $position, $expectedValue) { $cursor = new Cursor($string); $cursor->advanceBy($position); $this->assertEquals($expectedValue, $cursor->getIndent()); } public function dataForGetIndentTest() { return [ ['', 0, 0], [' ', 0, 1], [' ', 1, 0], [' ', 0, 4], [' ', 1, 3], [' ', 2, 2], [' ', 3, 1], ['foo', 0, 0], ['foo', 1, 0], [' foo', 0, 1], [' foo', 1, 0], [' foo', 0, 2], [' foo', 1, 1], [' foo', 2, 0], [' foo', 3, 0], ['тест', 0, 0], ['тест', 1, 0], [' тест', 0, 1], [' тест', 1, 0], ]; } /** * @param $string * @param $index * @param $expectedValue * * @dataProvider dataForGetCharacterTest */ public function testGetCharacter($string, $index, $expectedValue) { $cursor = new Cursor($string); $this->assertEquals($expectedValue, $cursor->getCharacter($index)); } public function dataForGetCharacterTest() { return [ ['', null, ''], ['', 0, ''], ['', 1, ''], ['foo', null, 'f'], ['foo', 0, 'f'], ['foo', 1, 'o'], [' тест ', 0, ' '], [' тест ', 1, 'т'], [' тест ', 2, 'е'], [' тест ', 3, 'с'], [' тест ', 4, 'т'], [' тест ', 5, ' '], ]; } /** * @param $string * @param $position * @param $expectedValue * * @dataProvider dataForPeekTest */ public function testPeek($string, $position, $expectedValue) { $cursor = new Cursor($string); $cursor->advanceBy($position); $this->assertEquals($expectedValue, $cursor->peek()); } public function dataForPeekTest() { return [ ['', 0, ''], [' ', 0, ''], ['', 99, ''], ['foo', 0, 'o'], ['bar', 1, 'r'], ['тест ', 1, 'с'], ]; } /** * @param $string * @param $expectedValue * * @dataProvider dataForIsLineBlankTest */ public function testIsLineBlank($string, $expectedValue) { $cursor = new Cursor($string); $this->assertEquals($expectedValue, $cursor->isBlank()); } public function dataForIsLineBlankTest() { return [ ['', true], [' ', true], [' ', true], ['foo', false], [' foo', false], ['тест', false], ]; } /** * @param $string * @param $numberOfAdvances * @param $expectedPosition * * @dataProvider dataForAdvanceTest */ public function testAdvance($string, $numberOfAdvances, $expectedPosition) { $cursor = new Cursor($string); while ($numberOfAdvances--) { $cursor->advance(); } $this->assertEquals($expectedPosition, $cursor->getPosition()); } public function dataForAdvanceTest() { return [ ['', 0, 0], ['', 1, 0], ['', 99, 0], ['foo', 0, 0], ['foo', 1, 1], ['foo', 2, 2], ['foo', 3, 3], ['foo', 9, 3], ['тест', 0, 0], ['тест', 1, 1], ['тест', 2, 2], ['тест', 3, 3], ['тест', 4, 4], ['тест', 9, 4], ]; } /** * @param $string * @param $advance * @param $expectedPosition * * @dataProvider dataForAdvanceTestBy */ public function testAdvanceBy($string, $advance, $expectedPosition) { $cursor = new Cursor($string); $cursor->advanceBy($advance); $this->assertEquals($expectedPosition, $cursor->getPosition()); } public function dataForAdvanceTestBy() { return [ ['', 0, 0], ['', 1, 0], ['', 99, 0], ['foo', 0, 0], ['foo', 1, 1], ['foo', 2, 2], ['foo', 3, 3], ['foo', 9, 3], ['тест', 0, 0], ['тест', 1, 1], ['тест', 2, 2], ['тест', 3, 3], ['тест', 4, 4], ['тест', 9, 4], ["aa\t1234", 7, 7], ]; } public function testAdvanceByZero() { $cursor = new Cursor('foo bar'); $cursor->advance(); $this->assertEquals(1, $cursor->getPosition()); $cursor->advanceBy(0); $this->assertEquals(1, $cursor->getPosition()); } public function testAdvanceByColumnOffset() { $cursor = new Cursor("1. \t\tthere"); $cursor->advanceBy(3); $this->assertEquals(5, $cursor->getIndent()); $this->assertEquals(3, $cursor->getPosition()); $this->assertEquals(3, $cursor->getColumn()); $cursor->advanceBy(4, true); $this->assertEquals(1, $cursor->getIndent()); $this->assertEquals(4, $cursor->getPosition()); $this->assertEquals(7, $cursor->getColumn()); } /** * @param $subject * @param $startPos * @param $expectedResult * * @dataProvider dataForAdvanceToNextNonSpaceTest */ public function testAdvanceToNextNonSpace($subject, $startPos, $expectedResult) { $cursor = new Cursor($subject); $cursor->advanceBy($startPos); $this->assertEquals($expectedResult, $cursor->advanceToNextNonSpaceOrTab()); } public function dataForAdvanceToNextNonSpaceTest() { return [ ['', 0, 0], [' ', 0, 1], [' ', 1, 0], [' ', 0, 2], [' ', 1, 1], [' ', 2, 0], ['foo bar', 0, 0], ['foo bar', 3, 1], ['foo bar', 4, 0], ['это тест', 0, 0], ['это тест', 3, 1], ['это тест', 4, 0], ["\tbar", 0, 1], [" \n \n ", 0, 2], [" \n \n ", 1, 1], [" \n \n ", 2, 0], [" \n \n ", 3, 2], [" \n \n ", 4, 1], ]; } /** * @param $subject * @param $startPos * @param $expectedResult * * @dataProvider dataForAdvanceToNextNonSpaceOrNewlineTest */ public function testAdvanceToNextNonSpaceOrNewline($subject, $startPos, $expectedResult) { $cursor = new Cursor($subject); $cursor->advanceBy($startPos); $this->assertEquals($expectedResult, $cursor->advanceToNextNonSpaceOrNewline()); } public function dataForAdvanceToNextNonSpaceOrNewlineTest() { return [ ['', 0, 0], [' ', 0, 1], [' ', 1, 0], [' ', 0, 2], [' ', 1, 1], [' ', 2, 0], ['foo bar', 0, 0], ['foo bar', 3, 1], ['foo bar', 4, 0], ['это тест', 0, 0], ['это тест', 3, 1], ['это тест', 4, 0], ["\tbar", 0, 0], [" \n \n ", 0, 5], [" \n \n ", 1, 4], [" \n \n ", 2, 3], [" \n \n ", 3, 5], [" \n \n ", 4, 4], ]; } /** * @param $string * @param $position * @param $expectedResult * * @dataProvider dataForGetRemainderTest */ public function testGetRemainder($string, $position, $expectedResult) { $cursor = new Cursor($string); $cursor->advanceBy($position); $this->assertEquals($expectedResult, $cursor->getRemainder()); } public function dataForGetRemainderTest() { return [ [' ', 0, ' '], [' ', 0, ' '], [' ', 1, ' '], ['foo bar', 0, 'foo bar'], ['foo bar', 2, 'o bar'], ['это тест', 1, 'то тест'], ]; } /** * @param $string * @param $advanceBy * @param $expectedValue * * @dataProvider dataForIsAtEndTest */ public function testIsAtEnd($string, $advanceBy, $expectedValue) { $cursor = new Cursor($string); if ($advanceBy === null) { $cursor->advance(); } elseif ($advanceBy !== false) { $cursor->advanceBy($advanceBy); } $this->assertEquals($expectedValue, $cursor->isAtEnd()); } public function dataForIsAtEndTest() { return [ ['', false, true], [' ', 0, false], [' ', null, true], [' ', 1, true], ['foo', 2, false], ['foo', 3, true], ['тест', 4, true], ]; } /** * @param string $string * @param string $regex * @param int $initialPosition * @param int $expectedPosition * @param string $expectedResult * * @dataProvider dataForTestMatch */ public function testMatch($string, $regex, $initialPosition, $expectedPosition, $expectedResult) { $cursor = new Cursor($string); $cursor->advanceBy($initialPosition); $result = $cursor->match($regex); $this->assertEquals($expectedResult, $result); $this->assertEquals($expectedPosition, $cursor->getPosition()); } /** * @return array */ public function dataForTestMatch() { return [ ['this is a test', '/[aeiou]s/', 0, 4, 'is'], ['this is a test', '/[aeiou]s/', 2, 4, 'is'], ['this is a test', '/[aeiou]s/', 3, 7, 'is'], ['this is a test', '/[aeiou]s/', 9, 13, 'es'], ['Это тест', '/т/u', 0, 2, 'т'], ['Это тест', '/т/u', 1, 2, 'т'], ['Это тест', '/т/u', 2, 5, 'т'], ]; } /** * @param string $string * @param int $start * @param int|null $length * @param string $expectedResult * * @dataProvider dataForTestGetSubstring */ public function testGetSubstring($string, $start, $length, $expectedResult) { $cursor = new Cursor($string); $this->assertSame($expectedResult, $cursor->getSubstring($start, $length)); } public function dataForTestGetSubstring() { yield ['Hello', 0, 2, 'He']; yield ['Hello', 1, 3, 'ell']; yield ['Hello', 1, null, 'ello']; yield ['Это тест', 1, -1, 'то тес']; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Delimiter/���������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0021753�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Delimiter/DelimiterProcessorCollectionTest.php���������������0000664�0000000�0000000�00000003757�13627337610�0031172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Delimiter; use League\CommonMark\Delimiter\Processor\DelimiterProcessorCollection; use League\CommonMark\Delimiter\Processor\DelimiterProcessorInterface; use PHPUnit\Framework\TestCase; class DelimiterProcessorCollectionTest extends TestCase { public function testAddNewProcessor() { $collection = new DelimiterProcessorCollection(); $processor1 = $this->getMockForAbstractClass(DelimiterProcessorInterface::class); $processor1->method('getOpeningCharacter')->willReturn('*'); $processor1->method('getClosingCharacter')->willReturn('*'); $collection->add($processor1); $processor2 = $this->getMockForAbstractClass(DelimiterProcessorInterface::class); $processor2->method('getOpeningCharacter')->willReturn('_'); $processor2->method('getClosingCharacter')->willReturn('_'); $collection->add($processor2); $this->assertSame($processor1, $collection->getDelimiterProcessor('*')); $this->assertSame($processor2, $collection->getDelimiterProcessor('_')); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Delim processor for character "*" already exists */ public function testAddProcessorForCharacterAlreadyRegistered() { $collection = new DelimiterProcessorCollection(); $processor1 = $this->getMockForAbstractClass(DelimiterProcessorInterface::class); $processor1->method('getOpeningCharacter')->willReturn('*'); $collection->add($processor1); $processor2 = $this->getMockForAbstractClass(DelimiterProcessorInterface::class); $processor2->method('getOpeningCharacter')->willReturn('*'); $collection->add($processor2); } } �����������������php-league-commonmark-1.3.1/tests/unit/Delimiter/DelimiterTest.php����������������������������������0000664�0000000�0000000�00000006313�13627337610�0025245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Delimiter; use League\CommonMark\Delimiter\Delimiter; use League\CommonMark\Inline\Element\AbstractStringContainer; use PHPUnit\Framework\TestCase; class DelimiterTest extends TestCase { public function testConstructorAndGetters() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $this->assertSame('*', $delimiter->getChar()); $this->assertSame(2, $delimiter->getLength()); $this->assertSame(2, $delimiter->getOriginalLength()); $this->assertSame($node, $delimiter->getInlineNode()); $this->assertTrue($delimiter->canOpen()); $this->assertFalse($delimiter->canClose()); $this->assertNull($delimiter->getIndex()); $delimiter = new Delimiter('_', 1, $node, false, true, 7); $this->assertSame('_', $delimiter->getChar()); $this->assertSame(1, $delimiter->getLength()); $this->assertSame(1, $delimiter->getOriginalLength()); $this->assertSame($node, $delimiter->getInlineNode()); $this->assertFalse($delimiter->canOpen()); $this->assertTrue($delimiter->canClose()); $this->assertSame(7, $delimiter->getIndex()); } public function testSetCanClose() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $delimiter->setCanClose(true); $this->assertTrue($delimiter->canClose()); } public function testSetActive() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $delimiter->setActive(true); $this->assertTrue($delimiter->isActive()); $delimiter->setActive(false); $this->assertFalse($delimiter->isActive()); } public function testSetNext() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $delimiter->setNext($delimiter); $this->assertSame($delimiter, $delimiter->getNext()); $delimiter->setNext(null); $this->assertNull($delimiter->getNext()); } public function testSetLength() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $delimiter->setLength(3); $this->assertSame(3, $delimiter->getLength()); $this->assertSame(2, $delimiter->getOriginalLength()); } public function testSetPrevious() { $node = $this->createMock(AbstractStringContainer::class); $delimiter = new Delimiter('*', 2, $node, true, false, null); $delimiter->setPrevious($delimiter); $this->assertSame($delimiter, $delimiter->getPrevious()); $delimiter->setPrevious(null); $this->assertNull($delimiter->getPrevious()); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/DocParserTest.php��������������������������������������������0000664�0000000�0000000�00000001356�13627337610�0023275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\DocParser; use League\CommonMark\Environment; use PHPUnit\Framework\TestCase; class DocParserTest extends TestCase { /** * @expectedException \League\CommonMark\Exception\UnexpectedEncodingException */ public function testParsingWithInvalidUTF8() { $environment = Environment::createCommonMarkEnvironment(); $docParser = new DocParser($environment); $docParser->parse("\x09\xca\xca"); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/EnvironmentTest.php������������������������������������������0000664�0000000�0000000�00000037412�13627337610�0023721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Block\Parser as BlockParser; use League\CommonMark\Block\Parser\BlockParserInterface; use League\CommonMark\Block\Renderer\BlockRendererInterface; use League\CommonMark\Delimiter\Processor\DelimiterProcessorInterface; use League\CommonMark\Environment; use League\CommonMark\EnvironmentAwareInterface; use League\CommonMark\Extension\ExtensionInterface; use League\CommonMark\Inline\Parser\InlineParserInterface; use League\CommonMark\Inline\Renderer\InlineRendererInterface; use League\CommonMark\Tests\Unit\Event\FakeEvent; use League\CommonMark\Util\ConfigurationAwareInterface; use PHPUnit\Framework\TestCase; class EnvironmentTest extends TestCase { public function testAddGetExtensions() { $environment = new Environment(); $this->assertCount(0, $environment->getExtensions()); $firstExtension = $this->createMock(ExtensionInterface::class); $firstExtension->expects($this->once()) ->method('register') ->with($environment); $environment->addExtension($firstExtension); $extensions = $environment->getExtensions(); $this->assertCount(1, $extensions); $this->assertEquals($firstExtension, $extensions[0]); $secondExtension = $this->createMock(ExtensionInterface::class); $secondExtension->expects($this->once()) ->method('register') ->with($environment); $environment->addExtension($secondExtension); $extensions = $environment->getExtensions(); $this->assertCount(2, $extensions); $this->assertEquals($firstExtension, $extensions[0]); $this->assertEquals($secondExtension, $extensions[1]); // Trigger initialization $environment->getBlockParsers(); } public function testConstructor() { $config = ['foo' => 'bar']; $environment = new Environment($config); $this->assertEquals('bar', $environment->getConfig('foo')); } public function testGetConfig() { $config = [ 'foo' => 'bar', 'a' => [ 'b' => 'c', ], ]; $environment = new Environment($config); // No arguments should return the whole thing $this->assertEquals($config, $environment->getConfig()); // Test getting a single scalar element $this->assertEquals('bar', $environment->getConfig('foo')); // Test getting a single array element $this->assertEquals($config['a'], $environment->getConfig('a')); // Test getting an element by path $this->assertEquals('c', $environment->getConfig('a/b')); // Test getting a path that's one level too deep $this->assertNull($environment->getConfig('a/b/c')); // Test getting a non-existent element $this->assertNull($environment->getConfig('test')); // Test getting a non-existent element with a default value $this->assertEquals(42, $environment->getConfig('answer', 42)); } public function testSetConfig() { $environment = new Environment(['foo' => 'bar']); $environment->setConfig(['test' => '123']); $this->assertNull($environment->getConfig('foo')); $this->assertEquals('123', $environment->getConfig('test')); } public function testSetConfigAfterInit() { $this->expectException('RuntimeException'); $environment = new Environment(); // This triggers the initialization $environment->getBlockParsers(); $environment->setConfig(['foo' => 'bar']); } public function testMergeConfig() { $environment = new Environment(['foo' => 'bar', 'test' => '123']); $environment->mergeConfig(['test' => '456']); $this->assertEquals('bar', $environment->getConfig('foo')); $this->assertEquals('456', $environment->getConfig('test')); } public function testMergeConfigAfterInit() { $this->expectException('RuntimeException'); $environment = new Environment(); // This triggers the initialization $environment->getBlockParsers(); $environment->mergeConfig(['foo' => 'bar']); } public function testAddBlockParserAndGetter() { $environment = new Environment(); $parser = $this->createMock(BlockParser\BlockParserInterface::class); $environment->addBlockParser($parser); $this->assertContains($parser, $environment->getBlockParsers()); } /** * @expectedException \RuntimeException */ public function testAddBlockParserFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getBlockParsers(); $parser = $this->createMock(BlockParser\BlockParserInterface::class); $environment->addBlockParser($parser); } public function testAddBlockRenderer() { $environment = new Environment(); $renderer = $this->createMock(BlockRendererInterface::class); $environment->addBlockRenderer('MyClass', $renderer); $this->assertContains($renderer, $environment->getBlockRenderersForClass('MyClass')); } /** * @expectedException \RuntimeException */ public function testAddBlockRendererFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getBlockRenderersForClass('MyClass'); $renderer = $this->createMock(BlockRendererInterface::class); $environment->addBlockRenderer('MyClass', $renderer); } public function testInlineParserCanMatchRegexDelimiter() { $environment = new Environment(); $parser = $this->createMock(InlineParserInterface::class); $parser->expects($this->any()) ->method('getCharacters') ->will($this->returnValue(['/'])); $environment->addInlineParser($parser); $environment->getInlineParsersForCharacter('/'); $this->assertEquals(1, preg_match($environment->getInlineParserCharacterRegex(), 'foo/bar')); } /** * @expectedException \RuntimeException */ public function testAddInlineParserFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getInlineParsersForCharacter(''); $parser = $this->createMock(InlineParserInterface::class); $environment->addInlineParser($parser); } public function testGetInlineParsersForCharacter() { $environment = new Environment(); $parser = $this->createMock(InlineParserInterface::class); $parser->expects($this->any()) ->method('getCharacters') ->will($this->returnValue(['a'])); $environment->addInlineParser($parser); $this->assertContains($parser, $environment->getInlineParsersForCharacter('a')); } public function testGetInlineParsersForNonExistantCharacter() { $environment = new Environment(); $this->assertEmpty($environment->getInlineParsersForCharacter('a')); } public function testAddDelimiterProcessor() { $environment = new Environment(); $processor = $this->createMock(DelimiterProcessorInterface::class); $processor->method('getOpeningCharacter')->willReturn('*'); $environment->addDelimiterProcessor($processor); $this->assertSame($processor, $environment->getDelimiterProcessors()->getDelimiterProcessor('*')); } /** * @expectedException \RuntimeException */ public function testAddDelimiterProcessorFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getDelimiterProcessors(); $processor = $this->createMock(DelimiterProcessorInterface::class); $environment->addDelimiterProcessor($processor); } public function testAddInlineRenderer() { $environment = new Environment(); $renderer = $this->createMock(InlineRendererInterface::class); $environment->addInlineRenderer('MyClass', $renderer); $this->assertContains($renderer, $environment->getInlineRenderersForClass('MyClass')); } /** * @expectedException \RuntimeException */ public function testAddInlineRendererFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getInlineRenderersForClass('MyClass'); $renderer = $this->createMock(InlineRendererInterface::class); $environment->addInlineRenderer('MyClass', $renderer); } public function testGetBlockRendererForNonExistantClass() { $environment = new Environment(); $renderer = $environment->getBlockRenderersForClass('MyClass'); $this->assertEmpty($renderer); } public function testGetInlineRendererForNonExistantClass() { $environment = new Environment(); $renderer = $environment->getInlineRenderersForClass('MyClass'); $this->assertEmpty($renderer); } public function testAddExtensionAndGetter() { $environment = new Environment(); $extension = $this->createMock(ExtensionInterface::class); $environment->addExtension($extension); $this->assertContains($extension, $environment->getExtensions()); } /** * @expectedException \RuntimeException */ public function testAddExtensionFailsAfterInitialization() { $environment = new Environment(); // This triggers the initialization $environment->getInlineRenderersForClass('MyClass'); $extension = $this->createMock(ExtensionInterface::class); $environment->addExtension($extension); } public function testGetInlineParserCharacterRegexForEmptyEnvironment() { $environment = new Environment(); // This triggers the initialization which builds the regex $environment->getInlineParsersForCharacter(''); $regex = $environment->getInlineParserCharacterRegex(); $test = '*This* should match **everything** including chars like `[`.'; $matches = []; preg_match($regex, $test, $matches); $this->assertSame($test, $matches[0]); } public function testInjectablesGetInjected() { $environment = new Environment(); $parser = $this->getMockBuilder([BlockParserInterface::class, EnvironmentAwareInterface::class, ConfigurationAwareInterface::class])->getMock(); $parser->expects($this->once())->method('setEnvironment')->with($environment); $parser->expects($this->once())->method('setConfiguration'); $environment->addBlockParser($parser); // Trigger initialization $environment->getBlockParsers(); } public function testBlockParserPrioritization() { $environment = new Environment(); $parser1 = $this->createMock(BlockParserInterface::class); $parser2 = $this->createMock(BlockParserInterface::class); $parser3 = $this->createMock(BlockParserInterface::class); $environment->addBlockParser($parser1); $environment->addBlockParser($parser2, 50); $environment->addBlockParser($parser3); $parsers = iterator_to_array($environment->getBlockParsers()); $this->assertSame($parser2, $parsers[0]); $this->assertSame($parser1, $parsers[1]); $this->assertSame($parser3, $parsers[2]); } public function testInlineParserPrioritization() { $environment = new Environment(); $parser1 = $this->createMock(InlineParserInterface::class); $parser1->method('getCharacters')->willReturn(['a']); $parser2 = $this->createMock(InlineParserInterface::class); $parser2->method('getCharacters')->willReturn(['a']); $parser3 = $this->createMock(InlineParserInterface::class); $parser3->method('getCharacters')->willReturn(['a']); $environment->addInlineParser($parser1); $environment->addInlineParser($parser2, 50); $environment->addInlineParser($parser3); $parsers = iterator_to_array($environment->getInlineParsersForCharacter('a')); $this->assertSame($parser2, $parsers[0]); $this->assertSame($parser1, $parsers[1]); $this->assertSame($parser3, $parsers[2]); } public function testBlockRendererPrioritization() { $environment = new Environment(); $renderer1 = $this->createMock(BlockRendererInterface::class); $renderer2 = $this->createMock(BlockRendererInterface::class); $renderer3 = $this->createMock(BlockRendererInterface::class); $environment->addBlockRenderer('foo', $renderer1); $environment->addBlockRenderer('foo', $renderer2, 50); $environment->addBlockRenderer('foo', $renderer3); $parsers = iterator_to_array($environment->getBlockRenderersForClass('foo')); $this->assertSame($renderer2, $parsers[0]); $this->assertSame($renderer1, $parsers[1]); $this->assertSame($renderer3, $parsers[2]); } public function testInlineRendererPrioritization() { $environment = new Environment(); $renderer1 = $this->createMock(InlineRendererInterface::class); $renderer2 = $this->createMock(InlineRendererInterface::class); $renderer3 = $this->createMock(InlineRendererInterface::class); $environment->addInlineRenderer('foo', $renderer1); $environment->addInlineRenderer('foo', $renderer2, 50); $environment->addInlineRenderer('foo', $renderer3); $parsers = iterator_to_array($environment->getInlineRenderersForClass('foo')); $this->assertSame($renderer2, $parsers[0]); $this->assertSame($renderer1, $parsers[1]); $this->assertSame($renderer3, $parsers[2]); } public function testEventDispatching() { $environment = new Environment(); $event = new FakeEvent(); $actualOrder = []; $environment->addEventListener(FakeEvent::class, function (FakeEvent $e) use ($event, &$actualOrder) { $this->assertSame($event, $e); $actualOrder[] = 'a'; }); $environment->addEventListener(FakeEvent::class, function (FakeEvent $e) use ($event, &$actualOrder) { $this->assertSame($event, $e); $actualOrder[] = 'b'; $e->stopPropagation(); }); $environment->addEventListener(FakeEvent::class, function (FakeEvent $e) use ($event, &$actualOrder) { $this->assertSame($event, $e); $actualOrder[] = 'c'; }, 10); $environment->addEventListener(FakeEvent::class, function (FakeEvent $e) use ($event, &$actualOrder) { $this->fail('Propogation should have been stopped before here'); }); $environment->dispatch($event); $this->assertCount(3, $actualOrder); $this->assertEquals('c', $actualOrder[0]); $this->assertEquals('a', $actualOrder[1]); $this->assertEquals('b', $actualOrder[2]); } /** * @expectedException \RuntimeException */ public function testAddEventListenerFailsAfterInitialization() { $environment = new Environment(); $event = $this->createMock(AbstractEvent::class); $environment->dispatch($event); $environment->addEventListener(AbstractEvent::class, function (AbstractEvent $e) { }); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Event/�������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0021116�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Event/AbstractEventTest.php����������������������������������0000664�0000000�0000000�00000001156�13627337610�0025237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Event; use PHPUnit\Framework\TestCase; final class AbstractEventTest extends TestCase { public function testStopPropagation() { $event = new FakeEvent(); $this->assertFalse($event->isPropagationStopped()); $event->stopPropagation(); $this->assertTrue($event->isPropagationStopped()); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Event/DocumentParsedEventTest.php����������������������������0000664�0000000�0000000�00000002267�13627337610�0026415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Event; use League\CommonMark\Block\Element\Document; use League\CommonMark\DocParser; use League\CommonMark\Environment; use League\CommonMark\Event\DocumentParsedEvent; use PHPUnit\Framework\TestCase; final class DocumentParsedEventTest extends TestCase { public function testGetDocument() { $document = new Document(); $event = new DocumentParsedEvent($document); $this->assertSame($document, $event->getDocument()); } public function testEventDispatchedAtCorrectTime() { $wasCalled = false; $environment = Environment::createCommonMarkEnvironment(); $environment->addEventListener(DocumentParsedEvent::class, function (DocumentParsedEvent $event) use (&$wasCalled) { $wasCalled = true; }); $parser = new DocParser($environment); $parser->parse('hello world'); $this->assertTrue($wasCalled); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Event/FakeEvent.php������������������������������������������0000664�0000000�0000000�00000000602�13627337610�0023475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /** * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Event; use League\CommonMark\Event\AbstractEvent; final class FakeEvent extends AbstractEvent { } ������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/���������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022011�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Autolink/������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0023577�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Autolink/EmailAutolinkProcessorTest.php������������0000664�0000000�0000000�00000004550�13627337610�0031612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Autolink; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; use PHPUnit\Framework\TestCase; final class EmailAutolinkProcessorTest extends TestCase { /** * @param string $input * @param string $expected * * @dataProvider dataProviderForEmailAutolinks */ public function testEmailAutolinks($input, $expected) { $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new AutolinkExtension()); $converter = new CommonMarkConverter([], $environment); $this->assertEquals($expected, \trim($converter->convertToHtml($input))); } public function dataProviderForEmailAutolinks() { yield ['You can try emailing foo@example.com but that inbox doesn\'t actually exist.', '<p>You can try emailing <a href="mailto:foo@example.com">foo@example.com</a> but that inbox doesn\'t actually exist.</p>']; yield ['> This processor can even handle email addresses like foo@example.com inside of blockquotes!', "<blockquote>\n<p>This processor can even handle email addresses like <a href=\"mailto:foo@example.com\">foo@example.com</a> inside of blockquotes!</p>\n</blockquote>"]; yield ['@invalid', '<p>@invalid</p>']; // GFM spec tests yield ['foo@bar.baz', '<p><a href="mailto:foo@bar.baz">foo@bar.baz</a></p>']; yield ['hello@mail+xyz.example isn\'t valid, but hello+xyz@mail.example is.', '<p>hello@mail+xyz.example isn\'t valid, but <a href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>']; yield ['a.b-c_d@a.b', '<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p>']; yield ['a.b-c_d@a.b.', '<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a>.</p>']; yield ['a.b-c_d@a.b-', '<p>a.b-c_d@a.b-</p>']; yield ['a.b-c_d@a.b_', '<p>a.b-c_d@a.b_</p>']; // Regression: CommonMark autolinks should not be double-linked yield ['<foo@example.com>', '<p><a href="mailto:foo@example.com">foo@example.com</a></p>']; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Autolink/InlineMentionParserTest.php���������������0000664�0000000�0000000�00000003764�13627337610�0031107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Autolink; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\Autolink\InlineMentionParser; use PHPUnit\Framework\TestCase; final class InlineMentionParserTest extends TestCase { public function testTwitterMentionParser() { $input = <<<'EOT' You can follow the author of this library on Twitter - he's @colinodell! Usernames like @commonmarkisthebestmarkdownspec are too long. Security issues should be emailed to colinodell@gmail.com EOT; $expected = <<<'EOT' <p>You can follow the author of this library on Twitter - he's <a href="https://twitter.com/colinodell">@colinodell</a>!</p> <p>Usernames like @commonmarkisthebestmarkdownspec are too long.</p> <p>Security issues should be emailed to colinodell@gmail.com</p> EOT; $environment = Environment::createCommonMarkEnvironment(); $environment->addInlineParser(InlineMentionParser::createTwitterHandleParser()); $converter = new CommonMarkConverter([], $environment); $this->assertEquals($expected, $converter->convertToHtml($input)); } public function testGithubMentionParser() { $input = <<<'EOT' You can follow the author of this library on Github - he's @colinodell! EOT; $expected = <<<'EOT' <p>You can follow the author of this library on Github - he's <a href="https://www.github.com/colinodell">@colinodell</a>!</p> EOT; $environment = Environment::createCommonMarkEnvironment(); $environment->addInlineParser(InlineMentionParser::createGithubHandleParser()); $converter = new CommonMarkConverter([], $environment); $this->assertEquals($expected, $converter->convertToHtml($input)); } } ������������php-league-commonmark-1.3.1/tests/unit/Extension/Autolink/UrlAutolinkProcessorTest.php��������������0000664�0000000�0000000�00000012711�13627337610�0031323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Autolink; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; use PHPUnit\Framework\TestCase; final class UrlAutolinkProcessorTest extends TestCase { /** * @param string $input * @param string $expected * * @dataProvider dataProviderForAutolinkTests */ public function testUrlAutolinks($input, $expected) { $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new AutolinkExtension()); $converter = new CommonMarkConverter([], $environment); $this->assertEquals($expected, trim($converter->convertToHtml($input))); } public function dataProviderForAutolinkTests() { // Basic examples yield ['You can search on http://google.com for stuff.', '<p>You can search on <a href="http://google.com">http://google.com</a> for stuff.</p>']; yield ['https://google.com', '<p><a href="https://google.com">https://google.com</a></p>']; yield ['ftp://example.com', '<p><a href="ftp://example.com">ftp://example.com</a></p>']; yield ['www.google.com', '<p><a href="http://www.google.com">www.google.com</a></p>']; yield [' http://leadingwhitespace.example.com', '<p><a href="http://leadingwhitespace.example.com">http://leadingwhitespace.example.com</a></p>']; yield ['http://trailingwhitespace.example.com ', '<p><a href="http://trailingwhitespace.example.com">http://trailingwhitespace.example.com</a></p>']; yield ['- https://example.com/list-item', "<ul>\n<li>\n<a href=\"https://example.com/list-item\">https://example.com/list-item</a>\n</li>\n</ul>"]; // Tests of "incomplete" URLs yield ['google.com is missing www and/or a protocol', '<p>google.com is missing www and/or a protocol</p>']; yield ['http:/google.com is missing a slash', '<p>http:/google.com is missing a slash</p>']; yield ['javascript:alert(0); doesn\'t match the supported protocols', '<p>javascript:alert(0); doesn\'t match the supported protocols</p>']; // Tests involving trailing characters yield ['Maybe you\'re interested in https://www.google.com/search?q=php+commonmark!', '<p>Maybe you\'re interested in <a href="https://www.google.com/search?q=php+commonmark">https://www.google.com/search?q=php+commonmark</a>!</p>']; yield ['Or perhaps you\'re looking for my personal website https://www.colinodell.com...?', '<p>Or perhaps you\'re looking for my personal website <a href="https://www.colinodell.com">https://www.colinodell.com</a>...?</p>']; yield ['Check https://www.stackoverflow.com: they have all the answers', '<p>Check <a href="https://www.stackoverflow.com">https://www.stackoverflow.com</a>: they have all the answers</p>']; yield ['- https://example.com/list-item-with-trailing-colon:', "<ul>\n<li>\n<a href=\"https://example.com/list-item-with-trailing-colon\">https://example.com/list-item-with-trailing-colon</a>:</li>\n</ul>"]; yield ['Visit www.commonmark.org.', '<p>Visit <a href="http://www.commonmark.org">www.commonmark.org</a>.</p>']; yield ['Visit www.commonmark.org/a.b.', '<p>Visit <a href="http://www.commonmark.org/a.b">www.commonmark.org/a.b</a>.</p>']; // Tests involving parentheses yield ['www.google.com/search?q=Markup+(business)', '<p><a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>']; yield ['(www.google.com/search?q=Markup+(business))', '<p>(<a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>']; yield ['www.google.com/search?q=(business))+ok', '<p><a href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>']; yield ['(https://www.example.com/test).', '<p>(<a href="https://www.example.com/test">https://www.example.com/test</a>).</p>']; // Tests involving semi-colon endings yield ['www.google.com/search?q=commonmark&hl=en', '<p><a href="http://www.google.com/search?q=commonmark&amp;hl=en">www.google.com/search?q=commonmark&amp;hl=en</a></p>']; yield ['www.google.com/search?q=commonmark&hl;', '<p><a href="http://www.google.com/search?q=commonmark">www.google.com/search?q=commonmark</a>&amp;hl;</p>']; // Test that < immediately terminates an autolink yield ['www.commonmark.org/he<lp', '<p><a href="http://www.commonmark.org/he">www.commonmark.org/he</a>&lt;lp</p>']; // Regression: two links with one underscore each yield ["https://eventum.example.net/history.php?iss_id=107092\nhttps://gitlab.example.net/group/project/merge_requests/39#note_150630", "<p><a href=\"https://eventum.example.net/history.php?iss_id=107092\">https://eventum.example.net/history.php?iss_id=107092</a>\n<a href=\"https://gitlab.example.net/group/project/merge_requests/39#note_150630\">https://gitlab.example.net/group/project/merge_requests/39#note_150630</a></p>"]; // Regression: CommonMark autolinks should not be double-linked yield ['<https://www.google.com>', '<p><a href="https://www.google.com">https://www.google.com</a></p>']; } } �������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/ExternalLink/��������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024411�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/ExternalLink/ExternalLinkProcessorTest.php���������0000664�0000000�0000000�00000007074�13627337610�0032272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Extension\ExternalLink; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension; use League\CommonMark\Extension\ExternalLink\ExternalLinkProcessor; use PHPUnit\Framework\TestCase; final class ExternalLinkProcessorTest extends TestCase { private const INPUT = 'My favorite sites are <https://www.colinodell.com> and <https://commonmark.thephpleague.com>'; public function testDefaultConfiguration() { $expected = '<p>My favorite sites are <a rel="noopener noreferrer" href="https://www.colinodell.com">https://www.colinodell.com</a> and <a rel="noopener noreferrer" href="https://commonmark.thephpleague.com">https://commonmark.thephpleague.com</a></p>' . "\n"; $this->assertEquals($expected, $this->parse(self::INPUT)); } public function testCustomConfiguration() { $expected = '<p>My favorite sites are <a rel="noopener noreferrer" target="_blank" class="external-link" href="https://www.colinodell.com">https://www.colinodell.com</a> and <a href="https://commonmark.thephpleague.com">https://commonmark.thephpleague.com</a></p>' . "\n"; $config = [ 'external_link' => [ 'internal_hosts' => ['commonmark.thephpleague.com'], 'open_in_new_window' => true, 'html_class' => 'external-link', ], ]; $this->assertEquals($expected, $this->parse(self::INPUT, $config)); } public function testWithBadUrls() { $input = 'Report [xss](javascript:alert(0);) vulnerabilities by emailing <colinodell@gmail.com>'; $expected = '<p>Report <a href="javascript:alert(0);">xss</a> vulnerabilities by emailing <a href="mailto:colinodell@gmail.com">colinodell@gmail.com</a></p>' . "\n"; $this->assertEquals($expected, $this->parse($input)); } private function parse(string $markdown, array $config = []) { $e = Environment::createCommonMarkEnvironment(); $e->addExtension(new ExternalLinkExtension()); $c = new CommonMarkConverter($config, $e); return $c->convertToHtml($markdown); } /** * @param string $host * @param mixed $compareTo * @param bool $expected * * @dataProvider dataProviderForTestHostMatches */ public function testHostMatches(string $host, $compareTo, bool $expected) { $this->assertEquals($expected, ExternalLinkProcessor::hostMatches($host, $compareTo)); } public function dataProviderForTestHostMatches() { // String-to-string comparison must match exactly yield ['colinodell.com', 'commonmark.thephpleague.com', false]; yield ['colinodell.com', 'colinodell.com', true]; // Subdomains won't match unless using regex yield ['www.colinodell.com', 'colinodell.com', false]; yield ['www.colinodell.com', '/colinodell\.com/', true]; // Multiple strings can be checked yield ['www.colinodell.com', ['www.colinodell.com', 'commonmark.thephpleague.com'], true]; yield ['www.colinodell.com', ['google.com', 'aol.com'], false]; // You can even mix-and-match multiple strings with multiple regexes yield ['www.colinodell.com', ['/colinodell\.com/', 'aol.com'], true]; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/SmartPunct/����������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024111�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/SmartPunct/QuoteProcessorTest.php������������������0000664�0000000�0000000�00000004216�13627337610�0030462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\SmartPunct; use League\CommonMark\Delimiter\DelimiterInterface; use League\CommonMark\Extension\SmartPunct\QuoteProcessor; use League\CommonMark\Inline\Element\Text; use PHPUnit\Framework\TestCase; /** * Tests the quote processor */ final class QuoteProcessorTest extends TestCase { public function testSingleQuoteProcessor() { $mockDelimiter = $this->createMock(DelimiterInterface::class); $processor = QuoteProcessor::createSingleQuoteProcessor(); $this->assertEquals("'", $processor->getOpeningCharacter()); $this->assertEquals("'", $processor->getClosingCharacter()); $this->assertEquals(1, $processor->getMinLength()); $this->assertEquals(1, $processor->getDelimiterUse($mockDelimiter, $mockDelimiter)); $opener = new Text(); $closer = new Text(); $processor->process($opener, $closer, 1); $this->assertEquals('‘', $opener->next()->getContent()); $this->assertEquals('’', $closer->previous()->getContent()); } public function testDoubleQuoteProcessor() { $mockDelimiter = $this->createMock(DelimiterInterface::class); $processor = QuoteProcessor::createDoubleQuoteProcessor(); $this->assertEquals('"', $processor->getOpeningCharacter()); $this->assertEquals('"', $processor->getClosingCharacter()); $this->assertEquals(1, $processor->getMinLength()); $this->assertEquals(1, $processor->getDelimiterUse($mockDelimiter, $mockDelimiter)); $opener = new Text(); $closer = new Text(); $processor->process($opener, $closer, 1); $this->assertEquals('“', $opener->next()->getContent()); $this->assertEquals('”', $closer->previous()->getContent()); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/SmartPunct/QuoteRendererTest.php�������������������0000664�0000000�0000000�00000003665�13627337610�0030260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\SmartPunct; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Extension\SmartPunct\Quote; use League\CommonMark\Extension\SmartPunct\QuoteRenderer; use League\CommonMark\Inline\Element\Text; use PHPUnit\Framework\TestCase; /** * Tests the quote renderer */ final class QuoteRendererTest extends TestCase { /** @var QuoteRenderer */ private $renderer; /** @var ElementRendererInterface */ private $htmlRenderer; protected function setUp() { $this->renderer = new QuoteRenderer(); $this->htmlRenderer = $this->createMock(ElementRendererInterface::class); } /** * @expectedException \InvalidArgumentException */ public function testInvalidInlineType() { $inline = $this->createMock(Text::class); $this->renderer->render($inline, $this->htmlRenderer); } /** * @param string $character * @param string $expected * * @dataProvider dataForTestRender */ public function testRender(string $character, string $expected) { $inline = new Quote($character); $this->assertEquals($expected, $this->renderer->render($inline, $this->htmlRenderer)); } public function dataForTestRender() { // Single-quotes should render as an apostrophe yield ["'", '’']; // Double-quotes should render as an opening quote yield ['"', '“']; // Already-stylized quotes should be rendered as-is yield ['’', '’']; yield ['“', '“']; } } ���������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/SmartPunct/SmartPunctExtensionTest.php�������������0000664�0000000�0000000�00000003342�13627337610�0031461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\SmartPunct; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\SmartPunct\SmartPunctExtension; use PHPUnit\Framework\TestCase; /** * Tests the extension */ final class SmartPunctExtensionTest extends TestCase { /** * @var Environment */ protected $environment; protected function setUp() { $this->environment = Environment::createCommonMarkEnvironment(); $this->environment->addExtension(new SmartPunctExtension()); } public function testDefaultConfiguration() { $converter = new CommonMarkConverter([], $this->environment); $actualResult = $converter->convertToHtml('"double" \'single\''); $this->assertEquals("<p>“double” ‘single’</p>\n", $actualResult); } public function testCustomConfiguration() { $converter = new CommonMarkConverter([ 'smartpunct' => [ 'double_quote_opener' => '«', 'double_quote_closer' => '»', 'single_quote_opener' => '‹', 'single_quote_closer' => '›', ], ], $this->environment); $actualResult = $converter->convertToHtml('"double" \'single\''); $this->assertEquals("<p>«double» ‹single›</p>\n", $actualResult); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Strikethrough/�������������������������������������0000775�0000000�0000000�00000000000�13627337610�0024653�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Strikethrough/FakeHtmlRenderer.php�����������������0000664�0000000�0000000�00000004301�13627337610�0030544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> and uAfrica.com (http://uafrica.com) * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Strikethrough; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Inline\Element\AbstractInline; class FakeHtmlRenderer implements ElementRendererInterface { protected $options; /** * @param string $option * @param mixed|null $value */ public function setOption($option, $value) { $this->options[$option] = $value; } /** * @param string $option * @param mixed|null $default * * @return mixed|null */ public function getOption(string $option, $default = null) { if (!isset($this->options[$option])) { return $default; } return $this->options[$option]; } /** * @param string $string * @param bool $preserveEntities * * @return string */ public function escape($string, $preserveEntities = false) { return '::escape::' . $string; } /** * @param AbstractInline $inline * * @return string */ public function renderInline(AbstractInline $inline): string { return '::inline::'; } /** * @param AbstractInline[] $inlines * * @return string */ public function renderInlines(iterable $inlines): string { return '::inlines::'; } /** * @param AbstractBlock $block * @param bool $inTightList * * @throws \RuntimeException * * @return string */ public function renderBlock(AbstractBlock $block, bool $inTightList = false): string { return '::block::'; } /** * @param AbstractBlock[] $blocks * @param bool $inTightList * * @return string */ public function renderBlocks(iterable $blocks, bool $inTightList = false): string { return '::blocks::'; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Strikethrough/IntegrationTest.php������������������0000664�0000000�0000000�00000006265�13627337610�0030520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> and uAfrica.com (http://uafrica.com) * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Strikethrough; use League\CommonMark\DocParser; use League\CommonMark\Environment; use League\CommonMark\Extension\Strikethrough\StrikethroughExtension; use League\CommonMark\HtmlRenderer; use PHPUnit\Framework\TestCase; class IntegrationTest extends TestCase { /** * @param string $string * @param string $expected * * @dataProvider dataForIntegrationTest */ public function testStrikethrough($string, $expected) { $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new StrikethroughExtension()); $parser = new DocParser($environment); $renderer = new HtmlRenderer($environment); $document = $parser->parse($string); $html = $renderer->renderBlock($document); $this->assertSame($expected, $html); } /** * @return array */ public function dataForIntegrationTest() { return [ ['This is a test without any strikethroughs', "<p>This is a test without any strikethroughs</p>\n"], ['This is a test without any ~valid~ strikethroughs', "<p>This is a test without any ~valid~ strikethroughs</p>\n"], ['This is a test `without` any ~valid~ strikethroughs', "<p>This is a test <code>without</code> any ~valid~ strikethroughs</p>\n"], ['This is a ~~unit~~ integration test', "<p>This is a <del>unit</del> integration test</p>\n"], ['~~Strikethrough~~ on the left', "<p><del>Strikethrough</del> on the left</p>\n"], ['Strikethrough on the ~~right~~', "<p>Strikethrough on the <del>right</del></p>\n"], ['~~Strikethrough everywhere~~', "<p><del>Strikethrough everywhere</del></p>\n"], ['This ~~test has no ending match', "<p>This ~~test has no ending match</p>\n"], ['This ~~test~~~ has mismatched tildes', "<p>This <del>test</del>~ has mismatched tildes</p>\n"], ['This ~~~test~~ also has mismatched tildes', "<p>This ~<del>test</del> also has mismatched tildes</p>\n"], ['This one has ~~~three~~~ tildes', "<p>This one has <del>three</del> tildes</p>\n"], ["This ~~has a\n\nnew paragraph~~.", "<p>This ~~has a</p>\n<p>new paragraph~~.</p>\n"], ['Hello ~~ ~~ world', "<p>Hello ~~ ~~ world</p>\n"], ['This **is ~~a little** test of mismatched delimiters~~', "<p>This <strong>is ~~a little</strong> test of mismatched delimiters~~</p>\n"], ['Из: твоя ~~тест~~ ветка', "<p>Из: твоя <del>тест</del> ветка</p>\n"], ['This one combines ~~nested ~~strikethrough~~ text~~', "<p>This one combines <del>nested <del>strikethrough</del> text</del></p>\n"], ['Here we have **emphasized text containing a ~~strikethrough~~**', "<p>Here we have <strong>emphasized text containing a <del>strikethrough</del></strong></p>\n"], ]; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Strikethrough/StrikethroughRendererTest.php��������0000664�0000000�0000000�00000003217�13627337610�0032560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> and uAfrica.com (http://uafrica.com) * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Strikethrough; use League\CommonMark\Extension\Strikethrough\Strikethrough; use League\CommonMark\Extension\Strikethrough\StrikethroughRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element\Text; use League\CommonMark\Inline\Renderer\CodeRenderer; use PHPUnit\Framework\TestCase; class StrikethroughRendererTest extends TestCase { /** * @var CodeRenderer */ protected $renderer; protected function setUp() { $this->renderer = new StrikethroughRenderer(); } public function testRender() { $inline = new Strikethrough(); $inline->data['attributes'] = ['id' => 'some"&amp;id']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('del', $result->getTagName()); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertEquals(['id' => 'some"&amp;id'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidNodeType() { $inline = new Text('ruh roh'); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/Strikethrough/StrikethroughTest.php����������������0000664�0000000�0000000�00000001160�13627337610�0031064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> and uAfrica.com (http://uafrica.com) * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\Strikethrough; use League\CommonMark\Extension\Strikethrough\Strikethrough; use PHPUnit\Framework\TestCase; final class StrikethroughTest extends TestCase { public function testIsContainer() { $s = new Strikethrough(); $this->assertTrue($s->isContainer()); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/TaskList/������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0023547�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/TaskList/TaskListExtensionTest.php�����������������0000664�0000000�0000000�00000005320�13627337610�0030553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\TaskList; use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Extension\TaskList\TaskListExtension; use PHPUnit\Framework\TestCase; final class TaskListExtensionTest extends TestCase { public function testTaskLists() { $input = <<<'EOT' - [x] foo - [ ] bar - [X] baz - [ ] bim * [x] foo * [X] bar * [ ] baz This works for ordered lists too: 1. [x] foo 2. [X] bar 3. [ ] baz Some examples which should not match: - Checkbox [x] in the middle - Checkbox at the end [ ] - [ ] too many spaces - **[x] Checkbox inside of emphasis** - No text, as shown in these examples: - [x] - [ ] - [x] - [x] Here's a test using `<del>`: - [x] <del>Checkbox inside of strikeout</del> And another which does not render the checkbox: - <del>[x] Checkbox inside of strikeout</del> EOT; $expected = <<<'EOT' <ul> <li><input checked="" disabled="" type="checkbox"> foo <ul> <li><input disabled="" type="checkbox"> bar</li> <li><input checked="" disabled="" type="checkbox"> baz</li> </ul> </li> <li><input disabled="" type="checkbox"> bim</li> </ul> <ul> <li><input checked="" disabled="" type="checkbox"> foo</li> <li><input checked="" disabled="" type="checkbox"> bar</li> <li><input disabled="" type="checkbox"> baz</li> </ul> <p>This works for ordered lists too:</p> <ol> <li><input checked="" disabled="" type="checkbox"> foo</li> <li><input checked="" disabled="" type="checkbox"> bar</li> <li><input disabled="" type="checkbox"> baz</li> </ol> <p>Some examples which should not match:</p> <ul> <li>Checkbox [x] in the middle</li> <li>Checkbox at the end [ ]</li> <li>[ ] too many spaces</li> <li> <strong>[x] Checkbox inside of emphasis</strong> </li> <li>No text, as shown in these examples: <ul> <li>[x]</li> <li>[ ]</li> <li>[x]</li> <li> <pre><code> [x] </code></pre> </li> </ul> </li> </ul> <p>Here's a test using <code>&lt;del&gt;</code>:</p> <ul> <li><input checked="" disabled="" type="checkbox"> <del>Checkbox inside of strikeout</del> </li> </ul> <p>And another which does not render the checkbox:</p> <ul> <li> <del>[x] Checkbox inside of strikeout</del> </li> </ul> EOT; $environment = Environment::createCommonMarkEnvironment(); $environment->addExtension(new TaskListExtension()); $converter = new CommonMarkConverter([], $environment); $this->assertEquals($expected, $converter->convertToHtml($input)); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/TaskList/TaskListItemMarkerRendererTest.php��������0000664�0000000�0000000�00000004205�13627337610�0032327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\TaskList; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Extension\TaskList\TaskListItemMarker; use League\CommonMark\Extension\TaskList\TaskListItemMarkerRenderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element\AbstractInline; use PHPUnit\Framework\TestCase; class TaskListItemMarkerRendererTest extends TestCase { public function testWithCheckedItem() { $renderer = new TaskListItemMarkerRenderer(); $htmlRenderer = $this->getMockForAbstractClass(ElementRendererInterface::class); $item = new TaskListItemMarker(true); $result = $renderer->render($item, $htmlRenderer); $this->assertInstanceOf(HtmlElement::class, $result); $this->assertSame('input', $result->getTagName()); $this->assertSame('checkbox', $result->getAttribute('type')); $this->assertNotNull($result->getAttribute('checked')); } public function testWithUncheckedItem() { $renderer = new TaskListItemMarkerRenderer(); $htmlRenderer = $this->getMockForAbstractClass(ElementRendererInterface::class); $item = new TaskListItemMarker(false); $result = $renderer->render($item, $htmlRenderer); $this->assertInstanceOf(HtmlElement::class, $result); $this->assertSame('input', $result->getTagName()); $this->assertSame('checkbox', $result->getAttribute('type')); $this->assertNull($result->getAttribute('checked')); } /** * @expectedException \InvalidArgumentException */ public function testWithInvalidInlineElement() { $renderer = new TaskListItemMarkerRenderer(); $htmlRenderer = $this->getMockForAbstractClass(ElementRendererInterface::class); $item = $this->getMockForAbstractClass(AbstractInline::class); $renderer->render($item, $htmlRenderer); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Extension/TaskList/TaskListItemMarkerTest.php����������������0000664�0000000�0000000�00000001251�13627337610�0030636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Extension\TaskList; use League\CommonMark\Extension\TaskList\TaskListItemMarker; use PHPUnit\Framework\TestCase; final class TaskListItemMarkerTest extends TestCase { public function testIt() { $marker = new TaskListItemMarker(true); $this->assertTrue($marker->isChecked()); $marker->setChecked(false); $this->assertFalse($marker->isChecked()); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/FakeEmptyHtmlRenderer.php������������������������������������0000664�0000000�0000000�00000003277�13627337610�0024760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Inline\Element\AbstractInline; class FakeEmptyHtmlRenderer implements ElementRendererInterface { /** * @param string $option * @param mixed|null $default * * @return mixed|null */ public function getOption(string $option, $default = null) { return null; } /** * @param AbstractInline $inline * * @return string */ public function renderInline(AbstractInline $inline): string { return ''; } /** * @param AbstractInline[] $inlines * * @return string */ public function renderInlines(iterable $inlines): string { return ''; } /** * @param AbstractBlock $block * @param bool $inTightList * * @throws \RuntimeException * * @return string */ public function renderBlock(AbstractBlock $block, bool $inTightList = false): string { return ''; } /** * @param AbstractBlock[] $blocks * @param bool $inTightList * * @return string */ public function renderBlocks(iterable $blocks, bool $inTightList = false): string { return ''; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/FakeHtmlRenderer.php�����������������������������������������0000664�0000000�0000000�00000004034�13627337610�0023731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\ElementRendererInterface; use League\CommonMark\Inline\Element\AbstractInline; class FakeHtmlRenderer implements ElementRendererInterface { protected $options; /** * @param string $option * @param mixed|null $value */ public function setOption($option, $value) { $this->options[$option] = $value; } /** * @param string $option * @param mixed|null $default * * @return mixed|null */ public function getOption(string $option, $default = null) { if (!isset($this->options[$option])) { return $default; } return $this->options[$option]; } /** * @param AbstractInline $inline * * @return string */ public function renderInline(AbstractInline $inline): string { return '::inline::'; } /** * @param AbstractInline[] $inlines * * @return string */ public function renderInlines(iterable $inlines): string { return '::inlines::'; } /** * @param AbstractBlock $block * @param bool $inTightList * * @throws \RuntimeException * * @return string */ public function renderBlock(AbstractBlock $block, bool $inTightList = false): string { return '::block::'; } /** * @param AbstractBlock[] $blocks * @param bool $inTightList * * @return string */ public function renderBlocks(iterable $blocks, bool $inTightList = false): string { return '::blocks::'; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/HtmlElementTest.php������������������������������������������0000664�0000000�0000000�00000010123�13627337610�0023621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\HtmlElement; use PHPUnit\Framework\TestCase; class HtmlElementTest extends TestCase { public function testConstructorOneArgument() { $p = new HtmlElement('p'); $this->assertEquals('p', $p->getTagName()); $this->assertEmpty($p->getAllAttributes()); $this->assertEmpty($p->getContents()); } public function testConstructorTwoArguments() { $img = new HtmlElement('img', ['src' => 'foo.jpg']); $this->assertEquals('img', $img->getTagName()); $this->assertCount(1, $img->getAllAttributes()); $this->assertEquals('foo.jpg', $img->getAttribute('src')); $this->assertEmpty($img->getContents()); } public function testConstructorThreeArguments() { $li = new HtmlElement('li', ['class' => 'odd'], 'Foo'); $this->assertEquals('li', $li->getTagName()); $this->assertCount(1, $li->getAllAttributes()); $this->assertEquals('odd', $li->getAttribute('class')); $this->assertEquals('Foo', $li->getContents()); } public function testNonSelfClosingElement() { $p = new HtmlElement('p', [], '', false); $this->assertEquals('<p></p>', (string) $p); } public function testSelfClosingElement() { $hr = new HtmlElement('hr', [], '', true); $this->assertEquals('<hr />', (string) $hr); } public function testGetSetExistingAttribute() { $p = new HtmlElement('p', ['class' => 'foo']); $this->assertCount(1, $p->getAllAttributes()); $this->assertEquals('foo', $p->getAttribute('class')); $p->setAttribute('class', 'bar'); $this->assertCount(1, $p->getAllAttributes()); $this->assertEquals('bar', $p->getAttribute('class')); } public function testGetSetNonExistingAttribute() { $p = new HtmlElement('p', ['class' => 'foo']); $this->assertCount(1, $p->getAllAttributes()); $this->assertNull($p->getAttribute('id')); $p->setAttribute('id', 'bar'); $this->assertCount(2, $p->getAllAttributes()); $this->assertEquals('bar', $p->getAttribute('id')); $this->assertEquals('foo', $p->getAttribute('class')); } public function testToString() { $img = new HtmlElement('img', [], '', true); $p = new HtmlElement('p'); $div = new HtmlElement('div'); $div->setContents([$p, $img]); $this->assertInternalType('string', $div->getContents(true)); $this->assertEquals('<p></p><img />', $div->getContents(true)); $this->assertEquals('<div><p></p><img /></div>', $div->__toString()); } public function testToStringWithUnescapedAttribute() { $element = new HtmlElement('p', ['id' => 'foo', 'class' => 'test" onclick="javascript:doBadThings();'], 'click me'); $this->assertEquals('<p id="foo" class="test&quot; onclick=&quot;javascript:doBadThings();">click me</p>', $element->__toString()); } public function testNullContentConstructor() { $img = new HtmlElement('img', [], null); $this->assertTrue($img->getContents(false) === ''); } public function testNullContentSetter() { $img = new HtmlElement('img'); $img->setContents(null); $this->assertTrue($img->getContents(false) === ''); } /** * See https://github.com/thephpleague/commonmark/issues/376 */ public function testRegressionWith0NotBeingRendered() { $element = new HtmlElement('em'); $element->setContents('0'); $this->assertSame('0', $element->getContents()); $element = new HtmlElement('em', [], '0'); $this->assertSame('0', $element->getContents()); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/HtmlRendererTest.php�����������������������������������������0000664�0000000�0000000�00000004077�13627337610�0024011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace League\CommonMark\Tests\Unit; use League\CommonMark\Block\Element\Paragraph; use League\CommonMark\Block\Renderer\BlockRendererInterface; use League\CommonMark\EnvironmentInterface; use League\CommonMark\HtmlRenderer; use League\CommonMark\Inline\Element\Text; use League\CommonMark\Inline\Renderer\InlineRendererInterface; use PHPUnit\Framework\TestCase; class HtmlRendererTest extends TestCase { public function testRenderBlock() { $mockRenderer = $this->createMock(BlockRendererInterface::class); $mockRenderer->expects($this->once())->method('render')->willReturn(true); $environment = $this->createMock(EnvironmentInterface::class); $environment->method('getBlockRenderersForClass')->willReturn([$mockRenderer]); $renderer = new HtmlRenderer($environment); $renderer->renderBlock(new Paragraph()); } /** * @expectedException \RuntimeException */ public function testRenderBlockWithMissingRenderer() { $environment = $this->createMock(EnvironmentInterface::class); $environment->method('getBlockRenderersForClass')->willReturn([]); $renderer = new HtmlRenderer($environment); $renderer->renderBlock(new Paragraph()); } public function testRenderInline() { $mockRenderer = $this->createMock(InlineRendererInterface::class); $mockRenderer->expects($this->once())->method('render')->willReturn(true); $environment = $this->createMock(EnvironmentInterface::class); $environment->method('getInlineRenderersForClass')->willReturn([$mockRenderer]); $renderer = new HtmlRenderer($environment); $renderer->renderInline(new Text()); } /** * @expectedException \RuntimeException */ public function testRenderInlineWithMissingRenderer() { $environment = $this->createMock(EnvironmentInterface::class); $environment->method('getInlineRenderersForClass')->willReturn([]); $renderer = new HtmlRenderer($environment); $renderer->renderInline(new Text()); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0021253�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/AdjacentTextMergerTest.php����������������������������0000664�0000000�0000000�00000005655�13627337610�0026357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline; use League\CommonMark\Block\Element\Paragraph; use League\CommonMark\Inline\AdjacentTextMerger; use League\CommonMark\Inline\Element\Newline; use League\CommonMark\Inline\Element\Text; use PHPUnit\Framework\TestCase; class AdjacentTextMergerTest extends TestCase { public function testMergeTextNodesBetweenExclusive() { $paragraph = new Paragraph(); $paragraph->appendChild($from = new Text('https://eventum.example.net/history.php?iss')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('id=107092')); $paragraph->appendChild(new Newline(Newline::SOFTBREAK)); $paragraph->appendChild($to = new Text('https://gitlab.example.net/group/project/merge')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('requests/39#note')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('150630')); AdjacentTextMerger::mergeTextNodesBetweenExclusive($from, $to); $children = $paragraph->children(); $this->assertCount(8, $children); $this->assertTrue($children[0] instanceof Text); $this->assertEquals('https://eventum.example.net/history.php?iss', $children[0]->getContent()); $this->assertTrue($children[1] instanceof Text); $this->assertEquals('_id=107092', $children[1]->getContent()); $this->assertTrue($children[2] instanceof Newline); } public function testMergeChildNodes() { $paragraph = new Paragraph(); $paragraph->appendChild(new Text('https://eventum.example.net/history.php?iss')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('id=107092')); $paragraph->appendChild(new Newline(Newline::SOFTBREAK)); $paragraph->appendChild(new Text('https://gitlab.example.net/group/project/merge')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('requests/39#note')); $paragraph->appendChild(new Text('_')); $paragraph->appendChild(new Text('150630')); AdjacentTextMerger::mergeChildNodes($paragraph); $children = $paragraph->children(); $this->assertCount(3, $children); $this->assertTrue($children[0] instanceof Text); $this->assertEquals('https://eventum.example.net/history.php?iss_id=107092', $children[0]->getContent()); $this->assertTrue($children[1] instanceof Newline); $this->assertTrue($children[2] instanceof Text); $this->assertEquals('https://gitlab.example.net/group/project/merge_requests/39#note_150630', $children[2]->getContent()); } } �����������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Element/����������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022644�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Element/AbstractWebResourceTest.php�������������������0000664�0000000�0000000�00000003430�13627337610�0030126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Element; use League\CommonMark\Inline\Element\AbstractWebResource; use PHPUnit\Framework\TestCase; class AbstractWebResourceTest extends TestCase { /** * Tests the URL constructor parameter and getUrl() method */ public function testConstructorAndGetUrl() { $url = 'https://www.example.com/foo'; /** @var AbstractWebResource $element */ $element = $this->getMockBuilder(AbstractWebResource::class) ->setConstructorArgs([$url]) ->getMockForAbstractClass(); $this->assertEquals($url, $element->getUrl()); } /** * Tests the setUrl() method */ public function testSetUrl() { $url1 = 'https://www.example.com/foo'; $url2 = 'https://www.example.com/bar'; /** @var AbstractWebResource $element */ $element = $this->getMockBuilder(AbstractWebResource::class) ->setConstructorArgs([$url1]) ->getMockForAbstractClass(); $element->setUrl($url2); $this->assertEquals($url2, $element->getUrl()); } public function testIsContainer() { /** @var AbstractWebResource $element */ $element = $this->getMockBuilder(AbstractWebResource::class) ->setConstructorArgs(['https://www.example.com']) ->getMockForAbstractClass(); $this->assertTrue($element->isContainer()); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Parser/�����������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0022507�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Parser/BacktickParserTest.php�������������������������0000664�0000000�0000000�00000004024�13627337610�0026750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Parser; use League\CommonMark\Block\Element as BlockElement; use League\CommonMark\Inline\Element\Code; use League\CommonMark\Inline\Parser\BacktickParser; use League\CommonMark\InlineParserContext; use League\CommonMark\Reference\ReferenceMapInterface; use PHPUnit\Framework\TestCase; class BacktickParserTest extends TestCase { /** * @param $string * @param $expectedContents * * @dataProvider dataForTestParse */ public function testParse($string, $expectedContents) { $nodeStub = $this->createMock(BlockElement\AbstractStringContainerBlock::class); $nodeStub->expects($this->any())->method('getStringContent')->willReturn($string); $nodeStub ->expects($this->once()) ->method('appendChild') ->with($this->callback(function (Code $code) use ($expectedContents) { return $code instanceof Code && $expectedContents === $code->getContent(); })); $inlineContext = new InlineParserContext($nodeStub, $this->createMock(ReferenceMapInterface::class)); // Move to just before the first backtick $firstBacktickPos = mb_strpos($string, '`', null, 'utf-8'); $inlineContext->getCursor()->advanceBy($firstBacktickPos); $parser = new BacktickParser(); $parser->parse($inlineContext); } /** * @return array */ public function dataForTestParse() { return [ ['This is `just` a test', 'just'], ['Из: твоя `feature` ветка', 'feature'], ['Из: твоя `тест` ветка', 'тест'], ]; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/���������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0023021�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/CodeRendererTest.php�������������������������0000664�0000000�0000000�00000003355�13627337610�0026741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Code; use League\CommonMark\Inline\Renderer\CodeRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class CodeRendererTest extends TestCase { /** * @var CodeRenderer */ protected $renderer; protected function setUp() { $this->renderer = new CodeRenderer(); } public function testRender() { $inline = new Code('echo "hello world";'); $inline->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('code', $result->getTagName()); $this->assertContains('echo &quot;hello world&quot;;', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/EmphasisRendererTest.php���������������������0000664�0000000�0000000�00000003334�13627337610�0027635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Emphasis; use League\CommonMark\Inline\Renderer\EmphasisRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class EmphasisRendererTest extends TestCase { /** * @var EmphasisRenderer */ protected $renderer; protected function setUp() { $this->renderer = new EmphasisRenderer(); } public function testRender() { $inline = new Emphasis(); $inline->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('em', $result->getTagName()); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/HtmlInlineRendererTest.php�������������������0000664�0000000�0000000�00000006047�13627337610�0030133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\Environment; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\HtmlInline; use League\CommonMark\Inline\Renderer\HtmlInlineRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; class HtmlInlineRendererTest extends TestCase { /** * @var HtmlInlineRenderer */ protected $renderer; protected function setUp() { $this->renderer = new HtmlInlineRenderer(); $this->renderer->setConfiguration(new Configuration()); } public function testRender() { $inline = new HtmlInline('<h1>Test</h1>'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('<h1>Test</h1>', $result); } public function testRenderAllowHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_ALLOW, ])); $inline = new HtmlInline('<h1>Test</h1>'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('<h1>Test</h1>', $result); } public function testRenderEscapeHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_ESCAPE, ])); $inline = new HtmlInline('<h1 class="test">Test</h1>'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('&lt;h1 class="test"&gt;Test&lt;/h1&gt;', $result); } public function testRenderStripHtml() { $this->renderer->setConfiguration(new Configuration([ 'html_input' => Environment::HTML_INPUT_STRIP, ])); $inline = new HtmlInline('<h1>Test</h1>'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertEquals('', $result); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/ImageRendererTest.php������������������������0000664�0000000�0000000�00000007403�13627337610�0027107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Image; use League\CommonMark\Inline\Renderer\ImageRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; class ImageRendererTest extends TestCase { /** * @var ImageRenderer */ protected $renderer; protected function setUp() { $this->renderer = new ImageRenderer(); $this->renderer->setConfiguration(new Configuration()); } public function testRenderWithTitle() { $inline = new Image('http://example.com/foo.jpg', '::label::', '::title::'); $inline->data['attributes'] = ['id' => '::id::', 'title' => '::title2::', 'label' => '::label2::', 'alt' => '::alt2::']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('img', $result->getTagName()); $this->assertContains('http://example.com/foo.jpg', $result->getAttribute('src')); $this->assertContains('foo.jpg', $result->getAttribute('src')); $this->assertContains('::inlines::', $result->getAttribute('alt')); $this->assertContains('::title::', $result->getAttribute('title')); $this->assertContains('::id::', $result->getAttribute('id')); } public function testRenderWithoutTitle() { $inline = new Image('http://example.com/foo.jpg', '::label::'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('img', $result->getTagName()); $this->assertContains('http://example.com/foo.jpg', $result->getAttribute('src')); $this->assertContains('foo.jpg', $result->getAttribute('src')); $this->assertContains('::inlines::', $result->getAttribute('alt')); $this->assertNull($result->getAttribute('title')); } public function testRenderAllowUnsafeLink() { $this->renderer->setConfiguration(new Configuration([ 'allow_unsafe_links' => true, ])); $inline = new Image('javascript:void(0)'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertContains('javascript:void(0)', $result->getAttribute('src')); } public function testRenderDisallowUnsafeLink() { $this->renderer->setConfiguration(new Configuration([ 'allow_unsafe_links' => false, ])); $inline = new Image('javascript:void(0)'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('', $result->getAttribute('src')); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/LinkRendererTest.php�������������������������0000664�0000000�0000000�00000010400�13627337610�0026751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Link; use League\CommonMark\Inline\Renderer\LinkRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; class LinkRendererTest extends TestCase { /** * @var LinkRenderer */ protected $renderer; protected function setUp() { $this->renderer = new LinkRenderer(); $this->renderer->setConfiguration(new Configuration()); } public function testRenderWithTitle() { $inline = new Link('http://example.com/foo.html', '::label::', '::title::'); $inline->data['attributes'] = ['id' => '::id::', 'title' => '::title2::', 'href' => '::href2::']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('a', $result->getTagName()); $this->assertContains('http://example.com/foo.html', $result->getAttribute('href')); $this->assertContains('::title::', $result->getAttribute('title')); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertContains('::id::', $result->getAttribute('id')); } public function testRenderWithoutTitle() { $inline = new Link('http://example.com/foo.html', '::label::'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('a', $result->getTagName()); $this->assertContains('http://example.com/foo.html', $result->getAttribute('href')); $this->assertNull($result->getAttribute('title')); $this->assertContains('::inlines::', $result->getContents(true)); } public function testRenderAllowUnsafeLink() { $this->renderer->setConfiguration(new Configuration([ 'allow_unsafe_links' => true, ])); $inline = new Link('javascript:void(0)'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertContains('javascript:void(0)', $result->getAttribute('href')); } public function testRenderDisallowUnsafeLink() { $this->renderer->setConfiguration(new Configuration([ 'allow_unsafe_links' => false, ])); $inline = new Link('javascript:void(0)'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('', $result->getAttribute('href')); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } public function testRenderWithExternalTarget() { $inline = new Link('http://example.com/foo.html', '::label::', '::title::'); $inline->data['attributes'] = ['target' => '_blank']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('a', $result->getTagName()); $this->assertContains('http://example.com/foo.html', $result->getAttribute('href')); $this->assertContains('noopener', $result->getAttribute('rel')); $this->assertContains('noreferrer', $result->getAttribute('rel')); } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/NewlineRendererTest.php����������������������0000664�0000000�0000000�00000003614�13627337610�0027466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Newline; use League\CommonMark\Inline\Renderer\NewlineRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class NewlineRendererTest extends TestCase { /** * @var NewlineRenderer */ protected $renderer; protected function setUp() { $this->renderer = new NewlineRenderer(); } public function testRenderHardbreak() { $inline = new Newline(Newline::HARDBREAK); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('<br />', $result); } public function testRenderSoftbreak() { $inline = new Newline(Newline::SOFTBREAK); $fakeRenderer = new FakeHtmlRenderer(); $fakeRenderer->setOption('soft_break', '::softbreakChar::'); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('::softbreakChar::', $result); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ��������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/StrongRendererTest.php�����������������������0000664�0000000�0000000�00000003324�13627337610�0027337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\HtmlElement; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Strong; use League\CommonMark\Inline\Renderer\StrongRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class StrongRendererTest extends TestCase { /** * @var StrongRenderer */ protected $renderer; protected function setUp() { $this->renderer = new StrongRenderer(); } public function testRender() { $inline = new Strong(); $inline->data['attributes'] = ['id' => 'foo']; $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertTrue($result instanceof HtmlElement); $this->assertEquals('strong', $result->getTagName()); $this->assertContains('::inlines::', $result->getContents(true)); $this->assertEquals(['id' => 'foo'], $result->getAllAttributes()); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Inline/Renderer/TextRendererTest.php�������������������������0000664�0000000�0000000�00000002722�13627337610�0027010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Inline\Renderer; use League\CommonMark\Inline\Element as InlineElement; use League\CommonMark\Inline\Element\Text; use League\CommonMark\Inline\Renderer\TextRenderer; use League\CommonMark\Tests\Unit\FakeHtmlRenderer; use PHPUnit\Framework\TestCase; class TextRendererTest extends TestCase { /** * @var TextRenderer */ protected $renderer; protected function setUp() { $this->renderer = new TextRenderer(); } public function testRender() { $inline = new Text('foo bar'); $fakeRenderer = new FakeHtmlRenderer(); $result = $this->renderer->render($inline, $fakeRenderer); $this->assertInternalType('string', $result); $this->assertContains('foo bar', $result); } /** * @expectedException \InvalidArgumentException */ public function testRenderWithInvalidType() { $inline = $this->getMockForAbstractClass(InlineElement\AbstractInline::class); $fakeRenderer = new FakeHtmlRenderer(); $this->renderer->render($inline, $fakeRenderer); } } ����������������������������������������������php-league-commonmark-1.3.1/tests/unit/Node/��������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0020722�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Node/NodeTest.php��������������������������������������������0000664�0000000�0000000�00000013145�13627337610�0023164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Node; use PHPUnit\Framework\TestCase; class NodeTest extends TestCase { public function testInsertBeforeElementWhichDoesNotHaveAPreviousOne() { $root = new SimpleNode(); $root->appendChild($targetNode = new SimpleNode()); $newNode = new SimpleNode(); $targetNode->insertBefore($newNode); $this->assertNull($newNode->previous()); $this->assertSame($targetNode, $newNode->next()); $this->assertSame($newNode, $targetNode->previous()); } public function testInsertBeforeElementWhichAlreadyHasPrevious() { $root = new SimpleNode(); $root->appendChild($firstNode = new SimpleNode()); $root->appendChild($targetNode = new SimpleNode()); $newNode = new SimpleNode(); $targetNode->insertBefore($newNode); $this->assertSame($firstNode, $newNode->previous()); $this->assertSame($targetNode, $newNode->next()); $this->assertSame($newNode, $targetNode->previous()); } public function testPrependChildToChildlessParent() { $root = new SimpleNode(); $root->prependChild($newNode = new SimpleNode()); $this->assertSame($newNode, $root->firstChild()); $this->assertSame($root, $newNode->parent()); $this->assertNull($newNode->previous()); } public function testPrependChildToParentWhichAlreadyHasChildren() { $root = new SimpleNode(); $root->prependChild($existingChild = new SimpleNode()); $this->assertSame($existingChild, $root->firstChild()); $newNode = new SimpleNode(); $root->prependChild($newNode); $this->assertCount(2, $root->children()); $this->assertSame($newNode, $root->firstChild()); $this->assertSame($root, $newNode->parent()); $this->assertNull($newNode->previous()); $this->assertSame($existingChild, $newNode->next()); $this->assertSame($newNode, $existingChild->previous()); } public function testDetachChildren() { $root = new SimpleNode(); $root->appendChild($child1 = new SimpleNode()); $root->appendChild($child2 = new SimpleNode()); $root->detachChildren(); $this->assertCount(0, $root->children()); $this->assertNull($root->firstChild()); $this->assertNull($root->lastChild()); $this->assertNull($child1->parent()); $this->assertNull($child2->parent()); $this->assertSame($child2, $child1->next()); $this->assertSame($child1, $child2->previous()); } public function testReplaceChildren() { $root = new SimpleNode(); $root->appendChild($oldChild = new SimpleNode()); $newChildren = [ $newChild1 = new SimpleNode(), $newChild2 = new SimpleNode(), ]; $root->replaceChildren($newChildren); $this->assertCount(2, $root->children()); $this->assertSame($newChild1, $root->firstChild()); $this->assertSame($newChild2, $root->lastChild()); $this->assertSame($root, $newChild1->parent()); $this->assertSame($root, $newChild2->parent()); $this->assertNull($oldChild->parent()); } public function testInsertAfterWithParent() { $root = new SimpleNode(); $root->appendChild($child1 = new SimpleNode()); $root->appendChild($child2 = new SimpleNode()); $otherRoot = new SimpleNode(); $otherRoot->appendChild($child3 = new SimpleNode()); $otherRoot->appendChild($child4 = new SimpleNode()); $child1->insertAfter($child3); $this->assertCount(3, $root->children()); $this->assertCount(1, $otherRoot->children()); $this->assertSame($child1, $root->firstChild()); $this->assertSame($child2, $root->lastChild()); $this->assertSame($root, $child2->parent()); } public function testInsertAfterWithoutParent() { $node1 = new SimpleNode(); $node2 = new SimpleNode(); $node1->insertAfter($node2); $this->assertSame($node2, $node1->next()); $this->assertSame($node1, $node2->previous()); } public function testInsertBeforeWithParent() { $root = new SimpleNode(); $root->appendChild($child1 = new SimpleNode()); $root->appendChild($child2 = new SimpleNode()); $root->appendChild($child3 = new SimpleNode()); $otherRoot = new SimpleNode(); $otherRoot->appendChild($child4 = new SimpleNode()); $otherRoot->appendChild($child5 = new SimpleNode()); $child2->insertBefore($child4); $this->assertCount(4, $root->children()); $this->assertCount(1, $otherRoot->children()); $this->assertSame($child1, $root->children()[0]); $this->assertSame($child4, $root->children()[1]); $this->assertSame($child2, $root->children()[2]); $this->assertSame($child3, $root->children()[3]); $this->assertSame($root, $child4->parent()); } public function testInsertBeforeWithoutParent() { $node1 = new SimpleNode(); $node2 = new SimpleNode(); $node1->insertBefore($node2); $this->assertSame($node1, $node2->next()); $this->assertSame($node2, $node1->previous()); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Node/NodeWalkerTest.php��������������������������������������0000664�0000000�0000000�00000007002�13627337610�0024325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Node; use League\CommonMark\Block\Element\Document; use League\CommonMark\Block\Element\Paragraph; use League\CommonMark\Inline\Element\Text; use PHPUnit\Framework\TestCase; class NodeWalkerTest extends TestCase { public function testWalkEmptyContainerNode() { $node = new Document(); $walker = $node->walker(); $event = $walker->next(); $this->assertSame($node, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertSame($node, $event->getNode()); $this->assertFalse($event->isEntering()); $event = $walker->next(); $this->assertNull($event); $event = $walker->next(); $this->assertNull($event); } public function testWalkEmptyNonContainerNode() { $node = new Text(); $walker = $node->walker(); $event = $walker->next(); $this->assertSame($node, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertNull($event); $event = $walker->next(); $this->assertNull($event); } public function testWalkNestedNodes() { $document = new Document(); $document->appendChild($paragraph = new Paragraph()); $paragraph->appendChild($text = new Text()); $walker = $document->walker(); $event = $walker->next(); $this->assertSame($document, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertSame($paragraph, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertSame($text, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertSame($paragraph, $event->getNode()); $this->assertFalse($event->isEntering()); $event = $walker->next(); $this->assertSame($document, $event->getNode()); $this->assertFalse($event->isEntering()); $event = $walker->next(); $this->assertNull($event); $event = $walker->next(); $this->assertNull($event); } public function testResumeAt() { $document = new Document(); $document->appendChild($paragraph = new Paragraph()); $paragraph->appendChild($text = new Text()); $walker = $document->walker(); $walker->next(); $walker->next(); $event = $walker->next(); $this->assertSame($text, $event->getNode()); $this->assertTrue($event->isEntering()); $walker->resumeAt($text); $event = $walker->next(); $this->assertSame($text, $event->getNode()); $this->assertTrue($event->isEntering()); $walker->resumeAt($paragraph, true); $event = $walker->next(); $this->assertSame($paragraph, $event->getNode()); $this->assertTrue($event->isEntering()); $event = $walker->next(); $this->assertSame($text, $event->getNode()); $this->assertTrue($event->isEntering()); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Node/SimpleNode.php������������������������������������������0000664�0000000�0000000�00000001561�13627337610�0023475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Node; use League\CommonMark\Node\Node; /** * A simple node used for testing purposes. */ final class SimpleNode extends Node { /** * @var bool */ private $container; /** * @param bool $isContainer */ public function __construct(bool $isContainer = true) { $this->container = $isContainer; } /** * @return bool */ public function isContainer(): bool { return $this->container; } } �����������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Reference/���������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0021733�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Reference/ReferenceMapTest.php�������������������������������0000664�0000000�0000000�00000004267�13627337610�0025651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Reference; use League\CommonMark\Reference\Reference; use League\CommonMark\Reference\ReferenceMap; use PHPUnit\Framework\TestCase; class ReferenceMapTest extends TestCase { public function testAddNewReference() { $map = new ReferenceMap(); $reference = new Reference('foo', 'bar', 'baz'); $map->addReference($reference); $this->assertTrue($map->contains('foo')); $this->assertSame($reference, $map->getReference('foo')); } public function testUnicodeCaseFolding() { $map = new ReferenceMap(); $reference = new Reference('ẞ', 'bar', 'baz'); $map->addReference($reference); $this->assertTrue($map->contains('ẞ')); $this->assertTrue($map->contains('ß')); $this->assertTrue($map->contains('SS')); $this->assertTrue($map->contains('ss')); } public function testOverwriteReference() { $map = new ReferenceMap(); $reference1 = new Reference('foo', 'bar', 'baz'); $map->addReference($reference1); $reference2 = new Reference('foo', 'baz', 'baz'); $map->addReference($reference2); $this->assertTrue($map->contains('foo')); $this->assertSame($reference2, $map->getReference('foo')); $this->assertCount(1, $map->listReferences()); } public function testGetReferenceWhenNotExists() { $map = new ReferenceMap(); $this->assertNull($map->getReference('foo')); } public function testListReferences() { $map = new ReferenceMap(); $this->assertCount(0, $map->listReferences()); $map->addReference(new Reference('foo', 'aaa', 'aaa')); $map->addReference(new Reference('bar', 'bbb', 'bbb')); $this->assertCount(2, $map->listReferences()); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/UnmatchedBlockCloserTest.php���������������������������������0000664�0000000�0000000�00000002565�13627337610�0025451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\ContextInterface; use League\CommonMark\UnmatchedBlockCloser; use PHPUnit\Framework\TestCase; class UnmatchedBlockCloserTest extends TestCase { public function testResetTip() { $tip = $this->getMockForAbstractClass(AbstractBlock::class); $context = $this->getMockForAbstractClass(ContextInterface::class); $context->method('getTip')->willReturn($tip); $closer = new UnmatchedBlockCloser($context); $closer->setLastMatchedContainer($tip); $closer->resetTip(); $this->assertTrue($closer->areAllClosed()); } /** * @expectedException \RuntimeException */ public function testResetTipWithNullTip() { $context = $this->getMockForAbstractClass(ContextInterface::class); $context->method('getTip')->willReturn(null); $closer = new UnmatchedBlockCloser($context); $closer->resetTip(); } } �������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/��������������������������������������������������������0000775�0000000�0000000�00000000000�13627337610�0020752�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/ArrayCollectionTest.php���������������������������������0000664�0000000�0000000�00000026706�13627337610�0025430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\ArrayCollection; use PHPUnit\Framework\TestCase; class ArrayCollectionTest extends TestCase { public function testConstructorAndToArray() { $collection = new ArrayCollection(); $this->assertEquals([], $collection->toArray()); $array = []; $collection = new ArrayCollection($array); $this->assertEquals($array, $collection->toArray()); $array = ['foo' => 'bar']; $collection = new ArrayCollection($array); $this->assertEquals($array, $collection->toArray()); } public function testFirst() { $collection = new ArrayCollection(['foo', 'bar']); $this->assertEquals('foo', $collection->first()); } public function testLast() { $collection = new ArrayCollection(['foo', 'bar']); $this->assertEquals('bar', $collection->last()); } public function testGetIterator() { $array = ['foo' => 'bar']; $collection = new ArrayCollection($array); $iterator = $collection->getIterator(); $this->assertTrue($iterator instanceof \ArrayIterator); $this->assertEquals($array, $iterator->getArrayCopy()); } public function testAdd() { $collection = new ArrayCollection(); $collection->add('foo'); $this->assertEquals(['foo'], $collection->toArray()); $collection->add('bar'); $this->assertEquals(['foo', 'bar'], $collection->toArray()); } public function testSet() { $collection = new ArrayCollection(['foo']); $collection->set('foo', 1); $this->assertEquals(['foo', 'foo' => 1], $collection->toArray()); $collection->set('foo', 2); $this->assertEquals(['foo', 'foo' => 2], $collection->toArray()); } public function testGet() { $collection = new ArrayCollection(['foo' => 1, 'bar']); $this->assertEquals(1, $collection->get('foo')); $this->assertEquals('bar', $collection->get(0)); $this->assertNull($collection->get('bar')); } public function testRemove() { $collection = new ArrayCollection(['foo' => 1, 'bar', 'baz']); $removed = $collection->remove('foo'); $this->assertEquals(1, $removed); $this->assertEquals(['bar', 'baz'], $collection->toArray()); $removed = $collection->remove('foo'); $this->assertNull($removed); $this->assertEquals(['bar', 'baz'], $collection->toArray()); $removed = $collection->remove(0); $this->assertEquals('bar', $removed); $this->assertEquals([1 => 'baz'], $collection->toArray()); $removed = $collection->remove(1); $this->assertEquals('baz', $removed); $this->assertEquals([], $collection->toArray()); } public function testRemoveNulls() { $collection = new ArrayCollection(['foo' => null]); $removed = $collection->remove('nonExistantKey'); $this->assertNull($removed); $this->assertEquals(['foo' => null], $collection->toArray()); $removed = $collection->remove('foo'); $this->assertNull($removed); $this->assertEquals([], $collection->toArray()); } public function testIsEmpty() { $collection = new ArrayCollection(); $this->assertTrue($collection->isEmpty()); $collection = new ArrayCollection([]); $this->assertTrue($collection->isEmpty()); $collection = new ArrayCollection(['foo']); $this->assertFalse($collection->isEmpty()); $collection = new ArrayCollection(); $collection->add('foo'); $this->assertFalse($collection->isEmpty()); } public function testContains() { $object = new \stdClass(); $number = 3; $string = 'foo'; $collection = new ArrayCollection([$object, $number, $string]); $this->assertTrue($collection->contains($object)); $this->assertFalse($collection->contains(new \stdClass())); $this->assertTrue($collection->contains($number)); $this->assertTrue($collection->contains(3)); $this->assertFalse($collection->contains(3.000)); $this->assertTrue($collection->contains($string)); $this->assertTrue($collection->contains('foo')); $this->assertFalse($collection->contains('FOO')); } public function testIndexOf() { $object = new \stdClass(); $number = 3; $string = 'foo'; $collection = new ArrayCollection([$object, $number, $string]); $this->assertTrue(0 === $collection->indexOf($object)); $this->assertTrue(false === $collection->indexOf(new \stdClass())); $this->assertTrue(1 === $collection->indexOf($number)); $this->assertTrue(1 === $collection->indexOf(3)); $this->assertTrue(false === $collection->indexOf(3.000)); $this->assertTrue(2 === $collection->indexOf($string)); $this->assertTrue(2 === $collection->indexOf('foo')); $this->assertTrue(false === $collection->indexOf('FOO')); } public function testContainsKey() { $collection = new ArrayCollection(['foo' => 1, 'bar']); $this->assertTrue($collection->containsKey('foo')); $this->assertTrue($collection->containsKey(0)); $this->assertFalse($collection->containsKey('FOO')); $this->assertFalse($collection->containsKey(1)); } public function testCount() { $collection = new ArrayCollection(); $this->assertEquals(0, $collection->count()); $collection = new ArrayCollection([]); $this->assertEquals(0, $collection->count()); $collection = new ArrayCollection(['foo']); $this->assertEquals(1, $collection->count()); $collection->add('bar'); $this->assertEquals(2, $collection->count()); $collection->remove(0); $this->assertEquals(1, $collection->count()); } public function testOffsetExists() { $collection = new ArrayCollection(['foo' => 1, 'bar']); $this->assertTrue($collection->offsetExists('foo')); $this->assertTrue($collection->offsetExists(0)); $this->assertFalse($collection->offsetExists('FOO')); $this->assertFalse($collection->offsetExists(1)); } public function testOffsetGet() { $collection = new ArrayCollection(['foo' => 1, 'bar']); $this->assertEquals(1, $collection->offsetGet('foo')); $this->assertEquals('bar', $collection->offsetGet(0)); $this->assertNull($collection->offsetGet('bar')); } public function testOffsetSet() { $collection = new ArrayCollection(); $collection->offsetSet(null, 'foo'); $this->assertEquals(['foo'], $collection->toArray()); $collection->offsetSet(null, 'bar'); $this->assertEquals(['foo', 'bar'], $collection->toArray()); $collection = new ArrayCollection(['foo']); $collection->offsetSet('foo', 1); $this->assertEquals(['foo', 'foo' => 1], $collection->toArray()); $collection->offsetSet('foo', 2); $this->assertEquals(['foo', 'foo' => 2], $collection->toArray()); } public function testOffsetUnset() { $collection = new ArrayCollection(['foo' => 1, 'bar', 'baz']); $removed = $collection->offsetUnset('foo'); $this->assertNull($removed); $this->assertEquals(['bar', 'baz'], $collection->toArray()); $removed = $collection->offsetUnset('foo'); $this->assertNull($removed); $this->assertEquals(['bar', 'baz'], $collection->toArray()); $removed = $collection->offsetUnset(0); $this->assertNull($removed); $this->assertEquals([1 => 'baz'], $collection->toArray()); $removed = $collection->offsetUnset(1); $this->assertNull($removed); $this->assertEquals([], $collection->toArray()); } public function testSlice() { $collection = new ArrayCollection(['foo' => 1, 0 => 'bar', 1 => 'baz', 2 => 2]); $this->assertEquals(['foo' => 1, 0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(0)); $this->assertEquals(['foo' => 1, 0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(0, null)); $this->assertEquals(['foo' => 1, 0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(0, 99)); $this->assertEquals(['foo' => 1, 0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(0, 4)); $this->assertEquals(['foo' => 1, 0 => 'bar', 1 => 'baz'], $collection->slice(0, 3)); $this->assertEquals(['foo' => 1, 0 => 'bar'], $collection->slice(0, 2)); $this->assertEquals(['foo' => 1], $collection->slice(0, 1)); $this->assertEquals([], $collection->slice(0, 0)); $this->assertEquals([0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(1)); $this->assertEquals([0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(1, null)); $this->assertEquals([0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(1, 99)); $this->assertEquals([0 => 'bar', 1 => 'baz', 2 => 2], $collection->slice(1, 3)); $this->assertEquals([0 => 'bar', 1 => 'baz'], $collection->slice(1, 2)); $this->assertEquals([0 => 'bar'], $collection->slice(1, 1)); $this->assertEquals([], $collection->slice(1, 0)); $this->assertEquals([1 => 'baz', 2 => 2], $collection->slice(2)); $this->assertEquals([1 => 'baz', 2 => 2], $collection->slice(2, null)); $this->assertEquals([1 => 'baz', 2 => 2], $collection->slice(2, 99)); $this->assertEquals([1 => 'baz', 2 => 2], $collection->slice(2, 2)); $this->assertEquals([1 => 'baz'], $collection->slice(2, 1)); $this->assertEquals([], $collection->slice(2, 0)); $this->assertEquals([2 => 2], $collection->slice(3)); $this->assertEquals([2 => 2], $collection->slice(3, null)); $this->assertEquals([2 => 2], $collection->slice(3, 99)); $this->assertEquals([2 => 2], $collection->slice(3, 1)); $this->assertEquals([], $collection->slice(3, 0)); $this->assertEquals([], $collection->slice(4)); $this->assertEquals([], $collection->slice(99)); $this->assertEquals([], $collection->slice(99, 99)); } public function testToArray() { $collection = new ArrayCollection(); $this->assertEquals([], $collection->toArray()); $collection = new ArrayCollection([]); $this->assertEquals([], $collection->toArray()); $collection = new ArrayCollection([1]); $this->assertEquals([1], $collection->toArray()); $collection = new ArrayCollection([2 => 1, 'foo']); $this->assertEquals([2 => 1, 'foo'], $collection->toArray()); } public function testReplaceWith() { $collection = new ArrayCollection(['foo' => 1, 'bar']); $replaced = $collection->replaceWith(['baz', 42]); $this->assertEquals($collection, $replaced); $this->assertEquals(['baz', 42], $collection->toArray()); $this->assertEquals(['baz', 42], $replaced->toArray()); } public function testRemoveGaps() { $collection = new ArrayCollection(['', true, false, null, [], 0, '0', 1]); $collection->removeGaps(); $this->assertEquals([1 => true, 7 => 1], $collection->toArray()); } } ����������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/ConfigurationTest.php�����������������������������������0000664�0000000�0000000�00000007447�13627337610�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\Configuration; use PHPUnit\Framework\TestCase; class ConfigurationTest extends TestCase { public function testGet() { $data = [ 'foo' => 'bar', 'a' => [ 'b' => 'c', ], ]; $config = new Configuration($data); // No arguments should return the whole thing $this->assertEquals($data, $config->get()); // Test getting a single scalar element $this->assertEquals('bar', $config->get('foo')); // Test getting a single array element $this->assertEquals($data['a'], $config->get('a')); // Test getting an element by path $this->assertEquals('c', $config->get('a/b')); // Test getting a path that's one level too deep $this->assertNull($config->get('a/b/c')); // Test getting a path with no existing components $this->assertNull($config->get('x/y/z')); // Test getting a path with a default that isn't a string or null $this->assertSame(true, $config->get('x/y/z', true)); // Test getting a non-existent element $this->assertNull($config->get('test')); // Test getting a non-existent element with a default value $this->assertEquals(42, $config->get('answer', 42)); } public function testSet() { $data = [ 'foo' => 'bar', 'a' => [ 'b' => 'c', ], ]; $config = new Configuration($data); // Creating a new scalar $config->set('lucky_number', 3); $this->assertEquals(3, $config->get('lucky_number')); // Replacing the scalar with a null $config->set('lucky_number', null); $this->assertNull($config->get('lucky_number')); // Simple replacement of a scalar value $config->set('foo', 'baz'); $this->assertEquals('baz', $config->get('foo')); // Replacing a scalar with an array $config->set('foo', ['bar' => 'baz']); $this->assertEquals(['bar' => 'baz'], $config->get('foo')); $this->assertEquals('baz', $config->get('foo/bar')); // Replacing a nested scalar $config->set('a/b', 'd'); $this->assertEquals(['b' => 'd'], $config->get('a')); $this->assertEquals('d', $config->get('a/b')); // Replacing a nested scalar with an array $config->set('a/b/c', 'd'); $this->assertEquals(['c' => 'd'], $config->get('a/b')); $this->assertEquals('d', $config->get('a/b/c')); // Replacing a nested array with a scalar $config->set('a/b', 'c'); $this->assertEquals(['b' => 'c'], $config->get('a')); $this->assertEquals('c', $config->get('a/b')); // Creating a brand new nested array $config->set('x/y/z', 42); $this->assertEquals(['y' => ['z' => 42]], $config->get('x')); $this->assertEquals(['z' => 42], $config->get('x/y')); $this->assertSame(42, $config->get('x/y/z')); } public function testReplace() { $config = new Configuration(['foo' => 'bar']); $config->replace(['test' => '123']); $this->assertNull($config->get('foo')); $this->assertEquals('123', $config->get('test')); } public function testMerge() { $config = new Configuration(['foo' => 'bar', 'test' => '123']); $config->merge(['test' => '456']); $this->assertEquals('bar', $config->get('foo')); $this->assertEquals('456', $config->get('test')); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/Html5EntitiesTest.php�����������������������������������0000664�0000000�0000000�00000003357�13627337610�0025031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\Html5Entities; use PHPUnit\Framework\TestCase; class Html5EntitiesTest extends TestCase { public function testEntityToChar() { $this->assertEquals('©', Html5Entities::decodeEntity('&copy;')); $this->assertEquals('&copy', Html5Entities::decodeEntity('&copy')); $this->assertEquals('&MadeUpEntity;', Html5Entities::decodeEntity('&MadeUpEntity;')); $this->assertEquals('#', Html5Entities::decodeEntity('&#35;')); $this->assertEquals('Æ', Html5Entities::decodeEntity('&AElig;')); $this->assertEquals('Ď', Html5Entities::decodeEntity('&Dcaron;')); } public function testFromDecimal() { $this->assertEquals('A', Html5Entities::fromDecimal(65)); $this->assertEquals('A', Html5Entities::fromDecimal('65')); $this->assertEquals('😄', Html5Entities::fromDecimal(128516)); $this->assertEquals('😄', Html5Entities::fromDecimal('128516')); // Test for things which should return U+FFFD REPLACEMENT CHARACTER $this->assertEquals('�', Html5Entities::fromDecimal(null)); $this->assertEquals('�', Html5Entities::fromDecimal(0)); $this->assertEquals('�', Html5Entities::fromDecimal(0x30000)); } public function testFromHex() { $this->assertEquals('A', Html5Entities::fromHex('41')); $this->assertEquals('😄', Html5Entities::fromHex('1f604')); // Test for things which should return U+FFFD REPLACEMENT CHARACTER $this->assertEquals('�', Html5Entities::fromHex('')); $this->assertEquals('�', Html5Entities::fromHex('fffd')); $this->assertEquals('�', Html5Entities::fromHex('ffffffff')); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/Html5EntityDecoderTest.php������������������������������0000664�0000000�0000000�00000003025�13627337610�0025777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\Html5EntityDecoder; use PHPUnit\Framework\TestCase; class Html5EntityDecoderTest extends TestCase { public function testEntityToChar() { $this->assertEquals('©', Html5EntityDecoder::decode('&copy;')); $this->assertEquals('&copy', Html5EntityDecoder::decode('&copy')); $this->assertEquals('&MadeUpEntity;', Html5EntityDecoder::decode('&MadeUpEntity;')); $this->assertEquals('#', Html5EntityDecoder::decode('&#35;')); $this->assertEquals('Æ', Html5EntityDecoder::decode('&AElig;')); $this->assertEquals('Ď', Html5EntityDecoder::decode('&Dcaron;')); } /** * @dataProvider htmlEntityDataProvider */ public function testAllHtml5EntityReferences(string $entity, string $decoded) { $this->assertEquals($decoded, html_entity_decode($entity, ENT_QUOTES | ENT_HTML5, 'UTF-8'), sprintf('Failed parsing the "%s" entity', $entity)); } public function htmlEntityDataProvider() { // Test data from https://html.spec.whatwg.org/multipage/entities.json $data = json_decode(file_get_contents(__DIR__ . '/entities.json'), true); foreach ($data as $entity => $info) { // Per the spec, we only care about entities that have a trailing semi-colon. // See https://spec.commonmark.org/0.29/#entity-references if (substr($entity, -1, 1) === ';') { yield [$entity, $info['characters']]; } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/LinkParserHelperTest.php��������������������������������0000664�0000000�0000000�00000003164�13627337610�0025541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Cursor; use League\CommonMark\Util\LinkParserHelper; use PHPUnit\Framework\TestCase; class LinkParserHelperTest extends TestCase { /** * @param string $input * @param string $expected * * @dataProvider dataProviderForTestParseLinkDestination */ public function testParseLinkDestination(string $input, string $expected) { $cursor = new Cursor($input); $this->assertSame($expected, LinkParserHelper::parseLinkDestination($cursor)); } public function dataProviderForTestParseLinkDestination() { yield ['www.google.com', 'www.google.com']; yield ['<www.google.com>', 'www.google.com']; yield ['<www.google.com> is great', 'www.google.com']; yield ['\\b\\', '%5Cb%5C']; // Regression test for https://github.com/thephpleague/commonmark/issues/403 } /** * @param string $input * @param int $expected * * @dataProvider dataProviderForTestParseLinkLabel */ public function testParseLinkLabel(string $input, int $expected) { $cursor = new Cursor($input); $this->assertSame($expected, LinkParserHelper::parseLinkLabel($cursor)); } public function dataProviderForTestParseLinkLabel() { yield ['[link](http://example.com)', 6]; yield ['[\\]: test', 0]; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/PrioritizedListTest.php���������������������������������0000664�0000000�0000000�00000002261�13627337610�0025464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\PrioritizedList; use PHPUnit\Framework\TestCase; class PrioritizedListTest extends TestCase { public function testAddSamePriorities() { $list = new PrioritizedList(); $list->add('foo', 0); $list->add('bar', 0); $items = iterator_to_array($list->getIterator()); $this->assertCount(2, $items); $this->assertEquals('foo', $items[0]); $this->assertEquals('bar', $items[1]); } public function testAddDifferentPriorities() { $list = new PrioritizedList(); $list->add('foo', 0); $list->add('bar', 100); $list->add('baz', -20); $items = iterator_to_array($list->getIterator()); $this->assertCount(3, $items); $this->assertEquals('bar', $items[0]); $this->assertEquals('foo', $items[1]); $this->assertEquals('baz', $items[2]); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/RegexHelperTest.php�������������������������������������0000664�0000000�0000000�00000030516�13627337610�0024542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Block\Element\HtmlBlock; use League\CommonMark\Util\RegexHelper; use PHPUnit\Framework\TestCase; /** * Tests the different regular expressions */ class RegexHelperTest extends TestCase { public function testEscapable() { $regex = '/^' . RegexHelper::PARTIAL_ESCAPABLE . '$/'; $this->assertRegExp($regex, '&'); $this->assertRegExp($regex, '/'); $this->assertRegExp($regex, '\\'); $this->assertRegExp($regex, '('); $this->assertRegExp($regex, ')'); } public function testEscapedChar() { $regex = '/^' . RegexHelper::PARTIAL_ESCAPED_CHAR . '$/'; $this->assertRegExp($regex, '\\&'); $this->assertRegExp($regex, '\\/'); $this->assertRegExp($regex, '\\\\'); $this->assertRegExp($regex, '\)'); $this->assertRegExp($regex, '\('); } public function testInDoubleQuotes() { $regex = '/^' . RegexHelper::PARTIAL_IN_DOUBLE_QUOTES . '$/'; $this->assertRegExp($regex, '"\\&"'); $this->assertRegExp($regex, '"\\/"'); $this->assertRegExp($regex, '"\\\\"'); } public function testInSingleQuotes() { $regex = '/^' . RegexHelper::PARTIAL_IN_SINGLE_QUOTES . '$/'; $this->assertRegExp($regex, '\'\\&\''); $this->assertRegExp($regex, '\'\\/\''); $this->assertRegExp($regex, '\'\\\\\''); } public function testInParens() { $regex = '/^' . RegexHelper::PARTIAL_IN_PARENS . '$/'; $this->assertRegExp($regex, '(\\&)'); $this->assertRegExp($regex, '(\\/)'); $this->assertRegExp($regex, '(\\\\)'); } public function testRegChar() { $regex = '/^' . RegexHelper::PARTIAL_REG_CHAR . '$/'; $this->assertRegExp($regex, 'a'); $this->assertRegExp($regex, 'A'); $this->assertRegExp($regex, '!'); $this->assertNotRegExp($regex, ' '); } public function testInParensNoSp() { $regex = '/^' . RegexHelper::PARTIAL_IN_PARENS_NOSP . '$/'; $this->assertRegExp($regex, '(a)'); $this->assertRegExp($regex, '(A)'); $this->assertRegExp($regex, '(!)'); $this->assertNotRegExp($regex, '(a )'); } public function testTagname() { $regex = '/^' . RegexHelper::PARTIAL_TAGNAME . '$/'; $this->assertRegExp($regex, 'a'); $this->assertRegExp($regex, 'img'); $this->assertRegExp($regex, 'h1'); $this->assertNotRegExp($regex, '11'); } public function testBlockTagName() { $regex = '/^' . RegexHelper::PARTIAL_BLOCKTAGNAME . '$/'; $this->assertRegExp($regex, 'p'); $this->assertRegExp($regex, 'div'); $this->assertRegExp($regex, 'h1'); $this->assertNotRegExp($regex, 'a'); $this->assertNotRegExp($regex, 'h7'); } public function testAttributeName() { $regex = '/^' . RegexHelper::PARTIAL_ATTRIBUTENAME . '$/'; $this->assertRegExp($regex, 'href'); $this->assertRegExp($regex, 'class'); $this->assertRegExp($regex, 'data-src'); $this->assertNotRegExp($regex, '-key'); } public function testUnquotedValue() { $regex = '/^' . RegexHelper::PARTIAL_UNQUOTEDVALUE . '$/'; $this->assertRegExp($regex, 'foo'); $this->assertRegExp($regex, 'bar'); $this->assertNotRegExp($regex, '"baz"'); } public function testSingleQuotedValue() { $regex = '/^' . RegexHelper::PARTIAL_SINGLEQUOTEDVALUE . '$/'; $this->assertRegExp($regex, '\'foo\''); $this->assertRegExp($regex, '\'bar\''); $this->assertNotRegExp($regex, '"baz"'); } public function testDoubleQuotedValue() { $regex = '/^' . RegexHelper::PARTIAL_DOUBLEQUOTEDVALUE . '$/'; $this->assertRegExp($regex, '"foo"'); $this->assertRegExp($regex, '"bar"'); $this->assertNotRegExp($regex, '\'baz\''); } public function testAttributeValue() { $regex = '/^' . RegexHelper::PARTIAL_ATTRIBUTEVALUE . '$/'; $this->assertRegExp($regex, 'foo'); $this->assertRegExp($regex, '\'bar\''); $this->assertRegExp($regex, '"baz"'); } public function testAttributeValueSpec() { $regex = '/^' . RegexHelper::PARTIAL_ATTRIBUTEVALUESPEC . '$/'; $this->assertRegExp($regex, '=foo'); $this->assertRegExp($regex, '= foo'); $this->assertRegExp($regex, ' =foo'); $this->assertRegExp($regex, ' = foo'); $this->assertRegExp($regex, '=\'bar\''); $this->assertRegExp($regex, '= \'bar\''); $this->assertRegExp($regex, ' =\'bar\''); $this->assertRegExp($regex, ' = \'bar\''); $this->assertRegExp($regex, '="baz"'); $this->assertRegExp($regex, '= "baz"'); $this->assertRegExp($regex, ' ="baz"'); $this->assertRegExp($regex, ' = "baz"'); } public function testAttribute() { $regex = '/^' . RegexHelper::PARTIAL_ATTRIBUTE . '$/'; $this->assertRegExp($regex, ' disabled'); $this->assertRegExp($regex, ' disabled="disabled"'); $this->assertRegExp($regex, ' href="http://www.google.com"'); $this->assertNotRegExp($regex, 'disabled', 'There must be at least one space at the start'); } public function testOpenTag() { $regex = '/^' . RegexHelper::PARTIAL_OPENTAG . '$/'; $this->assertRegExp($regex, '<hr>'); $this->assertRegExp($regex, '<a href="http://www.google.com">'); $this->assertRegExp($regex, '<img src="http://www.google.com/logo.png" />'); $this->assertNotRegExp($regex, '</p>'); } public function testCloseTag() { $regex = '/^' . RegexHelper::PARTIAL_CLOSETAG . '$/'; $this->assertRegExp($regex, '</p>'); $this->assertRegExp($regex, '</a>'); $this->assertNotRegExp($regex, '<hr>'); $this->assertNotRegExp($regex, '<img src="http://www.google.com/logo.png" />'); } public function testOpenBlockTag() { $regex = '/^' . RegexHelper::PARTIAL_OPENBLOCKTAG . '$/'; $this->assertRegExp($regex, '<body>'); $this->assertRegExp($regex, '<hr>'); $this->assertRegExp($regex, '<hr />'); $this->assertRegExp($regex, '<p id="foo" class="bar">'); $this->assertNotRegExp($regex, '<a href="http://www.google.com">', 'This is not a block element'); $this->assertNotRegExp($regex, '</p>', 'This is not an opening tag'); } public function testCloseBlockTag() { $regex = '/^' . RegexHelper::PARTIAL_CLOSEBLOCKTAG . '$/'; $this->assertRegExp($regex, '</body>'); $this->assertRegExp($regex, '</p>'); $this->assertNotRegExp($regex, '</a>', 'This is not a block element'); $this->assertNotRegExp($regex, '<br>', 'This is not a closing tag'); } public function testHtmlComment() { $regex = '/^' . RegexHelper::PARTIAL_HTMLCOMMENT . '$/'; $this->assertRegExp($regex, '<!---->'); $this->assertRegExp($regex, '<!-- -->'); $this->assertRegExp($regex, '<!-- HELLO WORLD -->'); $this->assertNotRegExp($regex, '<!->'); $this->assertNotRegExp($regex, '<!-->'); $this->assertNotRegExp($regex, '<!--->'); $this->assertNotRegExp($regex, '<!- ->'); } public function testProcessingInstruction() { $regex = '/^' . RegexHelper::PARTIAL_PROCESSINGINSTRUCTION . '$/'; $this->assertRegExp($regex, '<?PITarget PIContent?>'); $this->assertRegExp($regex, '<?xml-stylesheet type="text/xsl" href="style.xsl"?>'); } public function testDeclaration() { $regex = '/^' . RegexHelper::PARTIAL_DECLARATION . '$/'; $this->assertRegExp($regex, '<!DOCTYPE html>'); $this->assertRegExp($regex, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'); $this->assertRegExp($regex, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'); } public function testCDATA() { $regex = '/^' . RegexHelper::PARTIAL_CDATA . '$/'; $this->assertRegExp($regex, '<![CDATA[<sender>John Smith</sender>]]>'); $this->assertRegExp($regex, '<![CDATA[]]]]><![CDATA[>]]>'); } public function testHtmlTag() { $regex = '/^' . RegexHelper::PARTIAL_HTMLTAG . '$/'; $this->assertRegExp($regex, '<body id="main">'); $this->assertRegExp($regex, '</p>'); $this->assertRegExp($regex, '<!-- HELLO WORLD -->'); $this->assertRegExp($regex, '<?xml-stylesheet type="text/xsl" href="style.xsl"?>'); $this->assertRegExp($regex, '<!DOCTYPE html>'); $this->assertRegExp($regex, '<![CDATA[<sender>John Smith</sender>]]>'); } public function testHtmlBlockOpen() { $regex = '/^' . RegexHelper::PARTIAL_HTMLBLOCKOPEN . '$/'; $this->assertRegExp($regex, '<h1>'); $this->assertRegExp($regex, '</p>'); } public function testLinkTitle() { $regex = '/^' . RegexHelper::PARTIAL_HTMLBLOCKOPEN . '$/'; $this->assertRegExp($regex, '<h1>'); $this->assertRegExp($regex, '</p>'); } public function testUnescape() { $this->assertEquals('foo(and(bar))', RegexHelper::unescape('foo(and\\(bar\\))')); } public function testIsEscapable() { $this->assertFalse(RegexHelper::isEscapable('')); $this->assertFalse(RegexHelper::isEscapable('A')); $this->assertTrue(RegexHelper::isEscapable('\\')); } /** * @param $regex * @param $string * @param $offset * @param $expectedResult * * @dataProvider dataForTestMatchAt */ public function testMatchAt(string $regex, string $string, ?int $offset, int $expectedResult) { if ($offset === null) { $this->assertEquals($expectedResult, RegexHelper::matchAt($regex, $string)); } else { $this->assertEquals($expectedResult, RegexHelper::matchAt($regex, $string, $offset)); } } /** * @return array */ public function dataForTestMatchAt() { return [ ['/ /', 'foo bar', null, 3], ['/ /', 'foo bar', 0, 3], ['/ /', 'foo bar', 1, 3], ['/ /', 'это тест', null, 3], ['/ /', 'это тест', 0, 3], ['/ /', 'это тест', 1, 3], ]; } /** * @param int $type * * @dataProvider blockTypesWithValidOpenerRegexes */ public function testValidHtmlBlockOpenRegex(int $type) { $this->assertNotEmpty(RegexHelper::getHtmlBlockOpenRegex($type)); } public function blockTypesWithValidOpenerRegexes() { yield [HtmlBlock::TYPE_1_CODE_CONTAINER]; yield [HtmlBlock::TYPE_2_COMMENT]; yield [HtmlBlock::TYPE_3]; yield [HtmlBlock::TYPE_4]; yield [HtmlBlock::TYPE_5_CDATA]; yield [HtmlBlock::TYPE_6_BLOCK_ELEMENT]; yield [HtmlBlock::TYPE_7_MISC_ELEMENT]; } /** * @expectedException \InvalidArgumentException */ public function testInvalidHtmlBlockOpenRegex() { RegexHelper::getHtmlBlockOpenRegex(8); } /** * @param int $type * * @dataProvider blockTypesWithValidCloserRegexes */ public function testValidHtmlBlockCloseRegex(int $type) { $this->assertNotEmpty(RegexHelper::getHtmlBlockOpenRegex($type)); } public function blockTypesWithValidCloserRegexes() { yield [HtmlBlock::TYPE_1_CODE_CONTAINER]; yield [HtmlBlock::TYPE_2_COMMENT]; yield [HtmlBlock::TYPE_3]; yield [HtmlBlock::TYPE_4]; yield [HtmlBlock::TYPE_5_CDATA]; } /** * @param int $type * * @dataProvider blockTypesWithInvalidCloserRegexes * @expectedException \InvalidArgumentException */ public function testInvalidHtmlBlockCloseRegex(int $type) { RegexHelper::getHtmlBlockCloseRegex($type); } public function blockTypesWithInvalidCloserRegexes() { yield [HtmlBlock::TYPE_6_BLOCK_ELEMENT]; yield [HtmlBlock::TYPE_7_MISC_ELEMENT]; yield [8]; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/UrlEncoderTest.php��������������������������������������0000664�0000000�0000000�00000007342�13627337610�0024373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\UrlEncoder; use PHPUnit\Framework\TestCase; class UrlEncoderTest extends TestCase { /** * @dataProvider unescapeAndEncodeTestProvider */ public function testUnescapeAndEncode($input, $expected) { $this->assertEquals($expected, UrlEncoder::unescapeAndEncode($input)); } public function unescapeAndEncodeTestProvider() { return [ ['(foo)', '(foo)'], ['/my uri', '/my%20uri'], ['`', '%60'], ['~', '~'], ['!', '!'], ['@', '@'], ['#', '#'], ['$', '$'], ['%', '%25'], ['^', '%5E'], ['&', '&'], ['*', '*'], ['(', '('], [')', ')'], ['-', '-'], ['_', '_'], ['=', '='], ['+', '+'], ['{', '%7B'], ['}', '%7D'], ['[', '%5B'], [']', '%5D'], ['\\', '%5C'], ['|', '%7C'], [';', ';'], ['\'', '\''], [':', ':'], ['"', '%22'], [',', ','], ['.', '.'], ['/', '/'], ['<', '%3C'], ['>', '%3E'], ['?', '?'], ['%21', '%21'], ['%23', '%23'], ['%24', '%24'], ['%26', '%26'], ['%27', '%27'], ['%2A', '%2A'], ['%2B', '%2B'], ['%2C', '%2C'], ['%2D', '%2D'], ['%2E', '%2E'], ['%2F', '%2F'], ['%3A', '%3A'], ['%3B', '%3B'], ['%3D', '%3D'], ['%3F', '%3F'], ['%40', '%40'], ['%5F', '%5F'], ['%7E', '%7E'], ['%ED', '%ED'], ['java%0ascript:alert("XSS")', 'java%0ascript:alert(%22XSS%22)'], ['java%0Ascript:alert("XSS")', 'java%0Ascript:alert(%22XSS%22)'], ["java\nscript:alert('XSS')", "java%0Ascript:alert('XSS')"], ['javascript&amp;colon;alert%28&#039;XSS&#039;%29', 'javascript&amp;colon;alert%28&#039;XSS&#039;%29'], ['https://en.wikipedia.org/wiki/Markdown#CommonMark', 'https://en.wikipedia.org/wiki/Markdown#CommonMark'], ['https://img.shields.io/badge/help-%23hoaproject-ff0066.svg', 'https://img.shields.io/badge/help-%23hoaproject-ff0066.svg'], ['http://example.com/a%62%63%2fd%3Fe', 'http://example.com/a%62%63%2fd%3Fe'], ['http://ko.wikipedia.org/wiki/위키백과:대문', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'], ['http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'], ['http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'], ['http://www.inpec.gov.co/portal/page/portal/Inpec/Institucion/Estad%EDsticas/Estadisticas/Informes%20y%20Boletines%20Estad%EDsticos/1%20INFORME%20ENERO%202017.pdf', 'http://www.inpec.gov.co/portal/page/portal/Inpec/Institucion/Estad%EDsticas/Estadisticas/Informes%20y%20Boletines%20Estad%EDsticos/1%20INFORME%20ENERO%202017.pdf'], ]; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������php-league-commonmark-1.3.1/tests/unit/Util/XmlTest.php���������������������������������������������0000664�0000000�0000000�00000001757�13627337610�0023075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?php /* * This file is part of the league/commonmark package. * * (c) Colin O'Dell <colinodell@gmail.com> * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Unit\Util; use League\CommonMark\Util\Xml; use PHPUnit\Framework\TestCase; class XmlTest extends TestCase { /** * @param string $input * @param string $expectedOutput * * @dataProvider dataProviderForTestEscape */ public function testEscape($input, $expectedOutput) { $this->assertEquals($expectedOutput, Xml::escape($input)); } public function dataProviderForTestEscape() { yield ['foo', 'foo']; yield ['&copy;', '&amp;copy;']; yield ['<script>', '&lt;script&gt;']; yield ['&#x0000;', '&amp;#x0000;']; } } �����������������php-league-commonmark-1.3.1/tests/unit/Util/entities.json�������������������������������������������0000664�0000000�0000000�00000434751�13627337610�0023507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "&AElig": { "codepoints": [198], "characters": "\u00C6" }, "&AElig;": { "codepoints": [198], "characters": "\u00C6" }, "&AMP": { "codepoints": [38], "characters": "\u0026" }, "&AMP;": { "codepoints": [38], "characters": "\u0026" }, "&Aacute": { "codepoints": [193], "characters": "\u00C1" }, "&Aacute;": { "codepoints": [193], "characters": "\u00C1" }, "&Abreve;": { "codepoints": [258], "characters": "\u0102" }, "&Acirc": { "codepoints": [194], "characters": "\u00C2" }, "&Acirc;": { "codepoints": [194], "characters": "\u00C2" }, "&Acy;": { "codepoints": [1040], "characters": "\u0410" }, "&Afr;": { "codepoints": [120068], "characters": "\uD835\uDD04" }, "&Agrave": { "codepoints": [192], "characters": "\u00C0" }, "&Agrave;": { "codepoints": [192], "characters": "\u00C0" }, "&Alpha;": { "codepoints": [913], "characters": "\u0391" }, "&Amacr;": { "codepoints": [256], "characters": "\u0100" }, "&And;": { "codepoints": [10835], "characters": "\u2A53" }, "&Aogon;": { "codepoints": [260], "characters": "\u0104" }, "&Aopf;": { "codepoints": [120120], "characters": "\uD835\uDD38" }, "&ApplyFunction;": { "codepoints": [8289], "characters": "\u2061" }, "&Aring": { "codepoints": [197], "characters": "\u00C5" }, "&Aring;": { "codepoints": [197], "characters": "\u00C5" }, "&Ascr;": { "codepoints": [119964], "characters": "\uD835\uDC9C" }, "&Assign;": { "codepoints": [8788], "characters": "\u2254" }, "&Atilde": { "codepoints": [195], "characters": "\u00C3" }, "&Atilde;": { "codepoints": [195], "characters": "\u00C3" }, "&Auml": { "codepoints": [196], "characters": "\u00C4" }, "&Auml;": { "codepoints": [196], "characters": "\u00C4" }, "&Backslash;": { "codepoints": [8726], "characters": "\u2216" }, "&Barv;": { "codepoints": [10983], "characters": "\u2AE7" }, "&Barwed;": { "codepoints": [8966], "characters": "\u2306" }, "&Bcy;": { "codepoints": [1041], "characters": "\u0411" }, "&Because;": { "codepoints": [8757], "characters": "\u2235" }, "&Bernoullis;": { "codepoints": [8492], "characters": "\u212C" }, "&Beta;": { "codepoints": [914], "characters": "\u0392" }, "&Bfr;": { "codepoints": [120069], "characters": "\uD835\uDD05" }, "&Bopf;": { "codepoints": [120121], "characters": "\uD835\uDD39" }, "&Breve;": { "codepoints": [728], "characters": "\u02D8" }, "&Bscr;": { "codepoints": [8492], "characters": "\u212C" }, "&Bumpeq;": { "codepoints": [8782], "characters": "\u224E" }, "&CHcy;": { "codepoints": [1063], "characters": "\u0427" }, "&COPY": { "codepoints": [169], "characters": "\u00A9" }, "&COPY;": { "codepoints": [169], "characters": "\u00A9" }, "&Cacute;": { "codepoints": [262], "characters": "\u0106" }, "&Cap;": { "codepoints": [8914], "characters": "\u22D2" }, "&CapitalDifferentialD;": { "codepoints": [8517], "characters": "\u2145" }, "&Cayleys;": { "codepoints": [8493], "characters": "\u212D" }, "&Ccaron;": { "codepoints": [268], "characters": "\u010C" }, "&Ccedil": { "codepoints": [199], "characters": "\u00C7" }, "&Ccedil;": { "codepoints": [199], "characters": "\u00C7" }, "&Ccirc;": { "codepoints": [264], "characters": "\u0108" }, "&Cconint;": { "codepoints": [8752], "characters": "\u2230" }, "&Cdot;": { "codepoints": [266], "characters": "\u010A" }, "&Cedilla;": { "codepoints": [184], "characters": "\u00B8" }, "&CenterDot;": { "codepoints": [183], "characters": "\u00B7" }, "&Cfr;": { "codepoints": [8493], "characters": "\u212D" }, "&Chi;": { "codepoints": [935], "characters": "\u03A7" }, "&CircleDot;": { "codepoints": [8857], "characters": "\u2299" }, "&CircleMinus;": { "codepoints": [8854], "characters": "\u2296" }, "&CirclePlus;": { "codepoints": [8853], "characters": "\u2295" }, "&CircleTimes;": { "codepoints": [8855], "characters": "\u2297" }, "&ClockwiseContourIntegral;": { "codepoints": [8754], "characters": "\u2232" }, "&CloseCurlyDoubleQuote;": { "codepoints": [8221], "characters": "\u201D" }, "&CloseCurlyQuote;": { "codepoints": [8217], "characters": "\u2019" }, "&Colon;": { "codepoints": [8759], "characters": "\u2237" }, "&Colone;": { "codepoints": [10868], "characters": "\u2A74" }, "&Congruent;": { "codepoints": [8801], "characters": "\u2261" }, "&Conint;": { "codepoints": [8751], "characters": "\u222F" }, "&ContourIntegral;": { "codepoints": [8750], "characters": "\u222E" }, "&Copf;": { "codepoints": [8450], "characters": "\u2102" }, "&Coproduct;": { "codepoints": [8720], "characters": "\u2210" }, "&CounterClockwiseContourIntegral;": { "codepoints": [8755], "characters": "\u2233" }, "&Cross;": { "codepoints": [10799], "characters": "\u2A2F" }, "&Cscr;": { "codepoints": [119966], "characters": "\uD835\uDC9E" }, "&Cup;": { "codepoints": [8915], "characters": "\u22D3" }, "&CupCap;": { "codepoints": [8781], "characters": "\u224D" }, "&DD;": { "codepoints": [8517], "characters": "\u2145" }, "&DDotrahd;": { "codepoints": [10513], "characters": "\u2911" }, "&DJcy;": { "codepoints": [1026], "characters": "\u0402" }, "&DScy;": { "codepoints": [1029], "characters": "\u0405" }, "&DZcy;": { "codepoints": [1039], "characters": "\u040F" }, "&Dagger;": { "codepoints": [8225], "characters": "\u2021" }, "&Darr;": { "codepoints": [8609], "characters": "\u21A1" }, "&Dashv;": { "codepoints": [10980], "characters": "\u2AE4" }, "&Dcaron;": { "codepoints": [270], "characters": "\u010E" }, "&Dcy;": { "codepoints": [1044], "characters": "\u0414" }, "&Del;": { "codepoints": [8711], "characters": "\u2207" }, "&Delta;": { "codepoints": [916], "characters": "\u0394" }, "&Dfr;": { "codepoints": [120071], "characters": "\uD835\uDD07" }, "&DiacriticalAcute;": { "codepoints": [180], "characters": "\u00B4" }, "&DiacriticalDot;": { "codepoints": [729], "characters": "\u02D9" }, "&DiacriticalDoubleAcute;": { "codepoints": [733], "characters": "\u02DD" }, "&DiacriticalGrave;": { "codepoints": [96], "characters": "\u0060" }, "&DiacriticalTilde;": { "codepoints": [732], "characters": "\u02DC" }, "&Diamond;": { "codepoints": [8900], "characters": "\u22C4" }, "&DifferentialD;": { "codepoints": [8518], "characters": "\u2146" }, "&Dopf;": { "codepoints": [120123], "characters": "\uD835\uDD3B" }, "&Dot;": { "codepoints": [168], "characters": "\u00A8" }, "&DotDot;": { "codepoints": [8412], "characters": "\u20DC" }, "&DotEqual;": { "codepoints": [8784], "characters": "\u2250" }, "&DoubleContourIntegral;": { "codepoints": [8751], "characters": "\u222F" }, "&DoubleDot;": { "codepoints": [168], "characters": "\u00A8" }, "&DoubleDownArrow;": { "codepoints": [8659], "characters": "\u21D3" }, "&DoubleLeftArrow;": { "codepoints": [8656], "characters": "\u21D0" }, "&DoubleLeftRightArrow;": { "codepoints": [8660], "characters": "\u21D4" }, "&DoubleLeftTee;": { "codepoints": [10980], "characters": "\u2AE4" }, "&DoubleLongLeftArrow;": { "codepoints": [10232], "characters": "\u27F8" }, "&DoubleLongLeftRightArrow;": { "codepoints": [10234], "characters": "\u27FA" }, "&DoubleLongRightArrow;": { "codepoints": [10233], "characters": "\u27F9" }, "&DoubleRightArrow;": { "codepoints": [8658], "characters": "\u21D2" }, "&DoubleRightTee;": { "codepoints": [8872], "characters": "\u22A8" }, "&DoubleUpArrow;": { "codepoints": [8657], "characters": "\u21D1" }, "&DoubleUpDownArrow;": { "codepoints": [8661], "characters": "\u21D5" }, "&DoubleVerticalBar;": { "codepoints": [8741], "characters": "\u2225" }, "&DownArrow;": { "codepoints": [8595], "characters": "\u2193" }, "&DownArrowBar;": { "codepoints": [10515], "characters": "\u2913" }, "&DownArrowUpArrow;": { "codepoints": [8693], "characters": "\u21F5" }, "&DownBreve;": { "codepoints": [785], "characters": "\u0311" }, "&DownLeftRightVector;": { "codepoints": [10576], "characters": "\u2950" }, "&DownLeftTeeVector;": { "codepoints": [10590], "characters": "\u295E" }, "&DownLeftVector;": { "codepoints": [8637], "characters": "\u21BD" }, "&DownLeftVectorBar;": { "codepoints": [10582], "characters": "\u2956" }, "&DownRightTeeVector;": { "codepoints": [10591], "characters": "\u295F" }, "&DownRightVector;": { "codepoints": [8641], "characters": "\u21C1" }, "&DownRightVectorBar;": { "codepoints": [10583], "characters": "\u2957" }, "&DownTee;": { "codepoints": [8868], "characters": "\u22A4" }, "&DownTeeArrow;": { "codepoints": [8615], "characters": "\u21A7" }, "&Downarrow;": { "codepoints": [8659], "characters": "\u21D3" }, "&Dscr;": { "codepoints": [119967], "characters": "\uD835\uDC9F" }, "&Dstrok;": { "codepoints": [272], "characters": "\u0110" }, "&ENG;": { "codepoints": [330], "characters": "\u014A" }, "&ETH": { "codepoints": [208], "characters": "\u00D0" }, "&ETH;": { "codepoints": [208], "characters": "\u00D0" }, "&Eacute": { "codepoints": [201], "characters": "\u00C9" }, "&Eacute;": { "codepoints": [201], "characters": "\u00C9" }, "&Ecaron;": { "codepoints": [282], "characters": "\u011A" }, "&Ecirc": { "codepoints": [202], "characters": "\u00CA" }, "&Ecirc;": { "codepoints": [202], "characters": "\u00CA" }, "&Ecy;": { "codepoints": [1069], "characters": "\u042D" }, "&Edot;": { "codepoints": [278], "characters": "\u0116" }, "&Efr;": { "codepoints": [120072], "characters": "\uD835\uDD08" }, "&Egrave": { "codepoints": [200], "characters": "\u00C8" }, "&Egrave;": { "codepoints": [200], "characters": "\u00C8" }, "&Element;": { "codepoints": [8712], "characters": "\u2208" }, "&Emacr;": { "codepoints": [274], "characters": "\u0112" }, "&EmptySmallSquare;": { "codepoints": [9723], "characters": "\u25FB" }, "&EmptyVerySmallSquare;": { "codepoints": [9643], "characters": "\u25AB" }, "&Eogon;": { "codepoints": [280], "characters": "\u0118" }, "&Eopf;": { "codepoints": [120124], "characters": "\uD835\uDD3C" }, "&Epsilon;": { "codepoints": [917], "characters": "\u0395" }, "&Equal;": { "codepoints": [10869], "characters": "\u2A75" }, "&EqualTilde;": { "codepoints": [8770], "characters": "\u2242" }, "&Equilibrium;": { "codepoints": [8652], "characters": "\u21CC" }, "&Escr;": { "codepoints": [8496], "characters": "\u2130" }, "&Esim;": { "codepoints": [10867], "characters": "\u2A73" }, "&Eta;": { "codepoints": [919], "characters": "\u0397" }, "&Euml": { "codepoints": [203], "characters": "\u00CB" }, "&Euml;": { "codepoints": [203], "characters": "\u00CB" }, "&Exists;": { "codepoints": [8707], "characters": "\u2203" }, "&ExponentialE;": { "codepoints": [8519], "characters": "\u2147" }, "&Fcy;": { "codepoints": [1060], "characters": "\u0424" }, "&Ffr;": { "codepoints": [120073], "characters": "\uD835\uDD09" }, "&FilledSmallSquare;": { "codepoints": [9724], "characters": "\u25FC" }, "&FilledVerySmallSquare;": { "codepoints": [9642], "characters": "\u25AA" }, "&Fopf;": { "codepoints": [120125], "characters": "\uD835\uDD3D" }, "&ForAll;": { "codepoints": [8704], "characters": "\u2200" }, "&Fouriertrf;": { "codepoints": [8497], "characters": "\u2131" }, "&Fscr;": { "codepoints": [8497], "characters": "\u2131" }, "&GJcy;": { "codepoints": [1027], "characters": "\u0403" }, "&GT": { "codepoints": [62], "characters": "\u003E" }, "&GT;": { "codepoints": [62], "characters": "\u003E" }, "&Gamma;": { "codepoints": [915], "characters": "\u0393" }, "&Gammad;": { "codepoints": [988], "characters": "\u03DC" }, "&Gbreve;": { "codepoints": [286], "characters": "\u011E" }, "&Gcedil;": { "codepoints": [290], "characters": "\u0122" }, "&Gcirc;": { "codepoints": [284], "characters": "\u011C" }, "&Gcy;": { "codepoints": [1043], "characters": "\u0413" }, "&Gdot;": { "codepoints": [288], "characters": "\u0120" }, "&Gfr;": { "codepoints": [120074], "characters": "\uD835\uDD0A" }, "&Gg;": { "codepoints": [8921], "characters": "\u22D9" }, "&Gopf;": { "codepoints": [120126], "characters": "\uD835\uDD3E" }, "&GreaterEqual;": { "codepoints": [8805], "characters": "\u2265" }, "&GreaterEqualLess;": { "codepoints": [8923], "characters": "\u22DB" }, "&GreaterFullEqual;": { "codepoints": [8807], "characters": "\u2267" }, "&GreaterGreater;": { "codepoints": [10914], "characters": "\u2AA2" }, "&GreaterLess;": { "codepoints": [8823], "characters": "\u2277" }, "&GreaterSlantEqual;": { "codepoints": [10878], "characters": "\u2A7E" }, "&GreaterTilde;": { "codepoints": [8819], "characters": "\u2273" }, "&Gscr;": { "codepoints": [119970], "characters": "\uD835\uDCA2" }, "&Gt;": { "codepoints": [8811], "characters": "\u226B" }, "&HARDcy;": { "codepoints": [1066], "characters": "\u042A" }, "&Hacek;": { "codepoints": [711], "characters": "\u02C7" }, "&Hat;": { "codepoints": [94], "characters": "\u005E" }, "&Hcirc;": { "codepoints": [292], "characters": "\u0124" }, "&Hfr;": { "codepoints": [8460], "characters": "\u210C" }, "&HilbertSpace;": { "codepoints": [8459], "characters": "\u210B" }, "&Hopf;": { "codepoints": [8461], "characters": "\u210D" }, "&HorizontalLine;": { "codepoints": [9472], "characters": "\u2500" }, "&Hscr;": { "codepoints": [8459], "characters": "\u210B" }, "&Hstrok;": { "codepoints": [294], "characters": "\u0126" }, "&HumpDownHump;": { "codepoints": [8782], "characters": "\u224E" }, "&HumpEqual;": { "codepoints": [8783], "characters": "\u224F" }, "&IEcy;": { "codepoints": [1045], "characters": "\u0415" }, "&IJlig;": { "codepoints": [306], "characters": "\u0132" }, "&IOcy;": { "codepoints": [1025], "characters": "\u0401" }, "&Iacute": { "codepoints": [205], "characters": "\u00CD" }, "&Iacute;": { "codepoints": [205], "characters": "\u00CD" }, "&Icirc": { "codepoints": [206], "characters": "\u00CE" }, "&Icirc;": { "codepoints": [206], "characters": "\u00CE" }, "&Icy;": { "codepoints": [1048], "characters": "\u0418" }, "&Idot;": { "codepoints": [304], "characters": "\u0130" }, "&Ifr;": { "codepoints": [8465], "characters": "\u2111" }, "&Igrave": { "codepoints": [204], "characters": "\u00CC" }, "&Igrave;": { "codepoints": [204], "characters": "\u00CC" }, "&Im;": { "codepoints": [8465], "characters": "\u2111" }, "&Imacr;": { "codepoints": [298], "characters": "\u012A" }, "&ImaginaryI;": { "codepoints": [8520], "characters": "\u2148" }, "&Implies;": { "codepoints": [8658], "characters": "\u21D2" }, "&Int;": { "codepoints": [8748], "characters": "\u222C" }, "&Integral;": { "codepoints": [8747], "characters": "\u222B" }, "&Intersection;": { "codepoints": [8898], "characters": "\u22C2" }, "&InvisibleComma;": { "codepoints": [8291], "characters": "\u2063" }, "&InvisibleTimes;": { "codepoints": [8290], "characters": "\u2062" }, "&Iogon;": { "codepoints": [302], "characters": "\u012E" }, "&Iopf;": { "codepoints": [120128], "characters": "\uD835\uDD40" }, "&Iota;": { "codepoints": [921], "characters": "\u0399" }, "&Iscr;": { "codepoints": [8464], "characters": "\u2110" }, "&Itilde;": { "codepoints": [296], "characters": "\u0128" }, "&Iukcy;": { "codepoints": [1030], "characters": "\u0406" }, "&Iuml": { "codepoints": [207], "characters": "\u00CF" }, "&Iuml;": { "codepoints": [207], "characters": "\u00CF" }, "&Jcirc;": { "codepoints": [308], "characters": "\u0134" }, "&Jcy;": { "codepoints": [1049], "characters": "\u0419" }, "&Jfr;": { "codepoints": [120077], "characters": "\uD835\uDD0D" }, "&Jopf;": { "codepoints": [120129], "characters": "\uD835\uDD41" }, "&Jscr;": { "codepoints": [119973], "characters": "\uD835\uDCA5" }, "&Jsercy;": { "codepoints": [1032], "characters": "\u0408" }, "&Jukcy;": { "codepoints": [1028], "characters": "\u0404" }, "&KHcy;": { "codepoints": [1061], "characters": "\u0425" }, "&KJcy;": { "codepoints": [1036], "characters": "\u040C" }, "&Kappa;": { "codepoints": [922], "characters": "\u039A" }, "&Kcedil;": { "codepoints": [310], "characters": "\u0136" }, "&Kcy;": { "codepoints": [1050], "characters": "\u041A" }, "&Kfr;": { "codepoints": [120078], "characters": "\uD835\uDD0E" }, "&Kopf;": { "codepoints": [120130], "characters": "\uD835\uDD42" }, "&Kscr;": { "codepoints": [119974], "characters": "\uD835\uDCA6" }, "&LJcy;": { "codepoints": [1033], "characters": "\u0409" }, "&LT": { "codepoints": [60], "characters": "\u003C" }, "&LT;": { "codepoints": [60], "characters": "\u003C" }, "&Lacute;": { "codepoints": [313], "characters": "\u0139" }, "&Lambda;": { "codepoints": [923], "characters": "\u039B" }, "&Lang;": { "codepoints": [10218], "characters": "\u27EA" }, "&Laplacetrf;": { "codepoints": [8466], "characters": "\u2112" }, "&Larr;": { "codepoints": [8606], "characters": "\u219E" }, "&Lcaron;": { "codepoints": [317], "characters": "\u013D" }, "&Lcedil;": { "codepoints": [315], "characters": "\u013B" }, "&Lcy;": { "codepoints": [1051], "characters": "\u041B" }, "&LeftAngleBracket;": { "codepoints": [10216], "characters": "\u27E8" }, "&LeftArrow;": { "codepoints": [8592], "characters": "\u2190" }, "&LeftArrowBar;": { "codepoints": [8676], "characters": "\u21E4" }, "&LeftArrowRightArrow;": { "codepoints": [8646], "characters": "\u21C6" }, "&LeftCeiling;": { "codepoints": [8968], "characters": "\u2308" }, "&LeftDoubleBracket;": { "codepoints": [10214], "characters": "\u27E6" }, "&LeftDownTeeVector;": { "codepoints": [10593], "characters": "\u2961" }, "&LeftDownVector;": { "codepoints": [8643], "characters": "\u21C3" }, "&LeftDownVectorBar;": { "codepoints": [10585], "characters": "\u2959" }, "&LeftFloor;": { "codepoints": [8970], "characters": "\u230A" }, "&LeftRightArrow;": { "codepoints": [8596], "characters": "\u2194" }, "&LeftRightVector;": { "codepoints": [10574], "characters": "\u294E" }, "&LeftTee;": { "codepoints": [8867], "characters": "\u22A3" }, "&LeftTeeArrow;": { "codepoints": [8612], "characters": "\u21A4" }, "&LeftTeeVector;": { "codepoints": [10586], "characters": "\u295A" }, "&LeftTriangle;": { "codepoints": [8882], "characters": "\u22B2" }, "&LeftTriangleBar;": { "codepoints": [10703], "characters": "\u29CF" }, "&LeftTriangleEqual;": { "codepoints": [8884], "characters": "\u22B4" }, "&LeftUpDownVector;": { "codepoints": [10577], "characters": "\u2951" }, "&LeftUpTeeVector;": { "codepoints": [10592], "characters": "\u2960" }, "&LeftUpVector;": { "codepoints": [8639], "characters": "\u21BF" }, "&LeftUpVectorBar;": { "codepoints": [10584], "characters": "\u2958" }, "&LeftVector;": { "codepoints": [8636], "characters": "\u21BC" }, "&LeftVectorBar;": { "codepoints": [10578], "characters": "\u2952" }, "&Leftarrow;": { "codepoints": [8656], "characters": "\u21D0" }, "&Leftrightarrow;": { "codepoints": [8660], "characters": "\u21D4" }, "&LessEqualGreater;": { "codepoints": [8922], "characters": "\u22DA" }, "&LessFullEqual;": { "codepoints": [8806], "characters": "\u2266" }, "&LessGreater;": { "codepoints": [8822], "characters": "\u2276" }, "&LessLess;": { "codepoints": [10913], "characters": "\u2AA1" }, "&LessSlantEqual;": { "codepoints": [10877], "characters": "\u2A7D" }, "&LessTilde;": { "codepoints": [8818], "characters": "\u2272" }, "&Lfr;": { "codepoints": [120079], "characters": "\uD835\uDD0F" }, "&Ll;": { "codepoints": [8920], "characters": "\u22D8" }, "&Lleftarrow;": { "codepoints": [8666], "characters": "\u21DA" }, "&Lmidot;": { "codepoints": [319], "characters": "\u013F" }, "&LongLeftArrow;": { "codepoints": [10229], "characters": "\u27F5" }, "&LongLeftRightArrow;": { "codepoints": [10231], "characters": "\u27F7" }, "&LongRightArrow;": { "codepoints": [10230], "characters": "\u27F6" }, "&Longleftarrow;": { "codepoints": [10232], "characters": "\u27F8" }, "&Longleftrightarrow;": { "codepoints": [10234], "characters": "\u27FA" }, "&Longrightarrow;": { "codepoints": [10233], "characters": "\u27F9" }, "&Lopf;": { "codepoints": [120131], "characters": "\uD835\uDD43" }, "&LowerLeftArrow;": { "codepoints": [8601], "characters": "\u2199" }, "&LowerRightArrow;": { "codepoints": [8600], "characters": "\u2198" }, "&Lscr;": { "codepoints": [8466], "characters": "\u2112" }, "&Lsh;": { "codepoints": [8624], "characters": "\u21B0" }, "&Lstrok;": { "codepoints": [321], "characters": "\u0141" }, "&Lt;": { "codepoints": [8810], "characters": "\u226A" }, "&Map;": { "codepoints": [10501], "characters": "\u2905" }, "&Mcy;": { "codepoints": [1052], "characters": "\u041C" }, "&MediumSpace;": { "codepoints": [8287], "characters": "\u205F" }, "&Mellintrf;": { "codepoints": [8499], "characters": "\u2133" }, "&Mfr;": { "codepoints": [120080], "characters": "\uD835\uDD10" }, "&MinusPlus;": { "codepoints": [8723], "characters": "\u2213" }, "&Mopf;": { "codepoints": [120132], "characters": "\uD835\uDD44" }, "&Mscr;": { "codepoints": [8499], "characters": "\u2133" }, "&Mu;": { "codepoints": [924], "characters": "\u039C" }, "&NJcy;": { "codepoints": [1034], "characters": "\u040A" }, "&Nacute;": { "codepoints": [323], "characters": "\u0143" }, "&Ncaron;": { "codepoints": [327], "characters": "\u0147" }, "&Ncedil;": { "codepoints": [325], "characters": "\u0145" }, "&Ncy;": { "codepoints": [1053], "characters": "\u041D" }, "&NegativeMediumSpace;": { "codepoints": [8203], "characters": "\u200B" }, "&NegativeThickSpace;": { "codepoints": [8203], "characters": "\u200B" }, "&NegativeThinSpace;": { "codepoints": [8203], "characters": "\u200B" }, "&NegativeVeryThinSpace;": { "codepoints": [8203], "characters": "\u200B" }, "&NestedGreaterGreater;": { "codepoints": [8811], "characters": "\u226B" }, "&NestedLessLess;": { "codepoints": [8810], "characters": "\u226A" }, "&NewLine;": { "codepoints": [10], "characters": "\u000A" }, "&Nfr;": { "codepoints": [120081], "characters": "\uD835\uDD11" }, "&NoBreak;": { "codepoints": [8288], "characters": "\u2060" }, "&NonBreakingSpace;": { "codepoints": [160], "characters": "\u00A0" }, "&Nopf;": { "codepoints": [8469], "characters": "\u2115" }, "&Not;": { "codepoints": [10988], "characters": "\u2AEC" }, "&NotCongruent;": { "codepoints": [8802], "characters": "\u2262" }, "&NotCupCap;": { "codepoints": [8813], "characters": "\u226D" }, "&NotDoubleVerticalBar;": { "codepoints": [8742], "characters": "\u2226" }, "&NotElement;": { "codepoints": [8713], "characters": "\u2209" }, "&NotEqual;": { "codepoints": [8800], "characters": "\u2260" }, "&NotEqualTilde;": { "codepoints": [8770, 824], "characters": "\u2242\u0338" }, "&NotExists;": { "codepoints": [8708], "characters": "\u2204" }, "&NotGreater;": { "codepoints": [8815], "characters": "\u226F" }, "&NotGreaterEqual;": { "codepoints": [8817], "characters": "\u2271" }, "&NotGreaterFullEqual;": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, "&NotGreaterGreater;": { "codepoints": [8811, 824], "characters": "\u226B\u0338" }, "&NotGreaterLess;": { "codepoints": [8825], "characters": "\u2279" }, "&NotGreaterSlantEqual;": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, "&NotGreaterTilde;": { "codepoints": [8821], "characters": "\u2275" }, "&NotHumpDownHump;": { "codepoints": [8782, 824], "characters": "\u224E\u0338" }, "&NotHumpEqual;": { "codepoints": [8783, 824], "characters": "\u224F\u0338" }, "&NotLeftTriangle;": { "codepoints": [8938], "characters": "\u22EA" }, "&NotLeftTriangleBar;": { "codepoints": [10703, 824], "characters": "\u29CF\u0338" }, "&NotLeftTriangleEqual;": { "codepoints": [8940], "characters": "\u22EC" }, "&NotLess;": { "codepoints": [8814], "characters": "\u226E" }, "&NotLessEqual;": { "codepoints": [8816], "characters": "\u2270" }, "&NotLessGreater;": { "codepoints": [8824], "characters": "\u2278" }, "&NotLessLess;": { "codepoints": [8810, 824], "characters": "\u226A\u0338" }, "&NotLessSlantEqual;": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, "&NotLessTilde;": { "codepoints": [8820], "characters": "\u2274" }, "&NotNestedGreaterGreater;": { "codepoints": [10914, 824], "characters": "\u2AA2\u0338" }, "&NotNestedLessLess;": { "codepoints": [10913, 824], "characters": "\u2AA1\u0338" }, "&NotPrecedes;": { "codepoints": [8832], "characters": "\u2280" }, "&NotPrecedesEqual;": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, "&NotPrecedesSlantEqual;": { "codepoints": [8928], "characters": "\u22E0" }, "&NotReverseElement;": { "codepoints": [8716], "characters": "\u220C" }, "&NotRightTriangle;": { "codepoints": [8939], "characters": "\u22EB" }, "&NotRightTriangleBar;": { "codepoints": [10704, 824], "characters": "\u29D0\u0338" }, "&NotRightTriangleEqual;": { "codepoints": [8941], "characters": "\u22ED" }, "&NotSquareSubset;": { "codepoints": [8847, 824], "characters": "\u228F\u0338" }, "&NotSquareSubsetEqual;": { "codepoints": [8930], "characters": "\u22E2" }, "&NotSquareSuperset;": { "codepoints": [8848, 824], "characters": "\u2290\u0338" }, "&NotSquareSupersetEqual;": { "codepoints": [8931], "characters": "\u22E3" }, "&NotSubset;": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, "&NotSubsetEqual;": { "codepoints": [8840], "characters": "\u2288" }, "&NotSucceeds;": { "codepoints": [8833], "characters": "\u2281" }, "&NotSucceedsEqual;": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, "&NotSucceedsSlantEqual;": { "codepoints": [8929], "characters": "\u22E1" }, "&NotSucceedsTilde;": { "codepoints": [8831, 824], "characters": "\u227F\u0338" }, "&NotSuperset;": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, "&NotSupersetEqual;": { "codepoints": [8841], "characters": "\u2289" }, "&NotTilde;": { "codepoints": [8769], "characters": "\u2241" }, "&NotTildeEqual;": { "codepoints": [8772], "characters": "\u2244" }, "&NotTildeFullEqual;": { "codepoints": [8775], "characters": "\u2247" }, "&NotTildeTilde;": { "codepoints": [8777], "characters": "\u2249" }, "&NotVerticalBar;": { "codepoints": [8740], "characters": "\u2224" }, "&Nscr;": { "codepoints": [119977], "characters": "\uD835\uDCA9" }, "&Ntilde": { "codepoints": [209], "characters": "\u00D1" }, "&Ntilde;": { "codepoints": [209], "characters": "\u00D1" }, "&Nu;": { "codepoints": [925], "characters": "\u039D" }, "&OElig;": { "codepoints": [338], "characters": "\u0152" }, "&Oacute": { "codepoints": [211], "characters": "\u00D3" }, "&Oacute;": { "codepoints": [211], "characters": "\u00D3" }, "&Ocirc": { "codepoints": [212], "characters": "\u00D4" }, "&Ocirc;": { "codepoints": [212], "characters": "\u00D4" }, "&Ocy;": { "codepoints": [1054], "characters": "\u041E" }, "&Odblac;": { "codepoints": [336], "characters": "\u0150" }, "&Ofr;": { "codepoints": [120082], "characters": "\uD835\uDD12" }, "&Ograve": { "codepoints": [210], "characters": "\u00D2" }, "&Ograve;": { "codepoints": [210], "characters": "\u00D2" }, "&Omacr;": { "codepoints": [332], "characters": "\u014C" }, "&Omega;": { "codepoints": [937], "characters": "\u03A9" }, "&Omicron;": { "codepoints": [927], "characters": "\u039F" }, "&Oopf;": { "codepoints": [120134], "characters": "\uD835\uDD46" }, "&OpenCurlyDoubleQuote;": { "codepoints": [8220], "characters": "\u201C" }, "&OpenCurlyQuote;": { "codepoints": [8216], "characters": "\u2018" }, "&Or;": { "codepoints": [10836], "characters": "\u2A54" }, "&Oscr;": { "codepoints": [119978], "characters": "\uD835\uDCAA" }, "&Oslash": { "codepoints": [216], "characters": "\u00D8" }, "&Oslash;": { "codepoints": [216], "characters": "\u00D8" }, "&Otilde": { "codepoints": [213], "characters": "\u00D5" }, "&Otilde;": { "codepoints": [213], "characters": "\u00D5" }, "&Otimes;": { "codepoints": [10807], "characters": "\u2A37" }, "&Ouml": { "codepoints": [214], "characters": "\u00D6" }, "&Ouml;": { "codepoints": [214], "characters": "\u00D6" }, "&OverBar;": { "codepoints": [8254], "characters": "\u203E" }, "&OverBrace;": { "codepoints": [9182], "characters": "\u23DE" }, "&OverBracket;": { "codepoints": [9140], "characters": "\u23B4" }, "&OverParenthesis;": { "codepoints": [9180], "characters": "\u23DC" }, "&PartialD;": { "codepoints": [8706], "characters": "\u2202" }, "&Pcy;": { "codepoints": [1055], "characters": "\u041F" }, "&Pfr;": { "codepoints": [120083], "characters": "\uD835\uDD13" }, "&Phi;": { "codepoints": [934], "characters": "\u03A6" }, "&Pi;": { "codepoints": [928], "characters": "\u03A0" }, "&PlusMinus;": { "codepoints": [177], "characters": "\u00B1" }, "&Poincareplane;": { "codepoints": [8460], "characters": "\u210C" }, "&Popf;": { "codepoints": [8473], "characters": "\u2119" }, "&Pr;": { "codepoints": [10939], "characters": "\u2ABB" }, "&Precedes;": { "codepoints": [8826], "characters": "\u227A" }, "&PrecedesEqual;": { "codepoints": [10927], "characters": "\u2AAF" }, "&PrecedesSlantEqual;": { "codepoints": [8828], "characters": "\u227C" }, "&PrecedesTilde;": { "codepoints": [8830], "characters": "\u227E" }, "&Prime;": { "codepoints": [8243], "characters": "\u2033" }, "&Product;": { "codepoints": [8719], "characters": "\u220F" }, "&Proportion;": { "codepoints": [8759], "characters": "\u2237" }, "&Proportional;": { "codepoints": [8733], "characters": "\u221D" }, "&Pscr;": { "codepoints": [119979], "characters": "\uD835\uDCAB" }, "&Psi;": { "codepoints": [936], "characters": "\u03A8" }, "&QUOT": { "codepoints": [34], "characters": "\u0022" }, "&QUOT;": { "codepoints": [34], "characters": "\u0022" }, "&Qfr;": { "codepoints": [120084], "characters": "\uD835\uDD14" }, "&Qopf;": { "codepoints": [8474], "characters": "\u211A" }, "&Qscr;": { "codepoints": [119980], "characters": "\uD835\uDCAC" }, "&RBarr;": { "codepoints": [10512], "characters": "\u2910" }, "&REG": { "codepoints": [174], "characters": "\u00AE" }, "&REG;": { "codepoints": [174], "characters": "\u00AE" }, "&Racute;": { "codepoints": [340], "characters": "\u0154" }, "&Rang;": { "codepoints": [10219], "characters": "\u27EB" }, "&Rarr;": { "codepoints": [8608], "characters": "\u21A0" }, "&Rarrtl;": { "codepoints": [10518], "characters": "\u2916" }, "&Rcaron;": { "codepoints": [344], "characters": "\u0158" }, "&Rcedil;": { "codepoints": [342], "characters": "\u0156" }, "&Rcy;": { "codepoints": [1056], "characters": "\u0420" }, "&Re;": { "codepoints": [8476], "characters": "\u211C" }, "&ReverseElement;": { "codepoints": [8715], "characters": "\u220B" }, "&ReverseEquilibrium;": { "codepoints": [8651], "characters": "\u21CB" }, "&ReverseUpEquilibrium;": { "codepoints": [10607], "characters": "\u296F" }, "&Rfr;": { "codepoints": [8476], "characters": "\u211C" }, "&Rho;": { "codepoints": [929], "characters": "\u03A1" }, "&RightAngleBracket;": { "codepoints": [10217], "characters": "\u27E9" }, "&RightArrow;": { "codepoints": [8594], "characters": "\u2192" }, "&RightArrowBar;": { "codepoints": [8677], "characters": "\u21E5" }, "&RightArrowLeftArrow;": { "codepoints": [8644], "characters": "\u21C4" }, "&RightCeiling;": { "codepoints": [8969], "characters": "\u2309" }, "&RightDoubleBracket;": { "codepoints": [10215], "characters": "\u27E7" }, "&RightDownTeeVector;": { "codepoints": [10589], "characters": "\u295D" }, "&RightDownVector;": { "codepoints": [8642], "characters": "\u21C2" }, "&RightDownVectorBar;": { "codepoints": [10581], "characters": "\u2955" }, "&RightFloor;": { "codepoints": [8971], "characters": "\u230B" }, "&RightTee;": { "codepoints": [8866], "characters": "\u22A2" }, "&RightTeeArrow;": { "codepoints": [8614], "characters": "\u21A6" }, "&RightTeeVector;": { "codepoints": [10587], "characters": "\u295B" }, "&RightTriangle;": { "codepoints": [8883], "characters": "\u22B3" }, "&RightTriangleBar;": { "codepoints": [10704], "characters": "\u29D0" }, "&RightTriangleEqual;": { "codepoints": [8885], "characters": "\u22B5" }, "&RightUpDownVector;": { "codepoints": [10575], "characters": "\u294F" }, "&RightUpTeeVector;": { "codepoints": [10588], "characters": "\u295C" }, "&RightUpVector;": { "codepoints": [8638], "characters": "\u21BE" }, "&RightUpVectorBar;": { "codepoints": [10580], "characters": "\u2954" }, "&RightVector;": { "codepoints": [8640], "characters": "\u21C0" }, "&RightVectorBar;": { "codepoints": [10579], "characters": "\u2953" }, "&Rightarrow;": { "codepoints": [8658], "characters": "\u21D2" }, "&Ropf;": { "codepoints": [8477], "characters": "\u211D" }, "&RoundImplies;": { "codepoints": [10608], "characters": "\u2970" }, "&Rrightarrow;": { "codepoints": [8667], "characters": "\u21DB" }, "&Rscr;": { "codepoints": [8475], "characters": "\u211B" }, "&Rsh;": { "codepoints": [8625], "characters": "\u21B1" }, "&RuleDelayed;": { "codepoints": [10740], "characters": "\u29F4" }, "&SHCHcy;": { "codepoints": [1065], "characters": "\u0429" }, "&SHcy;": { "codepoints": [1064], "characters": "\u0428" }, "&SOFTcy;": { "codepoints": [1068], "characters": "\u042C" }, "&Sacute;": { "codepoints": [346], "characters": "\u015A" }, "&Sc;": { "codepoints": [10940], "characters": "\u2ABC" }, "&Scaron;": { "codepoints": [352], "characters": "\u0160" }, "&Scedil;": { "codepoints": [350], "characters": "\u015E" }, "&Scirc;": { "codepoints": [348], "characters": "\u015C" }, "&Scy;": { "codepoints": [1057], "characters": "\u0421" }, "&Sfr;": { "codepoints": [120086], "characters": "\uD835\uDD16" }, "&ShortDownArrow;": { "codepoints": [8595], "characters": "\u2193" }, "&ShortLeftArrow;": { "codepoints": [8592], "characters": "\u2190" }, "&ShortRightArrow;": { "codepoints": [8594], "characters": "\u2192" }, "&ShortUpArrow;": { "codepoints": [8593], "characters": "\u2191" }, "&Sigma;": { "codepoints": [931], "characters": "\u03A3" }, "&SmallCircle;": { "codepoints": [8728], "characters": "\u2218" }, "&Sopf;": { "codepoints": [120138], "characters": "\uD835\uDD4A" }, "&Sqrt;": { "codepoints": [8730], "characters": "\u221A" }, "&Square;": { "codepoints": [9633], "characters": "\u25A1" }, "&SquareIntersection;": { "codepoints": [8851], "characters": "\u2293" }, "&SquareSubset;": { "codepoints": [8847], "characters": "\u228F" }, "&SquareSubsetEqual;": { "codepoints": [8849], "characters": "\u2291" }, "&SquareSuperset;": { "codepoints": [8848], "characters": "\u2290" }, "&SquareSupersetEqual;": { "codepoints": [8850], "characters": "\u2292" }, "&SquareUnion;": { "codepoints": [8852], "characters": "\u2294" }, "&Sscr;": { "codepoints": [119982], "characters": "\uD835\uDCAE" }, "&Star;": { "codepoints": [8902], "characters": "\u22C6" }, "&Sub;": { "codepoints": [8912], "characters": "\u22D0" }, "&Subset;": { "codepoints": [8912], "characters": "\u22D0" }, "&SubsetEqual;": { "codepoints": [8838], "characters": "\u2286" }, "&Succeeds;": { "codepoints": [8827], "characters": "\u227B" }, "&SucceedsEqual;": { "codepoints": [10928], "characters": "\u2AB0" }, "&SucceedsSlantEqual;": { "codepoints": [8829], "characters": "\u227D" }, "&SucceedsTilde;": { "codepoints": [8831], "characters": "\u227F" }, "&SuchThat;": { "codepoints": [8715], "characters": "\u220B" }, "&Sum;": { "codepoints": [8721], "characters": "\u2211" }, "&Sup;": { "codepoints": [8913], "characters": "\u22D1" }, "&Superset;": { "codepoints": [8835], "characters": "\u2283" }, "&SupersetEqual;": { "codepoints": [8839], "characters": "\u2287" }, "&Supset;": { "codepoints": [8913], "characters": "\u22D1" }, "&THORN": { "codepoints": [222], "characters": "\u00DE" }, "&THORN;": { "codepoints": [222], "characters": "\u00DE" }, "&TRADE;": { "codepoints": [8482], "characters": "\u2122" }, "&TSHcy;": { "codepoints": [1035], "characters": "\u040B" }, "&TScy;": { "codepoints": [1062], "characters": "\u0426" }, "&Tab;": { "codepoints": [9], "characters": "\u0009" }, "&Tau;": { "codepoints": [932], "characters": "\u03A4" }, "&Tcaron;": { "codepoints": [356], "characters": "\u0164" }, "&Tcedil;": { "codepoints": [354], "characters": "\u0162" }, "&Tcy;": { "codepoints": [1058], "characters": "\u0422" }, "&Tfr;": { "codepoints": [120087], "characters": "\uD835\uDD17" }, "&Therefore;": { "codepoints": [8756], "characters": "\u2234" }, "&Theta;": { "codepoints": [920], "characters": "\u0398" }, "&ThickSpace;": { "codepoints": [8287, 8202], "characters": "\u205F\u200A" }, "&ThinSpace;": { "codepoints": [8201], "characters": "\u2009" }, "&Tilde;": { "codepoints": [8764], "characters": "\u223C" }, "&TildeEqual;": { "codepoints": [8771], "characters": "\u2243" }, "&TildeFullEqual;": { "codepoints": [8773], "characters": "\u2245" }, "&TildeTilde;": { "codepoints": [8776], "characters": "\u2248" }, "&Topf;": { "codepoints": [120139], "characters": "\uD835\uDD4B" }, "&TripleDot;": { "codepoints": [8411], "characters": "\u20DB" }, "&Tscr;": { "codepoints": [119983], "characters": "\uD835\uDCAF" }, "&Tstrok;": { "codepoints": [358], "characters": "\u0166" }, "&Uacute": { "codepoints": [218], "characters": "\u00DA" }, "&Uacute;": { "codepoints": [218], "characters": "\u00DA" }, "&Uarr;": { "codepoints": [8607], "characters": "\u219F" }, "&Uarrocir;": { "codepoints": [10569], "characters": "\u2949" }, "&Ubrcy;": { "codepoints": [1038], "characters": "\u040E" }, "&Ubreve;": { "codepoints": [364], "characters": "\u016C" }, "&Ucirc": { "codepoints": [219], "characters": "\u00DB" }, "&Ucirc;": { "codepoints": [219], "characters": "\u00DB" }, "&Ucy;": { "codepoints": [1059], "characters": "\u0423" }, "&Udblac;": { "codepoints": [368], "characters": "\u0170" }, "&Ufr;": { "codepoints": [120088], "characters": "\uD835\uDD18" }, "&Ugrave": { "codepoints": [217], "characters": "\u00D9" }, "&Ugrave;": { "codepoints": [217], "characters": "\u00D9" }, "&Umacr;": { "codepoints": [362], "characters": "\u016A" }, "&UnderBar;": { "codepoints": [95], "characters": "\u005F" }, "&UnderBrace;": { "codepoints": [9183], "characters": "\u23DF" }, "&UnderBracket;": { "codepoints": [9141], "characters": "\u23B5" }, "&UnderParenthesis;": { "codepoints": [9181], "characters": "\u23DD" }, "&Union;": { "codepoints": [8899], "characters": "\u22C3" }, "&UnionPlus;": { "codepoints": [8846], "characters": "\u228E" }, "&Uogon;": { "codepoints": [370], "characters": "\u0172" }, "&Uopf;": { "codepoints": [120140], "characters": "\uD835\uDD4C" }, "&UpArrow;": { "codepoints": [8593], "characters": "\u2191" }, "&UpArrowBar;": { "codepoints": [10514], "characters": "\u2912" }, "&UpArrowDownArrow;": { "codepoints": [8645], "characters": "\u21C5" }, "&UpDownArrow;": { "codepoints": [8597], "characters": "\u2195" }, "&UpEquilibrium;": { "codepoints": [10606], "characters": "\u296E" }, "&UpTee;": { "codepoints": [8869], "characters": "\u22A5" }, "&UpTeeArrow;": { "codepoints": [8613], "characters": "\u21A5" }, "&Uparrow;": { "codepoints": [8657], "characters": "\u21D1" }, "&Updownarrow;": { "codepoints": [8661], "characters": "\u21D5" }, "&UpperLeftArrow;": { "codepoints": [8598], "characters": "\u2196" }, "&UpperRightArrow;": { "codepoints": [8599], "characters": "\u2197" }, "&Upsi;": { "codepoints": [978], "characters": "\u03D2" }, "&Upsilon;": { "codepoints": [933], "characters": "\u03A5" }, "&Uring;": { "codepoints": [366], "characters": "\u016E" }, "&Uscr;": { "codepoints": [119984], "characters": "\uD835\uDCB0" }, "&Utilde;": { "codepoints": [360], "characters": "\u0168" }, "&Uuml": { "codepoints": [220], "characters": "\u00DC" }, "&Uuml;": { "codepoints": [220], "characters": "\u00DC" }, "&VDash;": { "codepoints": [8875], "characters": "\u22AB" }, "&Vbar;": { "codepoints": [10987], "characters": "\u2AEB" }, "&Vcy;": { "codepoints": [1042], "characters": "\u0412" }, "&Vdash;": { "codepoints": [8873], "characters": "\u22A9" }, "&Vdashl;": { "codepoints": [10982], "characters": "\u2AE6" }, "&Vee;": { "codepoints": [8897], "characters": "\u22C1" }, "&Verbar;": { "codepoints": [8214], "characters": "\u2016" }, "&Vert;": { "codepoints": [8214], "characters": "\u2016" }, "&VerticalBar;": { "codepoints": [8739], "characters": "\u2223" }, "&VerticalLine;": { "codepoints": [124], "characters": "\u007C" }, "&VerticalSeparator;": { "codepoints": [10072], "characters": "\u2758" }, "&VerticalTilde;": { "codepoints": [8768], "characters": "\u2240" }, "&VeryThinSpace;": { "codepoints": [8202], "characters": "\u200A" }, "&Vfr;": { "codepoints": [120089], "characters": "\uD835\uDD19" }, "&Vopf;": { "codepoints": [120141], "characters": "\uD835\uDD4D" }, "&Vscr;": { "codepoints": [119985], "characters": "\uD835\uDCB1" }, "&Vvdash;": { "codepoints": [8874], "characters": "\u22AA" }, "&Wcirc;": { "codepoints": [372], "characters": "\u0174" }, "&Wedge;": { "codepoints": [8896], "characters": "\u22C0" }, "&Wfr;": { "codepoints": [120090], "characters": "\uD835\uDD1A" }, "&Wopf;": { "codepoints": [120142], "characters": "\uD835\uDD4E" }, "&Wscr;": { "codepoints": [119986], "characters": "\uD835\uDCB2" }, "&Xfr;": { "codepoints": [120091], "characters": "\uD835\uDD1B" }, "&Xi;": { "codepoints": [926], "characters": "\u039E" }, "&Xopf;": { "codepoints": [120143], "characters": "\uD835\uDD4F" }, "&Xscr;": { "codepoints": [119987], "characters": "\uD835\uDCB3" }, "&YAcy;": { "codepoints": [1071], "characters": "\u042F" }, "&YIcy;": { "codepoints": [1031], "characters": "\u0407" }, "&YUcy;": { "codepoints": [1070], "characters": "\u042E" }, "&Yacute": { "codepoints": [221], "characters": "\u00DD" }, "&Yacute;": { "codepoints": [221], "characters": "\u00DD" }, "&Ycirc;": { "codepoints": [374], "characters": "\u0176" }, "&Ycy;": { "codepoints": [1067], "characters": "\u042B" }, "&Yfr;": { "codepoints": [120092], "characters": "\uD835\uDD1C" }, "&Yopf;": { "codepoints": [120144], "characters": "\uD835\uDD50" }, "&Yscr;": { "codepoints": [119988], "characters": "\uD835\uDCB4" }, "&Yuml;": { "codepoints": [376], "characters": "\u0178" }, "&ZHcy;": { "codepoints": [1046], "characters": "\u0416" }, "&Zacute;": { "codepoints": [377], "characters": "\u0179" }, "&Zcaron;": { "codepoints": [381], "characters": "\u017D" }, "&Zcy;": { "codepoints": [1047], "characters": "\u0417" }, "&Zdot;": { "codepoints": [379], "characters": "\u017B" }, "&ZeroWidthSpace;": { "codepoints": [8203], "characters": "\u200B" }, "&Zeta;": { "codepoints": [918], "characters": "\u0396" }, "&Zfr;": { "codepoints": [8488], "characters": "\u2128" }, "&Zopf;": { "codepoints": [8484], "characters": "\u2124" }, "&Zscr;": { "codepoints": [119989], "characters": "\uD835\uDCB5" }, "&aacute": { "codepoints": [225], "characters": "\u00E1" }, "&aacute;": { "codepoints": [225], "characters": "\u00E1" }, "&abreve;": { "codepoints": [259], "characters": "\u0103" }, "&ac;": { "codepoints": [8766], "characters": "\u223E" }, "&acE;": { "codepoints": [8766, 819], "characters": "\u223E\u0333" }, "&acd;": { "codepoints": [8767], "characters": "\u223F" }, "&acirc": { "codepoints": [226], "characters": "\u00E2" }, "&acirc;": { "codepoints": [226], "characters": "\u00E2" }, "&acute": { "codepoints": [180], "characters": "\u00B4" }, "&acute;": { "codepoints": [180], "characters": "\u00B4" }, "&acy;": { "codepoints": [1072], "characters": "\u0430" }, "&aelig": { "codepoints": [230], "characters": "\u00E6" }, "&aelig;": { "codepoints": [230], "characters": "\u00E6" }, "&af;": { "codepoints": [8289], "characters": "\u2061" }, "&afr;": { "codepoints": [120094], "characters": "\uD835\uDD1E" }, "&agrave": { "codepoints": [224], "characters": "\u00E0" }, "&agrave;": { "codepoints": [224], "characters": "\u00E0" }, "&alefsym;": { "codepoints": [8501], "characters": "\u2135" }, "&aleph;": { "codepoints": [8501], "characters": "\u2135" }, "&alpha;": { "codepoints": [945], "characters": "\u03B1" }, "&amacr;": { "codepoints": [257], "characters": "\u0101" }, "&amalg;": { "codepoints": [10815], "characters": "\u2A3F" }, "&amp": { "codepoints": [38], "characters": "\u0026" }, "&amp;": { "codepoints": [38], "characters": "\u0026" }, "&and;": { "codepoints": [8743], "characters": "\u2227" }, "&andand;": { "codepoints": [10837], "characters": "\u2A55" }, "&andd;": { "codepoints": [10844], "characters": "\u2A5C" }, "&andslope;": { "codepoints": [10840], "characters": "\u2A58" }, "&andv;": { "codepoints": [10842], "characters": "\u2A5A" }, "&ang;": { "codepoints": [8736], "characters": "\u2220" }, "&ange;": { "codepoints": [10660], "characters": "\u29A4" }, "&angle;": { "codepoints": [8736], "characters": "\u2220" }, "&angmsd;": { "codepoints": [8737], "characters": "\u2221" }, "&angmsdaa;": { "codepoints": [10664], "characters": "\u29A8" }, "&angmsdab;": { "codepoints": [10665], "characters": "\u29A9" }, "&angmsdac;": { "codepoints": [10666], "characters": "\u29AA" }, "&angmsdad;": { "codepoints": [10667], "characters": "\u29AB" }, "&angmsdae;": { "codepoints": [10668], "characters": "\u29AC" }, "&angmsdaf;": { "codepoints": [10669], "characters": "\u29AD" }, "&angmsdag;": { "codepoints": [10670], "characters": "\u29AE" }, "&angmsdah;": { "codepoints": [10671], "characters": "\u29AF" }, "&angrt;": { "codepoints": [8735], "characters": "\u221F" }, "&angrtvb;": { "codepoints": [8894], "characters": "\u22BE" }, "&angrtvbd;": { "codepoints": [10653], "characters": "\u299D" }, "&angsph;": { "codepoints": [8738], "characters": "\u2222" }, "&angst;": { "codepoints": [197], "characters": "\u00C5" }, "&angzarr;": { "codepoints": [9084], "characters": "\u237C" }, "&aogon;": { "codepoints": [261], "characters": "\u0105" }, "&aopf;": { "codepoints": [120146], "characters": "\uD835\uDD52" }, "&ap;": { "codepoints": [8776], "characters": "\u2248" }, "&apE;": { "codepoints": [10864], "characters": "\u2A70" }, "&apacir;": { "codepoints": [10863], "characters": "\u2A6F" }, "&ape;": { "codepoints": [8778], "characters": "\u224A" }, "&apid;": { "codepoints": [8779], "characters": "\u224B" }, "&apos;": { "codepoints": [39], "characters": "\u0027" }, "&approx;": { "codepoints": [8776], "characters": "\u2248" }, "&approxeq;": { "codepoints": [8778], "characters": "\u224A" }, "&aring": { "codepoints": [229], "characters": "\u00E5" }, "&aring;": { "codepoints": [229], "characters": "\u00E5" }, "&ascr;": { "codepoints": [119990], "characters": "\uD835\uDCB6" }, "&ast;": { "codepoints": [42], "characters": "\u002A" }, "&asymp;": { "codepoints": [8776], "characters": "\u2248" }, "&asympeq;": { "codepoints": [8781], "characters": "\u224D" }, "&atilde": { "codepoints": [227], "characters": "\u00E3" }, "&atilde;": { "codepoints": [227], "characters": "\u00E3" }, "&auml": { "codepoints": [228], "characters": "\u00E4" }, "&auml;": { "codepoints": [228], "characters": "\u00E4" }, "&awconint;": { "codepoints": [8755], "characters": "\u2233" }, "&awint;": { "codepoints": [10769], "characters": "\u2A11" }, "&bNot;": { "codepoints": [10989], "characters": "\u2AED" }, "&backcong;": { "codepoints": [8780], "characters": "\u224C" }, "&backepsilon;": { "codepoints": [1014], "characters": "\u03F6" }, "&backprime;": { "codepoints": [8245], "characters": "\u2035" }, "&backsim;": { "codepoints": [8765], "characters": "\u223D" }, "&backsimeq;": { "codepoints": [8909], "characters": "\u22CD" }, "&barvee;": { "codepoints": [8893], "characters": "\u22BD" }, "&barwed;": { "codepoints": [8965], "characters": "\u2305" }, "&barwedge;": { "codepoints": [8965], "characters": "\u2305" }, "&bbrk;": { "codepoints": [9141], "characters": "\u23B5" }, "&bbrktbrk;": { "codepoints": [9142], "characters": "\u23B6" }, "&bcong;": { "codepoints": [8780], "characters": "\u224C" }, "&bcy;": { "codepoints": [1073], "characters": "\u0431" }, "&bdquo;": { "codepoints": [8222], "characters": "\u201E" }, "&becaus;": { "codepoints": [8757], "characters": "\u2235" }, "&because;": { "codepoints": [8757], "characters": "\u2235" }, "&bemptyv;": { "codepoints": [10672], "characters": "\u29B0" }, "&bepsi;": { "codepoints": [1014], "characters": "\u03F6" }, "&bernou;": { "codepoints": [8492], "characters": "\u212C" }, "&beta;": { "codepoints": [946], "characters": "\u03B2" }, "&beth;": { "codepoints": [8502], "characters": "\u2136" }, "&between;": { "codepoints": [8812], "characters": "\u226C" }, "&bfr;": { "codepoints": [120095], "characters": "\uD835\uDD1F" }, "&bigcap;": { "codepoints": [8898], "characters": "\u22C2" }, "&bigcirc;": { "codepoints": [9711], "characters": "\u25EF" }, "&bigcup;": { "codepoints": [8899], "characters": "\u22C3" }, "&bigodot;": { "codepoints": [10752], "characters": "\u2A00" }, "&bigoplus;": { "codepoints": [10753], "characters": "\u2A01" }, "&bigotimes;": { "codepoints": [10754], "characters": "\u2A02" }, "&bigsqcup;": { "codepoints": [10758], "characters": "\u2A06" }, "&bigstar;": { "codepoints": [9733], "characters": "\u2605" }, "&bigtriangledown;": { "codepoints": [9661], "characters": "\u25BD" }, "&bigtriangleup;": { "codepoints": [9651], "characters": "\u25B3" }, "&biguplus;": { "codepoints": [10756], "characters": "\u2A04" }, "&bigvee;": { "codepoints": [8897], "characters": "\u22C1" }, "&bigwedge;": { "codepoints": [8896], "characters": "\u22C0" }, "&bkarow;": { "codepoints": [10509], "characters": "\u290D" }, "&blacklozenge;": { "codepoints": [10731], "characters": "\u29EB" }, "&blacksquare;": { "codepoints": [9642], "characters": "\u25AA" }, "&blacktriangle;": { "codepoints": [9652], "characters": "\u25B4" }, "&blacktriangledown;": { "codepoints": [9662], "characters": "\u25BE" }, "&blacktriangleleft;": { "codepoints": [9666], "characters": "\u25C2" }, "&blacktriangleright;": { "codepoints": [9656], "characters": "\u25B8" }, "&blank;": { "codepoints": [9251], "characters": "\u2423" }, "&blk12;": { "codepoints": [9618], "characters": "\u2592" }, "&blk14;": { "codepoints": [9617], "characters": "\u2591" }, "&blk34;": { "codepoints": [9619], "characters": "\u2593" }, "&block;": { "codepoints": [9608], "characters": "\u2588" }, "&bne;": { "codepoints": [61, 8421], "characters": "\u003D\u20E5" }, "&bnequiv;": { "codepoints": [8801, 8421], "characters": "\u2261\u20E5" }, "&bnot;": { "codepoints": [8976], "characters": "\u2310" }, "&bopf;": { "codepoints": [120147], "characters": "\uD835\uDD53" }, "&bot;": { "codepoints": [8869], "characters": "\u22A5" }, "&bottom;": { "codepoints": [8869], "characters": "\u22A5" }, "&bowtie;": { "codepoints": [8904], "characters": "\u22C8" }, "&boxDL;": { "codepoints": [9559], "characters": "\u2557" }, "&boxDR;": { "codepoints": [9556], "characters": "\u2554" }, "&boxDl;": { "codepoints": [9558], "characters": "\u2556" }, "&boxDr;": { "codepoints": [9555], "characters": "\u2553" }, "&boxH;": { "codepoints": [9552], "characters": "\u2550" }, "&boxHD;": { "codepoints": [9574], "characters": "\u2566" }, "&boxHU;": { "codepoints": [9577], "characters": "\u2569" }, "&boxHd;": { "codepoints": [9572], "characters": "\u2564" }, "&boxHu;": { "codepoints": [9575], "characters": "\u2567" }, "&boxUL;": { "codepoints": [9565], "characters": "\u255D" }, "&boxUR;": { "codepoints": [9562], "characters": "\u255A" }, "&boxUl;": { "codepoints": [9564], "characters": "\u255C" }, "&boxUr;": { "codepoints": [9561], "characters": "\u2559" }, "&boxV;": { "codepoints": [9553], "characters": "\u2551" }, "&boxVH;": { "codepoints": [9580], "characters": "\u256C" }, "&boxVL;": { "codepoints": [9571], "characters": "\u2563" }, "&boxVR;": { "codepoints": [9568], "characters": "\u2560" }, "&boxVh;": { "codepoints": [9579], "characters": "\u256B" }, "&boxVl;": { "codepoints": [9570], "characters": "\u2562" }, "&boxVr;": { "codepoints": [9567], "characters": "\u255F" }, "&boxbox;": { "codepoints": [10697], "characters": "\u29C9" }, "&boxdL;": { "codepoints": [9557], "characters": "\u2555" }, "&boxdR;": { "codepoints": [9554], "characters": "\u2552" }, "&boxdl;": { "codepoints": [9488], "characters": "\u2510" }, "&boxdr;": { "codepoints": [9484], "characters": "\u250C" }, "&boxh;": { "codepoints": [9472], "characters": "\u2500" }, "&boxhD;": { "codepoints": [9573], "characters": "\u2565" }, "&boxhU;": { "codepoints": [9576], "characters": "\u2568" }, "&boxhd;": { "codepoints": [9516], "characters": "\u252C" }, "&boxhu;": { "codepoints": [9524], "characters": "\u2534" }, "&boxminus;": { "codepoints": [8863], "characters": "\u229F" }, "&boxplus;": { "codepoints": [8862], "characters": "\u229E" }, "&boxtimes;": { "codepoints": [8864], "characters": "\u22A0" }, "&boxuL;": { "codepoints": [9563], "characters": "\u255B" }, "&boxuR;": { "codepoints": [9560], "characters": "\u2558" }, "&boxul;": { "codepoints": [9496], "characters": "\u2518" }, "&boxur;": { "codepoints": [9492], "characters": "\u2514" }, "&boxv;": { "codepoints": [9474], "characters": "\u2502" }, "&boxvH;": { "codepoints": [9578], "characters": "\u256A" }, "&boxvL;": { "codepoints": [9569], "characters": "\u2561" }, "&boxvR;": { "codepoints": [9566], "characters": "\u255E" }, "&boxvh;": { "codepoints": [9532], "characters": "\u253C" }, "&boxvl;": { "codepoints": [9508], "characters": "\u2524" }, "&boxvr;": { "codepoints": [9500], "characters": "\u251C" }, "&bprime;": { "codepoints": [8245], "characters": "\u2035" }, "&breve;": { "codepoints": [728], "characters": "\u02D8" }, "&brvbar": { "codepoints": [166], "characters": "\u00A6" }, "&brvbar;": { "codepoints": [166], "characters": "\u00A6" }, "&bscr;": { "codepoints": [119991], "characters": "\uD835\uDCB7" }, "&bsemi;": { "codepoints": [8271], "characters": "\u204F" }, "&bsim;": { "codepoints": [8765], "characters": "\u223D" }, "&bsime;": { "codepoints": [8909], "characters": "\u22CD" }, "&bsol;": { "codepoints": [92], "characters": "\u005C" }, "&bsolb;": { "codepoints": [10693], "characters": "\u29C5" }, "&bsolhsub;": { "codepoints": [10184], "characters": "\u27C8" }, "&bull;": { "codepoints": [8226], "characters": "\u2022" }, "&bullet;": { "codepoints": [8226], "characters": "\u2022" }, "&bump;": { "codepoints": [8782], "characters": "\u224E" }, "&bumpE;": { "codepoints": [10926], "characters": "\u2AAE" }, "&bumpe;": { "codepoints": [8783], "characters": "\u224F" }, "&bumpeq;": { "codepoints": [8783], "characters": "\u224F" }, "&cacute;": { "codepoints": [263], "characters": "\u0107" }, "&cap;": { "codepoints": [8745], "characters": "\u2229" }, "&capand;": { "codepoints": [10820], "characters": "\u2A44" }, "&capbrcup;": { "codepoints": [10825], "characters": "\u2A49" }, "&capcap;": { "codepoints": [10827], "characters": "\u2A4B" }, "&capcup;": { "codepoints": [10823], "characters": "\u2A47" }, "&capdot;": { "codepoints": [10816], "characters": "\u2A40" }, "&caps;": { "codepoints": [8745, 65024], "characters": "\u2229\uFE00" }, "&caret;": { "codepoints": [8257], "characters": "\u2041" }, "&caron;": { "codepoints": [711], "characters": "\u02C7" }, "&ccaps;": { "codepoints": [10829], "characters": "\u2A4D" }, "&ccaron;": { "codepoints": [269], "characters": "\u010D" }, "&ccedil": { "codepoints": [231], "characters": "\u00E7" }, "&ccedil;": { "codepoints": [231], "characters": "\u00E7" }, "&ccirc;": { "codepoints": [265], "characters": "\u0109" }, "&ccups;": { "codepoints": [10828], "characters": "\u2A4C" }, "&ccupssm;": { "codepoints": [10832], "characters": "\u2A50" }, "&cdot;": { "codepoints": [267], "characters": "\u010B" }, "&cedil": { "codepoints": [184], "characters": "\u00B8" }, "&cedil;": { "codepoints": [184], "characters": "\u00B8" }, "&cemptyv;": { "codepoints": [10674], "characters": "\u29B2" }, "&cent": { "codepoints": [162], "characters": "\u00A2" }, "&cent;": { "codepoints": [162], "characters": "\u00A2" }, "&centerdot;": { "codepoints": [183], "characters": "\u00B7" }, "&cfr;": { "codepoints": [120096], "characters": "\uD835\uDD20" }, "&chcy;": { "codepoints": [1095], "characters": "\u0447" }, "&check;": { "codepoints": [10003], "characters": "\u2713" }, "&checkmark;": { "codepoints": [10003], "characters": "\u2713" }, "&chi;": { "codepoints": [967], "characters": "\u03C7" }, "&cir;": { "codepoints": [9675], "characters": "\u25CB" }, "&cirE;": { "codepoints": [10691], "characters": "\u29C3" }, "&circ;": { "codepoints": [710], "characters": "\u02C6" }, "&circeq;": { "codepoints": [8791], "characters": "\u2257" }, "&circlearrowleft;": { "codepoints": [8634], "characters": "\u21BA" }, "&circlearrowright;": { "codepoints": [8635], "characters": "\u21BB" }, "&circledR;": { "codepoints": [174], "characters": "\u00AE" }, "&circledS;": { "codepoints": [9416], "characters": "\u24C8" }, "&circledast;": { "codepoints": [8859], "characters": "\u229B" }, "&circledcirc;": { "codepoints": [8858], "characters": "\u229A" }, "&circleddash;": { "codepoints": [8861], "characters": "\u229D" }, "&cire;": { "codepoints": [8791], "characters": "\u2257" }, "&cirfnint;": { "codepoints": [10768], "characters": "\u2A10" }, "&cirmid;": { "codepoints": [10991], "characters": "\u2AEF" }, "&cirscir;": { "codepoints": [10690], "characters": "\u29C2" }, "&clubs;": { "codepoints": [9827], "characters": "\u2663" }, "&clubsuit;": { "codepoints": [9827], "characters": "\u2663" }, "&colon;": { "codepoints": [58], "characters": "\u003A" }, "&colone;": { "codepoints": [8788], "characters": "\u2254" }, "&coloneq;": { "codepoints": [8788], "characters": "\u2254" }, "&comma;": { "codepoints": [44], "characters": "\u002C" }, "&commat;": { "codepoints": [64], "characters": "\u0040" }, "&comp;": { "codepoints": [8705], "characters": "\u2201" }, "&compfn;": { "codepoints": [8728], "characters": "\u2218" }, "&complement;": { "codepoints": [8705], "characters": "\u2201" }, "&complexes;": { "codepoints": [8450], "characters": "\u2102" }, "&cong;": { "codepoints": [8773], "characters": "\u2245" }, "&congdot;": { "codepoints": [10861], "characters": "\u2A6D" }, "&conint;": { "codepoints": [8750], "characters": "\u222E" }, "&copf;": { "codepoints": [120148], "characters": "\uD835\uDD54" }, "&coprod;": { "codepoints": [8720], "characters": "\u2210" }, "&copy": { "codepoints": [169], "characters": "\u00A9" }, "&copy;": { "codepoints": [169], "characters": "\u00A9" }, "&copysr;": { "codepoints": [8471], "characters": "\u2117" }, "&crarr;": { "codepoints": [8629], "characters": "\u21B5" }, "&cross;": { "codepoints": [10007], "characters": "\u2717" }, "&cscr;": { "codepoints": [119992], "characters": "\uD835\uDCB8" }, "&csub;": { "codepoints": [10959], "characters": "\u2ACF" }, "&csube;": { "codepoints": [10961], "characters": "\u2AD1" }, "&csup;": { "codepoints": [10960], "characters": "\u2AD0" }, "&csupe;": { "codepoints": [10962], "characters": "\u2AD2" }, "&ctdot;": { "codepoints": [8943], "characters": "\u22EF" }, "&cudarrl;": { "codepoints": [10552], "characters": "\u2938" }, "&cudarrr;": { "codepoints": [10549], "characters": "\u2935" }, "&cuepr;": { "codepoints": [8926], "characters": "\u22DE" }, "&cuesc;": { "codepoints": [8927], "characters": "\u22DF" }, "&cularr;": { "codepoints": [8630], "characters": "\u21B6" }, "&cularrp;": { "codepoints": [10557], "characters": "\u293D" }, "&cup;": { "codepoints": [8746], "characters": "\u222A" }, "&cupbrcap;": { "codepoints": [10824], "characters": "\u2A48" }, "&cupcap;": { "codepoints": [10822], "characters": "\u2A46" }, "&cupcup;": { "codepoints": [10826], "characters": "\u2A4A" }, "&cupdot;": { "codepoints": [8845], "characters": "\u228D" }, "&cupor;": { "codepoints": [10821], "characters": "\u2A45" }, "&cups;": { "codepoints": [8746, 65024], "characters": "\u222A\uFE00" }, "&curarr;": { "codepoints": [8631], "characters": "\u21B7" }, "&curarrm;": { "codepoints": [10556], "characters": "\u293C" }, "&curlyeqprec;": { "codepoints": [8926], "characters": "\u22DE" }, "&curlyeqsucc;": { "codepoints": [8927], "characters": "\u22DF" }, "&curlyvee;": { "codepoints": [8910], "characters": "\u22CE" }, "&curlywedge;": { "codepoints": [8911], "characters": "\u22CF" }, "&curren": { "codepoints": [164], "characters": "\u00A4" }, "&curren;": { "codepoints": [164], "characters": "\u00A4" }, "&curvearrowleft;": { "codepoints": [8630], "characters": "\u21B6" }, "&curvearrowright;": { "codepoints": [8631], "characters": "\u21B7" }, "&cuvee;": { "codepoints": [8910], "characters": "\u22CE" }, "&cuwed;": { "codepoints": [8911], "characters": "\u22CF" }, "&cwconint;": { "codepoints": [8754], "characters": "\u2232" }, "&cwint;": { "codepoints": [8753], "characters": "\u2231" }, "&cylcty;": { "codepoints": [9005], "characters": "\u232D" }, "&dArr;": { "codepoints": [8659], "characters": "\u21D3" }, "&dHar;": { "codepoints": [10597], "characters": "\u2965" }, "&dagger;": { "codepoints": [8224], "characters": "\u2020" }, "&daleth;": { "codepoints": [8504], "characters": "\u2138" }, "&darr;": { "codepoints": [8595], "characters": "\u2193" }, "&dash;": { "codepoints": [8208], "characters": "\u2010" }, "&dashv;": { "codepoints": [8867], "characters": "\u22A3" }, "&dbkarow;": { "codepoints": [10511], "characters": "\u290F" }, "&dblac;": { "codepoints": [733], "characters": "\u02DD" }, "&dcaron;": { "codepoints": [271], "characters": "\u010F" }, "&dcy;": { "codepoints": [1076], "characters": "\u0434" }, "&dd;": { "codepoints": [8518], "characters": "\u2146" }, "&ddagger;": { "codepoints": [8225], "characters": "\u2021" }, "&ddarr;": { "codepoints": [8650], "characters": "\u21CA" }, "&ddotseq;": { "codepoints": [10871], "characters": "\u2A77" }, "&deg": { "codepoints": [176], "characters": "\u00B0" }, "&deg;": { "codepoints": [176], "characters": "\u00B0" }, "&delta;": { "codepoints": [948], "characters": "\u03B4" }, "&demptyv;": { "codepoints": [10673], "characters": "\u29B1" }, "&dfisht;": { "codepoints": [10623], "characters": "\u297F" }, "&dfr;": { "codepoints": [120097], "characters": "\uD835\uDD21" }, "&dharl;": { "codepoints": [8643], "characters": "\u21C3" }, "&dharr;": { "codepoints": [8642], "characters": "\u21C2" }, "&diam;": { "codepoints": [8900], "characters": "\u22C4" }, "&diamond;": { "codepoints": [8900], "characters": "\u22C4" }, "&diamondsuit;": { "codepoints": [9830], "characters": "\u2666" }, "&diams;": { "codepoints": [9830], "characters": "\u2666" }, "&die;": { "codepoints": [168], "characters": "\u00A8" }, "&digamma;": { "codepoints": [989], "characters": "\u03DD" }, "&disin;": { "codepoints": [8946], "characters": "\u22F2" }, "&div;": { "codepoints": [247], "characters": "\u00F7" }, "&divide": { "codepoints": [247], "characters": "\u00F7" }, "&divide;": { "codepoints": [247], "characters": "\u00F7" }, "&divideontimes;": { "codepoints": [8903], "characters": "\u22C7" }, "&divonx;": { "codepoints": [8903], "characters": "\u22C7" }, "&djcy;": { "codepoints": [1106], "characters": "\u0452" }, "&dlcorn;": { "codepoints": [8990], "characters": "\u231E" }, "&dlcrop;": { "codepoints": [8973], "characters": "\u230D" }, "&dollar;": { "codepoints": [36], "characters": "\u0024" }, "&dopf;": { "codepoints": [120149], "characters": "\uD835\uDD55" }, "&dot;": { "codepoints": [729], "characters": "\u02D9" }, "&doteq;": { "codepoints": [8784], "characters": "\u2250" }, "&doteqdot;": { "codepoints": [8785], "characters": "\u2251" }, "&dotminus;": { "codepoints": [8760], "characters": "\u2238" }, "&dotplus;": { "codepoints": [8724], "characters": "\u2214" }, "&dotsquare;": { "codepoints": [8865], "characters": "\u22A1" }, "&doublebarwedge;": { "codepoints": [8966], "characters": "\u2306" }, "&downarrow;": { "codepoints": [8595], "characters": "\u2193" }, "&downdownarrows;": { "codepoints": [8650], "characters": "\u21CA" }, "&downharpoonleft;": { "codepoints": [8643], "characters": "\u21C3" }, "&downharpoonright;": { "codepoints": [8642], "characters": "\u21C2" }, "&drbkarow;": { "codepoints": [10512], "characters": "\u2910" }, "&drcorn;": { "codepoints": [8991], "characters": "\u231F" }, "&drcrop;": { "codepoints": [8972], "characters": "\u230C" }, "&dscr;": { "codepoints": [119993], "characters": "\uD835\uDCB9" }, "&dscy;": { "codepoints": [1109], "characters": "\u0455" }, "&dsol;": { "codepoints": [10742], "characters": "\u29F6" }, "&dstrok;": { "codepoints": [273], "characters": "\u0111" }, "&dtdot;": { "codepoints": [8945], "characters": "\u22F1" }, "&dtri;": { "codepoints": [9663], "characters": "\u25BF" }, "&dtrif;": { "codepoints": [9662], "characters": "\u25BE" }, "&duarr;": { "codepoints": [8693], "characters": "\u21F5" }, "&duhar;": { "codepoints": [10607], "characters": "\u296F" }, "&dwangle;": { "codepoints": [10662], "characters": "\u29A6" }, "&dzcy;": { "codepoints": [1119], "characters": "\u045F" }, "&dzigrarr;": { "codepoints": [10239], "characters": "\u27FF" }, "&eDDot;": { "codepoints": [10871], "characters": "\u2A77" }, "&eDot;": { "codepoints": [8785], "characters": "\u2251" }, "&eacute": { "codepoints": [233], "characters": "\u00E9" }, "&eacute;": { "codepoints": [233], "characters": "\u00E9" }, "&easter;": { "codepoints": [10862], "characters": "\u2A6E" }, "&ecaron;": { "codepoints": [283], "characters": "\u011B" }, "&ecir;": { "codepoints": [8790], "characters": "\u2256" }, "&ecirc": { "codepoints": [234], "characters": "\u00EA" }, "&ecirc;": { "codepoints": [234], "characters": "\u00EA" }, "&ecolon;": { "codepoints": [8789], "characters": "\u2255" }, "&ecy;": { "codepoints": [1101], "characters": "\u044D" }, "&edot;": { "codepoints": [279], "characters": "\u0117" }, "&ee;": { "codepoints": [8519], "characters": "\u2147" }, "&efDot;": { "codepoints": [8786], "characters": "\u2252" }, "&efr;": { "codepoints": [120098], "characters": "\uD835\uDD22" }, "&eg;": { "codepoints": [10906], "characters": "\u2A9A" }, "&egrave": { "codepoints": [232], "characters": "\u00E8" }, "&egrave;": { "codepoints": [232], "characters": "\u00E8" }, "&egs;": { "codepoints": [10902], "characters": "\u2A96" }, "&egsdot;": { "codepoints": [10904], "characters": "\u2A98" }, "&el;": { "codepoints": [10905], "characters": "\u2A99" }, "&elinters;": { "codepoints": [9191], "characters": "\u23E7" }, "&ell;": { "codepoints": [8467], "characters": "\u2113" }, "&els;": { "codepoints": [10901], "characters": "\u2A95" }, "&elsdot;": { "codepoints": [10903], "characters": "\u2A97" }, "&emacr;": { "codepoints": [275], "characters": "\u0113" }, "&empty;": { "codepoints": [8709], "characters": "\u2205" }, "&emptyset;": { "codepoints": [8709], "characters": "\u2205" }, "&emptyv;": { "codepoints": [8709], "characters": "\u2205" }, "&emsp13;": { "codepoints": [8196], "characters": "\u2004" }, "&emsp14;": { "codepoints": [8197], "characters": "\u2005" }, "&emsp;": { "codepoints": [8195], "characters": "\u2003" }, "&eng;": { "codepoints": [331], "characters": "\u014B" }, "&ensp;": { "codepoints": [8194], "characters": "\u2002" }, "&eogon;": { "codepoints": [281], "characters": "\u0119" }, "&eopf;": { "codepoints": [120150], "characters": "\uD835\uDD56" }, "&epar;": { "codepoints": [8917], "characters": "\u22D5" }, "&eparsl;": { "codepoints": [10723], "characters": "\u29E3" }, "&eplus;": { "codepoints": [10865], "characters": "\u2A71" }, "&epsi;": { "codepoints": [949], "characters": "\u03B5" }, "&epsilon;": { "codepoints": [949], "characters": "\u03B5" }, "&epsiv;": { "codepoints": [1013], "characters": "\u03F5" }, "&eqcirc;": { "codepoints": [8790], "characters": "\u2256" }, "&eqcolon;": { "codepoints": [8789], "characters": "\u2255" }, "&eqsim;": { "codepoints": [8770], "characters": "\u2242" }, "&eqslantgtr;": { "codepoints": [10902], "characters": "\u2A96" }, "&eqslantless;": { "codepoints": [10901], "characters": "\u2A95" }, "&equals;": { "codepoints": [61], "characters": "\u003D" }, "&equest;": { "codepoints": [8799], "characters": "\u225F" }, "&equiv;": { "codepoints": [8801], "characters": "\u2261" }, "&equivDD;": { "codepoints": [10872], "characters": "\u2A78" }, "&eqvparsl;": { "codepoints": [10725], "characters": "\u29E5" }, "&erDot;": { "codepoints": [8787], "characters": "\u2253" }, "&erarr;": { "codepoints": [10609], "characters": "\u2971" }, "&escr;": { "codepoints": [8495], "characters": "\u212F" }, "&esdot;": { "codepoints": [8784], "characters": "\u2250" }, "&esim;": { "codepoints": [8770], "characters": "\u2242" }, "&eta;": { "codepoints": [951], "characters": "\u03B7" }, "&eth": { "codepoints": [240], "characters": "\u00F0" }, "&eth;": { "codepoints": [240], "characters": "\u00F0" }, "&euml": { "codepoints": [235], "characters": "\u00EB" }, "&euml;": { "codepoints": [235], "characters": "\u00EB" }, "&euro;": { "codepoints": [8364], "characters": "\u20AC" }, "&excl;": { "codepoints": [33], "characters": "\u0021" }, "&exist;": { "codepoints": [8707], "characters": "\u2203" }, "&expectation;": { "codepoints": [8496], "characters": "\u2130" }, "&exponentiale;": { "codepoints": [8519], "characters": "\u2147" }, "&fallingdotseq;": { "codepoints": [8786], "characters": "\u2252" }, "&fcy;": { "codepoints": [1092], "characters": "\u0444" }, "&female;": { "codepoints": [9792], "characters": "\u2640" }, "&ffilig;": { "codepoints": [64259], "characters": "\uFB03" }, "&fflig;": { "codepoints": [64256], "characters": "\uFB00" }, "&ffllig;": { "codepoints": [64260], "characters": "\uFB04" }, "&ffr;": { "codepoints": [120099], "characters": "\uD835\uDD23" }, "&filig;": { "codepoints": [64257], "characters": "\uFB01" }, "&fjlig;": { "codepoints": [102, 106], "characters": "\u0066\u006A" }, "&flat;": { "codepoints": [9837], "characters": "\u266D" }, "&fllig;": { "codepoints": [64258], "characters": "\uFB02" }, "&fltns;": { "codepoints": [9649], "characters": "\u25B1" }, "&fnof;": { "codepoints": [402], "characters": "\u0192" }, "&fopf;": { "codepoints": [120151], "characters": "\uD835\uDD57" }, "&forall;": { "codepoints": [8704], "characters": "\u2200" }, "&fork;": { "codepoints": [8916], "characters": "\u22D4" }, "&forkv;": { "codepoints": [10969], "characters": "\u2AD9" }, "&fpartint;": { "codepoints": [10765], "characters": "\u2A0D" }, "&frac12": { "codepoints": [189], "characters": "\u00BD" }, "&frac12;": { "codepoints": [189], "characters": "\u00BD" }, "&frac13;": { "codepoints": [8531], "characters": "\u2153" }, "&frac14": { "codepoints": [188], "characters": "\u00BC" }, "&frac14;": { "codepoints": [188], "characters": "\u00BC" }, "&frac15;": { "codepoints": [8533], "characters": "\u2155" }, "&frac16;": { "codepoints": [8537], "characters": "\u2159" }, "&frac18;": { "codepoints": [8539], "characters": "\u215B" }, "&frac23;": { "codepoints": [8532], "characters": "\u2154" }, "&frac25;": { "codepoints": [8534], "characters": "\u2156" }, "&frac34": { "codepoints": [190], "characters": "\u00BE" }, "&frac34;": { "codepoints": [190], "characters": "\u00BE" }, "&frac35;": { "codepoints": [8535], "characters": "\u2157" }, "&frac38;": { "codepoints": [8540], "characters": "\u215C" }, "&frac45;": { "codepoints": [8536], "characters": "\u2158" }, "&frac56;": { "codepoints": [8538], "characters": "\u215A" }, "&frac58;": { "codepoints": [8541], "characters": "\u215D" }, "&frac78;": { "codepoints": [8542], "characters": "\u215E" }, "&frasl;": { "codepoints": [8260], "characters": "\u2044" }, "&frown;": { "codepoints": [8994], "characters": "\u2322" }, "&fscr;": { "codepoints": [119995], "characters": "\uD835\uDCBB" }, "&gE;": { "codepoints": [8807], "characters": "\u2267" }, "&gEl;": { "codepoints": [10892], "characters": "\u2A8C" }, "&gacute;": { "codepoints": [501], "characters": "\u01F5" }, "&gamma;": { "codepoints": [947], "characters": "\u03B3" }, "&gammad;": { "codepoints": [989], "characters": "\u03DD" }, "&gap;": { "codepoints": [10886], "characters": "\u2A86" }, "&gbreve;": { "codepoints": [287], "characters": "\u011F" }, "&gcirc;": { "codepoints": [285], "characters": "\u011D" }, "&gcy;": { "codepoints": [1075], "characters": "\u0433" }, "&gdot;": { "codepoints": [289], "characters": "\u0121" }, "&ge;": { "codepoints": [8805], "characters": "\u2265" }, "&gel;": { "codepoints": [8923], "characters": "\u22DB" }, "&geq;": { "codepoints": [8805], "characters": "\u2265" }, "&geqq;": { "codepoints": [8807], "characters": "\u2267" }, "&geqslant;": { "codepoints": [10878], "characters": "\u2A7E" }, "&ges;": { "codepoints": [10878], "characters": "\u2A7E" }, "&gescc;": { "codepoints": [10921], "characters": "\u2AA9" }, "&gesdot;": { "codepoints": [10880], "characters": "\u2A80" }, "&gesdoto;": { "codepoints": [10882], "characters": "\u2A82" }, "&gesdotol;": { "codepoints": [10884], "characters": "\u2A84" }, "&gesl;": { "codepoints": [8923, 65024], "characters": "\u22DB\uFE00" }, "&gesles;": { "codepoints": [10900], "characters": "\u2A94" }, "&gfr;": { "codepoints": [120100], "characters": "\uD835\uDD24" }, "&gg;": { "codepoints": [8811], "characters": "\u226B" }, "&ggg;": { "codepoints": [8921], "characters": "\u22D9" }, "&gimel;": { "codepoints": [8503], "characters": "\u2137" }, "&gjcy;": { "codepoints": [1107], "characters": "\u0453" }, "&gl;": { "codepoints": [8823], "characters": "\u2277" }, "&glE;": { "codepoints": [10898], "characters": "\u2A92" }, "&gla;": { "codepoints": [10917], "characters": "\u2AA5" }, "&glj;": { "codepoints": [10916], "characters": "\u2AA4" }, "&gnE;": { "codepoints": [8809], "characters": "\u2269" }, "&gnap;": { "codepoints": [10890], "characters": "\u2A8A" }, "&gnapprox;": { "codepoints": [10890], "characters": "\u2A8A" }, "&gne;": { "codepoints": [10888], "characters": "\u2A88" }, "&gneq;": { "codepoints": [10888], "characters": "\u2A88" }, "&gneqq;": { "codepoints": [8809], "characters": "\u2269" }, "&gnsim;": { "codepoints": [8935], "characters": "\u22E7" }, "&gopf;": { "codepoints": [120152], "characters": "\uD835\uDD58" }, "&grave;": { "codepoints": [96], "characters": "\u0060" }, "&gscr;": { "codepoints": [8458], "characters": "\u210A" }, "&gsim;": { "codepoints": [8819], "characters": "\u2273" }, "&gsime;": { "codepoints": [10894], "characters": "\u2A8E" }, "&gsiml;": { "codepoints": [10896], "characters": "\u2A90" }, "&gt": { "codepoints": [62], "characters": "\u003E" }, "&gt;": { "codepoints": [62], "characters": "\u003E" }, "&gtcc;": { "codepoints": [10919], "characters": "\u2AA7" }, "&gtcir;": { "codepoints": [10874], "characters": "\u2A7A" }, "&gtdot;": { "codepoints": [8919], "characters": "\u22D7" }, "&gtlPar;": { "codepoints": [10645], "characters": "\u2995" }, "&gtquest;": { "codepoints": [10876], "characters": "\u2A7C" }, "&gtrapprox;": { "codepoints": [10886], "characters": "\u2A86" }, "&gtrarr;": { "codepoints": [10616], "characters": "\u2978" }, "&gtrdot;": { "codepoints": [8919], "characters": "\u22D7" }, "&gtreqless;": { "codepoints": [8923], "characters": "\u22DB" }, "&gtreqqless;": { "codepoints": [10892], "characters": "\u2A8C" }, "&gtrless;": { "codepoints": [8823], "characters": "\u2277" }, "&gtrsim;": { "codepoints": [8819], "characters": "\u2273" }, "&gvertneqq;": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" }, "&gvnE;": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" }, "&hArr;": { "codepoints": [8660], "characters": "\u21D4" }, "&hairsp;": { "codepoints": [8202], "characters": "\u200A" }, "&half;": { "codepoints": [189], "characters": "\u00BD" }, "&hamilt;": { "codepoints": [8459], "characters": "\u210B" }, "&hardcy;": { "codepoints": [1098], "characters": "\u044A" }, "&harr;": { "codepoints": [8596], "characters": "\u2194" }, "&harrcir;": { "codepoints": [10568], "characters": "\u2948" }, "&harrw;": { "codepoints": [8621], "characters": "\u21AD" }, "&hbar;": { "codepoints": [8463], "characters": "\u210F" }, "&hcirc;": { "codepoints": [293], "characters": "\u0125" }, "&hearts;": { "codepoints": [9829], "characters": "\u2665" }, "&heartsuit;": { "codepoints": [9829], "characters": "\u2665" }, "&hellip;": { "codepoints": [8230], "characters": "\u2026" }, "&hercon;": { "codepoints": [8889], "characters": "\u22B9" }, "&hfr;": { "codepoints": [120101], "characters": "\uD835\uDD25" }, "&hksearow;": { "codepoints": [10533], "characters": "\u2925" }, "&hkswarow;": { "codepoints": [10534], "characters": "\u2926" }, "&hoarr;": { "codepoints": [8703], "characters": "\u21FF" }, "&homtht;": { "codepoints": [8763], "characters": "\u223B" }, "&hookleftarrow;": { "codepoints": [8617], "characters": "\u21A9" }, "&hookrightarrow;": { "codepoints": [8618], "characters": "\u21AA" }, "&hopf;": { "codepoints": [120153], "characters": "\uD835\uDD59" }, "&horbar;": { "codepoints": [8213], "characters": "\u2015" }, "&hscr;": { "codepoints": [119997], "characters": "\uD835\uDCBD" }, "&hslash;": { "codepoints": [8463], "characters": "\u210F" }, "&hstrok;": { "codepoints": [295], "characters": "\u0127" }, "&hybull;": { "codepoints": [8259], "characters": "\u2043" }, "&hyphen;": { "codepoints": [8208], "characters": "\u2010" }, "&iacute": { "codepoints": [237], "characters": "\u00ED" }, "&iacute;": { "codepoints": [237], "characters": "\u00ED" }, "&ic;": { "codepoints": [8291], "characters": "\u2063" }, "&icirc": { "codepoints": [238], "characters": "\u00EE" }, "&icirc;": { "codepoints": [238], "characters": "\u00EE" }, "&icy;": { "codepoints": [1080], "characters": "\u0438" }, "&iecy;": { "codepoints": [1077], "characters": "\u0435" }, "&iexcl": { "codepoints": [161], "characters": "\u00A1" }, "&iexcl;": { "codepoints": [161], "characters": "\u00A1" }, "&iff;": { "codepoints": [8660], "characters": "\u21D4" }, "&ifr;": { "codepoints": [120102], "characters": "\uD835\uDD26" }, "&igrave": { "codepoints": [236], "characters": "\u00EC" }, "&igrave;": { "codepoints": [236], "characters": "\u00EC" }, "&ii;": { "codepoints": [8520], "characters": "\u2148" }, "&iiiint;": { "codepoints": [10764], "characters": "\u2A0C" }, "&iiint;": { "codepoints": [8749], "characters": "\u222D" }, "&iinfin;": { "codepoints": [10716], "characters": "\u29DC" }, "&iiota;": { "codepoints": [8489], "characters": "\u2129" }, "&ijlig;": { "codepoints": [307], "characters": "\u0133" }, "&imacr;": { "codepoints": [299], "characters": "\u012B" }, "&image;": { "codepoints": [8465], "characters": "\u2111" }, "&imagline;": { "codepoints": [8464], "characters": "\u2110" }, "&imagpart;": { "codepoints": [8465], "characters": "\u2111" }, "&imath;": { "codepoints": [305], "characters": "\u0131" }, "&imof;": { "codepoints": [8887], "characters": "\u22B7" }, "&imped;": { "codepoints": [437], "characters": "\u01B5" }, "&in;": { "codepoints": [8712], "characters": "\u2208" }, "&incare;": { "codepoints": [8453], "characters": "\u2105" }, "&infin;": { "codepoints": [8734], "characters": "\u221E" }, "&infintie;": { "codepoints": [10717], "characters": "\u29DD" }, "&inodot;": { "codepoints": [305], "characters": "\u0131" }, "&int;": { "codepoints": [8747], "characters": "\u222B" }, "&intcal;": { "codepoints": [8890], "characters": "\u22BA" }, "&integers;": { "codepoints": [8484], "characters": "\u2124" }, "&intercal;": { "codepoints": [8890], "characters": "\u22BA" }, "&intlarhk;": { "codepoints": [10775], "characters": "\u2A17" }, "&intprod;": { "codepoints": [10812], "characters": "\u2A3C" }, "&iocy;": { "codepoints": [1105], "characters": "\u0451" }, "&iogon;": { "codepoints": [303], "characters": "\u012F" }, "&iopf;": { "codepoints": [120154], "characters": "\uD835\uDD5A" }, "&iota;": { "codepoints": [953], "characters": "\u03B9" }, "&iprod;": { "codepoints": [10812], "characters": "\u2A3C" }, "&iquest": { "codepoints": [191], "characters": "\u00BF" }, "&iquest;": { "codepoints": [191], "characters": "\u00BF" }, "&iscr;": { "codepoints": [119998], "characters": "\uD835\uDCBE" }, "&isin;": { "codepoints": [8712], "characters": "\u2208" }, "&isinE;": { "codepoints": [8953], "characters": "\u22F9" }, "&isindot;": { "codepoints": [8949], "characters": "\u22F5" }, "&isins;": { "codepoints": [8948], "characters": "\u22F4" }, "&isinsv;": { "codepoints": [8947], "characters": "\u22F3" }, "&isinv;": { "codepoints": [8712], "characters": "\u2208" }, "&it;": { "codepoints": [8290], "characters": "\u2062" }, "&itilde;": { "codepoints": [297], "characters": "\u0129" }, "&iukcy;": { "codepoints": [1110], "characters": "\u0456" }, "&iuml": { "codepoints": [239], "characters": "\u00EF" }, "&iuml;": { "codepoints": [239], "characters": "\u00EF" }, "&jcirc;": { "codepoints": [309], "characters": "\u0135" }, "&jcy;": { "codepoints": [1081], "characters": "\u0439" }, "&jfr;": { "codepoints": [120103], "characters": "\uD835\uDD27" }, "&jmath;": { "codepoints": [567], "characters": "\u0237" }, "&jopf;": { "codepoints": [120155], "characters": "\uD835\uDD5B" }, "&jscr;": { "codepoints": [119999], "characters": "\uD835\uDCBF" }, "&jsercy;": { "codepoints": [1112], "characters": "\u0458" }, "&jukcy;": { "codepoints": [1108], "characters": "\u0454" }, "&kappa;": { "codepoints": [954], "characters": "\u03BA" }, "&kappav;": { "codepoints": [1008], "characters": "\u03F0" }, "&kcedil;": { "codepoints": [311], "characters": "\u0137" }, "&kcy;": { "codepoints": [1082], "characters": "\u043A" }, "&kfr;": { "codepoints": [120104], "characters": "\uD835\uDD28" }, "&kgreen;": { "codepoints": [312], "characters": "\u0138" }, "&khcy;": { "codepoints": [1093], "characters": "\u0445" }, "&kjcy;": { "codepoints": [1116], "characters": "\u045C" }, "&kopf;": { "codepoints": [120156], "characters": "\uD835\uDD5C" }, "&kscr;": { "codepoints": [120000], "characters": "\uD835\uDCC0" }, "&lAarr;": { "codepoints": [8666], "characters": "\u21DA" }, "&lArr;": { "codepoints": [8656], "characters": "\u21D0" }, "&lAtail;": { "codepoints": [10523], "characters": "\u291B" }, "&lBarr;": { "codepoints": [10510], "characters": "\u290E" }, "&lE;": { "codepoints": [8806], "characters": "\u2266" }, "&lEg;": { "codepoints": [10891], "characters": "\u2A8B" }, "&lHar;": { "codepoints": [10594], "characters": "\u2962" }, "&lacute;": { "codepoints": [314], "characters": "\u013A" }, "&laemptyv;": { "codepoints": [10676], "characters": "\u29B4" }, "&lagran;": { "codepoints": [8466], "characters": "\u2112" }, "&lambda;": { "codepoints": [955], "characters": "\u03BB" }, "&lang;": { "codepoints": [10216], "characters": "\u27E8" }, "&langd;": { "codepoints": [10641], "characters": "\u2991" }, "&langle;": { "codepoints": [10216], "characters": "\u27E8" }, "&lap;": { "codepoints": [10885], "characters": "\u2A85" }, "&laquo": { "codepoints": [171], "characters": "\u00AB" }, "&laquo;": { "codepoints": [171], "characters": "\u00AB" }, "&larr;": { "codepoints": [8592], "characters": "\u2190" }, "&larrb;": { "codepoints": [8676], "characters": "\u21E4" }, "&larrbfs;": { "codepoints": [10527], "characters": "\u291F" }, "&larrfs;": { "codepoints": [10525], "characters": "\u291D" }, "&larrhk;": { "codepoints": [8617], "characters": "\u21A9" }, "&larrlp;": { "codepoints": [8619], "characters": "\u21AB" }, "&larrpl;": { "codepoints": [10553], "characters": "\u2939" }, "&larrsim;": { "codepoints": [10611], "characters": "\u2973" }, "&larrtl;": { "codepoints": [8610], "characters": "\u21A2" }, "&lat;": { "codepoints": [10923], "characters": "\u2AAB" }, "&latail;": { "codepoints": [10521], "characters": "\u2919" }, "&late;": { "codepoints": [10925], "characters": "\u2AAD" }, "&lates;": { "codepoints": [10925, 65024], "characters": "\u2AAD\uFE00" }, "&lbarr;": { "codepoints": [10508], "characters": "\u290C" }, "&lbbrk;": { "codepoints": [10098], "characters": "\u2772" }, "&lbrace;": { "codepoints": [123], "characters": "\u007B" }, "&lbrack;": { "codepoints": [91], "characters": "\u005B" }, "&lbrke;": { "codepoints": [10635], "characters": "\u298B" }, "&lbrksld;": { "codepoints": [10639], "characters": "\u298F" }, "&lbrkslu;": { "codepoints": [10637], "characters": "\u298D" }, "&lcaron;": { "codepoints": [318], "characters": "\u013E" }, "&lcedil;": { "codepoints": [316], "characters": "\u013C" }, "&lceil;": { "codepoints": [8968], "characters": "\u2308" }, "&lcub;": { "codepoints": [123], "characters": "\u007B" }, "&lcy;": { "codepoints": [1083], "characters": "\u043B" }, "&ldca;": { "codepoints": [10550], "characters": "\u2936" }, "&ldquo;": { "codepoints": [8220], "characters": "\u201C" }, "&ldquor;": { "codepoints": [8222], "characters": "\u201E" }, "&ldrdhar;": { "codepoints": [10599], "characters": "\u2967" }, "&ldrushar;": { "codepoints": [10571], "characters": "\u294B" }, "&ldsh;": { "codepoints": [8626], "characters": "\u21B2" }, "&le;": { "codepoints": [8804], "characters": "\u2264" }, "&leftarrow;": { "codepoints": [8592], "characters": "\u2190" }, "&leftarrowtail;": { "codepoints": [8610], "characters": "\u21A2" }, "&leftharpoondown;": { "codepoints": [8637], "characters": "\u21BD" }, "&leftharpoonup;": { "codepoints": [8636], "characters": "\u21BC" }, "&leftleftarrows;": { "codepoints": [8647], "characters": "\u21C7" }, "&leftrightarrow;": { "codepoints": [8596], "characters": "\u2194" }, "&leftrightarrows;": { "codepoints": [8646], "characters": "\u21C6" }, "&leftrightharpoons;": { "codepoints": [8651], "characters": "\u21CB" }, "&leftrightsquigarrow;": { "codepoints": [8621], "characters": "\u21AD" }, "&leftthreetimes;": { "codepoints": [8907], "characters": "\u22CB" }, "&leg;": { "codepoints": [8922], "characters": "\u22DA" }, "&leq;": { "codepoints": [8804], "characters": "\u2264" }, "&leqq;": { "codepoints": [8806], "characters": "\u2266" }, "&leqslant;": { "codepoints": [10877], "characters": "\u2A7D" }, "&les;": { "codepoints": [10877], "characters": "\u2A7D" }, "&lescc;": { "codepoints": [10920], "characters": "\u2AA8" }, "&lesdot;": { "codepoints": [10879], "characters": "\u2A7F" }, "&lesdoto;": { "codepoints": [10881], "characters": "\u2A81" }, "&lesdotor;": { "codepoints": [10883], "characters": "\u2A83" }, "&lesg;": { "codepoints": [8922, 65024], "characters": "\u22DA\uFE00" }, "&lesges;": { "codepoints": [10899], "characters": "\u2A93" }, "&lessapprox;": { "codepoints": [10885], "characters": "\u2A85" }, "&lessdot;": { "codepoints": [8918], "characters": "\u22D6" }, "&lesseqgtr;": { "codepoints": [8922], "characters": "\u22DA" }, "&lesseqqgtr;": { "codepoints": [10891], "characters": "\u2A8B" }, "&lessgtr;": { "codepoints": [8822], "characters": "\u2276" }, "&lesssim;": { "codepoints": [8818], "characters": "\u2272" }, "&lfisht;": { "codepoints": [10620], "characters": "\u297C" }, "&lfloor;": { "codepoints": [8970], "characters": "\u230A" }, "&lfr;": { "codepoints": [120105], "characters": "\uD835\uDD29" }, "&lg;": { "codepoints": [8822], "characters": "\u2276" }, "&lgE;": { "codepoints": [10897], "characters": "\u2A91" }, "&lhard;": { "codepoints": [8637], "characters": "\u21BD" }, "&lharu;": { "codepoints": [8636], "characters": "\u21BC" }, "&lharul;": { "codepoints": [10602], "characters": "\u296A" }, "&lhblk;": { "codepoints": [9604], "characters": "\u2584" }, "&ljcy;": { "codepoints": [1113], "characters": "\u0459" }, "&ll;": { "codepoints": [8810], "characters": "\u226A" }, "&llarr;": { "codepoints": [8647], "characters": "\u21C7" }, "&llcorner;": { "codepoints": [8990], "characters": "\u231E" }, "&llhard;": { "codepoints": [10603], "characters": "\u296B" }, "&lltri;": { "codepoints": [9722], "characters": "\u25FA" }, "&lmidot;": { "codepoints": [320], "characters": "\u0140" }, "&lmoust;": { "codepoints": [9136], "characters": "\u23B0" }, "&lmoustache;": { "codepoints": [9136], "characters": "\u23B0" }, "&lnE;": { "codepoints": [8808], "characters": "\u2268" }, "&lnap;": { "codepoints": [10889], "characters": "\u2A89" }, "&lnapprox;": { "codepoints": [10889], "characters": "\u2A89" }, "&lne;": { "codepoints": [10887], "characters": "\u2A87" }, "&lneq;": { "codepoints": [10887], "characters": "\u2A87" }, "&lneqq;": { "codepoints": [8808], "characters": "\u2268" }, "&lnsim;": { "codepoints": [8934], "characters": "\u22E6" }, "&loang;": { "codepoints": [10220], "characters": "\u27EC" }, "&loarr;": { "codepoints": [8701], "characters": "\u21FD" }, "&lobrk;": { "codepoints": [10214], "characters": "\u27E6" }, "&longleftarrow;": { "codepoints": [10229], "characters": "\u27F5" }, "&longleftrightarrow;": { "codepoints": [10231], "characters": "\u27F7" }, "&longmapsto;": { "codepoints": [10236], "characters": "\u27FC" }, "&longrightarrow;": { "codepoints": [10230], "characters": "\u27F6" }, "&looparrowleft;": { "codepoints": [8619], "characters": "\u21AB" }, "&looparrowright;": { "codepoints": [8620], "characters": "\u21AC" }, "&lopar;": { "codepoints": [10629], "characters": "\u2985" }, "&lopf;": { "codepoints": [120157], "characters": "\uD835\uDD5D" }, "&loplus;": { "codepoints": [10797], "characters": "\u2A2D" }, "&lotimes;": { "codepoints": [10804], "characters": "\u2A34" }, "&lowast;": { "codepoints": [8727], "characters": "\u2217" }, "&lowbar;": { "codepoints": [95], "characters": "\u005F" }, "&loz;": { "codepoints": [9674], "characters": "\u25CA" }, "&lozenge;": { "codepoints": [9674], "characters": "\u25CA" }, "&lozf;": { "codepoints": [10731], "characters": "\u29EB" }, "&lpar;": { "codepoints": [40], "characters": "\u0028" }, "&lparlt;": { "codepoints": [10643], "characters": "\u2993" }, "&lrarr;": { "codepoints": [8646], "characters": "\u21C6" }, "&lrcorner;": { "codepoints": [8991], "characters": "\u231F" }, "&lrhar;": { "codepoints": [8651], "characters": "\u21CB" }, "&lrhard;": { "codepoints": [10605], "characters": "\u296D" }, "&lrm;": { "codepoints": [8206], "characters": "\u200E" }, "&lrtri;": { "codepoints": [8895], "characters": "\u22BF" }, "&lsaquo;": { "codepoints": [8249], "characters": "\u2039" }, "&lscr;": { "codepoints": [120001], "characters": "\uD835\uDCC1" }, "&lsh;": { "codepoints": [8624], "characters": "\u21B0" }, "&lsim;": { "codepoints": [8818], "characters": "\u2272" }, "&lsime;": { "codepoints": [10893], "characters": "\u2A8D" }, "&lsimg;": { "codepoints": [10895], "characters": "\u2A8F" }, "&lsqb;": { "codepoints": [91], "characters": "\u005B" }, "&lsquo;": { "codepoints": [8216], "characters": "\u2018" }, "&lsquor;": { "codepoints": [8218], "characters": "\u201A" }, "&lstrok;": { "codepoints": [322], "characters": "\u0142" }, "&lt": { "codepoints": [60], "characters": "\u003C" }, "&lt;": { "codepoints": [60], "characters": "\u003C" }, "&ltcc;": { "codepoints": [10918], "characters": "\u2AA6" }, "&ltcir;": { "codepoints": [10873], "characters": "\u2A79" }, "&ltdot;": { "codepoints": [8918], "characters": "\u22D6" }, "&lthree;": { "codepoints": [8907], "characters": "\u22CB" }, "&ltimes;": { "codepoints": [8905], "characters": "\u22C9" }, "&ltlarr;": { "codepoints": [10614], "characters": "\u2976" }, "&ltquest;": { "codepoints": [10875], "characters": "\u2A7B" }, "&ltrPar;": { "codepoints": [10646], "characters": "\u2996" }, "&ltri;": { "codepoints": [9667], "characters": "\u25C3" }, "&ltrie;": { "codepoints": [8884], "characters": "\u22B4" }, "&ltrif;": { "codepoints": [9666], "characters": "\u25C2" }, "&lurdshar;": { "codepoints": [10570], "characters": "\u294A" }, "&luruhar;": { "codepoints": [10598], "characters": "\u2966" }, "&lvertneqq;": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" }, "&lvnE;": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" }, "&mDDot;": { "codepoints": [8762], "characters": "\u223A" }, "&macr": { "codepoints": [175], "characters": "\u00AF" }, "&macr;": { "codepoints": [175], "characters": "\u00AF" }, "&male;": { "codepoints": [9794], "characters": "\u2642" }, "&malt;": { "codepoints": [10016], "characters": "\u2720" }, "&maltese;": { "codepoints": [10016], "characters": "\u2720" }, "&map;": { "codepoints": [8614], "characters": "\u21A6" }, "&mapsto;": { "codepoints": [8614], "characters": "\u21A6" }, "&mapstodown;": { "codepoints": [8615], "characters": "\u21A7" }, "&mapstoleft;": { "codepoints": [8612], "characters": "\u21A4" }, "&mapstoup;": { "codepoints": [8613], "characters": "\u21A5" }, "&marker;": { "codepoints": [9646], "characters": "\u25AE" }, "&mcomma;": { "codepoints": [10793], "characters": "\u2A29" }, "&mcy;": { "codepoints": [1084], "characters": "\u043C" }, "&mdash;": { "codepoints": [8212], "characters": "\u2014" }, "&measuredangle;": { "codepoints": [8737], "characters": "\u2221" }, "&mfr;": { "codepoints": [120106], "characters": "\uD835\uDD2A" }, "&mho;": { "codepoints": [8487], "characters": "\u2127" }, "&micro": { "codepoints": [181], "characters": "\u00B5" }, "&micro;": { "codepoints": [181], "characters": "\u00B5" }, "&mid;": { "codepoints": [8739], "characters": "\u2223" }, "&midast;": { "codepoints": [42], "characters": "\u002A" }, "&midcir;": { "codepoints": [10992], "characters": "\u2AF0" }, "&middot": { "codepoints": [183], "characters": "\u00B7" }, "&middot;": { "codepoints": [183], "characters": "\u00B7" }, "&minus;": { "codepoints": [8722], "characters": "\u2212" }, "&minusb;": { "codepoints": [8863], "characters": "\u229F" }, "&minusd;": { "codepoints": [8760], "characters": "\u2238" }, "&minusdu;": { "codepoints": [10794], "characters": "\u2A2A" }, "&mlcp;": { "codepoints": [10971], "characters": "\u2ADB" }, "&mldr;": { "codepoints": [8230], "characters": "\u2026" }, "&mnplus;": { "codepoints": [8723], "characters": "\u2213" }, "&models;": { "codepoints": [8871], "characters": "\u22A7" }, "&mopf;": { "codepoints": [120158], "characters": "\uD835\uDD5E" }, "&mp;": { "codepoints": [8723], "characters": "\u2213" }, "&mscr;": { "codepoints": [120002], "characters": "\uD835\uDCC2" }, "&mstpos;": { "codepoints": [8766], "characters": "\u223E" }, "&mu;": { "codepoints": [956], "characters": "\u03BC" }, "&multimap;": { "codepoints": [8888], "characters": "\u22B8" }, "&mumap;": { "codepoints": [8888], "characters": "\u22B8" }, "&nGg;": { "codepoints": [8921, 824], "characters": "\u22D9\u0338" }, "&nGt;": { "codepoints": [8811, 8402], "characters": "\u226B\u20D2" }, "&nGtv;": { "codepoints": [8811, 824], "characters": "\u226B\u0338" }, "&nLeftarrow;": { "codepoints": [8653], "characters": "\u21CD" }, "&nLeftrightarrow;": { "codepoints": [8654], "characters": "\u21CE" }, "&nLl;": { "codepoints": [8920, 824], "characters": "\u22D8\u0338" }, "&nLt;": { "codepoints": [8810, 8402], "characters": "\u226A\u20D2" }, "&nLtv;": { "codepoints": [8810, 824], "characters": "\u226A\u0338" }, "&nRightarrow;": { "codepoints": [8655], "characters": "\u21CF" }, "&nVDash;": { "codepoints": [8879], "characters": "\u22AF" }, "&nVdash;": { "codepoints": [8878], "characters": "\u22AE" }, "&nabla;": { "codepoints": [8711], "characters": "\u2207" }, "&nacute;": { "codepoints": [324], "characters": "\u0144" }, "&nang;": { "codepoints": [8736, 8402], "characters": "\u2220\u20D2" }, "&nap;": { "codepoints": [8777], "characters": "\u2249" }, "&napE;": { "codepoints": [10864, 824], "characters": "\u2A70\u0338" }, "&napid;": { "codepoints": [8779, 824], "characters": "\u224B\u0338" }, "&napos;": { "codepoints": [329], "characters": "\u0149" }, "&napprox;": { "codepoints": [8777], "characters": "\u2249" }, "&natur;": { "codepoints": [9838], "characters": "\u266E" }, "&natural;": { "codepoints": [9838], "characters": "\u266E" }, "&naturals;": { "codepoints": [8469], "characters": "\u2115" }, "&nbsp": { "codepoints": [160], "characters": "\u00A0" }, "&nbsp;": { "codepoints": [160], "characters": "\u00A0" }, "&nbump;": { "codepoints": [8782, 824], "characters": "\u224E\u0338" }, "&nbumpe;": { "codepoints": [8783, 824], "characters": "\u224F\u0338" }, "&ncap;": { "codepoints": [10819], "characters": "\u2A43" }, "&ncaron;": { "codepoints": [328], "characters": "\u0148" }, "&ncedil;": { "codepoints": [326], "characters": "\u0146" }, "&ncong;": { "codepoints": [8775], "characters": "\u2247" }, "&ncongdot;": { "codepoints": [10861, 824], "characters": "\u2A6D\u0338" }, "&ncup;": { "codepoints": [10818], "characters": "\u2A42" }, "&ncy;": { "codepoints": [1085], "characters": "\u043D" }, "&ndash;": { "codepoints": [8211], "characters": "\u2013" }, "&ne;": { "codepoints": [8800], "characters": "\u2260" }, "&neArr;": { "codepoints": [8663], "characters": "\u21D7" }, "&nearhk;": { "codepoints": [10532], "characters": "\u2924" }, "&nearr;": { "codepoints": [8599], "characters": "\u2197" }, "&nearrow;": { "codepoints": [8599], "characters": "\u2197" }, "&nedot;": { "codepoints": [8784, 824], "characters": "\u2250\u0338" }, "&nequiv;": { "codepoints": [8802], "characters": "\u2262" }, "&nesear;": { "codepoints": [10536], "characters": "\u2928" }, "&nesim;": { "codepoints": [8770, 824], "characters": "\u2242\u0338" }, "&nexist;": { "codepoints": [8708], "characters": "\u2204" }, "&nexists;": { "codepoints": [8708], "characters": "\u2204" }, "&nfr;": { "codepoints": [120107], "characters": "\uD835\uDD2B" }, "&ngE;": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, "&nge;": { "codepoints": [8817], "characters": "\u2271" }, "&ngeq;": { "codepoints": [8817], "characters": "\u2271" }, "&ngeqq;": { "codepoints": [8807, 824], "characters": "\u2267\u0338" }, "&ngeqslant;": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, "&nges;": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" }, "&ngsim;": { "codepoints": [8821], "characters": "\u2275" }, "&ngt;": { "codepoints": [8815], "characters": "\u226F" }, "&ngtr;": { "codepoints": [8815], "characters": "\u226F" }, "&nhArr;": { "codepoints": [8654], "characters": "\u21CE" }, "&nharr;": { "codepoints": [8622], "characters": "\u21AE" }, "&nhpar;": { "codepoints": [10994], "characters": "\u2AF2" }, "&ni;": { "codepoints": [8715], "characters": "\u220B" }, "&nis;": { "codepoints": [8956], "characters": "\u22FC" }, "&nisd;": { "codepoints": [8954], "characters": "\u22FA" }, "&niv;": { "codepoints": [8715], "characters": "\u220B" }, "&njcy;": { "codepoints": [1114], "characters": "\u045A" }, "&nlArr;": { "codepoints": [8653], "characters": "\u21CD" }, "&nlE;": { "codepoints": [8806, 824], "characters": "\u2266\u0338" }, "&nlarr;": { "codepoints": [8602], "characters": "\u219A" }, "&nldr;": { "codepoints": [8229], "characters": "\u2025" }, "&nle;": { "codepoints": [8816], "characters": "\u2270" }, "&nleftarrow;": { "codepoints": [8602], "characters": "\u219A" }, "&nleftrightarrow;": { "codepoints": [8622], "characters": "\u21AE" }, "&nleq;": { "codepoints": [8816], "characters": "\u2270" }, "&nleqq;": { "codepoints": [8806, 824], "characters": "\u2266\u0338" }, "&nleqslant;": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, "&nles;": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" }, "&nless;": { "codepoints": [8814], "characters": "\u226E" }, "&nlsim;": { "codepoints": [8820], "characters": "\u2274" }, "&nlt;": { "codepoints": [8814], "characters": "\u226E" }, "&nltri;": { "codepoints": [8938], "characters": "\u22EA" }, "&nltrie;": { "codepoints": [8940], "characters": "\u22EC" }, "&nmid;": { "codepoints": [8740], "characters": "\u2224" }, "&nopf;": { "codepoints": [120159], "characters": "\uD835\uDD5F" }, "&not": { "codepoints": [172], "characters": "\u00AC" }, "&not;": { "codepoints": [172], "characters": "\u00AC" }, "&notin;": { "codepoints": [8713], "characters": "\u2209" }, "&notinE;": { "codepoints": [8953, 824], "characters": "\u22F9\u0338" }, "&notindot;": { "codepoints": [8949, 824], "characters": "\u22F5\u0338" }, "&notinva;": { "codepoints": [8713], "characters": "\u2209" }, "&notinvb;": { "codepoints": [8951], "characters": "\u22F7" }, "&notinvc;": { "codepoints": [8950], "characters": "\u22F6" }, "&notni;": { "codepoints": [8716], "characters": "\u220C" }, "&notniva;": { "codepoints": [8716], "characters": "\u220C" }, "&notnivb;": { "codepoints": [8958], "characters": "\u22FE" }, "&notnivc;": { "codepoints": [8957], "characters": "\u22FD" }, "&npar;": { "codepoints": [8742], "characters": "\u2226" }, "&nparallel;": { "codepoints": [8742], "characters": "\u2226" }, "&nparsl;": { "codepoints": [11005, 8421], "characters": "\u2AFD\u20E5" }, "&npart;": { "codepoints": [8706, 824], "characters": "\u2202\u0338" }, "&npolint;": { "codepoints": [10772], "characters": "\u2A14" }, "&npr;": { "codepoints": [8832], "characters": "\u2280" }, "&nprcue;": { "codepoints": [8928], "characters": "\u22E0" }, "&npre;": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, "&nprec;": { "codepoints": [8832], "characters": "\u2280" }, "&npreceq;": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" }, "&nrArr;": { "codepoints": [8655], "characters": "\u21CF" }, "&nrarr;": { "codepoints": [8603], "characters": "\u219B" }, "&nrarrc;": { "codepoints": [10547, 824], "characters": "\u2933\u0338" }, "&nrarrw;": { "codepoints": [8605, 824], "characters": "\u219D\u0338" }, "&nrightarrow;": { "codepoints": [8603], "characters": "\u219B" }, "&nrtri;": { "codepoints": [8939], "characters": "\u22EB" }, "&nrtrie;": { "codepoints": [8941], "characters": "\u22ED" }, "&nsc;": { "codepoints": [8833], "characters": "\u2281" }, "&nsccue;": { "codepoints": [8929], "characters": "\u22E1" }, "&nsce;": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, "&nscr;": { "codepoints": [120003], "characters": "\uD835\uDCC3" }, "&nshortmid;": { "codepoints": [8740], "characters": "\u2224" }, "&nshortparallel;": { "codepoints": [8742], "characters": "\u2226" }, "&nsim;": { "codepoints": [8769], "characters": "\u2241" }, "&nsime;": { "codepoints": [8772], "characters": "\u2244" }, "&nsimeq;": { "codepoints": [8772], "characters": "\u2244" }, "&nsmid;": { "codepoints": [8740], "characters": "\u2224" }, "&nspar;": { "codepoints": [8742], "characters": "\u2226" }, "&nsqsube;": { "codepoints": [8930], "characters": "\u22E2" }, "&nsqsupe;": { "codepoints": [8931], "characters": "\u22E3" }, "&nsub;": { "codepoints": [8836], "characters": "\u2284" }, "&nsubE;": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" }, "&nsube;": { "codepoints": [8840], "characters": "\u2288" }, "&nsubset;": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, "&nsubseteq;": { "codepoints": [8840], "characters": "\u2288" }, "&nsubseteqq;": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" }, "&nsucc;": { "codepoints": [8833], "characters": "\u2281" }, "&nsucceq;": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" }, "&nsup;": { "codepoints": [8837], "characters": "\u2285" }, "&nsupE;": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" }, "&nsupe;": { "codepoints": [8841], "characters": "\u2289" }, "&nsupset;": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, "&nsupseteq;": { "codepoints": [8841], "characters": "\u2289" }, "&nsupseteqq;": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" }, "&ntgl;": { "codepoints": [8825], "characters": "\u2279" }, "&ntilde": { "codepoints": [241], "characters": "\u00F1" }, "&ntilde;": { "codepoints": [241], "characters": "\u00F1" }, "&ntlg;": { "codepoints": [8824], "characters": "\u2278" }, "&ntriangleleft;": { "codepoints": [8938], "characters": "\u22EA" }, "&ntrianglelefteq;": { "codepoints": [8940], "characters": "\u22EC" }, "&ntriangleright;": { "codepoints": [8939], "characters": "\u22EB" }, "&ntrianglerighteq;": { "codepoints": [8941], "characters": "\u22ED" }, "&nu;": { "codepoints": [957], "characters": "\u03BD" }, "&num;": { "codepoints": [35], "characters": "\u0023" }, "&numero;": { "codepoints": [8470], "characters": "\u2116" }, "&numsp;": { "codepoints": [8199], "characters": "\u2007" }, "&nvDash;": { "codepoints": [8877], "characters": "\u22AD" }, "&nvHarr;": { "codepoints": [10500], "characters": "\u2904" }, "&nvap;": { "codepoints": [8781, 8402], "characters": "\u224D\u20D2" }, "&nvdash;": { "codepoints": [8876], "characters": "\u22AC" }, "&nvge;": { "codepoints": [8805, 8402], "characters": "\u2265\u20D2" }, "&nvgt;": { "codepoints": [62, 8402], "characters": "\u003E\u20D2" }, "&nvinfin;": { "codepoints": [10718], "characters": "\u29DE" }, "&nvlArr;": { "codepoints": [10498], "characters": "\u2902" }, "&nvle;": { "codepoints": [8804, 8402], "characters": "\u2264\u20D2" }, "&nvlt;": { "codepoints": [60, 8402], "characters": "\u003C\u20D2" }, "&nvltrie;": { "codepoints": [8884, 8402], "characters": "\u22B4\u20D2" }, "&nvrArr;": { "codepoints": [10499], "characters": "\u2903" }, "&nvrtrie;": { "codepoints": [8885, 8402], "characters": "\u22B5\u20D2" }, "&nvsim;": { "codepoints": [8764, 8402], "characters": "\u223C\u20D2" }, "&nwArr;": { "codepoints": [8662], "characters": "\u21D6" }, "&nwarhk;": { "codepoints": [10531], "characters": "\u2923" }, "&nwarr;": { "codepoints": [8598], "characters": "\u2196" }, "&nwarrow;": { "codepoints": [8598], "characters": "\u2196" }, "&nwnear;": { "codepoints": [10535], "characters": "\u2927" }, "&oS;": { "codepoints": [9416], "characters": "\u24C8" }, "&oacute": { "codepoints": [243], "characters": "\u00F3" }, "&oacute;": { "codepoints": [243], "characters": "\u00F3" }, "&oast;": { "codepoints": [8859], "characters": "\u229B" }, "&ocir;": { "codepoints": [8858], "characters": "\u229A" }, "&ocirc": { "codepoints": [244], "characters": "\u00F4" }, "&ocirc;": { "codepoints": [244], "characters": "\u00F4" }, "&ocy;": { "codepoints": [1086], "characters": "\u043E" }, "&odash;": { "codepoints": [8861], "characters": "\u229D" }, "&odblac;": { "codepoints": [337], "characters": "\u0151" }, "&odiv;": { "codepoints": [10808], "characters": "\u2A38" }, "&odot;": { "codepoints": [8857], "characters": "\u2299" }, "&odsold;": { "codepoints": [10684], "characters": "\u29BC" }, "&oelig;": { "codepoints": [339], "characters": "\u0153" }, "&ofcir;": { "codepoints": [10687], "characters": "\u29BF" }, "&ofr;": { "codepoints": [120108], "characters": "\uD835\uDD2C" }, "&ogon;": { "codepoints": [731], "characters": "\u02DB" }, "&ograve": { "codepoints": [242], "characters": "\u00F2" }, "&ograve;": { "codepoints": [242], "characters": "\u00F2" }, "&ogt;": { "codepoints": [10689], "characters": "\u29C1" }, "&ohbar;": { "codepoints": [10677], "characters": "\u29B5" }, "&ohm;": { "codepoints": [937], "characters": "\u03A9" }, "&oint;": { "codepoints": [8750], "characters": "\u222E" }, "&olarr;": { "codepoints": [8634], "characters": "\u21BA" }, "&olcir;": { "codepoints": [10686], "characters": "\u29BE" }, "&olcross;": { "codepoints": [10683], "characters": "\u29BB" }, "&oline;": { "codepoints": [8254], "characters": "\u203E" }, "&olt;": { "codepoints": [10688], "characters": "\u29C0" }, "&omacr;": { "codepoints": [333], "characters": "\u014D" }, "&omega;": { "codepoints": [969], "characters": "\u03C9" }, "&omicron;": { "codepoints": [959], "characters": "\u03BF" }, "&omid;": { "codepoints": [10678], "characters": "\u29B6" }, "&ominus;": { "codepoints": [8854], "characters": "\u2296" }, "&oopf;": { "codepoints": [120160], "characters": "\uD835\uDD60" }, "&opar;": { "codepoints": [10679], "characters": "\u29B7" }, "&operp;": { "codepoints": [10681], "characters": "\u29B9" }, "&oplus;": { "codepoints": [8853], "characters": "\u2295" }, "&or;": { "codepoints": [8744], "characters": "\u2228" }, "&orarr;": { "codepoints": [8635], "characters": "\u21BB" }, "&ord;": { "codepoints": [10845], "characters": "\u2A5D" }, "&order;": { "codepoints": [8500], "characters": "\u2134" }, "&orderof;": { "codepoints": [8500], "characters": "\u2134" }, "&ordf": { "codepoints": [170], "characters": "\u00AA" }, "&ordf;": { "codepoints": [170], "characters": "\u00AA" }, "&ordm": { "codepoints": [186], "characters": "\u00BA" }, "&ordm;": { "codepoints": [186], "characters": "\u00BA" }, "&origof;": { "codepoints": [8886], "characters": "\u22B6" }, "&oror;": { "codepoints": [10838], "characters": "\u2A56" }, "&orslope;": { "codepoints": [10839], "characters": "\u2A57" }, "&orv;": { "codepoints": [10843], "characters": "\u2A5B" }, "&oscr;": { "codepoints": [8500], "characters": "\u2134" }, "&oslash": { "codepoints": [248], "characters": "\u00F8" }, "&oslash;": { "codepoints": [248], "characters": "\u00F8" }, "&osol;": { "codepoints": [8856], "characters": "\u2298" }, "&otilde": { "codepoints": [245], "characters": "\u00F5" }, "&otilde;": { "codepoints": [245], "characters": "\u00F5" }, "&otimes;": { "codepoints": [8855], "characters": "\u2297" }, "&otimesas;": { "codepoints": [10806], "characters": "\u2A36" }, "&ouml": { "codepoints": [246], "characters": "\u00F6" }, "&ouml;": { "codepoints": [246], "characters": "\u00F6" }, "&ovbar;": { "codepoints": [9021], "characters": "\u233D" }, "&par;": { "codepoints": [8741], "characters": "\u2225" }, "&para": { "codepoints": [182], "characters": "\u00B6" }, "&para;": { "codepoints": [182], "characters": "\u00B6" }, "&parallel;": { "codepoints": [8741], "characters": "\u2225" }, "&parsim;": { "codepoints": [10995], "characters": "\u2AF3" }, "&parsl;": { "codepoints": [11005], "characters": "\u2AFD" }, "&part;": { "codepoints": [8706], "characters": "\u2202" }, "&pcy;": { "codepoints": [1087], "characters": "\u043F" }, "&percnt;": { "codepoints": [37], "characters": "\u0025" }, "&period;": { "codepoints": [46], "characters": "\u002E" }, "&permil;": { "codepoints": [8240], "characters": "\u2030" }, "&perp;": { "codepoints": [8869], "characters": "\u22A5" }, "&pertenk;": { "codepoints": [8241], "characters": "\u2031" }, "&pfr;": { "codepoints": [120109], "characters": "\uD835\uDD2D" }, "&phi;": { "codepoints": [966], "characters": "\u03C6" }, "&phiv;": { "codepoints": [981], "characters": "\u03D5" }, "&phmmat;": { "codepoints": [8499], "characters": "\u2133" }, "&phone;": { "codepoints": [9742], "characters": "\u260E" }, "&pi;": { "codepoints": [960], "characters": "\u03C0" }, "&pitchfork;": { "codepoints": [8916], "characters": "\u22D4" }, "&piv;": { "codepoints": [982], "characters": "\u03D6" }, "&planck;": { "codepoints": [8463], "characters": "\u210F" }, "&planckh;": { "codepoints": [8462], "characters": "\u210E" }, "&plankv;": { "codepoints": [8463], "characters": "\u210F" }, "&plus;": { "codepoints": [43], "characters": "\u002B" }, "&plusacir;": { "codepoints": [10787], "characters": "\u2A23" }, "&plusb;": { "codepoints": [8862], "characters": "\u229E" }, "&pluscir;": { "codepoints": [10786], "characters": "\u2A22" }, "&plusdo;": { "codepoints": [8724], "characters": "\u2214" }, "&plusdu;": { "codepoints": [10789], "characters": "\u2A25" }, "&pluse;": { "codepoints": [10866], "characters": "\u2A72" }, "&plusmn": { "codepoints": [177], "characters": "\u00B1" }, "&plusmn;": { "codepoints": [177], "characters": "\u00B1" }, "&plussim;": { "codepoints": [10790], "characters": "\u2A26" }, "&plustwo;": { "codepoints": [10791], "characters": "\u2A27" }, "&pm;": { "codepoints": [177], "characters": "\u00B1" }, "&pointint;": { "codepoints": [10773], "characters": "\u2A15" }, "&popf;": { "codepoints": [120161], "characters": "\uD835\uDD61" }, "&pound": { "codepoints": [163], "characters": "\u00A3" }, "&pound;": { "codepoints": [163], "characters": "\u00A3" }, "&pr;": { "codepoints": [8826], "characters": "\u227A" }, "&prE;": { "codepoints": [10931], "characters": "\u2AB3" }, "&prap;": { "codepoints": [10935], "characters": "\u2AB7" }, "&prcue;": { "codepoints": [8828], "characters": "\u227C" }, "&pre;": { "codepoints": [10927], "characters": "\u2AAF" }, "&prec;": { "codepoints": [8826], "characters": "\u227A" }, "&precapprox;": { "codepoints": [10935], "characters": "\u2AB7" }, "&preccurlyeq;": { "codepoints": [8828], "characters": "\u227C" }, "&preceq;": { "codepoints": [10927], "characters": "\u2AAF" }, "&precnapprox;": { "codepoints": [10937], "characters": "\u2AB9" }, "&precneqq;": { "codepoints": [10933], "characters": "\u2AB5" }, "&precnsim;": { "codepoints": [8936], "characters": "\u22E8" }, "&precsim;": { "codepoints": [8830], "characters": "\u227E" }, "&prime;": { "codepoints": [8242], "characters": "\u2032" }, "&primes;": { "codepoints": [8473], "characters": "\u2119" }, "&prnE;": { "codepoints": [10933], "characters": "\u2AB5" }, "&prnap;": { "codepoints": [10937], "characters": "\u2AB9" }, "&prnsim;": { "codepoints": [8936], "characters": "\u22E8" }, "&prod;": { "codepoints": [8719], "characters": "\u220F" }, "&profalar;": { "codepoints": [9006], "characters": "\u232E" }, "&profline;": { "codepoints": [8978], "characters": "\u2312" }, "&profsurf;": { "codepoints": [8979], "characters": "\u2313" }, "&prop;": { "codepoints": [8733], "characters": "\u221D" }, "&propto;": { "codepoints": [8733], "characters": "\u221D" }, "&prsim;": { "codepoints": [8830], "characters": "\u227E" }, "&prurel;": { "codepoints": [8880], "characters": "\u22B0" }, "&pscr;": { "codepoints": [120005], "characters": "\uD835\uDCC5" }, "&psi;": { "codepoints": [968], "characters": "\u03C8" }, "&puncsp;": { "codepoints": [8200], "characters": "\u2008" }, "&qfr;": { "codepoints": [120110], "characters": "\uD835\uDD2E" }, "&qint;": { "codepoints": [10764], "characters": "\u2A0C" }, "&qopf;": { "codepoints": [120162], "characters": "\uD835\uDD62" }, "&qprime;": { "codepoints": [8279], "characters": "\u2057" }, "&qscr;": { "codepoints": [120006], "characters": "\uD835\uDCC6" }, "&quaternions;": { "codepoints": [8461], "characters": "\u210D" }, "&quatint;": { "codepoints": [10774], "characters": "\u2A16" }, "&quest;": { "codepoints": [63], "characters": "\u003F" }, "&questeq;": { "codepoints": [8799], "characters": "\u225F" }, "&quot": { "codepoints": [34], "characters": "\u0022" }, "&quot;": { "codepoints": [34], "characters": "\u0022" }, "&rAarr;": { "codepoints": [8667], "characters": "\u21DB" }, "&rArr;": { "codepoints": [8658], "characters": "\u21D2" }, "&rAtail;": { "codepoints": [10524], "characters": "\u291C" }, "&rBarr;": { "codepoints": [10511], "characters": "\u290F" }, "&rHar;": { "codepoints": [10596], "characters": "\u2964" }, "&race;": { "codepoints": [8765, 817], "characters": "\u223D\u0331" }, "&racute;": { "codepoints": [341], "characters": "\u0155" }, "&radic;": { "codepoints": [8730], "characters": "\u221A" }, "&raemptyv;": { "codepoints": [10675], "characters": "\u29B3" }, "&rang;": { "codepoints": [10217], "characters": "\u27E9" }, "&rangd;": { "codepoints": [10642], "characters": "\u2992" }, "&range;": { "codepoints": [10661], "characters": "\u29A5" }, "&rangle;": { "codepoints": [10217], "characters": "\u27E9" }, "&raquo": { "codepoints": [187], "characters": "\u00BB" }, "&raquo;": { "codepoints": [187], "characters": "\u00BB" }, "&rarr;": { "codepoints": [8594], "characters": "\u2192" }, "&rarrap;": { "codepoints": [10613], "characters": "\u2975" }, "&rarrb;": { "codepoints": [8677], "characters": "\u21E5" }, "&rarrbfs;": { "codepoints": [10528], "characters": "\u2920" }, "&rarrc;": { "codepoints": [10547], "characters": "\u2933" }, "&rarrfs;": { "codepoints": [10526], "characters": "\u291E" }, "&rarrhk;": { "codepoints": [8618], "characters": "\u21AA" }, "&rarrlp;": { "codepoints": [8620], "characters": "\u21AC" }, "&rarrpl;": { "codepoints": [10565], "characters": "\u2945" }, "&rarrsim;": { "codepoints": [10612], "characters": "\u2974" }, "&rarrtl;": { "codepoints": [8611], "characters": "\u21A3" }, "&rarrw;": { "codepoints": [8605], "characters": "\u219D" }, "&ratail;": { "codepoints": [10522], "characters": "\u291A" }, "&ratio;": { "codepoints": [8758], "characters": "\u2236" }, "&rationals;": { "codepoints": [8474], "characters": "\u211A" }, "&rbarr;": { "codepoints": [10509], "characters": "\u290D" }, "&rbbrk;": { "codepoints": [10099], "characters": "\u2773" }, "&rbrace;": { "codepoints": [125], "characters": "\u007D" }, "&rbrack;": { "codepoints": [93], "characters": "\u005D" }, "&rbrke;": { "codepoints": [10636], "characters": "\u298C" }, "&rbrksld;": { "codepoints": [10638], "characters": "\u298E" }, "&rbrkslu;": { "codepoints": [10640], "characters": "\u2990" }, "&rcaron;": { "codepoints": [345], "characters": "\u0159" }, "&rcedil;": { "codepoints": [343], "characters": "\u0157" }, "&rceil;": { "codepoints": [8969], "characters": "\u2309" }, "&rcub;": { "codepoints": [125], "characters": "\u007D" }, "&rcy;": { "codepoints": [1088], "characters": "\u0440" }, "&rdca;": { "codepoints": [10551], "characters": "\u2937" }, "&rdldhar;": { "codepoints": [10601], "characters": "\u2969" }, "&rdquo;": { "codepoints": [8221], "characters": "\u201D" }, "&rdquor;": { "codepoints": [8221], "characters": "\u201D" }, "&rdsh;": { "codepoints": [8627], "characters": "\u21B3" }, "&real;": { "codepoints": [8476], "characters": "\u211C" }, "&realine;": { "codepoints": [8475], "characters": "\u211B" }, "&realpart;": { "codepoints": [8476], "characters": "\u211C" }, "&reals;": { "codepoints": [8477], "characters": "\u211D" }, "&rect;": { "codepoints": [9645], "characters": "\u25AD" }, "&reg": { "codepoints": [174], "characters": "\u00AE" }, "&reg;": { "codepoints": [174], "characters": "\u00AE" }, "&rfisht;": { "codepoints": [10621], "characters": "\u297D" }, "&rfloor;": { "codepoints": [8971], "characters": "\u230B" }, "&rfr;": { "codepoints": [120111], "characters": "\uD835\uDD2F" }, "&rhard;": { "codepoints": [8641], "characters": "\u21C1" }, "&rharu;": { "codepoints": [8640], "characters": "\u21C0" }, "&rharul;": { "codepoints": [10604], "characters": "\u296C" }, "&rho;": { "codepoints": [961], "characters": "\u03C1" }, "&rhov;": { "codepoints": [1009], "characters": "\u03F1" }, "&rightarrow;": { "codepoints": [8594], "characters": "\u2192" }, "&rightarrowtail;": { "codepoints": [8611], "characters": "\u21A3" }, "&rightharpoondown;": { "codepoints": [8641], "characters": "\u21C1" }, "&rightharpoonup;": { "codepoints": [8640], "characters": "\u21C0" }, "&rightleftarrows;": { "codepoints": [8644], "characters": "\u21C4" }, "&rightleftharpoons;": { "codepoints": [8652], "characters": "\u21CC" }, "&rightrightarrows;": { "codepoints": [8649], "characters": "\u21C9" }, "&rightsquigarrow;": { "codepoints": [8605], "characters": "\u219D" }, "&rightthreetimes;": { "codepoints": [8908], "characters": "\u22CC" }, "&ring;": { "codepoints": [730], "characters": "\u02DA" }, "&risingdotseq;": { "codepoints": [8787], "characters": "\u2253" }, "&rlarr;": { "codepoints": [8644], "characters": "\u21C4" }, "&rlhar;": { "codepoints": [8652], "characters": "\u21CC" }, "&rlm;": { "codepoints": [8207], "characters": "\u200F" }, "&rmoust;": { "codepoints": [9137], "characters": "\u23B1" }, "&rmoustache;": { "codepoints": [9137], "characters": "\u23B1" }, "&rnmid;": { "codepoints": [10990], "characters": "\u2AEE" }, "&roang;": { "codepoints": [10221], "characters": "\u27ED" }, "&roarr;": { "codepoints": [8702], "characters": "\u21FE" }, "&robrk;": { "codepoints": [10215], "characters": "\u27E7" }, "&ropar;": { "codepoints": [10630], "characters": "\u2986" }, "&ropf;": { "codepoints": [120163], "characters": "\uD835\uDD63" }, "&roplus;": { "codepoints": [10798], "characters": "\u2A2E" }, "&rotimes;": { "codepoints": [10805], "characters": "\u2A35" }, "&rpar;": { "codepoints": [41], "characters": "\u0029" }, "&rpargt;": { "codepoints": [10644], "characters": "\u2994" }, "&rppolint;": { "codepoints": [10770], "characters": "\u2A12" }, "&rrarr;": { "codepoints": [8649], "characters": "\u21C9" }, "&rsaquo;": { "codepoints": [8250], "characters": "\u203A" }, "&rscr;": { "codepoints": [120007], "characters": "\uD835\uDCC7" }, "&rsh;": { "codepoints": [8625], "characters": "\u21B1" }, "&rsqb;": { "codepoints": [93], "characters": "\u005D" }, "&rsquo;": { "codepoints": [8217], "characters": "\u2019" }, "&rsquor;": { "codepoints": [8217], "characters": "\u2019" }, "&rthree;": { "codepoints": [8908], "characters": "\u22CC" }, "&rtimes;": { "codepoints": [8906], "characters": "\u22CA" }, "&rtri;": { "codepoints": [9657], "characters": "\u25B9" }, "&rtrie;": { "codepoints": [8885], "characters": "\u22B5" }, "&rtrif;": { "codepoints": [9656], "characters": "\u25B8" }, "&rtriltri;": { "codepoints": [10702], "characters": "\u29CE" }, "&ruluhar;": { "codepoints": [10600], "characters": "\u2968" }, "&rx;": { "codepoints": [8478], "characters": "\u211E" }, "&sacute;": { "codepoints": [347], "characters": "\u015B" }, "&sbquo;": { "codepoints": [8218], "characters": "\u201A" }, "&sc;": { "codepoints": [8827], "characters": "\u227B" }, "&scE;": { "codepoints": [10932], "characters": "\u2AB4" }, "&scap;": { "codepoints": [10936], "characters": "\u2AB8" }, "&scaron;": { "codepoints": [353], "characters": "\u0161" }, "&sccue;": { "codepoints": [8829], "characters": "\u227D" }, "&sce;": { "codepoints": [10928], "characters": "\u2AB0" }, "&scedil;": { "codepoints": [351], "characters": "\u015F" }, "&scirc;": { "codepoints": [349], "characters": "\u015D" }, "&scnE;": { "codepoints": [10934], "characters": "\u2AB6" }, "&scnap;": { "codepoints": [10938], "characters": "\u2ABA" }, "&scnsim;": { "codepoints": [8937], "characters": "\u22E9" }, "&scpolint;": { "codepoints": [10771], "characters": "\u2A13" }, "&scsim;": { "codepoints": [8831], "characters": "\u227F" }, "&scy;": { "codepoints": [1089], "characters": "\u0441" }, "&sdot;": { "codepoints": [8901], "characters": "\u22C5" }, "&sdotb;": { "codepoints": [8865], "characters": "\u22A1" }, "&sdote;": { "codepoints": [10854], "characters": "\u2A66" }, "&seArr;": { "codepoints": [8664], "characters": "\u21D8" }, "&searhk;": { "codepoints": [10533], "characters": "\u2925" }, "&searr;": { "codepoints": [8600], "characters": "\u2198" }, "&searrow;": { "codepoints": [8600], "characters": "\u2198" }, "&sect": { "codepoints": [167], "characters": "\u00A7" }, "&sect;": { "codepoints": [167], "characters": "\u00A7" }, "&semi;": { "codepoints": [59], "characters": "\u003B" }, "&seswar;": { "codepoints": [10537], "characters": "\u2929" }, "&setminus;": { "codepoints": [8726], "characters": "\u2216" }, "&setmn;": { "codepoints": [8726], "characters": "\u2216" }, "&sext;": { "codepoints": [10038], "characters": "\u2736" }, "&sfr;": { "codepoints": [120112], "characters": "\uD835\uDD30" }, "&sfrown;": { "codepoints": [8994], "characters": "\u2322" }, "&sharp;": { "codepoints": [9839], "characters": "\u266F" }, "&shchcy;": { "codepoints": [1097], "characters": "\u0449" }, "&shcy;": { "codepoints": [1096], "characters": "\u0448" }, "&shortmid;": { "codepoints": [8739], "characters": "\u2223" }, "&shortparallel;": { "codepoints": [8741], "characters": "\u2225" }, "&shy": { "codepoints": [173], "characters": "\u00AD" }, "&shy;": { "codepoints": [173], "characters": "\u00AD" }, "&sigma;": { "codepoints": [963], "characters": "\u03C3" }, "&sigmaf;": { "codepoints": [962], "characters": "\u03C2" }, "&sigmav;": { "codepoints": [962], "characters": "\u03C2" }, "&sim;": { "codepoints": [8764], "characters": "\u223C" }, "&simdot;": { "codepoints": [10858], "characters": "\u2A6A" }, "&sime;": { "codepoints": [8771], "characters": "\u2243" }, "&simeq;": { "codepoints": [8771], "characters": "\u2243" }, "&simg;": { "codepoints": [10910], "characters": "\u2A9E" }, "&simgE;": { "codepoints": [10912], "characters": "\u2AA0" }, "&siml;": { "codepoints": [10909], "characters": "\u2A9D" }, "&simlE;": { "codepoints": [10911], "characters": "\u2A9F" }, "&simne;": { "codepoints": [8774], "characters": "\u2246" }, "&simplus;": { "codepoints": [10788], "characters": "\u2A24" }, "&simrarr;": { "codepoints": [10610], "characters": "\u2972" }, "&slarr;": { "codepoints": [8592], "characters": "\u2190" }, "&smallsetminus;": { "codepoints": [8726], "characters": "\u2216" }, "&smashp;": { "codepoints": [10803], "characters": "\u2A33" }, "&smeparsl;": { "codepoints": [10724], "characters": "\u29E4" }, "&smid;": { "codepoints": [8739], "characters": "\u2223" }, "&smile;": { "codepoints": [8995], "characters": "\u2323" }, "&smt;": { "codepoints": [10922], "characters": "\u2AAA" }, "&smte;": { "codepoints": [10924], "characters": "\u2AAC" }, "&smtes;": { "codepoints": [10924, 65024], "characters": "\u2AAC\uFE00" }, "&softcy;": { "codepoints": [1100], "characters": "\u044C" }, "&sol;": { "codepoints": [47], "characters": "\u002F" }, "&solb;": { "codepoints": [10692], "characters": "\u29C4" }, "&solbar;": { "codepoints": [9023], "characters": "\u233F" }, "&sopf;": { "codepoints": [120164], "characters": "\uD835\uDD64" }, "&spades;": { "codepoints": [9824], "characters": "\u2660" }, "&spadesuit;": { "codepoints": [9824], "characters": "\u2660" }, "&spar;": { "codepoints": [8741], "characters": "\u2225" }, "&sqcap;": { "codepoints": [8851], "characters": "\u2293" }, "&sqcaps;": { "codepoints": [8851, 65024], "characters": "\u2293\uFE00" }, "&sqcup;": { "codepoints": [8852], "characters": "\u2294" }, "&sqcups;": { "codepoints": [8852, 65024], "characters": "\u2294\uFE00" }, "&sqsub;": { "codepoints": [8847], "characters": "\u228F" }, "&sqsube;": { "codepoints": [8849], "characters": "\u2291" }, "&sqsubset;": { "codepoints": [8847], "characters": "\u228F" }, "&sqsubseteq;": { "codepoints": [8849], "characters": "\u2291" }, "&sqsup;": { "codepoints": [8848], "characters": "\u2290" }, "&sqsupe;": { "codepoints": [8850], "characters": "\u2292" }, "&sqsupset;": { "codepoints": [8848], "characters": "\u2290" }, "&sqsupseteq;": { "codepoints": [8850], "characters": "\u2292" }, "&squ;": { "codepoints": [9633], "characters": "\u25A1" }, "&square;": { "codepoints": [9633], "characters": "\u25A1" }, "&squarf;": { "codepoints": [9642], "characters": "\u25AA" }, "&squf;": { "codepoints": [9642], "characters": "\u25AA" }, "&srarr;": { "codepoints": [8594], "characters": "\u2192" }, "&sscr;": { "codepoints": [120008], "characters": "\uD835\uDCC8" }, "&ssetmn;": { "codepoints": [8726], "characters": "\u2216" }, "&ssmile;": { "codepoints": [8995], "characters": "\u2323" }, "&sstarf;": { "codepoints": [8902], "characters": "\u22C6" }, "&star;": { "codepoints": [9734], "characters": "\u2606" }, "&starf;": { "codepoints": [9733], "characters": "\u2605" }, "&straightepsilon;": { "codepoints": [1013], "characters": "\u03F5" }, "&straightphi;": { "codepoints": [981], "characters": "\u03D5" }, "&strns;": { "codepoints": [175], "characters": "\u00AF" }, "&sub;": { "codepoints": [8834], "characters": "\u2282" }, "&subE;": { "codepoints": [10949], "characters": "\u2AC5" }, "&subdot;": { "codepoints": [10941], "characters": "\u2ABD" }, "&sube;": { "codepoints": [8838], "characters": "\u2286" }, "&subedot;": { "codepoints": [10947], "characters": "\u2AC3" }, "&submult;": { "codepoints": [10945], "characters": "\u2AC1" }, "&subnE;": { "codepoints": [10955], "characters": "\u2ACB" }, "&subne;": { "codepoints": [8842], "characters": "\u228A" }, "&subplus;": { "codepoints": [10943], "characters": "\u2ABF" }, "&subrarr;": { "codepoints": [10617], "characters": "\u2979" }, "&subset;": { "codepoints": [8834], "characters": "\u2282" }, "&subseteq;": { "codepoints": [8838], "characters": "\u2286" }, "&subseteqq;": { "codepoints": [10949], "characters": "\u2AC5" }, "&subsetneq;": { "codepoints": [8842], "characters": "\u228A" }, "&subsetneqq;": { "codepoints": [10955], "characters": "\u2ACB" }, "&subsim;": { "codepoints": [10951], "characters": "\u2AC7" }, "&subsub;": { "codepoints": [10965], "characters": "\u2AD5" }, "&subsup;": { "codepoints": [10963], "characters": "\u2AD3" }, "&succ;": { "codepoints": [8827], "characters": "\u227B" }, "&succapprox;": { "codepoints": [10936], "characters": "\u2AB8" }, "&succcurlyeq;": { "codepoints": [8829], "characters": "\u227D" }, "&succeq;": { "codepoints": [10928], "characters": "\u2AB0" }, "&succnapprox;": { "codepoints": [10938], "characters": "\u2ABA" }, "&succneqq;": { "codepoints": [10934], "characters": "\u2AB6" }, "&succnsim;": { "codepoints": [8937], "characters": "\u22E9" }, "&succsim;": { "codepoints": [8831], "characters": "\u227F" }, "&sum;": { "codepoints": [8721], "characters": "\u2211" }, "&sung;": { "codepoints": [9834], "characters": "\u266A" }, "&sup1": { "codepoints": [185], "characters": "\u00B9" }, "&sup1;": { "codepoints": [185], "characters": "\u00B9" }, "&sup2": { "codepoints": [178], "characters": "\u00B2" }, "&sup2;": { "codepoints": [178], "characters": "\u00B2" }, "&sup3": { "codepoints": [179], "characters": "\u00B3" }, "&sup3;": { "codepoints": [179], "characters": "\u00B3" }, "&sup;": { "codepoints": [8835], "characters": "\u2283" }, "&supE;": { "codepoints": [10950], "characters": "\u2AC6" }, "&supdot;": { "codepoints": [10942], "characters": "\u2ABE" }, "&supdsub;": { "codepoints": [10968], "characters": "\u2AD8" }, "&supe;": { "codepoints": [8839], "characters": "\u2287" }, "&supedot;": { "codepoints": [10948], "characters": "\u2AC4" }, "&suphsol;": { "codepoints": [10185], "characters": "\u27C9" }, "&suphsub;": { "codepoints": [10967], "characters": "\u2AD7" }, "&suplarr;": { "codepoints": [10619], "characters": "\u297B" }, "&supmult;": { "codepoints": [10946], "characters": "\u2AC2" }, "&supnE;": { "codepoints": [10956], "characters": "\u2ACC" }, "&supne;": { "codepoints": [8843], "characters": "\u228B" }, "&supplus;": { "codepoints": [10944], "characters": "\u2AC0" }, "&supset;": { "codepoints": [8835], "characters": "\u2283" }, "&supseteq;": { "codepoints": [8839], "characters": "\u2287" }, "&supseteqq;": { "codepoints": [10950], "characters": "\u2AC6" }, "&supsetneq;": { "codepoints": [8843], "characters": "\u228B" }, "&supsetneqq;": { "codepoints": [10956], "characters": "\u2ACC" }, "&supsim;": { "codepoints": [10952], "characters": "\u2AC8" }, "&supsub;": { "codepoints": [10964], "characters": "\u2AD4" }, "&supsup;": { "codepoints": [10966], "characters": "\u2AD6" }, "&swArr;": { "codepoints": [8665], "characters": "\u21D9" }, "&swarhk;": { "codepoints": [10534], "characters": "\u2926" }, "&swarr;": { "codepoints": [8601], "characters": "\u2199" }, "&swarrow;": { "codepoints": [8601], "characters": "\u2199" }, "&swnwar;": { "codepoints": [10538], "characters": "\u292A" }, "&szlig": { "codepoints": [223], "characters": "\u00DF" }, "&szlig;": { "codepoints": [223], "characters": "\u00DF" }, "&target;": { "codepoints": [8982], "characters": "\u2316" }, "&tau;": { "codepoints": [964], "characters": "\u03C4" }, "&tbrk;": { "codepoints": [9140], "characters": "\u23B4" }, "&tcaron;": { "codepoints": [357], "characters": "\u0165" }, "&tcedil;": { "codepoints": [355], "characters": "\u0163" }, "&tcy;": { "codepoints": [1090], "characters": "\u0442" }, "&tdot;": { "codepoints": [8411], "characters": "\u20DB" }, "&telrec;": { "codepoints": [8981], "characters": "\u2315" }, "&tfr;": { "codepoints": [120113], "characters": "\uD835\uDD31" }, "&there4;": { "codepoints": [8756], "characters": "\u2234" }, "&therefore;": { "codepoints": [8756], "characters": "\u2234" }, "&theta;": { "codepoints": [952], "characters": "\u03B8" }, "&thetasym;": { "codepoints": [977], "characters": "\u03D1" }, "&thetav;": { "codepoints": [977], "characters": "\u03D1" }, "&thickapprox;": { "codepoints": [8776], "characters": "\u2248" }, "&thicksim;": { "codepoints": [8764], "characters": "\u223C" }, "&thinsp;": { "codepoints": [8201], "characters": "\u2009" }, "&thkap;": { "codepoints": [8776], "characters": "\u2248" }, "&thksim;": { "codepoints": [8764], "characters": "\u223C" }, "&thorn": { "codepoints": [254], "characters": "\u00FE" }, "&thorn;": { "codepoints": [254], "characters": "\u00FE" }, "&tilde;": { "codepoints": [732], "characters": "\u02DC" }, "&times": { "codepoints": [215], "characters": "\u00D7" }, "&times;": { "codepoints": [215], "characters": "\u00D7" }, "&timesb;": { "codepoints": [8864], "characters": "\u22A0" }, "&timesbar;": { "codepoints": [10801], "characters": "\u2A31" }, "&timesd;": { "codepoints": [10800], "characters": "\u2A30" }, "&tint;": { "codepoints": [8749], "characters": "\u222D" }, "&toea;": { "codepoints": [10536], "characters": "\u2928" }, "&top;": { "codepoints": [8868], "characters": "\u22A4" }, "&topbot;": { "codepoints": [9014], "characters": "\u2336" }, "&topcir;": { "codepoints": [10993], "characters": "\u2AF1" }, "&topf;": { "codepoints": [120165], "characters": "\uD835\uDD65" }, "&topfork;": { "codepoints": [10970], "characters": "\u2ADA" }, "&tosa;": { "codepoints": [10537], "characters": "\u2929" }, "&tprime;": { "codepoints": [8244], "characters": "\u2034" }, "&trade;": { "codepoints": [8482], "characters": "\u2122" }, "&triangle;": { "codepoints": [9653], "characters": "\u25B5" }, "&triangledown;": { "codepoints": [9663], "characters": "\u25BF" }, "&triangleleft;": { "codepoints": [9667], "characters": "\u25C3" }, "&trianglelefteq;": { "codepoints": [8884], "characters": "\u22B4" }, "&triangleq;": { "codepoints": [8796], "characters": "\u225C" }, "&triangleright;": { "codepoints": [9657], "characters": "\u25B9" }, "&trianglerighteq;": { "codepoints": [8885], "characters": "\u22B5" }, "&tridot;": { "codepoints": [9708], "characters": "\u25EC" }, "&trie;": { "codepoints": [8796], "characters": "\u225C" }, "&triminus;": { "codepoints": [10810], "characters": "\u2A3A" }, "&triplus;": { "codepoints": [10809], "characters": "\u2A39" }, "&trisb;": { "codepoints": [10701], "characters": "\u29CD" }, "&tritime;": { "codepoints": [10811], "characters": "\u2A3B" }, "&trpezium;": { "codepoints": [9186], "characters": "\u23E2" }, "&tscr;": { "codepoints": [120009], "characters": "\uD835\uDCC9" }, "&tscy;": { "codepoints": [1094], "characters": "\u0446" }, "&tshcy;": { "codepoints": [1115], "characters": "\u045B" }, "&tstrok;": { "codepoints": [359], "characters": "\u0167" }, "&twixt;": { "codepoints": [8812], "characters": "\u226C" }, "&twoheadleftarrow;": { "codepoints": [8606], "characters": "\u219E" }, "&twoheadrightarrow;": { "codepoints": [8608], "characters": "\u21A0" }, "&uArr;": { "codepoints": [8657], "characters": "\u21D1" }, "&uHar;": { "codepoints": [10595], "characters": "\u2963" }, "&uacute": { "codepoints": [250], "characters": "\u00FA" }, "&uacute;": { "codepoints": [250], "characters": "\u00FA" }, "&uarr;": { "codepoints": [8593], "characters": "\u2191" }, "&ubrcy;": { "codepoints": [1118], "characters": "\u045E" }, "&ubreve;": { "codepoints": [365], "characters": "\u016D" }, "&ucirc": { "codepoints": [251], "characters": "\u00FB" }, "&ucirc;": { "codepoints": [251], "characters": "\u00FB" }, "&ucy;": { "codepoints": [1091], "characters": "\u0443" }, "&udarr;": { "codepoints": [8645], "characters": "\u21C5" }, "&udblac;": { "codepoints": [369], "characters": "\u0171" }, "&udhar;": { "codepoints": [10606], "characters": "\u296E" }, "&ufisht;": { "codepoints": [10622], "characters": "\u297E" }, "&ufr;": { "codepoints": [120114], "characters": "\uD835\uDD32" }, "&ugrave": { "codepoints": [249], "characters": "\u00F9" }, "&ugrave;": { "codepoints": [249], "characters": "\u00F9" }, "&uharl;": { "codepoints": [8639], "characters": "\u21BF" }, "&uharr;": { "codepoints": [8638], "characters": "\u21BE" }, "&uhblk;": { "codepoints": [9600], "characters": "\u2580" }, "&ulcorn;": { "codepoints": [8988], "characters": "\u231C" }, "&ulcorner;": { "codepoints": [8988], "characters": "\u231C" }, "&ulcrop;": { "codepoints": [8975], "characters": "\u230F" }, "&ultri;": { "codepoints": [9720], "characters": "\u25F8" }, "&umacr;": { "codepoints": [363], "characters": "\u016B" }, "&uml": { "codepoints": [168], "characters": "\u00A8" }, "&uml;": { "codepoints": [168], "characters": "\u00A8" }, "&uogon;": { "codepoints": [371], "characters": "\u0173" }, "&uopf;": { "codepoints": [120166], "characters": "\uD835\uDD66" }, "&uparrow;": { "codepoints": [8593], "characters": "\u2191" }, "&updownarrow;": { "codepoints": [8597], "characters": "\u2195" }, "&upharpoonleft;": { "codepoints": [8639], "characters": "\u21BF" }, "&upharpoonright;": { "codepoints": [8638], "characters": "\u21BE" }, "&uplus;": { "codepoints": [8846], "characters": "\u228E" }, "&upsi;": { "codepoints": [965], "characters": "\u03C5" }, "&upsih;": { "codepoints": [978], "characters": "\u03D2" }, "&upsilon;": { "codepoints": [965], "characters": "\u03C5" }, "&upuparrows;": { "codepoints": [8648], "characters": "\u21C8" }, "&urcorn;": { "codepoints": [8989], "characters": "\u231D" }, "&urcorner;": { "codepoints": [8989], "characters": "\u231D" }, "&urcrop;": { "codepoints": [8974], "characters": "\u230E" }, "&uring;": { "codepoints": [367], "characters": "\u016F" }, "&urtri;": { "codepoints": [9721], "characters": "\u25F9" }, "&uscr;": { "codepoints": [120010], "characters": "\uD835\uDCCA" }, "&utdot;": { "codepoints": [8944], "characters": "\u22F0" }, "&utilde;": { "codepoints": [361], "characters": "\u0169" }, "&utri;": { "codepoints": [9653], "characters": "\u25B5" }, "&utrif;": { "codepoints": [9652], "characters": "\u25B4" }, "&uuarr;": { "codepoints": [8648], "characters": "\u21C8" }, "&uuml": { "codepoints": [252], "characters": "\u00FC" }, "&uuml;": { "codepoints": [252], "characters": "\u00FC" }, "&uwangle;": { "codepoints": [10663], "characters": "\u29A7" }, "&vArr;": { "codepoints": [8661], "characters": "\u21D5" }, "&vBar;": { "codepoints": [10984], "characters": "\u2AE8" }, "&vBarv;": { "codepoints": [10985], "characters": "\u2AE9" }, "&vDash;": { "codepoints": [8872], "characters": "\u22A8" }, "&vangrt;": { "codepoints": [10652], "characters": "\u299C" }, "&varepsilon;": { "codepoints": [1013], "characters": "\u03F5" }, "&varkappa;": { "codepoints": [1008], "characters": "\u03F0" }, "&varnothing;": { "codepoints": [8709], "characters": "\u2205" }, "&varphi;": { "codepoints": [981], "characters": "\u03D5" }, "&varpi;": { "codepoints": [982], "characters": "\u03D6" }, "&varpropto;": { "codepoints": [8733], "characters": "\u221D" }, "&varr;": { "codepoints": [8597], "characters": "\u2195" }, "&varrho;": { "codepoints": [1009], "characters": "\u03F1" }, "&varsigma;": { "codepoints": [962], "characters": "\u03C2" }, "&varsubsetneq;": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" }, "&varsubsetneqq;": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" }, "&varsupsetneq;": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" }, "&varsupsetneqq;": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" }, "&vartheta;": { "codepoints": [977], "characters": "\u03D1" }, "&vartriangleleft;": { "codepoints": [8882], "characters": "\u22B2" }, "&vartriangleright;": { "codepoints": [8883], "characters": "\u22B3" }, "&vcy;": { "codepoints": [1074], "characters": "\u0432" }, "&vdash;": { "codepoints": [8866], "characters": "\u22A2" }, "&vee;": { "codepoints": [8744], "characters": "\u2228" }, "&veebar;": { "codepoints": [8891], "characters": "\u22BB" }, "&veeeq;": { "codepoints": [8794], "characters": "\u225A" }, "&vellip;": { "codepoints": [8942], "characters": "\u22EE" }, "&verbar;": { "codepoints": [124], "characters": "\u007C" }, "&vert;": { "codepoints": [124], "characters": "\u007C" }, "&vfr;": { "codepoints": [120115], "characters": "\uD835\uDD33" }, "&vltri;": { "codepoints": [8882], "characters": "\u22B2" }, "&vnsub;": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" }, "&vnsup;": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" }, "&vopf;": { "codepoints": [120167], "characters": "\uD835\uDD67" }, "&vprop;": { "codepoints": [8733], "characters": "\u221D" }, "&vrtri;": { "codepoints": [8883], "characters": "\u22B3" }, "&vscr;": { "codepoints": [120011], "characters": "\uD835\uDCCB" }, "&vsubnE;": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" }, "&vsubne;": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" }, "&vsupnE;": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" }, "&vsupne;": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" }, "&vzigzag;": { "codepoints": [10650], "characters": "\u299A" }, "&wcirc;": { "codepoints": [373], "characters": "\u0175" }, "&wedbar;": { "codepoints": [10847], "characters": "\u2A5F" }, "&wedge;": { "codepoints": [8743], "characters": "\u2227" }, "&wedgeq;": { "codepoints": [8793], "characters": "\u2259" }, "&weierp;": { "codepoints": [8472], "characters": "\u2118" }, "&wfr;": { "codepoints": [120116], "characters": "\uD835\uDD34" }, "&wopf;": { "codepoints": [120168], "characters": "\uD835\uDD68" }, "&wp;": { "codepoints": [8472], "characters": "\u2118" }, "&wr;": { "codepoints": [8768], "characters": "\u2240" }, "&wreath;": { "codepoints": [8768], "characters": "\u2240" }, "&wscr;": { "codepoints": [120012], "characters": "\uD835\uDCCC" }, "&xcap;": { "codepoints": [8898], "characters": "\u22C2" }, "&xcirc;": { "codepoints": [9711], "characters": "\u25EF" }, "&xcup;": { "codepoints": [8899], "characters": "\u22C3" }, "&xdtri;": { "codepoints": [9661], "characters": "\u25BD" }, "&xfr;": { "codepoints": [120117], "characters": "\uD835\uDD35" }, "&xhArr;": { "codepoints": [10234], "characters": "\u27FA" }, "&xharr;": { "codepoints": [10231], "characters": "\u27F7" }, "&xi;": { "codepoints": [958], "characters": "\u03BE" }, "&xlArr;": { "codepoints": [10232], "characters": "\u27F8" }, "&xlarr;": { "codepoints": [10229], "characters": "\u27F5" }, "&xmap;": { "codepoints": [10236], "characters": "\u27FC" }, "&xnis;": { "codepoints": [8955], "characters": "\u22FB" }, "&xodot;": { "codepoints": [10752], "characters": "\u2A00" }, "&xopf;": { "codepoints": [120169], "characters": "\uD835\uDD69" }, "&xoplus;": { "codepoints": [10753], "characters": "\u2A01" }, "&xotime;": { "codepoints": [10754], "characters": "\u2A02" }, "&xrArr;": { "codepoints": [10233], "characters": "\u27F9" }, "&xrarr;": { "codepoints": [10230], "characters": "\u27F6" }, "&xscr;": { "codepoints": [120013], "characters": "\uD835\uDCCD" }, "&xsqcup;": { "codepoints": [10758], "characters": "\u2A06" }, "&xuplus;": { "codepoints": [10756], "characters": "\u2A04" }, "&xutri;": { "codepoints": [9651], "characters": "\u25B3" }, "&xvee;": { "codepoints": [8897], "characters": "\u22C1" }, "&xwedge;": { "codepoints": [8896], "characters": "\u22C0" }, "&yacute": { "codepoints": [253], "characters": "\u00FD" }, "&yacute;": { "codepoints": [253], "characters": "\u00FD" }, "&yacy;": { "codepoints": [1103], "characters": "\u044F" }, "&ycirc;": { "codepoints": [375], "characters": "\u0177" }, "&ycy;": { "codepoints": [1099], "characters": "\u044B" }, "&yen": { "codepoints": [165], "characters": "\u00A5" }, "&yen;": { "codepoints": [165], "characters": "\u00A5" }, "&yfr;": { "codepoints": [120118], "characters": "\uD835\uDD36" }, "&yicy;": { "codepoints": [1111], "characters": "\u0457" }, "&yopf;": { "codepoints": [120170], "characters": "\uD835\uDD6A" }, "&yscr;": { "codepoints": [120014], "characters": "\uD835\uDCCE" }, "&yucy;": { "codepoints": [1102], "characters": "\u044E" }, "&yuml": { "codepoints": [255], "characters": "\u00FF" }, "&yuml;": { "codepoints": [255], "characters": "\u00FF" }, "&zacute;": { "codepoints": [378], "characters": "\u017A" }, "&zcaron;": { "codepoints": [382], "characters": "\u017E" }, "&zcy;": { "codepoints": [1079], "characters": "\u0437" }, "&zdot;": { "codepoints": [380], "characters": "\u017C" }, "&zeetrf;": { "codepoints": [8488], "characters": "\u2128" }, "&zeta;": { "codepoints": [950], "characters": "\u03B6" }, "&zfr;": { "codepoints": [120119], "characters": "\uD835\uDD37" }, "&zhcy;": { "codepoints": [1078], "characters": "\u0436" }, "&zigrarr;": { "codepoints": [8669], "characters": "\u21DD" }, "&zopf;": { "codepoints": [120171], "characters": "\uD835\uDD6B" }, "&zscr;": { "codepoints": [120015], "characters": "\uD835\uDCCF" }, "&zwj;": { "codepoints": [8205], "characters": "\u200D" }, "&zwnj;": { "codepoints": [8204], "characters": "\u200C" } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������