Пример #1
0
 function solve($invocation, $level, $content, $mod, $isSurrounded)
 {
     $tx = $this->texy;
     $el = TexyHtml::el('h' . min(6, max(1, $level + $this->top)));
     $mod->decorate($tx, $el);
     $el->parseLine($tx, trim($content));
     $title = NULL;
     if ($this->generateID && empty($el->attrs['id'])) {
         $title = trim($el->toText($tx));
         $id = $this->idPrefix . Texy::webalize($title);
         $counter = '';
         if (isset($this->usedID[$id . $counter])) {
             $counter = 2;
             while (isset($this->usedID[$id . '-' . $counter])) {
                 $counter++;
             }
             $id .= '-' . $counter;
         }
         $this->usedID[$id] = TRUE;
         $el->attrs['id'] = $id;
     }
     if ($this->title === NULL) {
         if ($title === NULL) {
             $title = trim($el->toText($tx));
         }
         $this->title = $title;
     }
     $this->TOC[] = array('el' => $el, 'level' => $level, 'title' => $title, 'surrounded' => $isSurrounded);
     return $el;
 }
Пример #2
0
 public function afterParse($texy, $DOM, $isSingleLine)
 {
     if ($isSingleLine) {
         return;
     }
     if ($this->balancing === self::DYNAMIC) {
         $top = $this->top;
         $map = array();
         $min = 100;
         foreach ($this->TOC as $item) {
             $level = $item['level'];
             if ($item['type'] === 'surrounded') {
                 $min = min($level, $min);
                 $top = $this->top - $min;
             } elseif ($item['type'] === 'underlined') {
                 $map[$level] = $level;
             }
         }
         asort($map);
         $map = array_flip(array_values($map));
     }
     foreach ($this->TOC as $key => $item) {
         if ($this->balancing === self::DYNAMIC) {
             if ($item['type'] === 'surrounded') {
                 $level = $item['level'] + $top;
             } elseif ($item['type'] === 'underlined') {
                 $level = $map[$item['level']] + $this->top;
             } else {
                 $level = $item['level'];
             }
             $item['el']->setName('h' . min(6, max(1, $level)));
             $this->TOC[$key]['level'] = $level;
         }
         if ($this->generateID && empty($item['el']->attrs['id'])) {
             $title = trim($item['el']->toText($this->texy));
             if ($title !== '') {
                 $this->TOC[$key]['title'] = $title;
                 $id = $this->idPrefix . Texy::webalize($title);
                 $counter = '';
                 if (isset($this->usedID[$id . $counter])) {
                     $counter = 2;
                     while (isset($this->usedID[$id . '-' . $counter])) {
                         $counter++;
                     }
                     $id .= '-' . $counter;
                 }
                 $this->usedID[$id] = TRUE;
                 $item['el']->attrs['id'] = $id;
             }
         }
     }
     if ($this->title === NULL && count($this->TOC)) {
         $item = reset($this->TOC);
         $this->title = isset($item['title']) ? $item['title'] : trim($item['el']->toText($this->texy));
     }
 }
Пример #3
0
function texyla($content, $texyCfg, $charset = 'utf-8', $oneLine = false)
{
    if (empty($content)) {
        # protože je obsah prázdný vrátíme ho prázdný zpátky bez zpracování
        return $content;
    }
    if (!function_exists('iconv') && $charset != 'utf-8') {
        # ověření existence fce iconv(), která se používá pro zmenu
        # kodování vstupního textu při jiném než utf-8 kodování
        trigger_error(texylaErrorMsg(TEXYLA_ICONV_MISSING), E_USER_ERROR);
    }
    # jaky pouzit configurační soubor pro zpracování vstupního textu
    # defaultní hodnota je forum, takže není třeba uvádět.
    $texyCfg = texylaTexyCfg($texyCfg);
    # sestaveni cesty ke konfigu
    $texyCfgFile = dirname(__FILE__) . '/cfg/' . $texyCfg . '.php';
    if (!is_bool($oneLine)) {
        # pokud není bool nastavíme na false (blokový text)
        $oneLine = false;
    }
    if (!class_exists('Texy')) {
        # Neexistuje třída Texy
        trigger_error(texylaErrorMsg(TEXYLA_CLASS_NOT_TEXY_FOUND, $texyFile), E_USER_ERROR);
    }
    # iniciace texy
    $texy = new Texy();
    $texy->alignClasses['left'] = 'fl';
    $texy->alignClasses['right'] = 'fr';
    # nastavíme kódování v kterém je zpracováváný text
    # default je utf-8, není třeba uvádět při volání funkce texyla() [pokud nenásleduje další parametr]
    $texy->encoding = $charset;
    # proměnná, podle které se řídí přidávání hlášky  <!-- by Texy2! --> na konec zpracovávaného textu
    # $GLOBALS['Texy::$advertisingNotice'] = false;
    # verze pro php5
    Texy::$advertisingNotice = false;
    # Odstranění diakritiky z textu, vytvoření
    if ($texyCfg == 'webalize') {
        /*
        	*******************************************************************************************
        	!!! Toto je v Testovací fázi !!! Bugreporty prosím na http://texyla.jaknato.com/khostu.php
        	*******************************************************************************************
        	Jedná se o odstranění diakritiky...
        	Výsledek obsahuje pouze a-z, čísla a spojovník.
        	Není třeba načítat konfiguraci, 
        	Pokud používáte jiné kódování než je utf-8, je text překodován na utf-8 a je z něj 
        	odstraněna diakritika, výsledný text je čisté ASCII, takže se zpštně nepřevádí na 
        	původní kódóvání.
        	Poznámky dgx k webalize:
        	========================
        		Je však možné povolit i další ASCII znaky:
        	
        			$nadpis = "článek/PHP 5.2.1 a funkce is_array()";
        			echo Texy::webalize($nadpis); // standardní chování
        	
        			→ clanek-php-5-2-1-a-funkce-is-array
        	
        			$addChar = '/_.';// navíc povolíme znaky: / _ .
        			echo Texy::webalize($nadpis,$addChar);
        			
        			→ clanek/php-5.2.1-a-funkce-is_array
        	
        			Ještě dodám, že funkce funguje korektně i při chybné implementaci iconv (glibc).
        */
        $content = strtolower($charset) == 'utf-8' ? $content : iconv($charset, 'utf-8', $content);
        $addChar = '';
        return Texy::webalize($content, $addChar);
    }
    # kontrola existence konfiguračního souboru
    if (!file_exists($texyCfgFile)) {
        # neexistuje (nebyl nalezen/includován) soubor s konfigurací pro texy
        return texylaErrorMsg(TEXYLA_FILE_CFG_NOT_FOUND, $texyCfgFile);
    }
    # includujeme soubor s nastavením pro Texy!
    if (!(include $texyCfgFile)) {
        # Nepodařilo se načíst konfigurační soubor,
        # nejspíš špatné práva pro přístup k souboru
        return texylaErrorMsg(TEXYLA_ACCESS_DENIED, $texyFile);
    }
    # kontrola existence pomocné třídy FshlHandler (propojení Texy s fshlParser)
    # a třídy fshlParser (ta se stará o samotné obarvení kodu)
    if (function_exists('TexylaFSHLBlockHandler') && class_exists('fshlParser') && !empty($useFSHL) && $useFSHL === true) {
        # iniciace pomocné třídy starající se o obarvení zdrojovách kódů
        # Autor třídy je: Juraj 'hvge' Durech
        $texy->addHandler('block', 'TexylaFSHLBlockHandler');
    }
    # Provedeme zpracování poslaného obsahu pomocí Texy!
    if (!empty($addTargetBlank) && $addTargetBlank === true) {
        return preg_replace_callback("~<a href~iU", "texylaAddTargetBlank", $texy->process($content, $oneLine));
    }
    return $texy->process($content, $oneLine);
}