Std/Docu/ru/Links.odc

StdLinks
ENGLISH
Редакция перевода: Ф.В.Ткачев, 2010-10-30

DEFINITION StdLinks;

	IMPORT Dialog, Views;

	TYPE
		Link = POINTER TO RECORD (Views.View)
			leftSide-: BOOLEAN;
			(v: Link) GetCmd (OUT cmd: ARRAY OF CHAR), NEW
		END;

		Target = POINTER TO RECORD (Views.View)
			leftSide-: BOOLEAN;
			(t: Target) GetIdent (OUT ident: ARRAY OF CHAR), NEW
		END;

		Directory = POINTER TO ABSTRACT RECORD 
			(d: Directory) NewLink (IN cmd: ARRAY OF CHAR): Link, NEW, ABSTRACT;
			(d: Directory) NewTarget (IN ident: ARRAY OF CHAR): Target, NEW, ABSTRACT
		END;

	VAR
		par-: Link;
		dir-, stdDir-: Directory;

	PROCEDURE CreateGuard (VAR par: Dialog.Par);
	PROCEDURE CreateLink;
	PROCEDURE CreateTarget;
	PROCEDURE ShowTarget (ident: ARRAY OF CHAR);
	PROCEDURE SetDir (d: Directory);

END StdLinks.


Ссылка  это пара специальных объектов отрисовки (вьюшек; в оригинале сами эти вьюшки тоже называются ссылками/links, что иногда неудобно прим. ред.), имеющих смысл только в тексте, ограничивающих фрагмент этого текста и содержащих некоторую команду. Вот пример ссылки:

	Ссылканаруководствопользователя

Если слева и справа от синего фрагмента ничего особенного не видно, то нужно выполнить команду Text->Show Marks (Текст->Показать разметку).

Если кликнуть по левой или правой вьюшке ссылки, то будет выполнена команда, связанная со ссылкой. Более того, активен также и фрагмент текста между парой вьюшек. Указатель мыши меняет свой вид над активным фрагментом.

Если при клике по ссылке прижимать клавишу-модификатор, то две вьюшки преобразуются к исходной текстовой спецификации:

<StdCmds.OpenBrowser('System/Docu/ru/User-Man', 'User Manual')>Ссылканаруководствопользователя <>

Синтаксис такой: "<" последовательность команд ">" фрагмент текста "<" ">". Последовательность команд обычно состоит из единственной команды StdCmds.OpenBrowser. Однако можно использовать любые команды, например, такие:

	<Dialog.Beep; Dialog.Beep>beepbeep<>

Чтобы превратить эту спецификацию в активную ссылку, нужно выделить ее (начиная от первой литеры "<" и включая последней ">") и затем выполнить Tools->Create Link (Инструменты->Создать ссылку).

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


Чтобы использовать ссылочные вьюшки для организации гиперссылок, нужны команды, которые могут открыть заданный текст. Стандартная команда для этого  StdCmds.OpenBrowser. Например, команда 
"StdCmds.OpenBrowser('Obx/Docu/ru/Sys-Map','Карта подсистемы Obx')" 
открывает оглавление подсистемы Obx в режиме просмотра.

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

Например, ссылочные вьюшки, созданные из спецификации
	<StdLinks.ShowTarget('first target')>показатьцель<>
создают ссылку на цель, заданную спецификацией
	<first target>это первая цель<>

MENU
	"Create Link"	""	"StdLinks.CreateLink"	"StdLinks.CreateGuard"
	"Create Target"	""	"StdLinks.CreateTarget"	"StdLinks.CreateGuard"
END


TYPE Link (Views.View)
Тип ссылочных вьюшек.

leftSide-: BOOLEAN
Указывает, является ли ссылочная вьюшка левой.

PROCEDURE (v: Link) GetCmd (OUT cmd: ARRAY OF CHAR)
NEW
Возвращает команду, связанную со ссылкой.

Предусловие
leftSide = (cmd # "")


TYPE Target (Views.View)
Тип вьюшек для оформления целей.

leftSide-: BOOLEAN
Указывает, является ли вьюшка левой или правой.

PROCEDURE (t: Target) GetIdent (OUT ident: ARRAY OF CHAR)
NEW
Возвращает идентификатор цели.

Предусловие
leftSide = (ident # "")

TYPE Directory
ABSTRACT 
Тип фабричногообъекта для создания вьюшек, оформляющих ссылки/цели.

PROCEDURE (d: Directory) NewLink (IN cmd: ARRAY OF CHAR): Link
NEW, ABSTRACT
Создает новую ссылочную вьюшку с cmd в качестве командной строки. Если cmd # "", то создается левая вьюшка, иначе  правая.

PROCEDURE (d: Directory) NewTarget (IN ident: ARRAY OF CHAR): Target
NEW, ABSTRACT
Создает новую вьюшку для оформления цели с идентификатором ident. Если ident # "", то создается левая вьюшка, иначе  правая.


VAR par-: Link	par # NIL в точности в течение выполнения команды ссылки
Через эту переменную команда в ссылке может получить доступ к ее (левой) вьюшке и, следовательно,  к ее контексту.

VAR dir-, stdDir-: Directory
Фабричные объекты для вьюшек, оформляющих ссылки/цели.


PROCEDURE CreateGuard (VAR par: Dialog.Par)
Процедура охраны меню, используется для CreateLink и CreateTarget. par.disabled устанавливается в FALSE (то есть пункт меню остается активным), если соблюдается следующее: в фокусе находится текстовая вьюшка, и текущий выделенный фрагмент в точности соответствует синтаксису: "<" текст ">" текст "<>".

PROCEDURE CreateLink
Создает ссылку в тексте, находящемся в фокусе. Для создания ссылки должен быть выделен фрагмент текста со следующим синтаксисом: "<" последовательность команд ">" произвольный текст "<>". Последовательность команд не должна содержать литеры ">". Фрагмент "<" последовательность команд ">" заменяется на левую ссылочную вьюшку. Фрагмент "<>"  на правую. Вьюшки, оформляющие ссылку, могут быть показаны/скрыты командами Text>ShowMarks и Text>HideMarks (Текст->Показать разметку и Текст->Скрыть разметку) соответственно. Для редактирования командной последовательности, связанной со ссылкой, нужно кликнуть по ссылке при нажатой клавише модификатора. Это заменит ссылку ее текстовой спецификацией.

PROCEDURE CreateTarget
Создает фрагмент-цель в тексте, находящемся в фокусе. Для этого должен быть выделен фрагмент текста со следующим синтаксисом: "<" идентификатор цели ">" произвольный текст "<>". Идентификатор цели не должен содержать литеры ">". Фрагмент "<" идентификатор цели ">" заменяется на левую вьюшку. Фрагмент "<>" - на правую. Вьюшки оформления целей могут быть скрыты/показаны командами Text>ShowMarks и Text>HideMarks (Текст->Показать разметку и Текст->Скрыть разметку) соответственно. Для редактирования идентификатора цели нужно кликнуть по одной из ее вьюшек при нажатой клавише-модификаторе. Это заменит цель ее текстовой спецификацией.

PROCEDURE ShowTarget (ident: ARRAY OF CHAR)
В тексте, находящемся в фокусе, ищет первую вьюшку, оформляющую цель с идентификатором ident. Если цель найдена, текст прокручивается так, чтобы она была видна в первой строке окна, причем фрагмент-цель выделяется. (Примечание: если текст открыт в режиме маски, то выделенный фрагмент не виден.)

PROCEDURE SetDir (d: Directory)
Устанавливает фабричный объект для вьюшек оформления ссылок/целей.