i21sys/Docu/ru/Edit.odc

i21sysEdit

DEFINITION i21sysEdit;

	PROCEDURE AddHints (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
	PROCEDURE AddKeywords (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
	PROCEDURE AddSimples (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
	PROCEDURE Capitalize;
	PROCEDURE CapitalizeExpand;
	PROCEDURE Init;
	PROCEDURE ShowHints;
	PROCEDURE ShowKeywords;
	PROCEDURE ShowSimples;

END i21sysEdit.

Пакет команд для облегчения набора синтаксических конструкция языка Компонентный Паскаль с учётом выбранного национального языка для ключевых слов. 
Возможные команды меню:

MENU "Text" ("TextViews.View")
	"Capitalize"	"*F5"	"i21sysEdit.Capitalize"	"TextCmds.FocusGuard"
	"Capitalize && Expand"	"F5"	"i21sysEdit.CapitalizeExpand"	"TextCmds.FocusGuard"
	"Install Expansions For Ru"	""	"i21sysVocabulary.SetLanguage('ru')"	""
END

PROCEDURE Capitalize
"Капитализировать"
Определяется фрагмент, который преобразуется к заглавным буквам: 
Если в тексте ничего не выделено, то перед курсором определяется длиннейшая литерная цепочка, состоящая из букв и цифр; 
в противном случае берется выделенный фрагмент, в нем не должно быть вьюшек.
Во фрагменте строчные буквы заменяются на заглавные, и для всех букв делается попытка перевода в юникод в соответствии с установками в модуле i21sysCharacters.


PROCEDURE CapitalizeExpand
"Капитализировать и раскрыть"
Выполняется Capitalize, но при этом ещё производится разворачивание одной из синтаксических конструкций для Компонентного Паскаля. Здесь задействован довольно мощный механизм, возможности которого описываются ниже.

В простейшем случае, когда работа идёт с программами на стандартном (англоязычном) Компонентном Паскале, синтаксическая конструкция, которую надо развернуть, определяется по первому ключевому слову. То есть if развернется в условный оператор.

Если преобразуемый фрагмент не является ключевым словом, то делается попытка угадать, началом какой конструкции является этот фрагмент. Например, wh является началом цикла WHILE. 

Если алгоритм неправильно угадал желаемую конструкцию по начальным буквам, то достаточно сделать отмену нажатием Ctrl+Z, добавить ещё букв и снова нажать F5, и так далее до нужного результата.

Если в модуле i21sysVocabulary был определён словарь перевода ключевых слов Компонентного Паскаля на национальный язык, то процедура умеет это учитывать при раскрытии синтаксических конструкций. 
Например, в русскоязычном случае две буквы по автоматически раскроются в заготовку цикла ПОКА ... ДЕЛАТЬ ... КОНЕЦ. 
Для этого не требуется никаких дополнительных усилий: 
достаточно составить и подключить нужный словарик перевода ключевых слов (см. документацию к модулю i21sysVocabulary)  и процедура CapitalizeExpand будет работать достаточно разумно в соответствии со сказанным выше.
Например, для кабардинского языка достаточно создать словарик i21sys/Rsrs/kabarda/vocab.odc и активировать его парой вызовов 	
	i21sysVocabulary.SetLanguage('kabarda'); i21sysEdit.Init
(причём второй вызов не обязателен, если язык устанавливается в процедуре Setup модуля Config).

PROCEDURE Init
Переопределение внутренних таблиц в соответствии с языком, установленным на момент вызова в переменной i21sysVocabulary.language.


Тонкая настройка механизма процедуры CapitalizeExpand

Подсказки для алгоритма угадывания по первым буквам
Имеется возможность сделать "подсказки" алгоритму угадывания, чтобы сделать его более удобным. Например, гарантированно раскрывать i в INTEGER, а не IF, а p в PROCEDURE, а не POINTER.

Этому служат документы с именами hints (i21sys/Rsrc/hints.odc, i21sys/Rsrc/ru/hints.odc и т.д.). 
В частности, i21sys/Rsrc/hints.odc содержит необходимые объяснения; этот документ подключается всегда (если он присутствует).
Документы вида i21sys/Rsrc/ru/hints.odc подключаются автоматически, если был задан соответствующий национальный язык вызовом, для данного файла, i21sysVocabulary.SetLanguage('ru').

PROCEDURE AddHints (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
Позволяет добавить в текущий список подсказок (без его предварительного обнуления и без задания национального языка) подсказки из документа name.odc, находящегося в папке i21sys/Rsrc/lan/ (например, i21sys/Rsrc/ru/ при lan='ru'). 
Параметр lan может указывать и глобальный путь к некоторой папке (например, 'c:/myblackbox/'), в которой тогда и ищется документ name.odc. 

PROCEDURE ShowHints;
Печатает в рабочий журнал текущий список подсказок.


Простые "макрорасширения"
Имеется возможность обеспечить, например, чтобы комбинация букв as раскрывалось в ASSERT(); причем курсор уже стоял бы между скобок. 
Или чтобы слово "тире" раскрывалось в литеру "" (em-dash).
(После такого "макрорасширения" подстановка синтаксической конструкции вроде скелета цикла уже не делается.)

Этому служат документы с именами simples (i21sys/Rsrc/simples.odc, i21sys/Rsrc/ru/simples.odc и т.д.). 
В частности, i21sys/Rsrc/simples.odc содержит необходимые объяснения; этот документ подключается всегда (если он присутствует).
Документы вида i21sys/Rsrc/ru/simples.odc подключаются автоматически, если был задан соответствующий национальный язык вызовом, для данного файла, i21sysVocabulary.SetLanguage('ru').

PROCEDURE AddSimples (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
Позволяет добавить в текущий список (без его предварительного обнуления и без задания национального языка) простые расширения подсказки, описанные в документе name.odc, находящемся в папке i21sys/Rsrc/lan/ (например, i21sys/Rsrc/ru/ при lan='ru'). 
Параметр lan может указывать и глобальный путь к некоторой папке (например, 'c:/myblackbox/'), в которой тогда и ищется документ name.odc. 

PROCEDURE ShowSimples;
Печатает в рабочий журнал текущий список простых расширений.


Список ключевых слов и их переводов
Список всех ключевых слов языка Компонентный Паскаль создаётся автоматически, и он всегда содержит по крайней мере английские ключевые слова (документ i21sys/Rsrc/keywords.odc). 
Если в модуле i21sysVocabulary был задан словарик с переводами ключевых слов на национальный язык (i21sysVocabulary.language # 'en'), то эти переводы автоматически добавляются в данный список из словарика (например, из i21sys/Rsrc/ru/vocab.odc).

PROCEDURE AddKeywords (lan: ARRAY OF CHAR; name: ARRAY OF CHAR);
Позволяет добавить в список ключевых слов слова из документа name.odc в подпапке lan в папке i21sys/Rsrc/. 
В параметре lan можно задать и глобальное имя папки, где находится name.odc ("c:\my blackbox\" и т.п.).
Документ name.odc может содержать как простой список слов (как keywords.odc), так и список пар (как vocab.odc). Дубликаты включаться в список ключевых слов не будут.

Добавляемые таким образом слова могут и не быть настоящими ключевыми словами Компонентного Паскаля. Например, можно включить в список какое-нибудь слово, скажем, DIJKSTRA и предусмотреть для него "подсказки" в документах hints.odc, либо простое "макрорасширение" в документах simples.odc, либо даже особую раскрывающую процедуру внутри данного модуля. В любом случае это слово будет находиться и подставляться по своим начальным буквам в соответствии с общим механизмом.

PROCEDURE ShowKeywords;
Печатает в рабочий журнал текущий список "ключевых" слов.


PROCEDURE Init;
Обнуляет все списки и вновь их создаёт в соответствии с установками модуля i21sysVocabulary.


--------------
2012-09-17 info21@inr.ac.ru последние исправления 2012-11-06