/** * Custom version of the _doCodeBlocks_callback method which invokes a Gheshi * object to render code. * * @since 1.0 */ public function _doCodeBlocks_callback($matches) { $config = ConfigProvider::getInstance(); $codeblock = $matches[1]; $codeblock = $this->outdent($codeblock); // trim leading newlines and trailing whitespace $codeblock = preg_replace(array('/\\A\\n+/', '/\\n+\\z/'), '', $codeblock); // find the code block and replace it with a blank $codeTypeTag = array(); preg_match('/codeType=\\[.*\\]/', $codeblock, $codeTypeTag); $codeblock = preg_replace('/codeType=\\[.*\\]\\n/', '', $codeblock); if (isset($codeTypeTag[0])) { $start = mb_strpos($codeTypeTag[0], '['); $end = mb_strpos($codeTypeTag[0], ']'); $language = mb_substr($codeTypeTag[0], $start + 1, $end - ($start + 1)); } else { // will use php as a default language type when none is provided $language = 'php'; } if ($config->get('cms.highlight.provider.name') != '') { $highlighter = HighlightProviderFactory::getInstance($config->get('cms.highlight.provider.name')); $codeblock = $highlighter->highlight($codeblock, $language); } else { $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); # trim leading newlines and trailing newlines $codeblock = preg_replace('/\\A\\n+|\\n+\\z/', '', $codeblock); $codeblock = "<pre><code>{$codeblock}\n</code></pre>"; } return "\n\n" . $this->hashBlock($codeblock) . "\n\n"; }
/** * Testing the highlight() method. * * @since 2.0.1 * @dataProvider getHighlightProviders */ public function testHighlight($provider) { $highlighter = HighlightProviderFactory::getInstance($provider); $code = '<?= $value ?>'; $highlighted = $highlighter->highlight($code, 'php'); $this->assertNotEmpty($highlighted, 'Testing the highlight() method'); $this->assertTrue(Validator::isHTML($highlighted), 'Testing the highlight() method'); }