Разметка UverseWiki практически не имеет зависимостей — ей нужна версия 5 PHP и установленный mb_string (функции которого можно попытаться переписать с вызовами стандартных аналогов вроде mb_substr() ⇒ substr(), но неанглийские тексты будут работать с глюками). ¶
Интергировать разметку очень просто — форматирование текста можно выполнить всего парой вызовов, если достаточно настроек по умолчанию: ¶
function WikiToHTML($text) {
require_once 'uversewiki.php';
if ($doc = UWikiDocument::TryParsing($text, 'wacko')) {
return $doc->ToHTML();
}
}
// Использование:
echo WikiToHTML('**жирный** текст'); // => '<p...><strong>жирный</strong> текст</p>
Если нужно больше контроля, то можно создать документ самому и настроить его перед вызовом Parse(): ¶
$doc = new UWikiDocument('((#Длинный якорь))');
$doc->settings->inlineAnchors = false;
$doc->Parse();
echo $doc->ToHTML(); // => <a name="Длинный якорь"></a>
Хотя есть нужно просто изменить настройки, то всё равно можно использовать TryParsing(): ¶
$settings = new UWikiSettings;
$settings->inlineAnchors = false;
if ($doc = UWikiDocument::TryParsing($text, $settings, 'wacko')) {
return $doc->ToHTML(); // результат тот же, что и в предыдущем примере.
}
Полная информация есть в API документации — см. классы UWikiDocument, UWikiSettings и функции UWikiDocument->Parse(), ToHTML(), ::TryParsing(). ¶
FluxBB — легковестный форумный движок. Как водится, на форумах
используют BB-код, и FluxBB не исключение. Однако его можно быстро привести к поддержке
нашей вики-разметки
Здесь описывается процедура для последней на момент написания версии FluxBB — 1.4.2.
¶
Мы не будем менять все упоминания о BB-кодах внутри FluxBB — движок завязан на
BB-коды, поэтому сие занятие утомительно и уже выпадает из темы этого раздела.
Мы просто сделаем так, что для подписей и сообщений будет использоваться вики.
¶
Очень кратко опишем структуру include/parser.php — это как раз тот файл, который форматирует текст. Нас в нём интересует 3 функции (все остальные вне его не вызываются): ¶
Первая чистит исходник, приводит BB-теги к нижнему регустру, оповещает об ошибках и т.д.
Вторая форматирует «сообщение» (форумное, а может и ещё какие-то). Третья, как следует из
названия, форматирует подпись.
Мы не будем углубляться в такие разделы, как чтение настроек профиля пользоввателя перед
форматированием сообщения (для отключения смайликов и картинок, например).
¶
Вот как должен выглядеть parser.php для работы с вики-разметкой: ¶
<?php
function preparse_bbcode($text, &$errors, $is_signature = false) { return $text; }
function parse_message($text, $hide_smilies) {
defined('UWikiRootPath') or define('UWikiRootPath', PUN_ROOT.'uwiki');
require_once UWikiRootPath.'/uversewiki.php';
$doc = new UWikiDocument($text);
$doc->settings->LoadFrom(UWikiRootPath.'/config');
$doc->LoadMarkup('wacko');
$doc->Parse();
return $doc->ToHTML();;
}
function parse_signature($text) { return parse_message($text, false); }
Функция подготовки BB-кода нам ни к чему, хотя если хочется, то подключение UverseWiki
можно вынести туда и выводить ошибку в $errors, если оно не удалось.
Функция форматирования подписи здесь просто форматирует её как сообщение. При желании
туда можно добавить проверку на большие картинки или слишком многострочные абзацы, чтобы
подпись была вменяемых размеров.
¶
В parse_message мы делаем вот что: ¶
Что здесь можно улучшить? ¶
...
$doc = new UWikiDocument($text);
static $settings;
if (!$settings) {
$settings = $doc->settings;
$settings->LoadFrom(UWikiRootPath.'/config');
} else {
$doc->settings = clone $settings;
}
$doc->Parse();
...