Jak na Texy! + FSHL v Nette 2.1.2?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Mart78
- Člen | 31
Potřebuji poradit (nakopnout) jak rozběhnout FSHL. S Nette se seznamuji. Mám blog v podobě quickstart. Vyhledal jsem si vlákna o Texy a FSHL tady na fóru i jinde, podařilo se mi zprovoznit Texy! (ačkoliv mám k tomu pár dotazů a nejasností), ale FSHL nevím jak dál.
Zde ukázky jak to mám napsané:
- do app/components (dle jiných vláken z fóra a návodů) jsem nakopíroval texy.min.php a adresář FSHL (v něm je dir Lexer, dir Output, Generator.php, Highlighter.php, atd.)
- v config.neon jsem zaregistroval službu Texy
services:
- App\RouterFactory
router: @App\RouterFactory::createRouter
texy: Texy
- do app/components jsem přidal fshlTexy.php
<?php
class fshlTexy extends Texy {
public function blockHandler($invocation, $blocktype, $content, $lang, $modifier) {
if ($blocktype !== 'block/code') {
return $invocation->proceed(); //vstup se nebude zpracovavat
}
$highlighter = new \FSHL\Highlighter(
new \FSHL\Output\Html(),
\FSHL\Highlighter::OPTION_TAB_INDENT | \FSHL\Highlighter::OPTION_LINE_COUNTER
);
$texy = $invocation->getTexy();
$content = Texy::outdent($content);
//Set correct lexer:
switch(strtoupper($lang)) {
case 'CPP': $lexer = new \FSHL\Lexer\Cpp(); break;
case 'CSS': $lexer = new \FSHL\Lexer\Css(); break;
case 'HTML': $lexer = new \FSHL\Lexer\Html(); break;
case 'JAVA': $lexer = new \FSHL\Lexer\Java(); break;
case 'JAVASCRIPT': $lexer = new \FSHL\Lexer\Javascript(); break;
case 'NEON': $lexer = new \FSHL\Lexer\Neon(); break;
case 'PHP': $lexer = new \FSHL\Lexer\Php(); break;
case 'PYTHON': $lexer = new \FSHL\Lexer\Python(); break;
case 'SQL': $lexer = new \FSHL\Lexer\Sql(); break;
case 'TEX': $lexer = new \FSHL\Lexer\Tex(); break; //WARNING: vlastní výroba!
case 'TEXY': $lexer = new \FSHL\Lexer\Texy(); break;
default: $lexer = new \FSHL\Lexer\Minimal();
}
$content = $highlighter->highlight($content, $lexer);
$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;
}
}
- BasePresenter.php
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$texy = new \fshlTexy();
$texy->addHandler('block', array($texy, 'blockHandler'));
//$texy->encoding = 'utf-8';
//$texy->allowedTags = Texy::NONE;
//$texy->allowedStyles = Texy::NONE;
//$texy->setOutputMode(Texy::HTML5);
$texy->headingModule->top = 2;
$template->registerHelper('texy', callback($texy, 'process'));
return $template;
}
- do www/css/ jsem nakopíroval nový styl, pak nalinkoval v app/templates/@layout.latte
- toto tahám z databáze a nechávám vypsat v šabloně: (před lomítka obalující html kód jsem tady přidal mezeru, jinak mi to „brala“ místní Texy fóra)
Vítejte!
--------
Můžete používat syntax Texy!, pokud Vám vyhovuje:
- třeba **tučné** písmo nebo *kurzíva*
- a takto se dělá "odkaz":https://texy.info
- více najdete na stránce "syntax":[syntax]
/---html
<ul>
{foreach $items as $item}
<li><a href="#">{$item}</a></li>
{/foreach}
</ul>
\---
- v Latte (např. v default.latte) to vypisuji takto
<div>{$post->content|noescape|texy}</div>
- a hodí mi to toto (Texy jde, FSHL ne)
<h2>Vítejte!</h2>
<p>Můžete používat syntax Texy!, pokud Vám vyhovuje:</p>
<ul>
<li>třeba <strong>tučné</strong> písmo nebo <em>kurzíva</em></li>
<li>a takto se dělá <a href="https://texy.info">odkaz</a></li>
<li>více najdete na stránce <a href="syntax">syntax</a></li>
</ul>
<ul>
<li><a href="#">{$item}</a></li>
</ul>
<!-- by Texy2! -->
Poradíte mi prosím jak to sprovoznit? Případně mi okomentovat těcho 8 kroků co jsem udělal? Nevím třeba proč Texy a FSHL dávat do app/components, můžu je dát do vendor/others? a kam s tou třídou fshlTexy.php? O:-)
Díky za pomoc
- Patrik Votoček
- Člen | 2221
Běžně to totiž funguje (tuším) takhle:
Vítejte!
--------
Můžete používat syntax Texy!, pokud Vám vyhovuje:
- třeba **tučné** písmo nebo *kurzíva*
- a takto se dělá "odkaz":https://texy.info
- více najdete na stránce "syntax":[syntax]
/--code html
<ul>
{foreach $items as $item}
<li><a href="#">{$item}</a></li>
{/foreach}
</ul>
\--