0
|
1 \input texinfo @c -*-texinfo-*-
|
|
2 @c %**start of header
|
|
3 @setfilename ../info/psgml.info
|
|
4 @settitle psgml
|
|
5 @c @setchapternewpage odd
|
|
6 @syncodeindex fn cp
|
|
7 @syncodeindex vr cp
|
|
8 @synindex ky cp
|
|
9 @c %**end of header
|
120
|
10 @c $Id: psgml.texi,v 1.2 1997/04/10 05:56:17 steve Exp $
|
2
|
11
|
|
12 @ifinfo
|
|
13 @format
|
|
14 START-INFO-DIR-ENTRY
|
|
15 * PSGML: (psgml). PSGML, a major mode for SGML documents.
|
|
16 END-INFO-DIR-ENTRY
|
|
17 @end format
|
|
18 @end ifinfo
|
0
|
19
|
|
20 @ifinfo
|
|
21 Documentation for PSGML, a major mode for SGML.
|
|
22
|
2
|
23 Copyright 1994, 1996 Lennart Staflin
|
0
|
24
|
|
25 Permission is granted to make and distribute verbatim
|
|
26 copies of this manual provided the copyright notice and
|
|
27 this permission notice are preserved on all copies.
|
|
28
|
|
29 @ignore
|
|
30 Permission is granted to process this file through TeX
|
|
31 and print the results, provided the printed document
|
|
32 carries a copying permission notice identical to this
|
|
33 one except for the removal of this paragraph (this
|
|
34 paragraph not being relevant to the printed manual).
|
|
35
|
|
36 @end ignore
|
|
37 Permission is granted to copy and distribute modified
|
|
38 versions of this manual under the conditions for
|
|
39 verbatim copying, and provided that the entire
|
|
40 resulting derived work is distributed under the terms
|
|
41 of a permission notice identical to this one.
|
|
42
|
|
43 Permission is granted to copy and distribute
|
|
44 translations of this manual into another language,
|
|
45 under the above conditions for modified versions,
|
|
46 except that this permission notice may be stated in a
|
|
47 translation approved by the Free Software Foundation.
|
|
48
|
|
49 @end ifinfo
|
|
50
|
|
51 @titlepage
|
|
52
|
|
53 @title Editing SGML with Emacs and PSGML
|
|
54 @author Lennart Staflin
|
|
55
|
|
56 @c The following two commands
|
|
57 @c start the copyright page.
|
|
58 @page
|
|
59 @vskip 0pt plus 1filll
|
2
|
60 Copyright @copyright{} 1994, 1996 Lennart Staflin
|
0
|
61
|
|
62 @c Published by ...
|
|
63
|
|
64 Permission is granted to make and distribute verbatim
|
|
65 copies of this manual provided the copyright notice and
|
|
66 this permission notice are preserved on all copies.
|
|
67
|
|
68 @ignore
|
|
69 Permission is granted to process this file through TeX
|
|
70 and print the results, provided the printed document
|
|
71 carries a copying permission notice identical to this
|
|
72 one except for the removal of this paragraph (this
|
|
73 paragraph not being relevant to the printed manual).
|
|
74
|
|
75 @end ignore
|
|
76 Permission is granted to copy and distribute modified
|
|
77 versions of this manual under the conditions for
|
|
78 verbatim copying, and provided that the entire
|
|
79 resulting derived work is distributed under the terms
|
|
80 of a permission notice identical to this one.
|
|
81
|
|
82 Permission is granted to copy and distribute
|
|
83 translations of this manual into another language,
|
|
84 under the above conditions for modified versions,
|
|
85 except that this permission notice may be stated in a
|
|
86 translation approved by the Free Software Foundation.
|
|
87 @end titlepage
|
|
88
|
|
89 @node Top, Introduction, (dir), (dir)
|
|
90 @comment node-name, next, previous, up
|
|
91 @ifinfo
|
|
92 @top PSGML
|
|
93
|
2
|
94 PSGML is a major mode for editing SGML documents. This is the DRAFT
|
|
95 documentation for PSGML version 1.0.
|
0
|
96 @end ifinfo
|
|
97
|
|
98 @menu
|
|
99 * Introduction:: Introduction
|
|
100 * Install:: How to install PSGML
|
|
101 * Invoke:: How to invoke PSGML
|
|
102 * Entity manager:: The Entity Manager
|
|
103 * Validate:: Running an external SGML parser
|
|
104 * SGML declaration:: Using an SGML declaration
|
|
105 * Managing the DTD:: Specifying what DTD to use
|
|
106 * Edit:: Commands for editing
|
|
107 * Display:: Appearance of text in the buffer
|
2
|
108 * Miscellaneous options::
|
0
|
109 * Bugs:: Reporting bugs
|
|
110 * Index::
|
|
111 @end menu
|
|
112
|
2
|
113
|
|
114 @c *** section about error recovery ??
|
|
115
|
|
116
|
0
|
117 @c ------------------------------------------------------------------
|
|
118
|
|
119 @node Introduction, Install, Top, Top
|
|
120 @comment node-name, next, previous, up
|
|
121 @chapter Introduction
|
|
122 @cindex CONCUR
|
|
123 @cindex DATATAG
|
|
124 @cindex LINK
|
|
125 @cindex RANK
|
|
126 @cindex SGML Declaration
|
|
127
|
2
|
128 PSGML is a major mode for editing SGML documents. It works with GNU
|
|
129 Emacs 19.19 and later or with Lucid Emacs 19.9 and later. PSGML
|
|
130 contains a simple SGML parser and can work with any DTD. Functions
|
|
131 provided includes menus and commands for inserting tags with only the
|
0
|
132 contextually valid tags, identification of structural errors, editing of
|
|
133 attribute values in a separate window with information about types and
|
|
134 defaults, and structure based editing.
|
|
135
|
|
136 SGML, a language for encoding the structure of a document, is an ISO
|
|
137 standard: ISO 8879:1986 ``Information processing -- Text and office
|
|
138 systems -- Standard Generalized Markup Language (SGML)''.
|
|
139
|
|
140 A good introduction to SGML is @cite{A Gentle Introduction to SGML}
|
|
141 produced by Text Encoding Initiative (this is really chapter 2 of TEI
|
2
|
142 P3). This can be found on
|
|
143
|
|
144 @display
|
0
|
145 @file{ftp://ftp.ifi.uio.no/pub/SGML/TEI/P3SG.DOC}.
|
2
|
146 @end display
|
0
|
147
|
|
148 A SGML document has three major parts, in order:
|
|
149
|
|
150 @enumerate
|
|
151 @item
|
|
152 SGML Declaration (@samp{<!SGML "ISO 8879:1986" @dots{} >})
|
|
153 @item
|
|
154 Document Type Declaration (@samp{<!DOCTYPE @var{name} @dots{} >})
|
|
155 @item
|
|
156 Document Element (@samp{<@var{name}> @dots{} </@var{name}>})
|
|
157 @end enumerate
|
|
158
|
|
159 The SGML declaration contains general information about character sets,
|
2
|
160 concrete syntax, and SGML features used. PSGML does not use the SGML
|
|
161 Declaration, it can be left out, and if included is ignored. Many SGML
|
0
|
162 systems allow the SGML declaration to be defaulted. PSGML always use
|
|
163 the Concrete Reference Syntax but without limitations on
|
2
|
164 lengths. Features used has to be indicated with variables (@pxref{SGML
|
0
|
165 declaration}).
|
|
166
|
|
167 The document type declaration specifies the valid elements and entities
|
|
168 and how they can be nested. A document type is usually needed, but can
|
|
169 reside in another file (@pxref{Managing the DTD}).
|
|
170
|
|
171 The system declaration for PSGML:
|
2
|
172 @example
|
0
|
173 SYSTEM "ISO 8879:1986"
|
|
174 CHARSET
|
|
175 BASESET "ISO 646-1983//CHARSET
|
|
176 International Reference Version (IRV)//ESC 2/5 4/0"
|
|
177 DESCSET 0 128 0
|
|
178 CAPACITY PUBLIC "ISO 8879:1986//CAPACITY Reference//EN"
|
|
179 FEATURES
|
|
180 MINIMIZE DATATAG NO OMITTAG YES RANK NO SHORTTAG YES
|
|
181 LINK SIMPLE NO IMPLICIT NO EXPLICIT NO
|
|
182 OTHER CONCUR NO SUBDOC YES 1 FORMAL YES
|
|
183 SCOPE DOCUMENT
|
|
184 SYNTAX PUBLIC "ISO 8879:1986//SYNTAX Reference//EN"
|
|
185 @c SYNTAX PUBLIC "ISO 8879:1986//SYNTAX Core//EN"
|
|
186 VALIDATE
|
|
187 GENERAL NO MODEL NO EXCLUDE NO CAPACITY NO
|
|
188 NONSGML NO SGML NO FORMAL NO
|
|
189 SDIF PACK NO UNPACK NO
|
2
|
190 @end example
|
0
|
191
|
|
192
|
|
193 @c -------------------------------------------------------------------------
|
|
194 @node Install, Invoke, Introduction, Top
|
|
195 @comment node-name, next, previous, up
|
|
196 @chapter Installing PSGML
|
|
197
|
2
|
198 To install PSGML you first need to uncompress and unpack the source
|
|
199 archive. This is done with the @code{gunzip} and @code{tar} commands.
|
|
200
|
|
201 @example
|
120
|
202 gunzip psgml-1.0.1.tar.gz; tar xf psgml-1.0.1.tar
|
2
|
203 @end example
|
|
204
|
|
205 This should create a subdirectory to the current directory with the
|
|
206 source code. This directory contains a @code{configure} command (see the
|
|
207 file INSTALL for more information about configure). You can use the
|
|
208 @code{configure} command to configure the package or you can load the
|
|
209 file @file{psgml-maint} and execute the @code{psgml-compile-files}
|
|
210 command.
|
|
211
|
0
|
212 Place the @file{*.el} and the @file{*.elc} files in a directory where
|
|
213 Emacs can find it (i.e. one of the directories in the @code{load-path}
|
|
214 variable, you can add a directory to this variable in your
|
2
|
215 @file{.emacs}.)
|
|
216
|
|
217 If you use the @code{configure} approach, compile psgml with @code{make}
|
|
218 and the you can run @code{make install} to install it in the system
|
|
219 library @file{site-lisp}. The files are installed in a subdirectory
|
|
220 named @file{psgml}. The location of @file{site-lisp} is figured out by
|
|
221 @code{configure}, but you can change it in the @file{Makefile}. You
|
|
222 need to make sure that this subdirectory is in Emacs @code{load-path}.
|
|
223
|
0
|
224
|
|
225 Put the following line in your .emacs:
|
|
226
|
|
227 @lisp
|
|
228 (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t )
|
|
229 @end lisp
|
|
230
|
|
231 You may also want to set up search paths for external entities,
|
|
232 @xref{Entity manager}.
|
|
233
|
|
234 The @file{psgml.info} is the documentation for PSGML in the info format.
|
|
235 You can read this with the Emacs command @kbd{C-u C-h i}. You can also
|
|
236 install the file in your systems info directory and edit the
|
|
237 @file{dir} file to include @file{psgml.info} in the menu.
|
|
238
|
|
239 The info file @file{psgml.info} is created from the texinfo file
|
|
240 @file{psgml.texi}. The texinfo file can also be used to create a hard
|
|
241 copy of the documentation. To do this you need the @TeX{} program and a
|
|
242 copy of @file{texinfo.tex}.
|
|
243
|
|
244
|
|
245
|
|
246
|
|
247 @c --------------------------------------------------------------------------
|
|
248 @node Invoke, Entity manager, Install, Top
|
|
249 @comment node-name, next, previous, up
|
|
250 @chapter How to invoke PSGML
|
|
251 @cindex invoke
|
|
252 @cindex start up
|
|
253 @cindex major mode
|
|
254
|
|
255 @findex sgml-mode
|
|
256 PSGML defines a major mode called @code{sgml-mode}. Files with
|
|
257 extensions @file{.sgml}, @file{.sgm} or @file{.dtd} will
|
|
258 automatically be edited in SGML mode. To edit some other file in
|
|
259 sgml mode, type @kbd{M-x sgml-mode @key{RET}} after finding the
|
|
260 file.
|
|
261
|
|
262 If you can modify the file you can add a @dfn{Local Variables} list
|
|
263 (@pxref{file variables, , Local Variables in Files, emacs, The Emacs
|
|
264 Editor}) to the end of the file. This can make Emacs
|
|
265 automatically set sgml mode and user options when the file is loaded.
|
|
266 The simplest Local Variables list would look like:
|
|
267
|
|
268 @example
|
|
269 <!--
|
|
270 Local Variables:
|
|
271 mode: sgml
|
|
272 End:
|
|
273 -->
|
|
274 @end example
|
|
275
|
|
276 You can also put a line at the top of the file to tell emacs to use sgml
|
|
277 mode:
|
|
278
|
|
279 @example
|
|
280 <!-- -*- sgml -*- -->
|
|
281 @end example
|
|
282
|
|
283 But remember that you can't have a comment before the @emph{SGML
|
|
284 declaration}.
|
|
285
|
|
286
|
|
287 @c -------------------------------------------------------------------------
|
|
288 @node Entity manager, Validate, Invoke, Top
|
|
289 @comment node-name, next, previous, up
|
|
290 @chapter The Entity Manager
|
|
291 @cindex public identifier
|
|
292 @cindex system identifier
|
|
293 @cindex external identifier
|
2
|
294 @cindex entity catalog
|
|
295
|
|
296 @c *** sgml-sysid-resolve-functions
|
0
|
297
|
|
298 SGML can refer to an external file (really entity) with an
|
|
299 @emph{external identifier}, this is a @emph{public identifier} or a
|
2
|
300 @emph{system identifier}, or both.
|
0
|
301
|
|
302 A typical public identifier looks like
|
|
303
|
|
304 @example
|
|
305 PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN"
|
|
306 @end example
|
|
307
|
|
308 @noindent
|
|
309 where ``ISO 8879:1986'' is the owner, ``ENTITIES'' is the text class and
|
|
310 ``Added Latin 1'' is the text description (and ``EN'' is language).
|
|
311
|
|
312 A system identifier looks like
|
|
313
|
|
314 @example
|
|
315 SYSTEM "htmlplus.dtd"
|
|
316 @end example
|
|
317
|
|
318 @noindent where ``htmlplus.dtd'' is a system-specific identifier.
|
|
319
|
|
320 To map external identifiers to file names, PSGML first searches entity
|
|
321 catalog files and then search the list of file name templates in the
|
|
322 variable @code{sgml-public-map}.
|
|
323
|
2
|
324 The catalog format is according to SGML/Opens resolution on entity
|
|
325 management. The catalog consists of a series of entries and comments. A
|
0
|
326 comment is delimited by @samp{--} like in a markup declaration.
|
|
327 The entry types recognized are described in the following table.
|
|
328
|
|
329 @table @samp
|
|
330
|
2
|
331 @item public @var{pubid} @var{file}
|
0
|
332 The @var{file} will be used for the entity text of an entity
|
|
333 with the public identifier @var{pubid}.
|
|
334
|
2
|
335 @item entity @var{name} @var{file}
|
0
|
336 The @var{file} will be used for the entity text of an entity
|
2
|
337 with the name @var{name}. If the @var{name} starts with a @samp{%} the
|
0
|
338 rest of the name will be matched against parameter entities.
|
|
339
|
2
|
340 @item doctype @var{name} @var{file}
|
|
341 The @var{file} will be used for the entity text of an entity
|
|
342 used as external subset of a document declaration with @var{name} as
|
|
343 document type name.
|
0
|
344
|
2
|
345 @item sgmldecl @var{file}
|
|
346 Used to specify a default SGML declaration. Recognized but not used by
|
|
347 PSGML other than to pass to an external validation command
|
|
348 (@code{sgml-validate-command}).
|
0
|
349
|
|
350 @end table
|
|
351
|
2
|
352 When PSGML is looking for the file containing an external entity, the
|
|
353 following things will be tried in order:
|
|
354
|
|
355 @enumerate
|
|
356
|
|
357 @vindex sgml-system-identifiers-are-preferred
|
|
358 @item
|
|
359 Try the system identifier, as a file name, if there is a system
|
|
360 identifier and the variable @code{sgml-system-identifiers-are-preferred}
|
|
361 is non-@code{nil} and there is no elements containing @samp{%s} in
|
|
362 @code{sgml-public-map}. If the system identifier is a relative file name
|
|
363 it will be relative to the directory containing the defining entity.
|
|
364
|
|
365 @item
|
|
366 Look thru each catalog in @code{sgml-local-catalogs} and
|
|
367 @code{sgml-catalog-files} in order. For each catalog look first for
|
|
368 entries matching the public identifier, if any. Then look for other
|
|
369 matching entries in the order they appear in the catalog.
|
|
370
|
|
371 Currently an entry will be ignored if it is matching but its file is
|
|
372 non-existent or unreadable. (This is under reconsideration, perhaps it
|
|
373 should signal error instead).
|
|
374
|
|
375 @item
|
|
376 Try the system identifier, if any, as a file name.
|
|
377 If @code{sgml-system-identifiers-are-preferred} is @code{nil}
|
|
378 and there is no elements containing @samp{%s} in @code{sgml-public-map}.
|
|
379
|
|
380 @item
|
|
381 Try the entries in @code{sgml-public-map}. Using the catalogs are
|
|
382 preferred. The @code{sgml-public-map} may disappear in a future version
|
|
383 of PSGML (not soon though).
|
|
384
|
|
385 @end enumerate
|
|
386
|
0
|
387 The @code{sgml-public-map} variable can contain a list of file name
|
|
388 templates where @samp{%P} will be substituted with the whole public
|
|
389 identifier, owner is substituted for @samp{%O}, public text class for
|
|
390 @samp{%C}, and public text description for @samp{%D}. The text class
|
|
391 will be converted to lower case and the owner and description will be
|
|
392 transliterated according to the variable
|
|
393 @code{sgml-public-transliterations}. The templates in the list is tried
|
2
|
394 in order until an existing file is found. The @code{sgml-public-map} is
|
|
395 modeled after @file{sgmls} environment variable @code{SGML_PATH} and
|
|
396 psgml understand the following substitution characters: %%, %N, %P, %S,
|
|
397 %Y, %C, %L, %O, %T, and %V. The the default value of
|
|
398 @code{sgml-public-map} is taken from the environment variable
|
|
399 @code{SGML_PATH}.
|
0
|
400
|
|
401 Given the public identifier above and the file name template
|
|
402 @samp{/usr/local/lib/sgml/%o/%c/%d}, the resulting file name is
|
|
403
|
|
404 @example
|
|
405 /usr/local/lib/sgml/ISO_8879:1986/entities/Added_Latin_1
|
|
406 @end example
|
|
407
|
|
408 Note: blanks are transliterated to @samp{_} (and also @samp{/} to
|
|
409 @samp{%}) and the text class is down cased.
|
|
410
|
|
411
|
|
412
|
|
413 @defopt sgml-catalog-files
|
|
414 This is a list of catalog entry files.
|
|
415 The files are in the format defined in the SGML Open Draft Technical
|
|
416 Resolution on Entity Management. The Emacs variable is initialized from
|
|
417 the environment variable @code{SGML_CATALOG_FILES} or if this variable
|
|
418 is undefined the default is
|
|
419
|
|
420 @lisp
|
|
421 ("CATALOG" "/usr/local/lib/sgml/CATALOG")
|
|
422 @end lisp
|
|
423 @end defopt
|
|
424
|
|
425 @defopt sgml-local-catalogs
|
|
426 A list of SGML entity catalogs to be searched first when parsing the
|
|
427 buffer. This is used in addition to @code{sgml-catalog-files}, and
|
|
428 @code{sgml-public-map}. This variable is automatically local to the
|
|
429 buffer.
|
|
430 @end defopt
|
|
431
|
2
|
432 @defopt sgml-system-identifiers-are-preferred
|
|
433 If @code{nil}, PSGML will look up external entities by searching the
|
|
434 catalogs in @code{sgml-local-catalogs} and @code{sgml-catalog-files} and
|
|
435 only if the entity is not found in the catalogs will a given system
|
|
436 identifier be used. If the variable is non-nil and a system identifier is
|
|
437 given, the system identifier will be used for the entity. If no system
|
|
438 identifier is given the catalogs will searched.
|
|
439 @end defopt
|
|
440
|
|
441
|
0
|
442 @defopt sgml-public-map
|
2
|
443 This should be a list of file name templates. This variable is
|
|
444 initialized from the environment variable @code{SGML_PATH}. This is
|
0
|
445 the same environment variable that @file{sgmls} uses. If the
|
|
446 environment variable is undefined the default is
|
|
447
|
|
448 @lisp
|
|
449 ("%S" "/usr/local/lib/sgml/%o/%c/%d")
|
|
450 @end lisp
|
|
451 @c Mapping from public identifiers to file names.
|
|
452 @end defopt
|
|
453
|
|
454 @c the colon separated list in @code{SGML_PATH} is converted to a lisp list
|
|
455
|
|
456 @c -------------------------------------------------------------------------
|
|
457 @node Validate, SGML declaration, Entity manager, Top
|
|
458 @comment node-name, next, previous, up
|
|
459 @chapter Running an external SGML parser
|
|
460
|
|
461 @kindex C-c C-v
|
|
462 @findex sgml-validate
|
2
|
463 PSGML can not validate an SGML document (see below what it can
|
|
464 and can't do). If you have a validating SGML parser, like
|
|
465 @file{sgmls}, you can run the parser on your file with the
|
|
466 command @kbd{C-c C-v} (@code{sgml-validate}).
|
0
|
467
|
|
468 Some variables control this function:
|
|
469
|
|
470 @defopt sgml-validate-command
|
|
471 The shell command to validate an SGML document.
|
|
472
|
2
|
473 This is a @code{format} control string that by default should contain two
|
|
474 @code{%s} conversion specifications: the first will be replaced by the
|
0
|
475 value of @code{sgml-declaration} (or the empty string, if nil); the
|
2
|
476 second will be replaced by the current buffer's file name (or the
|
|
477 empty string, if nil).
|
|
478
|
|
479 If @code{sgml-validate-files} is non-nil, the format string should contain
|
|
480 one @code{%s} conversion specification for each element of its result.
|
0
|
481
|
2
|
482 If sgml-validate-command is a list, then every element should be a
|
|
483 string. The strings will be tried in order and @samp{%}-sequences in the
|
|
484 string will be replaced according to the list below, if the string contains
|
|
485 @samp{%}-sequences with no replacement value the next string will be tried.
|
|
486
|
|
487 @table @code
|
|
488 @item %b
|
|
489 means the visited file of the current buffer
|
0
|
490
|
2
|
491 @item %s
|
|
492 means the SGML declaration specified in the sgml-declaration variable
|
|
493
|
|
494 @item %d
|
|
495 means the file containing the DOCTYPE declaration, if not in the buffer
|
|
496 @end table
|
|
497
|
|
498 The default value is @code{nsgmls -s %s %s}.
|
0
|
499 @end defopt
|
|
500
|
|
501 @defopt sgml-validate-files
|
2
|
502 If non-nil, a function of no arguments that returns a list of
|
|
503 file names. These file names will serve as the arguments to the
|
|
504 @code{sgml-validate-command} format control string instead of
|
|
505 the defaults.
|
0
|
506 @end defopt
|
|
507
|
|
508 @defopt sgml-declaration
|
|
509 The name of the SGML declaration file.
|
|
510 @end defopt
|
|
511
|
|
512 @defopt sgml-offer-save
|
2
|
513 If non-nil, @kbd{C-c C-v} (@code{sgml-validate}) will ask about
|
|
514 saving modified buffers before running the validate command.
|
|
515 The default value is @code{t}.
|
0
|
516 @end defopt
|
|
517
|
|
518
|
|
519 @kindex C-c C-o
|
|
520 @findex sgml-next-trouble-spot
|
|
521 The built-in parser can find some markup errors. The command @kbd{C-c
|
|
522 C-o} (@code{sgml-next-trouble-spot}) is the best way to use the built-in
|
|
523 parser for this. To check the whole file go to the beginning of the
|
|
524 buffer and use @kbd{C-c C-o}.
|
|
525
|
|
526 Some of the markup errors not found are:
|
|
527
|
|
528 @itemize @bullet
|
|
529 @item
|
|
530 Errors in the SGML declaration.
|
|
531 @item
|
|
532 Errors in attribute specifications.
|
|
533 @item
|
|
534 Omitted start-tags for empty elements.
|
|
535 @end itemize
|
|
536
|
|
537
|
2
|
538 @c --------------------------------------------------------------------------
|
0
|
539 @node SGML declaration, Managing the DTD, Validate, Top
|
|
540 @comment node-name, next, previous, up
|
|
541 @chapter SGML Declaration
|
|
542 @cindex SHORTTAG
|
|
543 @cindex OMITTAG
|
|
544
|
|
545 PSGML does not understand the SGML declaration, it accepts one in the
|
|
546 file but it is ignored. If you have the SGML declaration in another
|
|
547 file you can make @file{sgmls} use it when you use the @kbd{C-c C-v}
|
|
548 (@code{sgml-validate}) command (@pxref{Validate}).
|
|
549
|
|
550 PSGML has some options in what features it uses and what markup it
|
|
551 creates. You have to set these options to make PSGML's behavior
|
|
552 consistent with your SGML declaration and personal preferences.
|
|
553
|
|
554 @defopt sgml-omittag
|
|
555 Set this to @code{t} if the SGML declaration has @samp{OMITTAG YES} and
|
|
556 to @code{nil} otherwise.
|
|
557 @end defopt
|
|
558
|
|
559 @defopt sgml-shorttag
|
|
560 Set this to @code{t} if the SGML declaration has @samp{SHORTTAG YES} and
|
|
561 to @code{nil} otherwise.
|
|
562 @end defopt
|
|
563
|
|
564 @defopt sgml-always-quote-attributes
|
|
565 If non-nil, quote all attribute values inserted after finishing edit
|
|
566 attributes. If this variable is @code{nil} and @code{sgml-shorttag} is
|
|
567 non-@code{nil}, attribute values that consists of only name characters
|
|
568 will not be quoted.
|
|
569 @end defopt
|
|
570
|
|
571 @defopt sgml-minimize-attributes
|
|
572 Determines minimization of attributes inserted by edit-attributes. If
|
|
573 non-nil, omit attribute name if the attribute value is from a token
|
|
574 group. If @code{max}, omit attributes with default value. Minimization
|
|
575 will only be done if they produce legal SGML (assuming
|
|
576 @code{sgml-omittag} and @code{sgml-shorttag} are set correctly).
|
|
577 @end defopt
|
|
578
|
|
579
|
|
580 @c --------------------------------------------------------------------------
|
|
581 @node Managing the DTD, Edit, SGML declaration, Top
|
|
582 @comment node-name, next, previous, up
|
|
583 @chapter Document Type Declaration
|
|
584 @cindex DOCTYPE
|
2
|
585 @cindex DTD
|
|
586
|
|
587 @vindex sgml-default-doctype-name
|
|
588 PSGML needs to know about the DTD you are using for many of its commands.
|
|
589 If you do not have a @samp{DOCTYPE} declaration in your file,
|
|
590 PSGML will try assume that there is one of the form
|
|
591
|
|
592 @example
|
|
593 <!DOCTYPE @var{name} SYSTEM>
|
|
594 @end example
|
|
595
|
|
596 where @var{name} is the value of @code{sgml-default-doctype-name}, if
|
|
597 the value is non-@code{nil}, else the GI of the first tag will be used.
|
0
|
598
|
|
599 @findex sgml-parse-prolog
|
2
|
600 @vindex sgml-auto-activate-dtd
|
|
601 PSGML will try to parse the document type declaration the first time
|
|
602 you do something that needs to parse the document or immediately if the
|
|
603 variable @code{sgml-auto-activate-dtd} is @code{t}. You can also
|
|
604 initiate the parsing of the document type declaration with the command
|
|
605 @code{sgml-parse-prolog}. Big DTDs take some time to parse.
|
0
|
606
|
|
607 When the DTD has been parsed or loaded the name of the document element
|
|
608 will be displayed in the mode line inside brackets. If there was an
|
|
609 error parsing the DTD or there is no DTD, the mode line will display
|
2
|
610 @samp{[ANY]} (*** this is not really correct! a DTD will be established
|
|
611 even if there are missing entities, it may even be empty).
|
|
612
|
|
613 @menu
|
|
614 * Precompiled DTD Subsets::
|
|
615 * Using a Split Document::
|
|
616 * Inserting a DOCTYPE::
|
|
617 * Information from the DTD::
|
|
618 @end menu
|
|
619
|
|
620
|
|
621 @c ------------------------------------------------------------
|
|
622 @node Precompiled DTD Subsets, Using a Split Document, Managing the DTD, Managing the DTD
|
|
623 @comment node-name, next, previous, up
|
|
624 @section Precompiled DTD Subsets
|
|
625
|
|
626 If parsing the DTD takes too long time you can arrange to have PSGML
|
|
627 cache an internal complied version of the DTD. Caching can be done of
|
|
628 DTD fragments in favourable situations. It is possible to have an
|
|
629 external DTD subset cached but still have an internal DTD subset as long
|
|
630 as the internal subset does not define parameter entities that affect
|
|
631 the parsing of the external subset (*** what is the exact conditions?,
|
|
632 probably you can't use the cached external subset if the internal subset
|
|
633 defines parameter entities that are also defined in the external subset
|
|
634 with another value).
|
|
635
|
|
636 @vindex sgml-ecat-files
|
|
637 @vindex sgml-local-ecat-files
|
|
638 To enable caching you have to create special catalog files, hear after
|
|
639 called ECAT files due to (temporary) lack of imagination. These catalogs
|
|
640 have similar syntax to the entity catalogs and there are two variables
|
|
641 containing lists of catalogs to search: @code{sgml-ecat-files} and
|
|
642 @code{sgml-local-ecat-files}. The ECAT files can contain the following
|
|
643 types of entries:
|
|
644
|
|
645 @table @samp
|
|
646 @item file @var{dtdfile} @var{entitydef} @var{cfile}
|
|
647 The @var{dtdfile} is the name of a file containing a DTD subset that
|
|
648 should be cached in @var{cfile}. The @var{entitydef} is optional and if
|
|
649 given have the following syntax:
|
|
650 @example
|
|
651 [ @var{name1} @var{literal1} @var{name2} @var{literal2} @dots{} ]
|
|
652 @end example
|
|
653 Using @var{entitydef} will modify the DTD subset by defining the
|
|
654 parameter entity with name @var{name1} to be @var{literal1}, @dots{}. The
|
|
655 cached version of the subset will be created with those entity
|
|
656 definitions, and when PSGML search for a matching cached subset will check
|
|
657 that the parameter entities in @var{entitydef} has been defined with
|
|
658 those values before trying to use @file{cfile}.
|
|
659
|
|
660 @item public @var{pubid} @var{entitydef} @var{cfile}
|
|
661 Cache the DTD subset with public identifier @var{pubid} in file
|
|
662 @var{cfile}.
|
|
663 @end table
|
|
664
|
|
665
|
|
666 @defopt sgml-recompile-out-of-date-cdtd
|
|
667 If non-@code{nil}, out of date compiled DTDs will be automatically
|
|
668 recompiled. If the value is @code{ask}, PSGML will ask before
|
|
669 recompiling. A @code{nil} value will cause PSGML to silently load an out
|
|
670 of date compiled DTD. A DTD that refers to undefined external entities
|
|
671 is always out of date, thus in such case it can be useful to set this
|
|
672 variable to @code{nil}.
|
|
673 @end defopt
|
|
674
|
|
675
|
|
676 Previous versions of PSGML have had another way of speeding up DTD
|
|
677 parsing. This code remains in this version of PSGML, but is not actively
|
|
678 maintained and may disappear in the future.
|
|
679
|
|
680 @findex sgml-save-dtd
|
|
681 @findex sgml-load-dtd
|
|
682 @vindex sgml-default-dtd-file
|
|
683 You can save the parsed DTD in a file using the command @kbd{M-x
|
|
684 sgml-save-dtd}. Next time PSGML can load that file instead of parsing
|
|
685 the DTD. For PSGML to find the saved DTD you must either save the DTD
|
|
686 using the default name or do a @kbd{M-x sgml-save-options} after saving
|
|
687 the DTD. To directly use an already parsed and saved DTD, load the file
|
|
688 containing the saved DTD with the command @kbd{M-x sgml-load-dtd}.
|
0
|
689
|
|
690 @defopt sgml-default-dtd-file
|
|
691 This is the default file name for saved DTD. This is set by
|
|
692 @code{sgml-mode} to the buffer file name less extension plus the
|
|
693 extension @code{.ced}, if that file exists. Can be changed in the Local
|
|
694 variables section of the file.
|
|
695 @end defopt
|
|
696
|
2
|
697 @c true with system-path
|
|
698 @c either or by creating a saved DTD and setting
|
|
699 @c @code{sgml-default-dtd-file} to that file. If
|
|
700 @c @code{sgml-default-dtd-file} contains a relative file name, the
|
|
701 @c directories in @code{sgml-system-path} will be searched for the file.
|
|
702
|
|
703
|
|
704 @c ------------------------------------------------------------
|
|
705 @node Using a Split Document, Inserting a DOCTYPE, Precompiled DTD Subsets, Managing the DTD
|
|
706 @comment node-name, next, previous, up
|
|
707 @section Using a Split Document
|
|
708
|
|
709 @c *** why not defopt??
|
|
710 @vindex sgml-doctype
|
|
711 You can have the @samp{DOCTYPE} declaration in another file by setting
|
|
712 @code{sgml-doctype} to the other file.
|
|
713
|
0
|
714 @defopt sgml-parent-document
|
2
|
715 Used when the current file is part of a bigger document.
|
|
716
|
|
717 The variable describes how the current file's content fit into the element
|
|
718 hierarchy. The variable should have the form
|
|
719
|
|
720 @lisp
|
|
721 (@var{parent-file} @var{context-element}* @var{top-element} (@var{has-seen-element}*)?)
|
|
722 @end lisp
|
|
723
|
|
724 @table @var
|
|
725 @item parent-file
|
|
726 is a string, the name of the file containing the
|
|
727 document entity.
|
|
728
|
|
729 @item context-element
|
|
730 is a string, that is the name of an element type.
|
|
731 It can occur 0 or more times and is used to set up
|
|
732 exceptions and short reference map. Good candidates
|
|
733 for these elements are the elements open when the
|
|
734 entity pointing to the current file is used.
|
|
735
|
|
736 @item top-element
|
|
737 is a string that is the name of the element type
|
|
738 of the top level element in the current file. The file
|
|
739 should contain one instance of this element, unless
|
|
740 the last (lisp) element of sgml-parent-document is a
|
|
741 list. If it is a list, the top level of the file
|
|
742 should follow the content model of top-element.
|
|
743
|
|
744 @item has-seen-element
|
|
745 is a string that is the name of an element type. This
|
|
746 element is satisfied in the content model of top-element.
|
|
747 @end table
|
0
|
748 @end defopt
|
|
749
|
2
|
750
|
|
751 @c ------------------------------------------------------------
|
|
752 @node Inserting a DOCTYPE, Information from the DTD, Using a Split Document, Managing the DTD
|
|
753 @comment node-name, next, previous, up
|
|
754 @section Inserting a DOCTYPE
|
|
755
|
|
756 @kindex C-c C-u C-d
|
|
757 @findex sgml-custom-dtd
|
|
758 *** Describe the DTD menu in general. Describe customized entries for
|
|
759 special DTDs. Mention @kbd{C-c C-u C-d} for inserting a DOCTYPE from
|
|
760 keyboard.
|
|
761
|
0
|
762 If you change the doctype you must execute @code{sgml-parse-prolog},
|
|
763 changes in the doctype are not automatically recognized.
|
|
764
|
|
765 @defopt sgml-custom-dtd
|
|
766 Menu entries to be added to the DTD menu. The value should be a list of
|
|
767 entries to be added to the DTD menu.
|
|
768
|
2
|
769 Every entry should be a list. The first element of the entry is a string
|
0
|
770 used as the menu entry. The second element is a string containing a
|
|
771 doctype declaration (this can be nil if no doctype). The rest of the
|
|
772 list should be a list of variables and values. For backward
|
|
773 compatibility a single string instead of a variable is assigned to
|
|
774 @code{sgml-default-dtd-file}. All variables are made buffer local and
|
|
775 are also added to the buffers local variables list.
|
|
776
|
|
777 When an entry is selected from the DTD menu, the doctype declaration will
|
|
778 be inserted, the variables will be set to the values in the entry and a
|
|
779 local variables list will be created in the buffer.
|
|
780
|
|
781 Example:
|
|
782
|
|
783 @example
|
|
784 (("HTML" nil
|
|
785 sgml-default-dtd-file "~/sgml/html.ced"
|
|
786 sgml-omittag nil sgml-shorttag nil)
|
|
787 ("HTML+" "<!doctype htmlplus system 'htmlplus.dtd'>"
|
|
788 "~/sgml/htmlplus.ced"
|
|
789 sgml-omittag t sgml-shorttag nil)
|
|
790 ("DOCBOOK" "<!doctype docbook system 'docbook.dtd'>"
|
|
791 "~/sgml/docbook.ced"
|
|
792 sgml-omittag nil sgml-shorttag t)))
|
|
793 @end example
|
|
794 @end defopt
|
|
795
|
2
|
796
|
|
797 @c ------------------------------------------------------------
|
|
798 @node Information from the DTD, , Inserting a DOCTYPE, Managing the DTD
|
|
799 @comment node-name, next, previous, up
|
|
800 @section Information from the DTD
|
|
801 @cindex DTD
|
|
802 @cindex Element
|
|
803
|
|
804 PSGML can list various information about the current DTD.
|
|
805 The following commands can be used via @kbd{M-x} and
|
|
806 can also be found in the DTD menu.
|
|
807
|
|
808 @table @code
|
|
809 @findex sgml-general-dtd-info
|
|
810 @item sgml-general-dtd-info
|
|
811 Display information about the current DTD.
|
|
812
|
|
813 @findex sgml-describe-element-type
|
|
814 @item sgml-describe-element-type
|
|
815 Describe the properties of an element type as declared in the current DTD.
|
|
816
|
|
817 @cindex entity
|
|
818 @findex sgml-describe-entity
|
|
819 @item sgml-describe-entity
|
|
820 Describe the properties of an entity as declared in the current DTD.
|
|
821
|
|
822 @findex sgml-list-elements
|
|
823 @item sgml-list-elements
|
|
824 Will list all elements and the attributes declared for the element.
|
|
825
|
|
826 @findex sgml-list-attributes
|
|
827 @item sgml-list-attributes
|
|
828 Will list all attributes declared and the elements that use them.
|
|
829
|
|
830 @findex sgml-list-terminals
|
|
831 @item sgml-list-terminals
|
|
832 Will list all elements that can contain data.
|
|
833
|
|
834 @findex sgml-list-occur-in-elements
|
|
835 @item sgml-list-occur-in-elements
|
|
836 Will list all element types and where it can occur.
|
|
837
|
|
838 @findex sgml-list-content-elements
|
|
839 @item sgml-list-content-elements
|
|
840 Will list all element types and the element types that can occur
|
|
841 in its content.
|
|
842 @end table
|
|
843
|
|
844
|
0
|
845 @c ---------------------------------------------------------------------------
|
|
846 @node Edit, Display, Managing the DTD, Top
|
|
847 @comment node-name, next, previous, up
|
|
848 @chapter Commands for editing
|
|
849
|
|
850 @menu
|
|
851 * Insert:: Inserting Markup
|
|
852 * Complete:: Markup completion
|
|
853 * Information:: Showing information
|
|
854 * Indent:: Indentation according to structure
|
|
855 * Move:: Move in the element structure
|
|
856 * Attributes:: Editing attributes
|
|
857 * Change and delete:: Changing and deleting markup
|
2
|
858 * Translating characters and entities::
|
0
|
859 @end menu
|
|
860
|
|
861 @c ------------------------------------------------------------------
|
|
862 @node Insert, Complete, Edit, Edit
|
|
863 @comment node-name, next, previous, up
|
|
864 @section Inserting Markup
|
|
865
|
|
866 @c erik says "inserts" ??
|
|
867 The commands that insert start-tags works only if the document has an
|
|
868 associated DTD.
|
|
869
|
|
870 Keyboard commands for inserting:
|
|
871
|
|
872 @table @kbd
|
|
873 @kindex C-c <
|
|
874 @findex sgml-insert-tag
|
|
875 @item C-c <
|
|
876 Will ask, for the tag to insert, in the mini-buffer with completion on the
|
|
877 tags that are valid at point (@code{sgml-insert-tag}).
|
|
878
|
|
879 If the option @code{sgml-balanced-tag-edit} is non-nil, inserting a
|
|
880 start-tag will also insert the corresponding end-tag. If, in addition,
|
|
881 @code{sgml-auto-insert-required-elements} is non-nil, tags for elements
|
|
882 required between the inserted tags will also be inserted.
|
|
883
|
|
884 The list of valid tags, computed for a position in the buffer, will
|
|
885 contain:
|
|
886
|
|
887 @enumerate
|
|
888 @item
|
|
889 The end-tag for the current element, if it can be ended at the position
|
|
890 and @code{sgml-balanced-tag-edit} is nil. Furthermore it will contain
|
|
891 end-tags for enclosing elements if the necessary omissible end-tag
|
|
892 declarations have been made in the DTD.
|
|
893
|
|
894 @item
|
|
895 The start-tags of all elements that could occur after point. If
|
|
896 @code{sgml-omittag-transparent} is nil, the above will be limited to the
|
|
897 elements that can occur within the current element.
|
|
898 @end enumerate
|
|
899
|
|
900
|
|
901 @kindex C-c C-e
|
|
902 @findex sgml-insert-element
|
2
|
903 @vindex sgml-insert-end-tag-on-new-line
|
0
|
904 @item C-c C-e
|
2
|
905 Insert start and end-tags for an element
|
|
906 (@code{sgml-insert-element}). The name of the element is read
|
|
907 from the mini-buffer with completion on valid elements. If
|
|
908 @code{sgml-insert-end-tag-on-new-line} is non-nil or the
|
|
909 element has element content, the end-tag will be inserted on a
|
|
910 new line after the start-tag.
|
0
|
911
|
2
|
912 @vindex sgml-omittag-transparent
|
0
|
913 If @code{sgml-omittag-transparent} is nil, the list of valid elements
|
|
914 will only contain the elements that can be in the content of the current
|
|
915 element.
|
|
916
|
2
|
917 @vindex sgml-auto-insert-required-elements
|
|
918 @vindex sgml-insert-missing-element-comment
|
0
|
919 Required elements in the content will be automatically inserted if the
|
2
|
920 option @code{sgml-auto-insert-required-elements} is non-nil.
|
|
921 When the content model demands an element but there is more
|
|
922 than one to choose from, a comment can be inserted with the
|
|
923 available choices if the option
|
|
924 @code{sgml-insert-missing-element-comment} is non-nil.
|
0
|
925
|
|
926 @kindex C-c C-r
|
|
927 @findex sgml-tag-region
|
|
928 @item C-c C-r
|
|
929 Makes the region into a new element (@code{sgml-tag-region}). Reads
|
|
930 element name from mini-buffer with completion as for @kbd{C-c C-e}.
|
|
931
|
|
932 @kindex C-c /
|
|
933 @findex sgml-insert-end-tag
|
|
934 @item C-c /
|
|
935 Inserts an end-tag for the current element (@code{sgml-insert-end-tag}).
|
|
936
|
|
937 @kindex C-c RET
|
|
938 @findex sgml-split-element
|
|
939 @item C-c RET
|
|
940 Split the current element at point. If repeated, the containing element
|
|
941 will be split before the beginning of then current element.
|
|
942
|
|
943 Typical use is to start a new paragraph element when inside a paragraph.
|
|
944
|
|
945 @kindex C-c +
|
|
946 @findex sgml-insert-attribute
|
|
947 @item C-c +
|
|
948 Read attribute name and value from mini-buffer and insert attribute
|
|
949 specification (@code{sgml-insert-attribute}). If point is immediately
|
|
950 after a start-tag, this command operates on that start-tag. Otherwise
|
|
951 the command will operate on the element after point.
|
|
952
|
|
953 The attribute name will be read with completion. If the attribute has a
|
|
954 token list as declared value the attribute value will also be read with
|
|
955 completion. The prompt for attribute value will typically look like:
|
|
956
|
|
957 @example
|
|
958 Value for @var{attribute} (@var{type} Default: @var{current value}):
|
|
959 @end example
|
|
960
|
2
|
961 @kindex C-c C-u C-m
|
|
962 @findex sgml-custom-markup
|
|
963 @item C-c C-u C-m
|
|
964 Give keyboard access to the customized part of the Markup menu.
|
|
965 Emacs will prompt for the markup to insert using the menu line as
|
|
966 selector. (See @var{sgml-custom-markup} below.)
|
|
967
|
0
|
968 @end table
|
|
969
|
|
970 Menu bar:
|
|
971
|
|
972 @table @samp
|
|
973 @item Markup
|
|
974 Selecting from this menu will insert markup. The menu contains
|
|
975 sub menus with tags and with entities, some other markup and a user
|
|
976 defined section.
|
|
977
|
|
978 Sub menus:
|
|
979
|
|
980 @item Insert element
|
|
981 Pops up a menu of valid elements and insert start and end-tags for
|
|
982 the selected element. Selections from the menu works like the @kbd{C-c
|
|
983 C-e} command.
|
|
984
|
|
985 @item Insert start-tag
|
|
986 Pops up a menu of valid start-tags and insert the selected tag. The
|
|
987 menu has the same start-tags as the completion list for @kbd{C-c <}.
|
|
988
|
|
989 @item Insert end-tag
|
|
990 Pops up a menu of valid end-tags and insert the selected tag.
|
|
991
|
|
992 @item Tag region
|
|
993 Pops up a menu of valid elements and tag the region with the
|
|
994 selection. Selections from the menu works like the @kbd{C-c C-r}
|
|
995 command.
|
|
996
|
|
997 @item Insert entity
|
|
998 Menu of all general entities defined in the DTD.
|
|
999
|
|
1000 @item Insert attribute
|
|
1001 Pops up a menu with all the attributes of an element. The element is
|
|
1002 either the one which start-tag is immediately before point or the
|
|
1003 element after point. Selecting from this menu edits the attribute
|
|
1004 specification list for the element.
|
|
1005
|
|
1006 The menu has a sub menu for every attribute which declared value is a
|
|
1007 token list. The rest of the attributes are collected in one sub menu.
|
|
1008 For the token list attributes, selecting a value will insert that
|
|
1009 attribute-value pair. Selecting some other attribute reads the
|
|
1010 attribute-value from the mini-buffer and inserts the attribute value
|
|
1011 pair.
|
|
1012 @end table
|
|
1013
|
|
1014 @kindex S-@key{mouse-1}
|
|
1015 A menu is also available directly with a mouse button click in the
|
|
1016 buffer. In GNU Emacs it is the first mouse button combined with shift
|
2
|
1017 (@kbd{S-@key{mouse-1}}). In XEmacs it is bound to the third mouse
|
0
|
1018 button. The mouse button click will pop-up a menu of valid tags or a
|
|
1019 menu of attributes if the point is in a start-tag. The attributes menu
|
|
1020 works as the ``Insert attribute'' menu from the menu-bar. The tags list
|
|
1021 is the list of valid tags described above for command @kbd{C-c <}.
|
|
1022 Selection from the tags menu works like the @kbd{C-c <} command, with
|
|
1023 the following exception:
|
|
1024
|
|
1025 You can tag a region, with start and end-tag. There are two ways to
|
|
1026 indicate the region to mark:
|
|
1027
|
|
1028 @enumerate
|
|
1029 @item
|
|
1030 Use the normal mouse commands to mark region.
|
|
1031
|
|
1032 For this to work you must either use @dfn{transient mark mode}
|
|
1033 (@pxref{Transient Mark, , Transient Mark Mode, emacs, The Emacs
|
|
1034 Editor}) or set the option @code{sgml-tag-region-if-active} to non-nil
|
|
1035 (don't set this unless you are sure that you want it).
|
|
1036
|
|
1037 @item
|
|
1038 Alternatively make a secondary selection, this is done by holding down
|
|
1039 the meta key and using the mouse buttons.
|
|
1040 @xref{Secondary selection, , , emacs, The Emacs Editor}.
|
|
1041 Some window managers intercept these events, which makes it hard use the
|
|
1042 secondary selection in Emacs.
|
|
1043 @end enumerate
|
|
1044
|
|
1045 @defopt sgml-balanced-tag-edit
|
|
1046 If non-nil, inserting a start-tag will also insert the corresponding
|
|
1047 end-tag.
|
|
1048 @end defopt
|
|
1049
|
|
1050 @defopt sgml-auto-insert-required-elements
|
|
1051 If non-nil, automatically inserts required elements in the content
|
|
1052 of an inserted element.
|
|
1053 @end defopt
|
|
1054
|
|
1055 @defopt sgml-omittag-transparent
|
|
1056 If non-nil, will show legal tags inside elements with omissible start-tags
|
|
1057 and legal tags beyond omissible end-tags.
|
|
1058 @end defopt
|
|
1059
|
|
1060 @defopt sgml-tag-region-if-active
|
|
1061 If non-nil, the @samp{Insert tags} menu will tag a region if the region
|
|
1062 is considered active by emacs. If nil, region must be active and
|
|
1063 @code{transient-mark-mode} must be on for the region to be tagged.
|
|
1064 @end defopt
|
|
1065
|
|
1066 @defopt sgml-custom-markup
|
|
1067 Menu entries to be added to the Markup menu. The value should be a list
|
|
1068 of lists of two strings. The first string is the menu line and the
|
|
1069 second string is the text inserted when the menu item is selected. The
|
|
1070 second string can contain a @samp{\r} where the cursor should be left.
|
|
1071 Also, if a selection is made according to the same rules as for the
|
|
1072 @kbd{S-mouse-1} menu, the selection is replaced with the second string
|
|
1073 and @samp{\r} is replaced with the selection.
|
|
1074
|
|
1075 Example:
|
|
1076
|
|
1077 @example
|
|
1078 (("Version1" "<![%Version1[\r]]>")
|
|
1079 ("New page" "<?NewPage>"))
|
|
1080 @end example
|
|
1081 @end defopt
|
|
1082
|
|
1083
|
2
|
1084 @defopt sgml-insert-missing-element-comment
|
|
1085 If non-nil, and sgml-auto-insert-required-elements also true,
|
|
1086 @code{sgml-insert-element} will insert a comment if there is an
|
|
1087 element required but there is more than one to choose from.
|
|
1088 @end defopt
|
|
1089
|
|
1090 @defopt sgml-insert-end-tag-on-new-line
|
|
1091 If non-nil, @code{sgml-insert-element} will put the end-tag on
|
|
1092 a new line after the start-tag. Useful on slow terminals if you
|
|
1093 find the end-tag after the cursor irritating.
|
|
1094 @end defopt
|
|
1095
|
|
1096
|
0
|
1097 @c -------------------------------------------------------------------------
|
|
1098 @node Complete, Information, Insert, Edit
|
|
1099 @comment node-name, next, previous, up
|
|
1100 @section Markup completion
|
|
1101
|
|
1102 @kindex M-TAB
|
|
1103 @findex sgml-complete
|
|
1104 If you are typing in markup directly, @kbd{M-TAB} will help you by
|
|
1105 completing a tag name, an entity name or a markup declaration name. If
|
|
1106 you type @kbd{M-TAB} after a plain word, @code{ispell-complete-word}
|
|
1107 will be invoked instead.
|
|
1108
|
|
1109 If you have typed (@point{} marks the position of point)
|
|
1110
|
|
1111 @example
|
|
1112 &At@point{}
|
|
1113 @end example
|
|
1114
|
|
1115 @noindent and type @kbd{M-TAB} (assuming you use the @file{ISOLat1}
|
|
1116 entity set) you get:
|
|
1117
|
|
1118 @example
|
|
1119 Ã@point{}
|
|
1120 @end example
|
|
1121
|
|
1122
|
|
1123 @c ---------------------------------------------------------------------------
|
|
1124 @node Information, Indent, Complete, Edit
|
|
1125 @comment node-name, next, previous, up
|
|
1126 @section Showing information
|
|
1127
|
|
1128 Commands for showing information obtained by parsing the buffer.
|
|
1129
|
|
1130 @table @kbd
|
|
1131 @kindex C-c C-c
|
|
1132 @findex sgml-show-context
|
|
1133 @item C-c C-c
|
|
1134 Shows in the message area: context at point, if in a tag or in mixed
|
|
1135 content and the open elements (@code{sgml-show-context}).
|
|
1136
|
|
1137 @kindex C-c C-w
|
|
1138 @findex sgml-what-element
|
|
1139 @item C-c C-w
|
|
1140 Shows what element the character after point (under the cursor) belongs
|
|
1141 to; also shows context of element (@code{sgml-what-element}).
|
|
1142
|
|
1143 @kindex C-c C-t
|
|
1144 @findex sgml-list-valid-tags
|
|
1145 @item C-c C-t
|
|
1146 List contextually valid tags (@code{sgml-list-valid-tags}). Displays
|
|
1147 information about current element, all valid end-tags, valid start-tags
|
|
1148 in current element, and start-tags valid at this point but in other
|
|
1149 elements together with the tags omitted.
|
|
1150 @end table
|
|
1151
|
|
1152 You can make the mode-line display the name of the current open element
|
|
1153 by setting the @code{sgml-live-element-indicator} variable. Setting
|
|
1154 this will make all commands slower due to the work needed to keep the
|
|
1155 mode-line up to date.
|
|
1156
|
|
1157 @defopt sgml-live-element-indicator
|
|
1158 If non-nil, indicate current element in mode line.
|
|
1159
|
|
1160 NOTE: Setting this implies that every command can cause a parse.
|
|
1161 @end defopt
|
|
1162
|
|
1163
|
|
1164
|
|
1165 @c --------------------------------------------------------------------------
|
|
1166 @node Indent, Move, Information, Edit
|
|
1167 @comment node-name, next, previous, up
|
|
1168 @section Indentation according to structure
|
|
1169
|
|
1170 @kindex @key{TAB}
|
|
1171 @kindex @key{LFD}
|
|
1172 @findex sgml-indent-or-tab
|
|
1173 @findex newline-and-indent
|
|
1174 You can indent a line according to the depth of element nesting at the
|
|
1175 beginning of the line. To indent the current line use @kbd{@key{TAB}}.
|
|
1176 You can also use @kbd{@key{LFD}} (@code{newline-and-indent}) to start a
|
|
1177 new line with correct indentation.
|
|
1178
|
|
1179 @defopt sgml-indent-step
|
|
1180 How much to increment indent for every element level. If nil, no
|
|
1181 indentation.
|
|
1182
|
|
1183 If this is nil, @kbd{@key{TAB}} will insert a tab instead of indenting.
|
|
1184 @end defopt
|
|
1185
|
|
1186 @defopt sgml-indent-data
|
|
1187 If non-nil, indent in data/mixed context also.
|
|
1188 @end defopt
|
|
1189
|
|
1190
|
|
1191
|
|
1192 @c ---------------------------------------------------------------------------
|
|
1193 @node Move, Attributes, Indent, Edit
|
|
1194 @comment node-name, next, previous, up
|
|
1195 @section Move in the element structure
|
|
1196
|
|
1197 These commands move in the element structure. The commands uses
|
|
1198 knowledge of SGML syntax, and if available the specific DTD.
|
|
1199
|
|
1200 @table @kbd
|
|
1201 @kindex C-M-a
|
|
1202 @findex sgml-beginning-of-element
|
|
1203 @item C-M-a
|
|
1204 Move to the (content) beginning of the current element
|
|
1205 (@code{sgml-beginning-of-element}).
|
|
1206
|
|
1207 @kindex C-M-e
|
|
1208 @findex sgml-end-of-element
|
|
1209 @item C-M-e
|
|
1210 Move to the (content) end of the current element (@code{sgml-end-of-element}).
|
|
1211
|
|
1212 @kindex C-M-f
|
|
1213 @findex sgml-forward-element
|
|
1214 @item C-M-f
|
|
1215 Move forward by element (@code{sgml-forward-element}).
|
|
1216
|
|
1217 @kindex C-M-b
|
|
1218 @findex sgml-backward-element
|
|
1219 @item C-M-b
|
|
1220 Move backward by element (@code{sgml-backward-element}).
|
|
1221
|
|
1222 @kindex C-M-u
|
|
1223 @findex sgml-backward-up-element
|
|
1224 @item C-M-u
|
|
1225 Move up to before current element (@code{sgml-backward-up-element}).
|
|
1226
|
|
1227 @kindex C-c C-n
|
|
1228 @findex sgml-up-element
|
|
1229 @item C-c C-n
|
|
1230 Move up to after current element (@code{sgml-up-element}).
|
|
1231
|
|
1232 @kindex C-M-d
|
|
1233 @findex sgml-down-element
|
|
1234 @item C-M-d
|
|
1235 Move down to the (content) beginning of the next element
|
|
1236 (@code{sgml-down-element}).
|
|
1237
|
|
1238 @kindex C-c C-d
|
|
1239 @findex sgml-next-data-field
|
|
1240 @item C-c C-d
|
|
1241 Move to the next place where data is allowed (@code{sgml-next-data-field}).
|
|
1242 @end table
|
|
1243
|
|
1244 You can also move to the next place where there is some structural error
|
|
1245 with @kbd{C-c C-o} (@pxref{Validate}).
|
|
1246
|
|
1247
|
|
1248 @c ---------------------------------------------------------------------------
|
|
1249 @node Attributes, Change and delete, Move, Edit
|
|
1250 @comment node-name, next, previous, up
|
|
1251 @section Editing attributes
|
|
1252
|
|
1253 @findex sgml-edit-attributes
|
|
1254 @kindex C-c C-a
|
|
1255 If you want to change the attributes of a start-tag you can simply edit
|
|
1256 them directly in the buffer. Or you can place the cursor at or after
|
|
1257 the start-tag and use the @code{sgml-edit-attributes} command, available
|
|
1258 from the @samp{SGML}-menu or on @kbd{C-c C-a}. This will create a new
|
|
1259 Emacs window with all possible attributes listed in the form
|
|
1260
|
|
1261 @example
|
|
1262 @var{attribute name} = @var{current value}.
|
|
1263 @end example
|
|
1264
|
|
1265 The @var{current value} may be shown as @samp{#DEFAULT} if the attribute
|
|
1266 has not been given a value in the start-tag. The list also contains the
|
|
1267 attributes declaration as a comment. Note also that the @var{current
|
|
1268 value} is show without eventual quotes.
|
|
1269
|
|
1270 @kindex C-c C-d
|
|
1271 @kindex @key{TAB}
|
|
1272 It is now possible to edit the attribute values. You can move to the
|
|
1273 next attribute with @kbd{@key{TAB}}. If you want to let an attribute
|
|
1274 have its default value use @kbd{C-c C-d}, this will insert a
|
|
1275 @samp{#DEFAULT} in the value field.
|
|
1276
|
|
1277 If Emacs is running in an X window, the @samp{#DEFAULT} will be
|
|
1278 underlined to distinguish it from normal values.
|
|
1279
|
|
1280 @kindex C-c C-c
|
|
1281 Finish the editing with @kbd{C-c C-c}; this will replace the attribute
|
|
1282 values in the main buffer with those edited. Note that values will be
|
|
1283 quoted as needed.
|
|
1284
|
|
1285 If you want to abort the editing, you can remove the window with
|
|
1286 @kbd{C-x 0} or if you want it neat, kill the buffer and remove the
|
|
1287 window.
|
|
1288
|
|
1289 Some other keys are:
|
|
1290 @table @kbd
|
|
1291 @kindex C-a
|
|
1292 @findex sgml-edit-attrib-field-start
|
|
1293 @item C-a
|
|
1294 Go to the beginning of the value field
|
|
1295 (@code{sgml-edit-attrib-field-start}).
|
|
1296
|
|
1297 @kindex C-e
|
|
1298 @findex sgml-edit-attrib-field-end
|
|
1299 @item C-e
|
|
1300 Go to the end of the value field
|
|
1301 (@code{sgml-edit-attrib-field-end}).
|
|
1302
|
|
1303 @kindex C-c C-k
|
|
1304 @findex sgml-edit-attrib-clear
|
|
1305 @item C-c C-k
|
|
1306 Clear the value field
|
|
1307 (@code{sgml-edit-attrib-clear}).
|
|
1308
|
|
1309 @kindex C-c C-d
|
|
1310 @findex sgml-edit-attrib-default
|
|
1311 @item C-c C-d
|
|
1312 Set the value field to @samp{#DEFAULT}
|
|
1313 (@code{sgml-edit-attrib-default}). This is a special value that will
|
|
1314 make the attribute be implied.
|
|
1315 @end table
|
|
1316
|
|
1317
|
|
1318 @c --------------------------------------------------------------------------
|
2
|
1319 @node Change and delete, Translating characters and entities, Attributes, Edit
|
0
|
1320 @comment node-name, next, previous, up
|
|
1321 @section Changing and deleting markup
|
|
1322
|
|
1323 @table @kbd
|
|
1324 @kindex C-c =
|
|
1325 @findex sgml-change-element-name
|
|
1326 @item C-c =
|
|
1327 Change the name of the current element (@code{sgml-change-element-name}).
|
|
1328 Tries to translate attribute specifications. An attribute will be
|
|
1329 translated to an attribute with the same name. If the new element has
|
|
1330 no attribute with the same name, the attribute will be ignored. If
|
|
1331 there is an attribute with the same name but different declared content,
|
|
1332 a warning is given.
|
|
1333
|
|
1334 ID attributes are handled specially, an attribute with declared value ID
|
|
1335 will always be translated to the attribute with declared value ID.
|
|
1336
|
|
1337 @kindex C-c C-k
|
|
1338 @findex sgml-kill-markup
|
|
1339 @item C-c C-k
|
|
1340 Kill next tag, markup declaration or process instruction
|
|
1341 (@code{sgml-kill-markup}).
|
|
1342
|
|
1343 @kindex C-M-k
|
|
1344 @findex sgml-kill-element
|
|
1345 @item C-M-k
|
|
1346 Kill the element following the cursor (@code{sgml-kill-element}).
|
|
1347
|
|
1348 @kindex C-c -
|
|
1349 @findex sgml-untag-element
|
|
1350 @item C-c -
|
|
1351 Remove tags from current element (@code{sgml-untag-element}).
|
|
1352
|
|
1353 @kindex C-c #
|
|
1354 @findex sgml-make-character-reference
|
|
1355 @item C-c #
|
|
1356 Convert character after point to a character reference
|
|
1357 (@code{sgml-make-character-reference}). If called with a numeric
|
|
1358 argument, convert a character reference back to a normal character.
|
|
1359
|
|
1360 @kindex C-c C-q
|
|
1361 @findex sgml-fill-element
|
|
1362 @item C-c C-q
|
|
1363 Fills an element as a paragraph (@code{sgml-fill-element}). This is a
|
|
1364 substitute for the normal @code{fill-paragraph}. The command uses
|
|
1365 heuristics to decide what should be a paragraph.
|
|
1366
|
|
1367 @enumerate
|
|
1368 @item
|
|
1369 If point is in an element content, recursively fill the sub-elements.
|
|
1370 @item
|
|
1371 Find the biggest element with mixed content containing point.
|
|
1372 @item
|
|
1373 If the above element is mixed but contains elements with pure element
|
|
1374 content then fill what is between the pure elements as paragraphs and
|
|
1375 fill the pure elements recursively.
|
|
1376 @end enumerate
|
|
1377
|
2
|
1378 @findex sgml-expand-all-shortrefs
|
|
1379 @item M-x sgml-expand-all-shortrefs
|
|
1380 Short references to text entities are expanded to the replacement text
|
|
1381 of the entity other short references are expanded into general entity
|
|
1382 references. If argument, @var{to-entity}, is non-@code{nil}, or if
|
|
1383 called interactive with numeric prefix argument, all short references
|
|
1384 are replaced by generally entity references.
|
0
|
1385
|
|
1386 @findex sgml-normalize
|
|
1387 @item M-x sgml-normalize
|
|
1388 Normalize the document in the buffer. This will
|
|
1389
|
|
1390 @enumerate
|
|
1391 @item
|
2
|
1392 expand short references,
|
|
1393 @item
|
0
|
1394 insert missing tags,
|
|
1395 @item
|
|
1396 replace minimized tags with full tags,
|
|
1397 @item
|
|
1398 fix attribute specification lists according to options set.
|
|
1399 @end enumerate
|
|
1400
|
2
|
1401 There is one argument, @var{to-entity}, with the same meaning as for
|
|
1402 @code{sgml-expand-all-shortrefs}.
|
|
1403
|
0
|
1404 There is one option for the normalize command. With its default value,
|
|
1405 normalize may actually change the data content of some elements. But
|
|
1406 only by removing some white-space from the end of elements with omitted
|
|
1407 end-tags.
|
|
1408 @end table
|
|
1409
|
|
1410 @defopt sgml-normalize-trims
|
|
1411 If non-nil, @code{sgml-normalize} will trim off white space from end of
|
|
1412 element when adding end-tag.
|
|
1413
|
|
1414 Default: @code{t}.
|
|
1415 @end defopt
|
|
1416
|
|
1417
|
2
|
1418 @c --------------------------------------------------------------------------
|
|
1419 @node Translating characters and entities, , Change and delete, Edit
|
|
1420 @comment node-name, next, previous, up
|
|
1421 @section Translating between characters and entity references
|
|
1422
|
|
1423 @c *** Need work..
|
|
1424
|
|
1425 Set the variable @code{sgml-display-char-list-filename} to a file file that
|
|
1426 contains mappings between all characters present in the presentation
|
|
1427 character set, and their "standard replacement text" names, e.g. "å"
|
|
1428 -> "[aring ]", e.t.c.
|
|
1429
|
|
1430 The default value for this variable is `iso88591.map'.
|
|
1431
|
|
1432 The use the functions (also in the Modify menu)
|
|
1433
|
|
1434 @table @code
|
|
1435 @findex sgml-charent-to-display-char
|
|
1436 @item sgml-charent-to-display-char
|
|
1437 @findex sgml-display-char-to-charent
|
|
1438 @item sgml-display-char-to-charent
|
|
1439 @end table
|
|
1440
|
|
1441 to translate between entities and characters.
|
|
1442
|
0
|
1443 @c ---------------------------------------------------------------------------
|
2
|
1444 @node Display, Miscellaneous options, Edit, Top
|
0
|
1445 @comment node-name, next, previous, up
|
|
1446 @chapter Appearance of text in the buffer
|
|
1447
|
|
1448 @menu
|
|
1449 * Fold:: Folding editing
|
2
|
1450 * Hiding markup::
|
0
|
1451 * Highlight:: Highlighting markup
|
|
1452 @end menu
|
|
1453
|
|
1454 @c ---------------------------------------------------------------------------
|
2
|
1455 @node Fold, Hiding markup, Display, Display
|
0
|
1456 @comment node-name, next, previous, up
|
|
1457 @section Folding editing
|
|
1458
|
|
1459 With these commands you can make parts of the text temporarily invisible
|
|
1460 to make it easier to see the overall structure of your text.
|
|
1461
|
|
1462 When folding a region all the lines but the first will be invisible.
|
|
1463 The first line of the region will still be visible with an ellipsis at
|
|
1464 the end.
|
|
1465
|
|
1466 @xref{Outline Mode, , , emacs, The Emacs Editor}.
|
|
1467
|
|
1468 @table @kbd
|
|
1469 @kindex C-c C-f C-r
|
|
1470 @findex sgml-fold-region
|
|
1471 @item C-c C-f C-r
|
|
1472 The region between point and mark will be folded (@code{sgml-fold-region}).
|
|
1473
|
|
1474 @kindex C-c C-f C-e
|
|
1475 @findex sgml-fold-element
|
|
1476 @item C-c C-f C-e
|
|
1477 The region between the start and end of the current element will be
|
|
1478 folded (@code{sgml-fold-element}).
|
|
1479
|
|
1480 This command can also fold the SGML declaration or the DOCTYPE
|
|
1481 declaration.
|
|
1482
|
|
1483 @kindex C-c C-f C-s
|
|
1484 @findex sgml-fold-subelement
|
|
1485 @item C-c C-f C-s
|
|
1486 Fold all the sub elements of the current element
|
|
1487 (@code{sgml-fold-subelement}).
|
|
1488
|
|
1489 @kindex C-c C-s
|
|
1490 @kindex C-c C-u C-l
|
|
1491 @findex sgml-unfold-line
|
|
1492 @item C-c C-s
|
|
1493 @itemx C-c C-u C-l
|
|
1494 Unfold the current line, assuming it is the first line of a folded
|
|
1495 region (@code{sgml-unfold-line}).
|
|
1496
|
|
1497 @kindex C-c C-u C-e
|
|
1498 @findex sgml-unfold-element
|
|
1499 @item C-c C-u C-e
|
|
1500 Make all lines in current element visible (@code{sgml-unfold-element}).
|
|
1501
|
|
1502 @kindex C-c C-u C-a
|
|
1503 @findex sgml-unfold-all
|
|
1504 @item C-c C-u C-a
|
|
1505 Make all lines in current buffer visible (@code{sgml-unfold-all}).
|
|
1506
|
|
1507 @kindex C-c C-f C-x
|
|
1508 @findex sgml-expand-element
|
|
1509 @item C-c C-f C-x
|
|
1510 Unfold current element and then fold the subelements
|
|
1511 (@code{sgml-expand-element}). If the current element is folded this
|
|
1512 expands what is visible.
|
|
1513 @end table
|
|
1514
|
|
1515
|
2
|
1516 @c ---------------------------------------------------------------------------
|
|
1517 @node Hiding markup, Highlight, Fold, Display
|
|
1518 @comment node-name, next, previous, up
|
|
1519 @section Hiding markup
|
|
1520
|
|
1521 *** Describe hide-tags
|
0
|
1522
|
|
1523
|
|
1524 @c ---------------------------------------------------------------------------
|
2
|
1525 @node Highlight, , Hiding markup, Display
|
0
|
1526 @comment node-name, next, previous, up
|
|
1527 @section Highlighting markup
|
|
1528
|
|
1529
|
2
|
1530 PSGML can highlight the markup giving the markup a different @dfn{face}
|
|
1531 (@pxref{Faces, , Using Multiple Typefaces, emacs, The Emacs Editor}).
|
|
1532 The highlighting will only be done if the variable @code{sgml-set-face}
|
|
1533 is non-@code{nil}. The default settings make tags bold and comments
|
|
1534 italic, but this can be modified with the variable
|
|
1535 @code{sgml-markup-faces}. When highlighting is on PSGML will parse after
|
|
1536 every command until the whole buffer has been parsed or user event
|
|
1537 occurs.
|
0
|
1538
|
|
1539 @findex sgml-clear-faces
|
|
1540 To remove the highlighting type @kbd{M-x sgml-clear-faces}.
|
|
1541
|
|
1542 @defopt sgml-set-face
|
|
1543 If non-nil, psgml will set the face of parsed markup.
|
|
1544 @end defopt
|
|
1545
|
|
1546 @defopt sgml-markup-faces
|
|
1547 A list of markup to face mappings.
|
|
1548 Each element looks like @code{(@var{markup-type} . @var{face})}.
|
|
1549 Possible values for @var{markup-type} is:
|
|
1550
|
|
1551 @table @code
|
|
1552 @item comment
|
|
1553 comment declaration
|
|
1554 @item doctype
|
|
1555 doctype declaration
|
|
1556 @item end-tag
|
|
1557 end-tag
|
|
1558 @item ignored
|
|
1559 ignored marked section
|
|
1560 @item ms-start
|
|
1561 marked section end, if not ignored
|
|
1562 @item ms-end
|
|
1563 marked section start, if not ignored
|
|
1564 @item pi
|
|
1565 processing instruction
|
|
1566 @item sgml
|
|
1567 SGML declaration
|
|
1568 @item start-tag
|
|
1569 start-tag
|
|
1570 @item entity
|
|
1571 entity reference
|
|
1572 @item shortref
|
|
1573 short reference
|
|
1574 @end table
|
|
1575 @end defopt
|
|
1576
|
2
|
1577
|
|
1578
|
0
|
1579 @c ------------------------------------------------------------------
|
2
|
1580 @node Miscellaneous options, Bugs, Display, Top
|
|
1581 @comment node-name, next, previous, up
|
|
1582 @chapter Miscellaneous options
|
|
1583
|
|
1584 *** describe sgml-save-options
|
|
1585
|
|
1586 @defopt sgml-ignore-undefined-elements
|
|
1587 Start-tags for undefined elements will either be ignored, if
|
|
1588 @code{sgml-ignore-undefined-elements} is @code{t}, or assumed to be
|
|
1589 acceptable in the current element and defined with @code{O O ANY}
|
|
1590 @end defopt
|
|
1591
|
|
1592 @defopt sgml-range-indicator-max-length
|
|
1593 Maximum number of characters used from the first and last entry
|
|
1594 of a sub-menu to indicate the range of that menu.
|
|
1595
|
|
1596 @vindex sgml-max-menu-size
|
|
1597 This is used for long menus of elements, tags or entities that are split
|
|
1598 into @code{sgml-max-menu-size} big sub-menus.
|
|
1599 @end defopt
|
|
1600
|
|
1601
|
|
1602
|
|
1603
|
|
1604 @c ------------------------------------------------------------------
|
|
1605 @node Bugs, Index, Miscellaneous options, Top
|
0
|
1606 @comment node-name, next, previous, up
|
|
1607 @chapter Bugs
|
|
1608
|
|
1609
|
|
1610 If you encounter something that you think is a bug, please report
|
|
1611 it. Try to include a clear description of the undesired behaviour.
|
|
1612 A test case that exhibits the bug, would also be useful.
|
|
1613
|
|
1614 You can report a bug with the command @kbd{M-x sgml-submit-bug-report}.
|
|
1615
|
|
1616 When PSGML needs contextual information it parses the document up to
|
2
|
1617 the point. During the parsing, it builds a parse tree. The parse
|
0
|
1618 tree is used to initialize the next parse, to avoid having to parse
|
|
1619 things already parsed. Changes to the buffer is supposed to prune
|
|
1620 the tree of all outdated information. But if you get strange
|
|
1621 complaints from the parser, try and back up a bit and use @kbd{C-c
|
|
1622 C-o} (@code{sgml-next-trouble-spot}).
|
|
1623
|
|
1624
|
|
1625
|
|
1626 @c ------------------------------------------------------------------
|
|
1627 @node Index, , Bugs, Top
|
|
1628 @comment node-name, next, previous, up
|
|
1629 @chapter Index
|
|
1630
|
|
1631 @printindex cp
|
|
1632
|
2
|
1633 @contents
|
0
|
1634 @bye
|