Std/Docu/ru/Coder.odc

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

DEFINITION StdCoder;
	IMPORT TextModels, Views, Dialog;
	TYPE
		ParList = RECORD 
			list: Dialog.Selection;
			storeAs: Dialog.String
		END;
	VAR par: ParList;
	PROCEDURE CloseDialog;
	PROCEDURE Decode;
	PROCEDURE DecodeAllFromText (text: TextModels.Model; beg: INTEGER; ask: BOOLEAN);
	PROCEDURE EncodeDocument;
	PROCEDURE EncodeFile;
	PROCEDURE EncodeFileList;
	PROCEDURE EncodeFocus;
	PROCEDURE EncodeSelection;
	PROCEDURE EncodedInText (text: TextModels.Model; beg: INTEGER): TextModels.Model;
	PROCEDURE EncodedView (v: Views.View): TextModels.Model;
	PROCEDURE ListEncodedMaterial;
	PROCEDURE Select (op, from, to: INTEGER);
	PROCEDURE StoreAll;
	PROCEDURE StoreSelection;
	PROCEDURE StoreSelectionGuard (VAR p: Dialog.Par);
	PROCEDURE StoreSingle;
	PROCEDURE StoreSingleGuard (VAR p: Dialog.Par);
END StdCoder.

StdCoder (или просто Coder) может быть использован для кодирования в текстовую форму документа, вьюшки, фрагмента текста или файлов. В кодировке используются символы, которые гарантировано не будут изменены никакой почтовой системой. Белые символы (пробелы, табуляции, символы новой строки и т.п.) могут добавляться или удаляться как угодно, поскольку они игнорируются при декодировании.
После декодирования документа или фрагмента текста будет открыто новое окно. Файлы сохраняются на диск.
Cледующие пункты меню являются стандартными для меню Инструменты (Tools):

	"Кодировать документ"	""	"StdCoder.EncodeDocument"   	"StdCmds.WindowGuard"
	"Кодировать выделение"	""	"StdCoder.EncodeSelection"	"TextCmds.SelectionGuard"
	"Кодировать файл..."	""	"StdCoder.EncodeFile"	""
	"Кодировать список файлов..."	""	"StdCoder.EncodeFileList"	"TextCmds.SelectionGuard"
	"Декодировать..."	""	"StdCoder.Decode"	"TextCmds.FocusGuard"
	"О закодированном материале..."	""	"StdCoder.ListEncodedMaterial"	"TextCmds.FocusGuard"



PROCEDURE EncodeDocument
Охрана: StdCmds.WindowGuard
Кодирует документ, находящийся в переднем окне, и открывает новое окно со сгенерированным кодом.

PROCEDURE EncodeSelection
Охрана: TextCmds.SelectionGuard
Кодирует выделенный фрагмент текста и открывает новое окно со сгенерированным кодом.

PROCEDURE EncodeFile
Кодирует один файл, указанный через стандартный диалог открытия файла, и открывает новое окно со сгенерированным кодом.

PROCEDURE EncodeFileList
Охрана: TextCmds.SelectionGuard
Кодирует несколько файлов и открывает новое окно со сгенерированным кодом. Должен быть выделен список корректных имен файлов. Имена файлов должны быть заданы их полным именем пути относительно директории Блэкбокса. Используйте литеру "/" для разделения отдельных частей имени пути. (Пример: Std/Code/Coder.) Имя пути сохраняется вместе с пакетом, чтобы упростить декодирование пакетов, состоящих из многих файлов. Однако иногда файл хранится в другом месте, чем то, куда его нужно будет установить. В таком случае можно задать имя пути для его места назначения. Имя пути, которое будет использовано при декодировании, указывается после стрелки "=>".
Пример: NewStd/Code/NewCoder => Std/Code/Coder указывает для кодирования файл NewCoder в директории NewStd/Code, но для декодирования будет использовано имя Std/Code/Coder.

PROCEDURE Decode
Охрана: TextCmds.FocusGuard
Декодирует информацию из закодированного материала в переднем окне. Команда ищет цепочку литер "StdCoder.Decode", которую считает началом кода. Это означает, что самому коду могут предшествовать заголовки электронной почты и т.п. Если в переднем окне выделен текст, сканирование начинается с начала выделенного фрагмента.
В зависимости от типа закодированных данных, т.е. от команды, использованной для кодирования, произойдет одно из следующих действий:
-	Если закодирован документ (EncodeDocument, EncodeSelection), он будет открыт в новом окне.
-	Если закодирован отдельный файл (EncodeFile), будет открыт стандартный диалог сохранения, позволяющий пользователю сохранить файл.
-	Если закодирован список файлов (EncodeFileList), будет открыт специальный диалог, позводяющий пользователю выбрать файлы для декодирования. Имена путей, включенные во время кодирования, показаны в списке. В нем можно выбрать один или несколько файлов. После нажатия командной кнопки выбранные файлы будут декодированы. Если выбран только один файл, имя пути может быть изменено или может быть использован стандартный диалог сохранения для показа иерархии директорий. Другой командной кнопкой все файлы могут быть декодированы и сохранены под указанными в списке именами, независимо от выделения.
Примечание: Диалог следует всегда закрывать, используя кнопку отмены, чтобы позволить модулю StdCoder освободить ресурсы, временно выделенные для организации диалога.

PROCEDURE ListEncodedMaterial
Охрана: TextCmds.FocusGuard
Открывает текст с информацией о том, что закодировано в тексте, который находится в переднем окне. Подобно Decode, команда ищет тег, обозначающий начало кода.

В программном интерфейсе доступны еще две процедуры:
 
PROCEDURE DecodeAllFromText (text: TextModels.Model; beg: INTEGER; ask: BOOLEAN);
Работает подобно Decode, но вместо фокуса использует текст, переданный в параметре text. Поиск тега начинается с позиции beg. Подобно Decode, закодированые документы открываются в окнах, а одиночные файлы сохраняются с помощью стандартного диалога. Если код генерировался командой EncodeFileList, поведение определяется значением параметра ask. Если передано TRUE, открывается диалог, и управление передается пользователю. Если передано FALSE, диалог не открывается, а все файлы декодируются и устанавливаются под именами, сохраненными в коде. Такое поведение соответствует нажатию кнопки "Decode All" в диалоге.

PROCEDURE EncodedView (v: Views.View): TextModels.Model;
Генерирует текст, кодирующий переданную вьюшку.

PROCEDURE EncodedInText (text: TextModels.Model; beg: INTEGER): TextModels.Model;
Генерирует текст с информацией о материале, закодированном в тексте text.