Обработка кода перед подсветкой

  1. //Функция удаляет пустые строки в начале и конце кода
  2. function trim_code($code)
  3. {  
  4.   $code = explode("\n", $code);
  5.   $code_count = count($code);
  6.   if($code_count > 0)
  7.   {
  8.     //Удаляем пробелы и пустые строки в начале кода  
  9.     $i = 0;
  10.     while(isset($code[$i]) AND trim($code[$i])=='')
  11.     {
  12.       unset($code[$i]);
  13.       $i++;  
  14.     }
  15.     //Теперь удаляем в конце =)
  16.     $i = 0;
  17.     while(isset($code[$code_count-1-$i]) AND trim($code[$code_count-1-$i])=='')
  18.     {
  19.       unset($code[$code_count-1-$i]);
  20.       $i++;  
  21.     }
  22.   }
  23.   return implode("\n", $code);
  24. }
  25.  
  26. // Функция удаляет лишние пробелы перед строками не нарушая форматирование
  27. function check_space($code)
  28. {
  29.    $code = explode("\n", $code);
  30.    $spaces = array();
  31.    $code_count = count($code);
  32.    if($code_count > 0)
  33.    {
  34.      foreach($code AS $key=>$value)
  35.      {
  36.        if(trim($value) != '')
  37.        {  
  38.          $letters = str_split($value);
  39.          $count = count($letters);
  40.          $i = 0;
  41.          while($letters[$i] == ' ')
  42.          {
  43.            $i++;    
  44.          }
  45.          $spaces[] = $i;
  46.        }
  47.        else
  48.         $code[$key] = trim($value);  
  49.      }
  50.      if(count($spaces)>0)
  51.      {
  52.        $min_sp = min($spaces);
  53.        if($min_sp > 0)
  54.        {
  55.          $new_code = array();  
  56.          foreach($code AS $value)
  57.          {
  58.            if($value)
  59.              $new_code[] = mb_substr($value, $min_sp);
  60.            else
  61.              $new_code[] = $value;
  62.          }
  63.          $code = $new_code;    
  64.        }
  65.      }
  66.    }
  67.    return implode("\n", $code);
  68. }
  69.  
  70. function check_code()
  71. {
  72.     $code = str_replace("\r\n", "\n", $code);
  73.     $code = trim_code($code);
  74.     $code = check_space($code);
  75.     return $code;
  76. }
пример использования:
  1. $some_code =  check_code($some_code);

Для чего и как работает
Как правильно заметил кто-то на форуме (не смог найти этого сообщения, к сожалению) код при подсветке нельзя обрабатывать функцией trim() - нарушается форматирование. Функция trim_code() делает это более корректно, удаляя только пустые строки.

При копировании из редактора код может содержать лишние пробелы перед каждой строкой, функция check_space() удаляет их не нарушая изначального форматирования.

Наглядно: http://annimon.com/forum/file11199/screen.png

Реклама

Мы в соцсетях

tw tg yt gt