-
Notifications
You must be signed in to change notification settings - Fork 0
Public methods
Parserus addBBCode ( array $bb )
This method adds one bb-code to the parser. / Метод добавляет в парсер один bb-код.
$bb
The array describing a bb-code. / Массив с описанием bb-кода.
$parser = new Parserus();
$parser->addBBCode([
'tag' => 'code',
'type' => 'block',
'recursive' => true,
'text_only' => true,
'pre' => true,
'attrs' => [
'Def' => true,
'No_attr' => true,
],
'handler' => function($body, $attrs) {
$body = trim($body, "\n");
$class = substr_count($body, "\n") > 28 ? ' class="vscroll"' : '';
return '<div class="codebox"><pre' . $class . '><code>' . $body . '</code></pre></div>';
},
]);
Parserus setBBCodes ( array $bbcodes )
This method sets an array of bb-codes. / Метод задает массив bb-кодов.
$bbcodes
Array of descriptions of bb-codes. / Массив описаний bb-кодов.
$parser = new Parserus();
$parser->setBBCodes([
['tag' => 'b',
'handler' => function($body) {
return '<b>' . $body . '</b>';
},
],
['tag' => 'i',
'handler' => function($body) {
return '<i>' . $body . '</i>';
},
],
]);
Parserus setSmilies ( array $smilies )
This method sets an array of smilies. / Метод задает массив смайлов.
$smilies
Array of smilies. / Массив смайлов.
$parser = new Parserus();
$parser->setSmilies([
':)' => 'http://example.com/smilies/smile.png',
';)' => 'http://example.com/smilies/wink.png',
]);
Parserus setSmTpl ( string $tpl [, string $tag = 'img' [, array $bl = array('url') ]] )
This method sets a template for display of smilies. / Метод устанавливает шаблон для отображения смайлов.
$tpl
Template / Шаблон. (<img src="{url}" alt="{alt}">
)
$tag
BB-code name. / Имя bb-кода.
$bl
Array with names of bb-codes in which smiles won't be displayed under any condition. / Массив с именами bb-кодов, в которых смайлы не будут отображаться ни при каком условии.
$parser = new Parserus();
$parser->setSmilies([
':)' => 'http://example.com/smilies/smile.png',
';)' => 'http://example.com/smilies/wink.png',
])->setSmTpl('<img src="{url}" alt="{alt}">');
Parserus detectSmilies ( )
This method activates (if there is an opportunity) display of smilies on the current tree of tags. / Метод включает (если есть возможность) отображение смайлов на текущем дереве тегов.
$parser = new Parserus();
echo $parser->setSmilies([
':)' => 'http://example.com/smilies/smile.png',
';)' => 'http://example.com/smilies/wink.png',
])->addBBCode([
'tag' => 'img',
'type' => 'img',
'parents' => ['inline', 'block', 'url'],
'text_only' => true,
'attrs' => [
'Def' => [
'body_format' => '%^(?:(?:ht|f)tps?://[^\x00-\x1f\s<"]+|data:image/[a-z]+;base64,(?:[a-zA-Z\d/\+\=]+))$%D'
],
'No_attr' => [
'body_format' => '%^(?:(?:ht|f)tps?://[^\x00-\x1f\s<"]+|data:image/[a-z]+;base64,(?:[a-zA-Z\d/\+\=]+))$%D'
],
],
'handler' => function($body, $attrs, $parser) {
if (! isset($attrs['Def'])) {
$attrs['Def'] = (substr($body, 0, 11) === 'data:image/') ? 'base64' : basename($body);
}
return '<img src="' . $body . '" alt="' . $attrs['Def'] . '">';
},
])->setSmTpl('<img src="{url}" alt="{alt}">')
->parse(":)\n;)")
->detectSmilies()
->getHTML();
#output: <img src="http://example.com/smilies/smile.png" alt=":)"><br><img src="http://example.com/smilies/wink.png" alt=";)">
Parserus setWhiteList ( [ mixed $list = null ] )
This method sets the list of the allowed bb-codes. / Метод устанавливает список разрешенных bb-кодов.
$list
Array of names of bb-codes or null. / Массив наименований bb-кодов или null.
The value type different from an array switches off filtering. / Тип значения отличающийся от массива выключает фильтрацию.
$parser = new Parserus();
$parser->setWhiteList(['b','i','u','s','color']);
Parserus setBlackList ( [ mixed $list = null ] )
This method sets the list of the forbidden bb-codes. / Метод устанавливает список запрещенных bb-кодов.
$list
Array of names of bb-codes or null. / Массив наименований bb-кодов или null.
Only not the empty array switches on filtering. / Только не пустой массив включает фильтрацию.
$parser = new Parserus();
$parser->setBlackList(['url','img','email','list','*']);
Parserus setAttr ( string $name, mixed $val )
This method sets variable value for possible use in bb-codes. / Метод задает значение переменной для возможного использования в bb-кодах.
$name
Variable name. / Имя переменной.
$val
Variable value. / Значение переменной.
$parser = new Parserus();
$parser->setAttr('baseUrl', 'http://example.com/');
mixed attr ( string $name )
Method for obtaining variable value. / Метод для получения значения переменной.
$name
Variable name. / Имя переменной.
$parser = new Parserus();
echo $parser->addBBCode([
'tag' => 'after',
'type' => 'block',
'single' => true,
'attrs' => [
'Def' => [
'format' => '%^\d+$%',
],
],
'handler' => function($body, $attrs, $parser) {
$lang = $parser->attr('lang');
$arr = array();
$sec = $attrs['Def'] % 60;
$min = ($attrs['Def'] / 60) % 60;
$hours = ($attrs['Def'] / 3600) % 24;
$days = (int) ($attrs['Def'] / 86400);
if ($days > 0) {
$arr[] = $days . $lang['After time d'];
}
if ($hours > 0) {
$arr[] = $hours . $lang['After time H'];
}
if ($min > 0) {
$arr[] = (($min < 10) ? '0' . $min : $min) . $lang['After time i'];
}
if ($sec > 0) {
$arr[] = (($sec < 10) ? '0' . $sec : $sec) . $lang['After time s'];
}
$attr = $lang['After time'] . ' ' . implode(' ', $arr);
return '<span style="color: #808080"><em>' . $attr . ':</em></span><br>';
},
])->setAttr('lang', [
'After time' => 'Added later',
'After time s' => ' s',
'After time i' => ' min',
'After time H' => ' h',
'After time d' => ' d',
])->parse('[after=10123]')
->getHTML();
#output: <span style="color: #808080"><em>Added later 2 h 48 min 43 s:</em></span><br>
Parserus parse ( string $text [, array $opts = array() ] )
This method builds a tree of tags from the text containing bb-codes. / Метод строит дерево тегов из текста содержащего bb-коды.
$text
Processed text. / Обрабатываемый текст.
$opts
Array of options. / Массив опций.
- 'root' => Name of a root bb-code. / Имя корневого bb-кода.
- 'strict' => Flag (true/false) of strict check of bb-codes. / Флаг (true/false) строгой проверки bb-кодов.
- 'depth' => (v 0.9.2+) Maximum depth of the tags tree with strict error search mode. / Максимальная глубина дерева тегов при строгом режиме поиска ошибок.
string getText ( )
This method returns the text without bb-codes constructed based on a tree of tags. / Метод возвращает текст без bb-кодов построенный на основании дерева тегов.
$parser = new Parserus();
echo $parser->setBBCodes([
['tag' => 'table',
'type' => 'table',
'tags_only' => true,
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'align' => true,
'background' => true,
'bgcolor' => true,
'border' => true,
'bordercolor' => true,
'cellpadding' => true,
'cellspacing' => true,
'frame' => true,
'rules' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<table' . $attr . '>' . $body . '</table>';
},
],
['tag' => 'tr',
'type' => 'tr',
'parents' => ['table', 't'],
'tags_only' => true,
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<tr' . $attr . '>' . $body . '</tr>';
},
],
['tag' => 'th',
'type' => 'block',
'parents' => ['tr'],
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'colspan' => true,
'rowspan' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<th' . $attr . '>' . $body . '</th>';
},
],
['tag' => 'td',
'type' => 'block',
'parents' => ['tr'],
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'colspan' => true,
'rowspan' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<td' . $attr . '>' . $body . '</td>';
},
],
['tag' => 'email',
'type' => 'email',
'attrs' => [
'Def' => [
'format' => '%^[^\x00-\x1f\s]+?@[^\x00-\x1f\s]+$%',
],
'No_attr' => [
'body_format' => '%^[^\x00-\x1f\s]+?@[^\x00-\x1f\s]+$%D',
'text_only' => true,
],
],
'handler' => function($body, $attrs) {
if (empty($attrs['Def'])) {
return '<a href="mailto:' . $body . '">' . $body . '</a>';
} else {
return '<a href="mailto:' . $attrs['Def'] . '">' . $body . '</a>';
}
},
'text_handler' => function($body, $attrs) {
if (empty($attrs['Def'])) {
return $body;
} else {
return $body . ' ' . $attrs['Def'];
}
},
],
])->parse('
[table align=right border=1 bordercolor=#ccc cellpadding=5 cellspacing=0 style="border-collapse:collapse; width:500px"]
[tr]
[th style="width:50%"]Position[/th]
[th style=width:50%]Astronaut[/th]
[/tr]
[tr]
[td]Commander[/td]
[td]Neil A. Armstrong[/td]
[/tr]
[tr]
[td]Command Module Pilot[/td]
[td]Michael Collins[/td]
[/tr]
[tr]
[td]Lunar Module Pilot[/td]
[td]Edwin "Buzz" E. Aldrin, Jr.[/td]
[/tr]
[/table]
[email=spam@mail.ru]My email[/email]
[email]superspam@mail.ru[/email]
')->getText();
#output:
#
#Position Astronaut Commander Neil A. Armstrong Command Module Pilot Michael Collins Lunar Module Pilot Edwin "Buzz" E. Aldrin, Jr.
#My email spam@mail.ru
#superspam@mail.ru
#
string getHtml ( )
This method returns HTML constructed based on a tree of tags. / Метод возвращает HTML построенный на основании дерева тегов.
string getCode ( )
This method returns the text with bb-codes constructed based on a tree of tags. / Метод возвращает текст с bb-кодами построенный на основании дерева тегов.
$parser = new Parserus();
echo $parser->setBBCodes([
['tag' => 'table',
'type' => 'table',
'tags_only' => true,
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'align' => true,
'background' => true,
'bgcolor' => true,
'border' => true,
'bordercolor' => true,
'cellpadding' => true,
'cellspacing' => true,
'frame' => true,
'rules' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '</p><table' . $attr . '>' . $body . '</table><p>';
},
],
['tag' => 'tr',
'type' => 'tr',
'parents' => ['table', 't'],
'tags_only' => true,
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<tr' . $attr . '>' . $body . '</tr>';
},
],
['tag' => 'th',
'type' => 'block',
'parents' => ['tr'],
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'colspan' => true,
'rowspan' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<th' . $attr . '>' . $body . '</th>';
},
],
['tag' => 'td',
'type' => 'block',
'parents' => ['tr'],
'self_nesting' => 3,
'attrs' => [
'No_attr' => true,
'style' => true,
'colspan' => true,
'rowspan' => true,
],
'handler' => function($body, $attrs) {
$attr = '';
foreach ($attrs as $key => $val) {
$attr .= ' ' . $key . '="' . $val . '"';
}
return '<td' . $attr . '>' . $body . '</td>';
},
],
])->parse('
[table align=right border=1 bordercolor=#ccc cellpadding=5 cellspacing=0 style="border-collapse:collapse; width:500px"]
[tr]
[th style="width:50%"]Position[/th]
[th style=width:50%]Astronaut[/th]
[/tr]
[tr]
[td]Commander[/td]
[td]Neil A. Armstrong[/td]
[/tr]
[tr]
[td]Command Module Pilot[/td]
[td]Michael Collins[/td]
[/tr]
[tr]
[td]Lunar Module Pilot[/td]
[td]Edwin "Buzz" E. Aldrin, Jr.[/td]
[/tr]
[/table]
')->getCode();
#output:
#[table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse; width:500px"]
# [tr]
# [th style=width:50%]Position[/th]
# [th style=width:50%]Astronaut[/th]
# [/tr]
# [tr]
# [td]Commander[/td]
# [td]Neil A. Armstrong[/td]
# [/tr]
# [tr]
# [td]Command Module Pilot[/td]
# [td]Michael Collins[/td]
# [/tr]
# [tr]
# [td]Lunar Module Pilot[/td]
# [td]Edwin "Buzz" E. Aldrin, Jr.[/td]
# [/tr]
#[/table]
#
Parserus detectUrls ( )
This method looks for references in text nodes and creates on their place nodes with the url bb-codes. / Метод ищет в текстовых узлах ссылки и создает на их месте узлы с bb-кодами url.
For reduction of loading to use when saving, but not in case of an output / Для уменьшения нагрузки использовать при сохранении, а не при выводе.
$parser = new Parserus();
echo $parser->setBBCodes([
['tag' => 'url',
'type' => 'url',
'parents' => ['inline', 'block'],
'attrs' => [
'Def' => [
'format' => '%^[^\x00-\x1f]+$%',
],
'No_attr' => [
'body format' => '%^[^\x00-\x1f]+$%D',
],
],
'handler' => function($body, $attrs, $parser) {
#...
},
],
])->parse('Hello www.example.com World!')
->detectUrls()
->getCode();
#output: Hello [url]www.example.com[/url] World!
bool stripEmptyTags ( [ string $mask = '' [, bool $flag = false ]] )
This method deletes empty tags from a tree of tags. / Метод удаляет пустые теги из дерева.
$mask
Mask of characters which aren't considered in case of determination of emptiness of text nodes. / Маска символов, которые не учитываются при определении пустоты текстовых узлов.
$flag
If true, then in case of an empty tree it isn't cleared, and will remain without changes, but the error which will be displayed in getErrors() will be left. / Если true, то при пустом дереве оно не будет очищено, а останется без изменений, но будет оставлена ошибка, которая отобразится в getErrors().
For reduction of loading to use when saving, but not in case of an output / Для уменьшения нагрузки использовать при сохранении, а не при выводе.
$parser = new Parserus();
$parser->addBBCode([
'tag' => 'b',
'handler' => function($body) {
return '<b>' . $body . '</b>';
}
])->addBBcode([
'tag' => 'i',
'handler' => function($body) {
return '<i>' . $body . '</i>';
},
]);
# №1
var_dump($parser->parse("[i][b] [/b][/i]")->stripEmptyTags());
#output: boolean false
echo $parser->getCode();
#output: [i][b] [/b][/i]
echo "\n\n";
# №2
var_dump($parser->parse("[i][b] [/b][/i]")->stripEmptyTags(" \n", true));
#output: boolean true
echo $parser->getCode();
#output: [i][b] [/b][/i]
var_dump($parser->getErrors());
#output: array (size=1)
# 0 => string 'Все теги пустые' (length=28)
echo "\n\n";
# №3
var_dump($parser->parse("[i][b] [/b][/i]")->stripEmptyTags(" \n"));
#output: boolean true
echo $parser->getCode();
#output:
var_dump($parser->getErrors());
#output: array (size=0)
# empty
array getErrors ( [ array $lang = array() , [ array $errors = array() , [ bool $retTpl = false ]]] )
This method returns an array of errors. / Метод возвращает массив ошибок.
$lang
Array of the description of errors. / Массив с описанием ошибок.
$errors
Array which is added by errors. / Массив, который дополняется ошибками.
$retTpl (v 1.1.0+)
Flag to return the result as an array with a template in the first element for each error. / Флаг возрата результата в виде массива с шаблоном в первом элементе для каждой ошибки.
$parser = new Parserus();
$parser->addBBCode([
'tag' => 'b',
'handler' => function($body) {
return '<b>' . $body . '</b>';
}
])->addBBcode([
'tag' => 'i',
'handler' => function($body) {
return '<i>' . $body . '</i>';
},
]);
$parser->parse("[i][b] [/b][/i]")->stripEmptyTags(" \n", true);
$err = [
1 => '[%1$s] is in the black list',
2 => '[%1$s] is absent in the white list',
3 => '[%1$s] can\'t be opened in the [%2$s]',
4 => '[/%1$s] was found without a matching [%1$s]',
5 => '[/%1$s] is found for single [%1$s]',
6 => 'There are no attributes in [%1$s]',
7 => 'Primary attribute is forbidden in [%1$s=...]',
8 => 'Secondary attributes are forbidden in [%1$s ...]',
9 => 'The attribute \'%2$s\' doesn\'t correspond to a template in the [%1$s]',
10 => '[%1$s ...] contains unknown secondary attribute \'%2$s\'',
11 => 'The body of [%1$s] doesn\'t correspond to a template',
12 => '[%1$s] was opened within itself, this is not allowed',
13 => 'In the [%1$s] is absent mandatory attribute \'%2$s\'',
14 => 'All tags are empty',
15 => 'The depth of the tag tree is greater than %1$s',
16 => '[%1$s] is enclosed in itself more than %2$s times',
];
var_dump($parser->getErrors($err));
#output: array (size=1)
# 0 => string 'All tags are empty' (length=18)
string e ( string $text )
This method will transform special characters to HTML entities. / Метод преобразует специальные символы в HTML-сущности.
$parser = new Parserus();
echo $parser->e("<'abcde'>");
#output: <'abcde'>
string de ( string $text )
(v 1.2.0+)
This method will transform special HTML entities back to characters. / Метод преобразует специальные HTML-сущности обратно в соответствующие символы.
array getIds ( string ...$tags )
(v 1.4.0+)
This method returns an array of the form "id => tag name" built on the basis of a tree of tags. / Метод возвращает массив вида "id => имя тега" построенный на основе дерева тегов.
If $tags is not empty, then only those tags are returned. / Если указаны $tags, то возвращаются только они.