ModuleText
Package | framework.modules |
---|---|
Inheritance | class ModuleText » Module » LsObject |
Since | 1.0 |
Source Code | /framework/classes/modules/text/Text.class.php |
$sText=$this->Text_Parser($sTestSource);Настройки парсинга находятся в конфиге /config/jevix.php
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aParams | array | Дополнительные параметры, которые необходимо учитывать при обработке текста | ModuleText |
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oJevix | Jevix | Объект типографа | ModuleText |
Public Methods
Method | Description | Defined By |
---|---|---|
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AddParams() | Добавляет параметры | ModuleText |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
CodeSourceParser() | Подсветка исходного кода | ModuleText |
Cut() | Производить резрезание текста по тегу cut. | ModuleText |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
GetJevix() | Возвращает объект Jevix | ModuleText |
GetParam() | Возвращает параметр по имени или сразу все параметры | ModuleText |
Init() | Инициализация модуля | ModuleText |
JevixParser() | Парсинг текста с помощью Jevix | ModuleText |
LoadJevixConfig() | Загружает конфиг Jevix'а | ModuleText |
Parser() | Парсит текст, применя все парсеры | ModuleText |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RemoveParams() | Удаляет параметры | ModuleText |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
SetInit() | Помечает модуль как инициализированный | Module |
Shutdown() | Метод срабатывает при завершении работы ядра | Module |
VideoParser() | Парсинг текста на предмет видео | ModuleText |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | Блокируем копирование/клонирование объекта | Module |
__construct() | Конструктор, запускается автоматически при создании объекта | LsObject |
__get() | Обработка доступа к объекты поведения | LsObject |
isInit() | Возвращает значение флага инициализации модуля | Module |
Protected Methods
Method | Description | Defined By |
---|---|---|
FlashParamParser() | Заменяет все вхождения короткого тега на длиную версию | ModuleText |
JevixConfig() | Конфигурирует типограф | ModuleText |
PrepareBehaviors() | Инициализация поведений | LsObject |
Property Details
Дополнительные параметры, которые необходимо учитывать при обработке текста Можно задавать произвольные параметры, главное чтобы логика обработки текста их учитывала Желеательно после установки параметров и выполнения обработки эти параметры сбросить методом
See Also
- ModuleText::AddExecHook
Объект типографа
Method Details
public void AddParams($aParams $aParams)
| ||
$aParams | $aParams |
public function AddParams($aParams)
{
$this->aParams = array_merge($this->aParams, $aParams);
}
Добавляет параметры
public mixed CodeSourceParser(string $sText)
| ||
$sText | string | Исходный текст |
{return} | mixed |
public function CodeSourceParser($sText)
{
$sText = str_replace("<code>", '<pre class="prettyprint">', $sText);
$sText = str_replace("</code>", '</pre>', $sText);
$sText = str_replace("<codeline>", '<code class="prettyprint">', $sText);
$sText = str_replace("</codeline>", '</code>', $sText);
return $sText;
}
Подсветка исходного кода
public array Cut(string $sText)
| ||
$sText | string | Исходный текст |
{return} | array |
public function Cut($sText)
{
$sTextShort = $sText;
$sTextNew = $sText;
$sTextCut = null;
$sTextTemp = str_replace("\r\n", '[<rn>]', $sText);
$sTextTemp = str_replace("\n", '[<n>]', $sTextTemp);
if (preg_match("/^(.*)<cut(.*)>(.*)$/Ui", $sTextTemp, $aMatch)) {
$aMatch[1] = str_replace('[<rn>]', "\r\n", $aMatch[1]);
$aMatch[1] = str_replace('[<n>]', "\r\n", $aMatch[1]);
$aMatch[3] = str_replace('[<rn>]', "\r\n", $aMatch[3]);
$aMatch[3] = str_replace('[<n>]', "\r\n", $aMatch[3]);
$sTextShort = $aMatch[1];
$sTextNew = $aMatch[1] . ' <a name="cut"></a> ' . $aMatch[3];
if (preg_match('/^\s*name\s*=\s*"(.+)"\s*\/?$/Ui', $aMatch[2], $aMatchCut)) {
$sTextCut = trim($aMatchCut[1]);
}
}
return array($sTextShort, $sTextNew, $sTextCut ? htmlspecialchars($sTextCut) : null);
}
Производить резрезание текста по тегу cut. Возвращаем массив вида:
array( $sTextShort - текст до тега <cut> $sTextNew - весь текст за исключением удаленного тега $sTextCut - именованное значение <cut> )
protected string FlashParamParser(string $sText)
| ||
$sText | string | Исходный текст |
{return} | string |
protected function FlashParamParser($sText)
{
if (preg_match_all("@(<\s*param\s*name\s*=\s*(?:\"|').*(?:\"|')\s*value\s*=\s*(?:\"|').*(?:\"|'))\s*/?\s*>(?!</param>)@Ui",
$sText, $aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$str_new = $str . '></param>';
$sText = str_replace($aMatch[0][$key], $str_new, $sText);
}
}
if (preg_match_all("@(<\s*embed\s*.*)\s*/?\s*>(?!</embed>)@Ui", $sText, $aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$str_new = $str . '></embed>';
$sText = str_replace($aMatch[0][$key], $str_new, $sText);
}
}
/**
* Удаляем все <param name="wmode" value="*"></param>
*/
if (preg_match_all("@(<param\s.*name=(?:\"|')wmode(?:\"|').*>\s*</param>)@Ui", $sText, $aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$sText = str_replace($aMatch[0][$key], '', $sText);
}
}
/**
* А теперь после <object> добавляем <param name="wmode" value="opaque"></param>
* Решение не фантан, но главное работает :)
*/
if (preg_match_all("@(<object\s.*>)@Ui", $sText, $aMatch)) {
foreach ($aMatch[1] as $key => $str) {
$sText = str_replace($aMatch[0][$key], $aMatch[0][$key] . '<param name="wmode" value="opaque"></param>',
$sText);
}
}
return $sText;
}
Заменяет все вхождения короткого тега на длиную версию Заменяет все вхождения короткого тега на длиную версию
public Jevix GetJevix()
| ||
{return} | Jevix |
public function GetJevix()
{
return $this->oJevix;
}
Возвращает объект Jevix
public array|mixed GetParam(string|null $sName=NULL)
| ||
$sName | string|null | Если null, то вернет массив всех параметров |
{return} | array|mixed |
public function GetParam($sName = null)
{
if (is_null($sName)) {
return $this->aParams;
}
if (isset($this->aParams[$sName])) {
return $this->aParams[$sName];
}
return null;
}
Возвращает параметр по имени или сразу все параметры
public void Init()
|
public function Init()
{
/**
* Создаем объект типографа и запускаем его конфигурацию
*/
$this->oJevix = new Jevix();
$this->JevixConfig();
}
Инициализация модуля
protected void JevixConfig()
|
protected function JevixConfig()
{
// загружаем конфиг
$this->LoadJevixConfig();
}
Конфигурирует типограф
public string JevixParser(string $sText, array &$aError=NULL)
| ||
$sText | string | Исходный текст |
$aError | array | Возвращает список возникших ошибок |
{return} | string |
public function JevixParser($sText, &$aError = null)
{
// Если конфиг пустой, то загружаем его
if (!count($this->oJevix->tagsRules)) {
$this->LoadJevixConfig();
}
$sResult = $this->oJevix->parse($sText, $aError);
return $sResult;
}
Парсинг текста с помощью Jevix
public void LoadJevixConfig(string $sType='default', bool $bClear=true)
| ||
$sType | string | Тип конфига |
$bClear | bool | Очищать предыдущий конфиг или нет |
public function LoadJevixConfig($sType = 'default', $bClear = true)
{
if ($bClear) {
$this->oJevix->tagsRules = array();
}
$aConfig = Config::Get('jevix.' . $sType);
if (is_array($aConfig)) {
foreach ($aConfig as $sMethod => $aExec) {
foreach ($aExec as $aParams) {
if (in_array(strtolower($sMethod),
array_map("strtolower", array('cfgSetTagCallbackFull', 'cfgSetTagCallback')))) {
if (isset($aParams[1][0]) and $aParams[1][0] == '_this_') {
$aParams[1][0] = $this;
}
}
call_user_func_array(array($this->oJevix, $sMethod), $aParams);
}
}
/**
* Хардкодим некоторые параметры
*/
unset($this->oJevix->entities1['&']); // разрешаем в параметрах символ &
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) {
$this->oJevix->cfgSetTagParamDefault('a', 'rel', 'nofollow', true);
}
}
}
Загружает конфиг Jevix'а
public string Parser(string $sText)
| ||
$sText | string | Исходный текст |
{return} | string |
public function Parser($sText)
{
if (!is_string($sText)) {
return '';
}
$sResult = $this->FlashParamParser($sText);
$sResult = $this->JevixParser($sResult);
$sResult = $this->VideoParser($sResult);
$sResult = $this->CodeSourceParser($sResult);
return $sResult;
}
Парсит текст, применя все парсеры
public void RemoveParams(array|string|null $aNames=NULL)
| ||
$aNames | array|string|null | Название параметра или список названий параметров. Если null, то удалятся все параметры |
public function RemoveParams($aNames = null)
{
if (is_null($aNames)) {
$this->aParams = array();
}
if (!is_array($aNames)) {
$aNames = array($aNames);
}
foreach ($aNames as $sName) {
unset($this->aParams[$sName]);
}
}
Удаляет параметры
public string VideoParser(string $sText)
| ||
$sText | string | Исходный текст |
{return} | string |
public function VideoParser($sText)
{
/**
* youtu.be
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtu.be\/([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui',
'<iframe width="560" height="315" src="http://www.youtube.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>',
$sText);
/**
* youtube.com
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)(&.+)?<\/video>/Ui',
'<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>',
$sText);
/**
* vimeo.com
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)vimeo\.com\/(\d+).*<\/video>/i',
'<iframe src="http://player.vimeo.com/video/$1" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>',
$sText);
/**
* rutube.ru
*/
$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube\.ru\/tracks\/(\d+)\.html.*<\/video>/Ui',
'<iframe width="720" height="405" src="//rutube.ru/play/embed/$1" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>',
$sText);
$sText = preg_replace('/<video>http:\/\/(?:www\.|)rutube\.ru\/video\/([a-zA-Z0-9_\-]+)\/?<\/video>/Ui',
'<iframe width="720" height="405" src="//rutube.ru/play/embed/$1" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>',
$sText);
/**
* video.yandex.ru
*/
$sText = preg_replace('/<video>http:\/\/video\.yandex\.ru\/users\/([a-zA-Z0-9_\-]+)\/view\/(\d+).*<\/video>/i',
'<object width="467" height="345"><param name="video" value="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="noscale"></param><embed src="http://video.yandex.ru/users/$1/view/$2/get-object-by-url/redirect" type="application/x-shockwave-flash" width="467" height="345" allowFullScreen="true" scale="noscale" ></embed></object>',
$sText);
/**
* vk.com
*/
$sText = preg_replace('/<video>(http:\/\/(?:www\.|)vk\.com\/video_ext\.php.*)<\/video>/i',
'<iframe src="$1" width="607" height="360" frameborder="0"></iframe>', $sText);
return $sText;
}
Парсинг текста на предмет видео Находит теги
<video></video>и реобразовываетих в видео