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
+
0
-

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é:

  1. 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.)
  2. v config.neon jsem zaregistroval službu Texy
services:
	- App\RouterFactory
	router: @App\RouterFactory::createRouter
	texy: Texy
  1. 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;
    }

}
  1. 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;
}
  1. do www/css/ jsem nakopíroval nový styl, pak nalinkoval v app/templates/@layout.latte
  2. 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>
 \---
  1. v Latte (např. v default.latte) to vypisuji takto
<div>{$post->content|noescape|texy}</div>
  1. 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
+
0
-

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>
 \--
Mart78
Člen | 31
+
0
-

Teda, nečekal jsem že problém bude zrovna v tomto, ale pomohlo :D díky.. pak jsem asi nepochopil syntaxi Texy! tady na fóru je to taky jinak