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; }
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)); } }
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); }