![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|||||||||||
|
Introduction
This example illustrates the use of the "%q" format item and its associated format modifiers in processing external text entities. Where "%q" gives the name of the entity, "%eq", "%pq", and "%epq" give, respectively, the entity's effective system identifier, declared public identifier, and system identifier mapped from the public identifier in the library declarations.
The external text entity rule in this sample first checks to see if an external text entity has a system identifier. It then checks for a system identifier in the library rules. Finally, it sets the stream "file-name" to the entity name, appending the extension ".ent" if the entity is a parameter entity (the "%" kind), or appending the extension ".sgm" if the entity is a general entity (the "&" kind). Once it has created this file name (using the entity name and the file extension), it checks to see if the file exists and is readable. If so, it passes the text of the file to the XML/SGML parser as the entity's replacement. If not, it issues an error to the #error stream, and provides an XML/SGML comment as the entity's replacement text.
external-text-entity #implied
local stream file-name
do when entity is system
set file-name to "%eq"
else when entity is in-library
set file-name to "%epq"
else when entity is parameter
set file-name to "%lq.ent"
else
set file-name to "%lq.sgm"
done
do when file file-name exists
& file file-name is readable
output file file-name
else
put #error "*** error *** can't read from %"%g(file-name)%"%n"
output
"""%n"
done
| ---- |