Обработка кода перед подсветкой
- //Функция удаляет пустые строки в начале и конце кода
- function trim_code($code)
- {
- $code = explode("\n", $code);
- $code_count = count($code);
- if($code_count > 0)
- {
- //Удаляем пробелы и пустые строки в начале кода
- $i = 0;
- while(isset($code[$i]) AND trim($code[$i])=='')
- {
- unset($code[$i]);
- $i++;
- }
- //Теперь удаляем в конце =)
- $i = 0;
- while(isset($code[$code_count-1-$i]) AND trim($code[$code_count-1-$i])=='')
- {
- unset($code[$code_count-1-$i]);
- $i++;
- }
- }
- return implode("\n", $code);
- }
- // Функция удаляет лишние пробелы перед строками не нарушая форматирование
- function check_space($code)
- {
- $code = explode("\n", $code);
- $spaces = array();
- $code_count = count($code);
- if($code_count > 0)
- {
- foreach($code AS $key=>$value)
- {
- if(trim($value) != '')
- {
- $letters = str_split($value);
- $count = count($letters);
- $i = 0;
- while($letters[$i] == ' ')
- {
- $i++;
- }
- $spaces[] = $i;
- }
- else
- $code[$key] = trim($value);
- }
- if(count($spaces)>0)
- {
- $min_sp = min($spaces);
- if($min_sp > 0)
- {
- $new_code = array();
- foreach($code AS $value)
- {
- if($value)
- $new_code[] = mb_substr($value, $min_sp);
- else
- $new_code[] = $value;
- }
- $code = $new_code;
- }
- }
- }
- return implode("\n", $code);
- }
- function check_code()
- {
- $code = str_replace("\r\n", "\n", $code);
- $code = trim_code($code);
- $code = check_space($code);
- return $code;
- }
пример использования:
Для чего и как работает
Как правильно заметил кто-то на форуме (не смог найти этого сообщения, к сожалению) код при подсветке нельзя обрабатывать функцией trim() - нарушается форматирование. Функция trim_code() делает это более корректно, удаляя только пустые строки.
При копировании из редактора код может содержать лишние пробелы перед каждой строкой, функция check_space() удаляет их не нарушая изначального форматирования.
Наглядно: http://annimon.com/forum/file11199/screen.png
- $some_code = check_code($some_code);
Для чего и как работает
Как правильно заметил кто-то на форуме (не смог найти этого сообщения, к сожалению) код при подсветке нельзя обрабатывать функцией trim() - нарушается форматирование. Функция trim_code() делает это более корректно, удаляя только пустые строки.
При копировании из редактора код может содержать лишние пробелы перед каждой строкой, функция check_space() удаляет их не нарушая изначального форматирования.
Наглядно: http://annimon.com/forum/file11199/screen.png