Yo'HighLighter

  • Informace & novinky
  • Download
  • Tvorba vlastního pluginu
  • Spouštění
  • Changelog
  • Info & novinky

    Yo'HighLight je PHP skript pro zvýraznění syntaxe zdrojového kódu pro použití na internetu.

    Download

    Všechny downloady obsahují (není li uvedeno jinak):

    VerzeObsahujeChangelogDatum
    Yo'HighLighter 1.3Třída, CPP, CPP lite, PHP, SQL + RAN/A9.1.2007
    Yo'HighLighter 1.2Třída, CPP, PHP, SQL + RAN/A8.1.2007
    Yo'HighLighter 1.0Třída, CPP, PHP, SQL + RAN/A6.1.2007
    Je možné, že verze 1.2 a 1.0 nebudou fungovat a velice pravděpodobné, že nebudou fungovat s pluginy do novějších verzí.

    Tvorba vlastního pluginu

    Začátek

    Tvorba pluginu je sama o sobě velmi jednoduchá - nejprve do souboru includneme soubor s třídou (_class_highlight.php) a vytvoříme si novou instanci třídy highlight:
    <?php
    include('class/_class_highlight.php');
    $php = new highlight(".", "1", "?", "~", "_");
    ?>
    Tak, teď si povíme co znamenají jednotlivé atributy konstruktoru:
    public function __construct($kvantifikator = ".", $numbers = "1", $onePlace = "?", $unSeparated = "~", $whiteSpace = "_", $precise = TRUE) $kvantifikator - určuje zástupný znak pro 0-N libovolných znaků (obdoba *)
    $numbers - určuje zástupný znak pro 0-N znaků z množiny <0-9>
    $onePlace - zástupný znak pro právě jeden libovolný znak.
    $unSeparated - zástupný znak pro 0-N libovolných znaků, s vyjímkou separátorů. Ty jsou určeny přímo v třídě:
    private static $separators = array(    "[", "]", ".", "{", "}", "(", ")", "*", ":", " ", ";",
    "&", "|", "+", "-", "\?", "\"", "'", "//", "/*","*/",
    "\n", "\r", "\t", "!", "<", ">", "=", ",", "/", "~"
    ) ;
    a říkají nám které znaky dělí řetězec na části.
    $whiteSpace - zástupný znak pro 0-N tzv. bílých znaků - jejich seznam je opět přímo v hlavní třídě:
    private static $spaces = array(" ", "\n", "\r", "\t"); $precise - určuje zda má algoritmus při vyhledávání používat bloky nebo jen jednoduše hledat všechna zadaná klíčová slova, což je rychlejší, ale přicházíme o některé rozšířené možnosti.

    Přidávání klíčových slov

    Nyní můžeme přistoupit k přidání klíčových slov, symbolů apod. K tomuto účelu slouží následující tři funkce (i s příklady):
    public function add($word, $begin = "<span class=\"keyWord\">", $end = "</span>", $replace = FALSE, &$array = "EMPTY");

    $php->add("/*.*/","<span class=\"PHP-comment\">","</span>");
    - přidání jednoho klíčového slova. Atribut $word je klíčovým slovem (nebo znakem, záleží co přidáváme), $begin je to, co se má dát před klíčové slovo na výstupu, analogicky $end se připojuje na výstup za klíčové slovo. $replace obsahuje řetězec, kterým se má případně hledané klíčové slovo nahradit. Poslední atribut, $array nijak nevyužijeme - je pro vnitřní potřebu. public function addArray($array, $begin, $end, $replace = FALSE);

    $keyWords = array(    "int", "float", "main", "function", "class", "void", "char", "for",
    "while", "do", "switch", "case", "return", "new", "break", "delete",
    "bool", "if", "else", "else if", "struct", "using", "namespace", "private",
    "public", "static", "double", "exit", "const", "\_\_construct", "die", "echo",
    "array", "include", "require", "inlude\_once", "require\_once", "as", "foreach",
    "isset", "empty", "session_register", "session_start", "session_write_close", "Header"
    ) ;
    $php->addArray($keyWords,"<span class=\"PHP-keyWord\">","</span>");
    - v podstatě to samé jako předchozí funkce, ale pracuje zde s polem klíčových slov - to aby nebylo nutné psát pro každé slovo funkci. $begin a $end se v tomto případě přiřadí automaticky ke všem slovům z pole $array.
    Toto pole $array má zcela jiný význam než $array v předchozí funkci! public function addBlock($begin, $end, $comment = FALSE, $mismatched = FALSE);

    $php->addBlock("{","}",FALSE);
    - tato funkce má zcela jiné využití - určuje nám, které značky jsou párové, resp. tvoří blok. Atributy $begin a $end jsou zřejmé, atribut $comment říká zda znaky mezi nimy ovlivňují tok kódu. Například když budete mít složené závorky a mezi nimy nějaký komentář, který bude obsahovat další složenou závorku ({ /* } */ }), tak tato složená závorka neovlivňuje tok kódu - je vyňata ze sémantiky... Nevím jak to popsat, ale snad je to jasné :-).
    Atribut $mismatched je TRUE, pokud počáteční a koncový blok mohou být i v opačném pořadí (u závorek je to pochopitelně k ničemu, ale hodí se to třeba u PHP, kde může být blokem jak "<?php ?>" tak "?> <?php" (blok HTML kódu v PHP zdrojáku).

    Kvantifikátory

    Pod pojemem kvantifikátory mám na mysli zástupné znaky, které jsme definovali při volání konstruktoru. Pokud chceme například přidat mezi klíčová slova řetězec, provedeme to následujícně:
    $php->add("\".\"","<span class=\"PHP-string\">","</span>"); Všimněte si tečky - zde nahrazuje libovolný počet libovolných znaků. Pokud bychom chtěli do klíčových slov přidat skutečnou tečku, musíme ji "oescapovat" (čiliže přidat před ni lomítko (ještě polopatičtěji → "\.")). Obdobně používáme další zvolené kvantifikátory:
    $numbers = array("1", "0x??", "0x??????", "1\.1");
    $php->addArray($numbers, "<span class=\"PHP-number\">","</span>");
    $php->add("\$~", "<span class=\"PHP-variable\">","</span>");
    Toto popořadě znamená:

    Nahrazování

    Nyní už víme všechno podstatné, takže už jen pár drobností k atributu $replace. Lze ho totiž použít nejen k nahrazení nalezeného klíčového slova nějakou pevně danou náhradou, ale i následujícím způsobem:
    $php->add("\$~->~", "<span class=\"PHP-variable\">", "</span>", "\$~1</span><span class=\"PHP-operator\">-&gt;</span><span class=\"PHP-variable\">~2"); Všimněte si posledního vstupního (poněkud dlouhého) atributu funkce. Je tak dlouhý, že se mi nevešel do rámečku, ale o to nejde - podstatné jsou tam dva podřetězce: ~1 a ~2. Tyto podřetězce se nahradí prvním (~1) a druhým (~2) nalezeným řetězcem podle vzoru "\$~->~". Například na vstup přijde posloupnost $php->add → odpovídá to vzoru \$~->~ → první vlnovka sedí na php, druhá na add. ~1 je nahrazena tím co se našlo na první vlnovce (v tomto případě php) ~2 tím co bylo na druhé (add). Obdobná práce je s obecným kvantifikátorem (v našem případě ".") → .1 je nahrazena řetězcem odpovídajícím místu první tečky. Pokud je hledáno jen s jedním kvantifikátorem, tak se při nahrazování nepíše ".1", ale pouze "." (resp ~):
    $php->add("(.)", "<span class=\"PHP-operator\">(</span>", "<span class=\"PHP-operator\">)</span>", "(.)"); Na tomto příkladu je mimo toho vidět ještě jedna věc - chceme-li aby se nalezený podřetězec (v tomto případě tedy to co je mezi "(" a ")") také zvýrazňoval, musíme v atributu $replace dát příslušný kvantifikátor do závorky.

    Generování id čísel

    Třída také umí vygenerovat číslo použitelné k označení nějakého bloku a k jeho zpracování pomocí javascriptu (například otvírání a zavírání bloku kódu). Číslo je vygenerováno na místě kde se v atribututech $begin, $end nebo $replace nachází "[1]", kde znak 1 je vámi zvolený zástupný znak pro libovolné číslo. Vygenerované číslo je shodné vždy pro jeden nález. Příklad:
    $php->add("{_.}", "<span class=\"PHP-collapse\" onClick=\"showHide(this, [1]);\">{&nbsp;&nbsp;</span>&nbsp;<span class=\"PHP-block\" id=\"block_[1]\">\n", "</span><span class=\"PHP-operator\">}</span>\n", "(.)"); Nic víc snad není potřeba, pokud budete přesto chtít něco vědět, stačí napsat. :-)

    Spouštění

    Spuštění skriptu na nějaký zdrojový kód je pak už jednoduché - kód který chcete parsovat pošlete metodě parseString($string);, která vám jako výsledek vrátí řetězec se zvýrazněnými kusy kódu - ten pak stačí zkopírovat a uložit do souboru kam ho chcete dát.

    Changelog

    Zatím tu nic není

    Martin "Yo'Sarin" Řezník
    Osobní stránky Blok