Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать структурированный код?
 
 автор: Loki   (10.11.2005 в 09:14)   письмо автору
 
 

Попалась мне тут в руки одна программка-валидатор. Мне там приглянулась одна функция: показывается дерево всех тегов (html) со всей их вложенностью и структурой. И вот задумался я о структурном коде... понятно, что когда его пишешь, то стараешься оформлять соотвествующим образом, но вот в процессе переписывания или отладки - совсем ен до того. Что хочется: либо программку, либо скрипт, которому можно скормить файл и он бы его соотвествующим образом оформил (имеются ввиду отступы и соответствие фигурных скобок). Если ни того ни другого на примере нет, то примерный алгоритм как это можно реализовать (для структурирования php кода, понятное дело).

   
 
 автор: Loki   (10.11.2005 в 09:21)   письмо автору
 
   для: Loki   (10.11.2005 в 09:14)
 

Пока идея следующая: если находим открывающую фигурную скобку, то делаем ++ к отступу, если закрывающую, то делаем --. Если находим точку с запятой - переводим строку.
Только как сделать, чтобы не обрабатывались данные в кавычках? Ну и еще какие-нить случаи надо предусмотреть...

   
 
 автор: DDK   (10.11.2005 в 10:30)   письмо автору
 
   для: Loki   (10.11.2005 в 09:21)
 

Такие штуки, вроде, называются CodeSweeper'ами... В HomeSite, например, есть набор таких для HTML и JS... Значит, где-то ещё можно найти и для PHP :)

   
 
 автор: Loki   (10.11.2005 в 11:04)   письмо автору
 
   для: DDK   (10.11.2005 в 10:30)
 

попробовал в гугле "code sweeper for php"... всего пара скриптов нашлась, да и те, как я понял, только убирают лишние строки и пробелы... короче, всем подавай быстро, а мне - красиво:)
Пытаюсь придумать алгоритм, но пока получается какая-то лажа:
1. считываем файл в переменную.
2. убираем все двойные пробелы и знаки табуляции, находящиеся вне кавычек
3. убераем все переводы строк
4. начинаем побайтово просматривать текст, заменяя все фигурные скобки на отступ+скобка+перевод строки (закрывающие заменять не надо будет, просто перевести строку), а все точки с запятой на точка с запятой+перевод строки+отступ

пункт 2 у меня вызывает трудности..
по пункту 4 остаются неясности, но пока не готов из сформулировать.

   
 
 автор: cheops   (10.11.2005 в 13:05)   письмо автору
 
   для: Loki   (10.11.2005 в 11:04)
 

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

   
 
 автор: Loki   (10.11.2005 в 14:10)   письмо автору
 
   для: cheops   (10.11.2005 в 13:05)
 

если обрабатывать весь файл, то да. А если побайтово, то не понадобится. Просто встречая открывающую скобку увеличиваем отступ на единицу, а первая же закрывающая - уменьшает его.

Быть может поделитесь идеями по второму пункту? а дальше, может и сам осилю:)

   
 
 автор: cheops   (10.11.2005 в 22:40)   письмо автору
 
   для: Loki   (10.11.2005 в 14:10)
 

Наверное их нужно регулярными выражениями глушить... хотя... может тоже побайтово: как встретили кавычку перестаём удалять, как нашли завершающую - начинаем по новой...

   
 
 автор: Loki   (11.11.2005 в 00:08)   письмо автору
 
   для: cheops   (10.11.2005 в 22:40)
 

Хм... а как быть с одинарными/двойными?

   
 
 автор: cheops   (11.11.2005 в 00:28)   письмо автору
 
   для: Loki   (11.11.2005 в 00:08)
 

Пока не открыта ни одна кавычка реагировать на каждую кавычку, будь то двойная или одинарная, как только кавычка открыта - баста, ищем закрывающую кавычку этого вида не реагируя ни на что, ни на лишние пробелы, ни на кавычки.

   
 
 автор: isset   (11.11.2005 в 00:30)   письмо автору
 
   для: cheops   (11.11.2005 в 00:28)
 

+ проверить что перед кавычкой нет знака "\"

   
 
 автор: cheops   (11.11.2005 в 00:34)   письмо автору
 
   для: isset   (11.11.2005 в 00:30)
 

Кстати, да... ещё и экранирование...

   
 
 автор: isset   (11.11.2005 в 23:21)   письмо автору
 
   для: Loki   (10.11.2005 в 09:14)
 

SourceFormatX
http://www.textrush.com/formatx.htm

PHP Code Beautifuler
http://www.phpedit.net/products/phpCodeBeautifier/

Онлайнсервис
http://www.tote-taste.de/X-Project/beautify/index.html

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования