Запуск PSGML
Каким образом Emacs узнает о необходимости загрузки режима PSGML? Это может быть осуществлено тремя способами:
- Во-первых, это режим автоматической загрузки, он включается при редактировании файла с расширением .sgml или .sgm.
- Во-вторых, это режим ручной загрузки. В командной строке минибуфера (M-x) нужно ввести имя режима (в данном случае - sgml-mode). Ручная загрузка полезна при редактировании файлов SGML, которые не имеют расширения .sgml или .sgm.
- В-третьих, это командный режим. Следующая строка в верхней части файла сообщает Emacs о необходимости автоматической загрузки PSGML:
<!-- -*- sgml -*- --> |
При запуске Emacs с PSGML и загрузке документа, PSGML не станет анализировать документ (если переменным sgml-auto-activate-dtd и sgml-set-face заранее не присвоены значения "t") пока не будет выполнена одна из команд определенной категории. Из-за этого, в частности, нельзя выполнять автоматическое форматирование текста, которое облегчает визуальное восприятие текста при редактировании документа. Например, не происходит выравнивание уровней вложенности элементов или отсутствует отображение разметки различными шрифтами или цветом. Одна из команд, которая способна заставить работать PSGML, это команда sgml-next-trouble-spot, которая может быть вызвана нажатием C-c C-o или через пункт Next Trouble Spot меню Move. В настоящее время PSGML еще не является полноценным синтаксическим анализатором (недостатки, как будет показано в главе "Обнаружение ошибок разметки", достаточно легко устранимы). PSGML может выявить достаточно большое количество потенциальных ошибок через синтаксический анализ, в то время, как часть из них может быть обнаружена еще на стадии визуального форматирования.
Наиболее часто встречающаяся проблема, с которой сталкивается команда sgml-next-trouble-spot связана с тэгами. Это может быть неизвестный вид тэга, или неверное расположение тэга в тексте, или непарные скобки тэга. Если ошибок не обнаружено, то курсор перемещается в конец документа, заканчивает визуальное форматирование, и отображает в окне минибуфера сообщение Ok.
С большим числом элементов DTD, подобный синтаксический анализ может потребовать времени. При этом в окне минибуфера будут отображаться сообщения типа "Parsing doctype" и "Garbage collecting" (сочный термин для процедуры реорганизации оперативной памяти). Ускорить данный процесс можно, если предварительно сохранить DTD в виде специальной откомпилированной версии, которую PSGML загружает гораздо быстрее. Данная процедура осуществляется запуском команды sgml-save-dtd из командной строки минибуфера M-x. PSGML предложит сохранить откомпилированную версию текста в том же самом каталоге с тем же самым именем, что и у редактируемого документа, но с расширением .ced. Если название каталога или имя файла будет изменено, то затем, при запуске команды sgml-load-dtd, нужно будет вводить полное имя пути откомпилированного файла. Если PSGML сохранят откомпилированный файл с заданным по умолчанию именем и каталогом, то при последующем редактировании этого документа, он будет сам находить эту откомпилированную версию.