сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Паттерны и лексеры в файлах настроек


Автор: mozers™ / Дата: 23.04.2006 / Комментариев: 0
Категория: Документация, FAQ, Основные настройки


Паттерны и лексеры в файлах настроек
Изучая документацию по SciTE мы часто наталкиваемся на параметры filepattern и lexer, используемые в комбинации с различными командами. Что это за параметры и для чего они нужны?

Все дело в том, что некоторые команды предназначены только для файлов определенного типа. Использовать их для обработки других типов файлов было бы либо неверно либо неэффективно. Поэтому и были выдуманы эти дополнительные приставки к основному параметру, сужающие область его применения до файлов определенного типа.
Паттерн - не что иное как обычная пользовательская переменная, содержащая маску допустимых файлов:
Код .properties:
file.patterns.html=*.html;*.htm;*.asp;*.shtml

Т.е. мы можем назвать эту переменную как угодно и использовать ее в качестве паттерна:
Все таки я бы советовал называть вам паттерны в соответствии с правилами (поглядите как названы другие и присвойте имя своему паттерну по аналогии)
Код .properties:
command.go.$(file.patterns.html)=file://$(FilePath)

данная запись будет идеентична такой:
Код .properties:
command.go.*.html;*.htm;*.asp;*.shtml=file://$(FilePath)

но первая - лучше смотрится (особенно, если один и тот же паттерн надо применять многократно)

Лексер - действует аналогично сужая область применения параметра до файлов определенного типа. Название лексера - это название внутреннего обработчика определенного языка программирования. Имена лексеров зашиты в коде редактора и изменить их могут только программисты.
Мы сейчас не говорим про параметр lexer с помощью которого вы можете определить список расширений файлов, которые будет обрабатывать конкретный лексер:
Код .properties:
lexer.*.c;*.cc;*.cpp;*.cxx;*.h;*.hh;*.hpp;*.hxx;*.sma=cpp

обычно пишут так:
Код .properties:
lexer.$(file.patterns.cpp)=cpp

Сейчас мы говорим про cpp - это имя лексера в данном случае.
Вот это имя и используется для ограничения зоны действия того или иного параметра. Например, так:
Код .properties:
style.cpp.2=fore:#B00040

Так мы задали страшненький цвет для комментариев. Но действовать он будет только для файлов, обрабатываемых лексером cpp. Для всех остальных типов файлов эта установка не возимеет никакого действия.

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

Что использовать для ограничения параметра лексер или паттерн - вам на этот счет сомневаться не приходится - все задано однозначно и описано в документации. Главное тут - не препутать теплое с мягким.

Версия для печати / Прочитано: 17618 раз(а)

Комментариев: 0 (rss)



Добавить комментарий:
Имя:
E-mail:
        BBCodes




Интересные статьи / Тематические материалы © 2004 - 2017 - Хранение данных