Oznámení

Provoz fóra byl ukončen

Meta informace v Texy textu

před 11 lety

pekarna
Člen | 46

Zdravím,

je možné do Texy textu zadat metainformace? Podobně, jako můžu vytáhnout $texy->headingModule->title, chtěl bych něco jako

$texy->metainfoModule->data['Priority'];

A v samotném kódu bych to viděl podobně jako HTTP hlavičky, případně uvozené např. @@metainfo nebo vložené do /--meta nebo tak něco:

@@metainfo
Priority: 1
Comments: allowed
Link-base: https://texy.info/

Texy tutorial
*************

Je už něco takového možné?

Díky, Ondra

před 11 lety

David Grudl
Nette Core | 6806

Je to možné například via scriptModule:

Pak by takové metainformace měly podobu např.:

{{Priority: 1}}
{{Comments: allowed}}
{{Link-base: https://texy.info/}}

Texy tutorial
*************

před 11 lety

pekarna
Člen | 46

Takové řešení ale vyžaduje jakousi callback-funkci a předávání jejího kontextu s vycucnutými daty spolu s objektem texy (potřebuji vygenerovaný HTML kód + ty informace).

Jestli to tedy dobře chápu, modul, který by sám při parsování texy zdroje tyto informace detekoval a zpřístupnil podobně jako $texy->headingModule->title v Texy není, je to tak?

před 11 lety

David Grudl
Nette Core | 6806

Přesně tak. Implementace je zcela triviální. Elegantně to lze řešit třeba děděním třídy:

class WikiTexy extends Texy
{
    public $directives = array();


    public function __construct()
    {
        parent::__construct();
        $this->addHandler('script', array($this, 'scriptHandler'));
    }


    /**
     * @param TexyHandlerInvocation  handler invocation
     * @param string  command
     * @param array   arguments
     * @param string  arguments in raw format
     * @return TexyHtml|string|FALSE
     */
    public function scriptHandler($invocation, $cmd, $args, $raw)
    {
        $this->directives[$cmd] = $raw;
        return '';
    }

}


$texy = new WikiTexy;
$html = $texy->process($text);

// direktivy jsou v $texy->directives

Nebo některé direktivy můžou ovlivňovat další zpracování textu. Například {{nofollow:yes}} a {{nofollow:no}} bude měnit atribut $texy->linkModule->forceNoFollow:

public function scriptHandler($invocation, $cmd, $args, $raw)
{
    switch ($cmd) {
    case 'nofollow':
        $this->linkModule->forceNoFollow = ($args[0] === 'yes');
        break;

    default:
        $this->directives[$cmd] = $raw;
    }

    return '';
}

Možnosti jsou neomezené :-)

před 11 lety

pekarna
Člen | 46

Zdravím,

píšu na to modul, ale potřeboval bych postrčit… nevím přesně, jak vevnitř texy funguje.

Chci na začátku souboru (textu) chytit data z takovéhoto bloku:

@meta<\n>
Metainfo1: value<\n>
Metainfo2: value<\n>
<\n>

Zkoušel jsem block pattern '#^@meta\n(.*)\n\n$#mU',, ale ten nejde.
Jediné, co mi ještě obsah chytne, je '#^@meta(.*)$#mU',.

Mohl byste prosím releasnout trochu svého know-how? ;-)

Díky, Ondra

před 11 lety

pekarna
Člen | 46

Už to asi mám. Texy sám hledá bloky podle entrů a do textu pro preg_match už okolní entry nedává. Takže řešení je nejspíš '#^@meta\n(.*)$#mU',.

Edit: Tak není – vezme jen první řádku. Koumám dál :-)

Edit: Ha! '#^@meta\n(.*)\n\n$#ms',

Ještě by mě zajímalo, jestli si parser vede vnitřní informace o tom, kolikátý blok parsuje, případně pozici od začátku – abych mohl chtít zpracovat blok jen na úplném začátku souboru. $parser->offset je jednak private a jednak se vztahuje k začátku bloku.

Editoval pekarna (7. 3. 2008 20:09)

před 11 lety

pekarna
Člen | 46

Takže jsem napsal modul přesně podle zadání na začátku tohoto vlákna.

Nechcete ho začlenit do Texy?

před 11 lety

David Grudl
Nette Core | 6806

Do Texy se snažím začlenit jen funkce, které využije velké procento uživatelů. Ale přidal jsem do fóra nové téma Vaše tipy a rozšíření a budu rád, pokud tam své řešení popíšeš.

před 11 lety

pekarna
Člen | 46

IMHO tohle je celkem využitelná funkce pro ty, kdož neukládají texy texty do databáze, ale na disku. Lze tak do nich uložit to, co by jinak bylo v ostatních sloupcích. Krom toho by se mohlo jednat o vhodný doplněk k funkci skriptů – v podstatě opačná funkce: Získávání dat Z texy dokumentu, nikoliv jejich vkládání do něj.

Editoval pekarna (9. 3. 2008 7:56)