SciTE - редактор кода для программистов http://scite.ruteam.ru/index.php SciTE - редактор кода для программистов ru CuteNews.RU 2.5.4 <![CDATA[Auto-indent (автоотступ) для <acronym title="PHP Hypertext Processor">PHP</acronym> и JavaScript]]> http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript PHP и Java-Script отключен по умолчанию. О том как его включить, читайте здесь.]]> http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment1 xDude, молодец!]]> Mon, 06 Mar 2006 21:37:35 +0300 http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment2 PHP он начинает работать неправильно, т.е. после такой вот конструкции:
Код PHP:
if($q == 0) {

Курсор встает не на следующую струку через таб как ожидалось, а на следующую строку уже без таба.

Эта проблема решается удалением идента для JS. Тестировать наоборот не пробовал, ибо лень :)]]>
Wed, 08 Mar 2006 16:05:45 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment3 Тугаринов Сергей,
Курсор встает не на следующую струку через таб как ожидалось, а на следующую строку уже без таба.

У меня все ок. Правда правильней, имхо, написать:
Код PHP:
PHP">#PHP Auto-Indent
statement.indent.$(file.patterns.php)

и т.д.
Чтобы для файлов PHP, INC и т.д. работало.]]>
Thu, 09 Mar 2006 17:26:45 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment4 Thu, 09 Mar 2006 18:37:08 +0300 http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment5 PHP (или наоборот :)) ), так что думаю, что все нормально.]]> Thu, 09 Mar 2006 18:38:52 +0300 http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment6 Тугаринов Сергей,
Если прописывать 'html', то получается, что настройки идут на HyperText, а он в себя в свою очередь включает PHP (или наоборот :)) ), так что думаю, что все нормально.

А мне кажется, что не нормально... Тестирую на php-файле.
3 Варианта сочетаний подключения:
1. file.patterns.html + индент для JS: не работает вообще индент.
2. file.patterns.html - индент для JS (не подключаю): работает весьма глючно - не делает отступ для текста в блоке, но скобку ставит правильно.
3. file.patterns.php + индент для JS: все работает чудесно.]]>
Thu, 09 Mar 2006 18:56:07 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment7 2. Второй также
3. Последний, да ты прав (каюсь) все отлично.

UPDATE:
Поправил статью.]]>
Thu, 09 Mar 2006 21:26:32 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment8 PHP считается скриптовым языком, втраиваемым в html-код, как Javascript, поэтому file.patterns.html правильней. Возможно, глюки связаны с реализацией SciTE, например, я пользуюсь CVS-сборкой, в которой, как я прочитал на офф-сайте, исправлены некоторые глюки.]]> Thu, 09 Mar 2006 22:16:19 +0300 http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment9 xDude,
Странно, но у меня все работает отлично с file.patterns.html. А file.patterns.php - ИМХО, немного неправильно, потому что ПХП может встречаться и в файлах .html. PHP считается скриптовым языком, втраиваемым в html-код, как Javascript, поэтому file.patterns.html правильней

Вот вот, о том же и я писал выше, но для моей и не только редакции SciTE это предположение оказалось неверным. Насчет сборки с поддержкой CVS я не знаю (кстати, опиши плиз, как она с CVS работает), видел, но не скачивал, вполне возможно, что она стабильнее, но так как большинство пользователей ИМХО используют стандартную сборку, то давай пока оставим все как есть, до выяснения :)]]>
Thu, 09 Mar 2006 22:23:56 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment10 Она висит на оффициальном сайте, уже собранная с CVS самими разработчиками. Не знаю только, обновляют ли они её по мере обновления CVS, и как часто они это делают. Ясно только одно: она может быть не так стабильна, как стандартный релиз, но в то же время в ней реализовано больше функций, и пофикшены некоторые баги стандартного релиза.]]> Thu, 09 Mar 2006 22:43:49 +0300 http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment11 Тугаринов Сергей,
Курсор встает не на следующую струку через таб как ожидалось, а на следующую строку уже без таба.


По логике statement.lookback как раз и влияет на то, на сколько парсер должен возвращаться назад, чтоб проверить, было ли перед ним ключевое слово, после которого нужно сделать отступ. Хотя, я могу и ошибаться. Так вот, проверь (поиском по файлам), есть ли у тебя в каких-нибудь *.properties statement.lookback=??, и закомментируй его. И еще, по-моему, нужно везде закомментировать indent.maintain=1, или установить его в 0]]>
Thu, 09 Mar 2006 22:48:10 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment12 xDude,
CVS-сборка с CVS-ом не работает, то есть, не нужно для этого лезть в их CVS-репозитарий :)

Жаль, я думал, что у нее есть поддержка работы с CVS :)
Прямую ссылочку на нее не скинешь, гляну что почем.

xDude,
Кстати, по логике statement.lookback как раз и влияет на то, на сколько парсер должен возвращаться назад, чтоб проверить, было ли перед ним ключевое слово, после которого нужно сделать отступ. Хотя, я могу и ошибаться. Так вот, проверь (поиском по файлам), есть ли у тебя в каких-нибудь *.properties statement.lookback=??, и закомментируй его. И еще, по-моему, нужно везде закомментировать indent.maintain=1, или установить его в 0.

Смотрел, ничего нет, везде и все убрано, т.е. в принципе никаких подводных камней не должно быть.]]>
Thu, 09 Mar 2006 22:48:53 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment13
Если фигурные скобки набирать по одной, то всё получается нормально:
Код:

if ( /*some statement*/ )
{
// some code goes here
}


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

Однако если обе скобки набирать сразу, то закрывающая скобка остается висеть с отступом:
Код:

if ( /*some statement*/ )
{
// some code goes here
}


Может быть есть какая-то возможность изменить это поведение?

P.S. в последних версиях Zend Studio ИМХО это сделано довольно грамотно: при нажатии Enter между открывающей и закрывающей фигурными скобками закрывающая скобка сносится на две строки вниз, а курсор выставляется на строку между ними и делается отступ:
Код:

1. if ( /*some statement*/ )
{|} // <-- курсор стоит в указанной позиции, нажимаем Enter

2. if ( /*some statement*/ )
{
| // <-- получается так
}

]]>
Sat, 11 Mar 2006 13:23:30 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment14 Тугаринов Сергей,
Жаль, я думал, что у нее есть поддержка работы с CVS :)
Прямую ссылочку на нее не скинешь, гляну что почем.

Поддержка работы с CVS - в смысле, прямо из скайта? :))
Это было бы модно :)
А вот, что надо, для того, чтоб получить исходники с CVS:
Код:

"C:\Program Files\cvsnt\cvs.exe" -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/scintilla login
"C:\Program Files\cvsnt\cvs.exe" -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/scintilla co -P scintilla
"C:\Program Files\cvsnt\cvs.exe" -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/scintilla co -P scite

Если спросит пароль - ничего не вводить, просто нажать Enter.
Для этого понадобится CVS-клиент (у меня это WinCVS+cvsnt, http://optusnet.dl.sourceforge.net/sourceforge/cvsgui/WinCvs2_0_2-4.zip)]]>
Mon, 13 Mar 2006 23:52:18 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment15 xDude,
А вот, что надо, для того, чтоб получить исходники с CVS:

Спасибо, уже получал, правда для этого я пользуюсь встроенным CVS клиентов в IDE Eclipse. Если пишешь на C++, посмотри её, очень приятная IDE.]]>
Tue, 14 Mar 2006 00:02:06 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment16 PHP и JavaScript если указывать file.patterns.html. Просто настройки перекрываются, несмотря на то, что типы после "=" стоят разные коды. То есть, если указать
Код:
statement.indent.$(file.patterns.html)=121 do else for if while case function

а после этого указать Код:
statement.indent.$(file.patterns.html)=47 do else for if while case function

то последняя настройка перекроет первую, и индент будет работать только для последней (в файлах file.patterns.html), то есть, только для JavaScript'а (47)
Причем этот баг у них по идее исправлен (хотя я уже не уверен) в CVS-версии 1.67, а вот в 1.68 он опять появился :(
Короче, чтобы индент работал для всех языков, нужно, чтобы эти языки находились в фалах с разными расширениями (PHP в *.php, JavaScript в *.js и т.д.). А если в файле *.html есть и PHP, и JavaScript, и что-то-там-еще (например, ASP), и для фалов *.html прописаны настройки AutoIndent для всех этих языков, то работать будут только те настройки, которые указаны в конфигурации последними, потому что они тупо перекроют все предыдущие. Я покопался в исходниках SciTE, но ничего обнадеживающего так и не выкопал, а эксперементировать времени не хватает :(
Так что будем надеяться, что кто-нибудь с этим вопросом обратится к разработчикам, и они выложат в CVS-репозитарий пофикшенную версию.]]>
Tue, 14 Mar 2006 01:23:19 +0300
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment17 xDude
Все очень хорошо, но нарушена логика.
Обработка JavaScript задана в cpp.properties
Следовательно, если нужен автоиндент для JS то надо задавать его именно в этом файле.
Точнее - задавать то ничего не надо (там все есть). Единственное что надо изменить в оригинальном файле - добавить *.js в перечень паттерна file.patterns.c.like.
Что, в file.js работает, а в file.html - нет? ;) Да так и задумано! :)))
Просто если в file.html ты задумал редактировать входящий в него JS код, то не почти за труд, переключи в меню Language язык с Hipertext на JavaScript.]]>
Fri, 31 Mar 2006 09:52:29 +0400
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment18 mozers™,
Что, в file.js работает, а в file.html - нет? ;) Да так и задумано! :)))
Просто если в file.html ты задумал редактировать входящий в него JS код, то не почти за труд, переключи в меню Language язык с Hipertext на JavaScript.

Как всегда, появился mozers, и всех сделал :)]]>
Fri, 31 Mar 2006 16:40:40 +0400
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment19 mozers™,
Обработка JavaScript задана в cpp.properties

Насколько я понял логику SciTE, безразлично, в каком файле указаны настройки. Можно вообще все настройки объеденить в один большой .properties, просто их разбили по разным файлам чисто для удобства.
mozers™,
Что, в file.js работает, а в file.html - нет? ;) Да так и задумано! :)))
Просто если в file.html ты задумал редактировать входящий в него JS код, то не почти за труд, переключи в меню Language язык с Hipertext на JavaScript.

Все немного сложнее, насколько мне кажется. Дело в том, что файлы *.js по умолчанию парсятся лексером C, а файлы *.html - лексером html, который включает в себя парсинг вложенных скриптовых языков, таких как PHP,ASP,Python-script, javascript и т.д. Т.е., переключая Language, мы просто меняем парсер. Это, не решает проблему парсера HTML, а просто перекладывает ее с больной головы на здоровую, то есть, на парсер C. А что если у меня в html-файле сразу несколько языков (а оно так и есть)? Например, PHP+JavaScript+сам HTML? Причем, идут они вперемешку, маленькими кусочками. Это ж как можно запариться языки для них всех переключать постоянно! Именно для этого и придуман универсальный парсер HTML с поддержкой вложенных языков (там даже в комментариях к стилям в html.properties пишется, что это не просто стиль для JS, а именно для Embedded JS, то же самое для ASP,PHP и других языков).
Конечно, я могу ошибаться насчет всего этого, или чего-то недопонимать в архитектуре SciTE, но, ИМХО, проблема остается открытой.]]>
Sat, 22 Apr 2006 03:04:17 +0400
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment20 mozers™
Да, и еще: ведь работало же это все в версии 1.67 CVS, 100% работало, потому что как только появился 1-ый пост, что у кого-то на нормальной версии сглючило, я у себя протестировал, и отписался, что все работает ОК с CVS-сборкой.]]>
Sat, 22 Apr 2006 03:12:53 +0400
http://scite.ruteam.ru/scite/auto-indent-avtootstup-dlya-php-i-javascript#comment21 DeadMoroz,
Однако если обе скобки набирать сразу, то закрывающая скобка остается висеть с отступом:
DeadMoroz,
Может быть есть какая-то возможность изменить это поведение?

На данный момент в скрипте smartbraces.lua это работает для cpp и css, если в условия
( editor.LexerLanguage == \'cpp\' or editor.LexerLanguage == \'css\')
, которые находятся на 252 и 296 строчках добавить
or editor.LexerLanguage == \'hypertext\'
То то же самое будет применяться для php(и не только)]]>
Thu, 10 Dec 2009 18:59:31 +0300