Исправление и оптимизация метода Cut модуля Text

Разработка под LiveStreet CMS
Метод
public function Cut($sText)
из модуля Text далеко не идеальный и видно что раньше он брал на себя часть забот парсера, например, превращал все переводы строк в унифицированную форму, хотя на сегодняшний день вместо него это успешно делает Jevix.

Проблемы

  • Метод занимается работой парсера по унификации переводов строк (вин/*никс, а про макось забыли, кстати), уже не нужна т.к. делает это Jevix
  • Из-за задачи выше метод копирует текст и производит в нем до 6 лишних замен переводов строк во временные символы и обратно. Добавление модификатора регулярки и эти замены не нужны
  • Лишний расход памяти
  • Ошибочный код, позволяющий писать тег «кат» следующими неправильными вариантами:
    
    <cutname="Имя тега кат">
    <cutname="Имя тега кат" "Ещё параметр" "Можно добавить, лишних не бывает">
    

и другие комбинации, все они будут работать.

Рефакторинг

Помимо исправления вышеуказанных ошибок этот код быстрее будет работать на больших текстах.

public function Cut($sText) {
  $sTextShort = $sText;
  $sTextNew = $sText;
  $sTextCut = null;

  if (preg_match("#^(.*)<cut([^>]*+)>(.*)$#Usi", $sText, $aMatch)) {
    $sTextShort = $aMatch[1];
    $sTextNew = $aMatch[1] . ' <a name="cut"></a> ' . $aMatch[3];
    if (preg_match('#^\s++name\s*+=\s*+"([^"]++)"\s*+\/?$#i', $aMatch[2], $aMatchCut)) {
      $sTextCut = trim($aMatchCut[1]);
    }
  }

  return array($sTextShort, $sTextNew, $sTextCut ? htmlspecialchars($sTextCut) : null);
}
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.