Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Проблема с Simple парсером

Свободное общение.
AlexeyScherbakov
Сообщений: 29
Зарегистрирован: 14 июн 2013, 23:25

Проблема с Simple парсером

Сообщение AlexeyScherbakov » 17 июл 2015, 14:15

Проблема 1
Есть текст, в нём нужно добавить к абзацам отступ, делается это примерно так
_(pad10-l)
Что означает, что отступ будет слева на 10px
http://unicss.maxsite.com.ua/group-mar
http://lpf.maxsite.com.ua/autotag-single
Проблема появляется когда абзацы идут один за другим, и в таких абзацах используется назначение класса
Код:

Код: Выбрать все

_ Пока пользователь не ввел контрольное значение
_(pad10-l)  Прибавить данную оценку к текущей сумме
_(pad10-l)  Прибавить единицу к счётчику оценок
_(pad10-l)  Предложить пользователю ввести следующую оценку
_(pad10-l)  Ввести следующую оценку (возможно контрольное значение)

Вывод:
Изображение
Код:

Код: Выбрать все

_ Пока пользователь не ввел контрольное значение

_(pad10-l)  Прибавить данную оценку к текущей сумме

_(pad10-l)  Прибавить единицу к счётчику оценок

_(pad10-l)  Предложить пользователю ввести следующую оценку

_(pad10-l)  Ввести следующую оценку (возможно контрольное значение)

Вывод:
Изображение
Проблема 2
Так-же есть следующая проблема
у меня есть многострочный комментарий в c++

Код: Выбрать все

      /*
       * setprecision - парметризированный
       * манипулятор потока, требует #include
       * округляет до заданного кол-ва знаков после
       * запятой
       * <iomanip>, endl - непараметризированный
       * манипулятор потока, iomanip не трубует.
       * fixed - манипулятор потока, указывает, что значения с плавающей точкой
       * должны выводиться в так называемом формате
       * с фиксированной точкой, в
       * противополоэность научной нотации
       * стр.232
      */

парсер заменяет * на что-то своё, вне зависимости от того заключён ли данный кусок текста в @@ или в [pre][/pre], я пробовал такую конструкцию @[pre]code[pre]@ однако тогда @ не срабатывает, выводится текстом

Возможное решение:
Вспомнил, что парсер не воспринимает если нет пробела, поэтому сделал так:

Код: Выбрать все

/*
       *setprecision - парметризированный
       *манипулятор потока, требует #include
       *округляет до заданного кол-ва знаков после
       *запятой
       *<iomanip>, endl - непараметризированный
       *манипулятор потока, iomanip не трубует.
       *fixed - манипулятор потока, указывает, что значения с плавающей точкой
       *должны выводиться в так называемом формате
       *с фиксированной точкой, в
       *противополоэность научной нотации
       *стр.232
      */
Последний раз редактировалось AlexeyScherbakov 17 июл 2015, 15:10, всего редактировалось 1 раз.

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Проблема с Simple парсером

Сообщение MAX » 18 июл 2015, 11:27

Попробуйте этот текст в LPF — там есть конструкция

Код: Выбрать все

 <!-- nosimple --> текст без обработки <!-- \nosimple -->


Я пока не решил стоит ли включать этот код в MaxSite CMS. Как вариант можете поправить parser_simple взяв код из simple http://lpf.maxsite.com.ua/

AlexeyScherbakov
Сообщений: 29
Зарегистрирован: 14 июн 2013, 23:25

Re: Проблема с Simple парсером

Сообщение AlexeyScherbakov » 17 окт 2015, 11:20

Вызвало следующую ошибку при использвании

Код: Выбрать все

A PHP Error was encountered
Severity: Warning
Message: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'autotag_simple_no', to be a valid callback
Filename: parser_simple/index.php
Line Number: 50

мой новый parser_simple/index.php
 Свернуть/Развернуть спойлер

Код: Выбрать все

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 * http://lpf.maxsite.com.ua/autotag-single
 */

function parser_simple_autoload()
{
   mso_hook_add('parser_register', 'parser_simple_register');  // парсер Simple
}

function parser_simple_register($parsers = array())
{
   $parsers['Simple'] = array( // имя парсера
      'content' => 'parser_simple_content', // функция обработчик на хуке content
      'content_post_edit' => 'parser_simple_post_edit', // функция перед отправкой в БД
   );
   
   return $parsers;
}


function parser_simple_content($text = '')
{
   $text = autotag_simple($text);
   
   return $text;
}


function parser_simple_post_edit($text = '')
{
   // глюк FireFox исправлем замену абсолютного пути src на абсолютный
   $text = str_replace('src="../../', 'src="' . getinfo('site_url'), $text);
   $text = str_replace('src="../', 'src="' . getinfo('site_url'), $text);

   return $text;
}


function autotag_simple($text)
{
   $text = str_replace(array("\r\n", "\r"), "\n", $text); // win-dos
   
   $text = "\n" . $text . "\n";
   
   // <!-- nosimple --> текст без обработки <!-- \nosimple -->
   $text = preg_replace_callback('!(<\!-- nosimple -->)(.*?)(<\!-- \/nosimple -->)!is', 'autotag_simple_no', $text);
   
   $text = preg_replace('!\n\s*_\s(.*?)\n!', "\n\n<p>$1</p>\n", $text);
   $text = preg_replace('!\n\s*_\s(.*?)\n!', "\n\n<p>$1</p>\n", $text);
   
   $text = preg_replace('!\n\s*_\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n\n<p class=\"$1\" style=\"$2\">$3</p>\n", $text);
   $text = preg_replace('!\n\s*_\((.*?)\)\s(.*?)\n!', "\n\n<p class=\"$1\">$2</p>\n", $text);
   
   $text = preg_replace('!\n\s*h1\s(.*?)\n!', "\n<h1>$1</h1>\n", $text);
   $text = preg_replace('!\n\s*h2\s(.*?)\n!', "\n<h2>$1</h2>\n", $text);
   $text = preg_replace('!\n\s*h3\s(.*?)\n!', "\n<h3>$1</h3>\n", $text);
   $text = preg_replace('!\n\s*h4\s(.*?)\n!', "\n<h4>$1</h4>\n", $text);
   $text = preg_replace('!\n\s*h5\s(.*?)\n!', "\n<h5>$1</h5>\n", $text);
   $text = preg_replace('!\n\s*h6\s(.*?)\n!', "\n<h6>$1</h6>\n", $text);
   
   $text = preg_replace('!\n\s*h1\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h1 class=\"$1\" style=\"$2\">$3</h1>\n", $text);
   $text = preg_replace('!\n\s*h2\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h2 class=\"$1\" style=\"$2\">$3</h2>\n", $text);
   $text = preg_replace('!\n\s*h3\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h3 class=\"$1\" style=\"$2\">$3</h3>\n", $text);
   $text = preg_replace('!\n\s*h4\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h4 class=\"$1\" style=\"$2\">$3</h4>\n", $text);
   $text = preg_replace('!\n\s*h5\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h5 class=\"$1\" style=\"$2\">$3</h5>\n", $text);
   $text = preg_replace('!\n\s*h6\((.*?)\)\((.*?)\)\s(.*?)\n!', "\n<h6 class=\"$1\" style=\"$2\">$3</h6>\n", $text);
   
   $text = preg_replace('!\n\s*h1\((.*?)\)\s(.*?)\n!', "\n<h1 class=\"$1\">$2</h1>\n", $text);
   $text = preg_replace('!\n\s*h2\((.*?)\)\s(.*?)\n!', "\n<h2 class=\"$1\">$2</h2>\n", $text);
   $text = preg_replace('!\n\s*h3\((.*?)\)\s(.*?)\n!', "\n<h3 class=\"$1\">$2</h3>\n", $text);
   $text = preg_replace('!\n\s*h4\((.*?)\)\s(.*?)\n!', "\n<h4 class=\"$1\">$2</h4>\n", $text);
   $text = preg_replace('!\n\s*h5\((.*?)\)\s(.*?)\n!', "\n<h5 class=\"$1\">$2</h5>\n", $text);
   $text = preg_replace('!\n\s*h6\((.*?)\)\s(.*?)\n!', "\n<h6 class=\"$1\">$2</h6>\n", $text);
   
   $text = preg_replace('!\n\s*hr\s*\n!', "\n<hr>\n", $text);
   $text = preg_replace('!\n\s*hr\((.*?)\)\s*\n!', "\n<hr class=\"$1\">\n", $text);
   
   $text = preg_replace('!\n\s*div\n!', "\n<div>\n", $text);
   $text = preg_replace('!\n\s*\/div\n!', "\n</div>\n", $text);
   
   $text = preg_replace('!\n\s*div\((.*?)\)\((.*?)\)\n!', "\n<div class=\"$1\" style=\"$2\">\n", $text);
   $text = preg_replace('!\n\s*div\((.*?)\)\n!', "\n<div class=\"$1\">\n", $text);   
   
   $text = preg_replace('!\n\s*ul\n!', "\n<ul>\n", $text);
   $text = preg_replace('!\n\s*\/ul\n!', "\n</ul>\n", $text);
   $text = preg_replace('!\n\s*ul\((.*?)\)\n!', "\n<ul class=\"$1\">\n", $text);
   
   $text = preg_replace('!\n\s*ol\n!', "\n<ol>\n", $text);
   $text = preg_replace('!\n\s*\/ol\n!', "\n</ol>\n", $text);   
   $text = preg_replace('!\n\s*ol\((.*?)\)\n!', "\n<ol class=\"$1\">\n", $text);
   
   $text = preg_replace('!\n\s*\*\s(.*?)\n!', "\n<li>$1</li>\n", $text);
   $text = preg_replace('!\n\s*\*\s(.*?)\n!', "\n<li>$1</li>\n", $text);
   
   $text = preg_replace('!\n\s*bq\n!', "\n<blockquote>\n", $text);
   $text = preg_replace('!\n\s*\/bq\n!', "\n</blockquote>\n", $text);
   
   $text = preg_replace('!\n\s*bq\((.*?)\)\n!', "\n<blockquote class=\"$1\">\n", $text);
   
   $text = preg_replace('! __(.*?)__!', " <i>$1</i>", $text);
   $text = preg_replace('! _(.*?)_!', " <em>$1</em>", $text);
   
   $text = preg_replace('! \*\*(.*?)\*\*!', " <b>$1</b>", $text);
   $text = preg_replace('! \*(.*?)\*!', " <strong>$1</strong>", $text);
   
   $text = preg_replace('! \@(.*?)\@!', " <code>$1</code>", $text);

   // br для совместимости
   $text = str_replace('[br]', '<br style="clear:both">', $text);
   $text = str_replace('[br none]', '<br>', $text);
   $text = str_replace('[br left]', '<br style="clear:left">', $text);
   $text = str_replace('[br right]', '<br style="clear:right">', $text);
   
   return trim($text);
}

# end file


Вернуться в «Курилка»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron