Oznámení
Syntax highlighting /--- code php
před 9 lety
- KoDeath
- Člen | 1
Zdravím,
používám Texy! na svém webu bez nějakého většího RS. Texy se mi moc
líbí a rád bych přes něj rozchodil i syntax highlighting přes
/--- code php, což se mi moc nedaří. všude se dočítám,
že mám k tomu použít přídavný modul, který však nemohu najít. pokud
už tu nějaké takové téma je, tak se omlouvám, že zakládám nové.
možná špatně hledám :) předem díky za rady
Editoval KoDeath (3. 2. 2011 1:27)
před 9 lety
- Ondřej Mirtes
- Člen | 1539
Ahoj,
na homepage mi funguje následující kód (využívá knihovnu FSHL):
$texy->addHandler('block', 'blockHandler');
function blockHandler($invocation, $blocktype, $content, $lang, $modifier)
{
if ($blocktype !== 'block/code') {
return $invocation->proceed();
}
$lang = strtoupper($lang);
if ($lang == 'JAVASCRIPT') $lang = 'JS';
$fshl = new fshlParser('HTML_UTF8', P_TAB_INDENT);
if (!$fshl->isLanguage($lang)) {
return $invocation->proceed();
}
$texy = $invocation->getTexy();
$content = Texy::outdent($content);
$content = $fshl->highlightString($lang, $content);
$content = $texy->protect($content, Texy::CONTENT_BLOCK);
$elPre = TexyHtml::el('pre');
if ($modifier) $modifier->decorate($texy, $elPre);
$elPre->attrs['class'] = strtolower($lang);
$elCode = $elPre->create('code', $content);
return $elPre;
}
Editoval Ondřej Mirtes (3. 2. 2011 20:28)
před 8 lety
- toka
- Člen | 251
Když už jsme u toho, snažím se HTML, které vytvoří Texy, předat
knihovně mPDF, ale právě díky konstrukci
<pre><code>....</code></pre>
s tím mám
problém. V PDF se objeví HTML kód všeho, co je mezi tagy
<pre>
a </pre>
. Lze nějak tuto situaci
řešit přímo v blockHandleru
?
před 8 lety
- toka
- Člen | 251
Řešení jsem našel, ale nevím, jestli to je ono. Respektive to funguje,
ale nevím, jestli je dobré to mít uzavřené v tagu
<p>...</p>
:
function blockHandler($invocation, $blocktype, $content, $lang, $modifier)
{
if ($blocktype !== 'block/code') {
return $invocation->proceed();
}
$lang = strtoupper($lang);
if ($lang == 'JAVASCRIPT') $lang = 'JS';
$parser = new fshlParser('HTML_UTF8', P_TAB_INDENT);
if ((!$parser->isLanguage($lang)) && ($lang != '')) {
return $invocation->proceed();
}
$content = Texy::outdent($content);
$content = $parser->highlightString($lang, $content);
$content = $this->protect(preg_replace('#\n#', '<br />', $content), Texy::CONTENT_BLOCK);
$elPre = TexyHtml::el('p');
if ($modifier) $modifier->decorate($this, $elPre);
$elPre->attrs['class'] = strtolower($lang);
$elCode = $elPre->create('code', $content);
return $elPre;
}