i21sys/Docu.Полезные сведения/Об F5.odc

Об использовании клавиши F5 

В Компонентном Паскале постоянно возникает необходимость печатать ключевые слова, состоящие только из заглавных букв. 
Кроме того, очень удобно иметь возможность сразу получать скелет сложных синтаксических конструкций типа IF .. THEN .. ELSE .. END и т.п.
Обе эти возможности добавлены в виде команд, которые вызываются либо при нажатии клавиш F5 или Shift+F5, либо, соответственно, через меню: Text -> Capitalize and expand (Текст > Заглавные и раскрыть) или Text -> Capitalize (Текст > Заглавные).

Например, предположим, что при написании какой-то процедуры нужно написать условный оператор. Наберем в соответствующем месте тела процедуры слово if маленькими буквами:

	PROCEDURE Do ( n: INTEGER );
		VAR  
	BEGIN
		if
	END Do;

и сразу после этого (пока курсор стоит сразу после if) нажмем F5. Получим:

	PROCEDURE Do ( n: INTEGER );
		VAR  
	BEGIN
		IF    THEN
			
		ELSE
			
		END;
	END Do;

Заметим, что при этом сохранена структура отступов, что важно и удобно. Правильное число отступов вставлено и в пустые строки.
Важно: правильная структура отступов будет возникать только в том случае, если в той строке, где стояло if, отступы были сделаны с помощью табуляций, а не пробелов!
Если нажать Shift+F5, то if превратится в IF без раскрытия в целую конструкцию.

По команде F5 (Shift+F5) превращение претерпевает цепочка малых букв и цифр, непосредственно предшествующая курсору.

Можно также выделить отрезок текста и вызвать команду. Тогда команда применяется к выделенному тексту.

Если слово из малых букв не соответствует никакому начальному ключевому слову, то просто слово из малых букв превращается в слово из больших.

В некоторых случаях происходит дополнительное форматирование: например, return превращается в RETURN, т.к. выполнение этого оператора прерывает поток управления по сравнению с текстуальным порядком, и это полезно отмечать.

Если включена поддержка ключевых слов на национальном языке (см. документацию к модулю i21sysVocabulary), то F5 автоматически будет работать правильно и на национальном языке.

Нетрудно изменить действие этой команды под свой стиль и вкус. Об этом в следующем разделе.


Как это устроено и где это менять

Оригинальная дистрибуция Блэкбокса содержит в подсистеме Obx пример превращения маленьких букв в большие.

Процедуры, выполняющие команды, вызываемые по F5 и т.д., написаны на Компонентном Паскале с использованием библиотек Блэкбокса и находятся в модуле i21sysEdit. 
Нажатием F5 вызывается процедура CapitalizeExpand, а нажатием Shift+F5 вызывается процедура Capitalize. 
Списки ключевых слов и алгоритмы, раскрывающие синтаксические конструкции, можно модифицировать под свои нужды. 
При этом можно добавлять литерные цепочки и отсутствующие в Компонентном Паскале (например, h128 -> HALT(128) и т.п.).
Можно начать с изучения документа i21sys/Rsrc/simples и аналогичного документа для национального языка, например, для русского языка i21sys/Rsrc/ru/simples. Управление угадыванием раскрываемых слов по первым буквам осуществляется с помощью списков keywords и hints в тех же папках. Там же содержатся необходимые пояснения.

Чтобы посмотреть, как процедуры Capitalize и CapitalizeExpand подцеплены в меню и посажены на функциональные клавиши, достаточно открыть документ с описанием меню для подсистемы Text (это обычный документ в стандартном формате Блэкбокса).
Он находится по адресу Text/Rsrc/Menus (данная гиперссылка открывает его только для чтения, на всякий случай). 

Чтобы добавить новые команды, работающие с текстом, достаточно скопировать в нужное место меню, скажем, строчку для команды Заглавные и модифицировать ее нужным образом. 
Исправленное меню активизируется командой Инфо > Обновить меню (Info > Update Menus)   перезапускать Блэкбокс для этого не нужно.
Нужно не забыть сохранить документ (Ctrl+S), чтобы исправленные меню автоматически активизировались при следующих запусках Блэкбокса.

________________
info21@inr.ac.ru
последние изменения: 2012-10-06