swirl Guide to OmniMark 5   OmniMark home
docs home 
IndexConceptsTasksSyntaxLibrariesOMX VariablesErrors
 
    Related Syntax  
Entity managers: programmer-defined

The relatively simple model supported by OmniMark's built-in entity manager (an external entity is a file) works for most OmniMark applications, but not for all. For those other applications, OmniMark programmers can, in a simple and straightforward way, write their own entity managers, using OmniMark's external-text-entity rule.

The external-text-entity rule allows the OmniMark programmer to do things other than just providing an alternative way of finding a file containing an entity's text. An entity can be any sequence of characters. The entity manager provides a sequence of characters to the SGML parser when the SGML parser passes and external entity reference to the entity manager. The sequence of characters doesn't have to be a "verbatim" copy of the text in a file. Other possibilities include:

Direct access to the entries in the library rules and "-libpath" command-line arguments are provided by OmniMark so that the behavior of OmniMark's entity manager can be duplicated by a program written in OmniMark. This can be useful, for example, when what OmniMark's entity manager does is a good "fall-back" position when an application-specific scheme does not find an entity's text.

You can program an entity manager to skip over unreadable files when it is searching for the file containing the text of an external entity. The following code interprets the system identifier as a set of alternative file names separated by semicolons. It uses the first readable file it finds as the text of the external entity, skipping over references to directories. If there is no such file, the external-text-entity rule terminates the OmniMark program, and adds a message to the #error stream:

  external-text-entity #implied when entity is system
     repeat scan "%eq"
     match [\ ";"]+ => file-name
        do when file file-name is readable and
                file file-name isnt directory
           output file file-name
           exit
        done
     match ";"
        ; Skip over the separating semicolons
     match value-end
        put #error "None of the files %"%eq%" (for entity %q) " _
                   "are readable.%n"
        halt
     again

      Related Syntax
   external-text-entity
   library
 
----

Top [ INDEX ] [ CONCEPTS ] [ TASKS ] [ SYNTAX ] [ LIBRARIES ] [ OMX ] [ OMX ] [ ERRORS ]

Generated: August 11, 2000 at 3:06:20 pm
If you have any comments about this section of the documentation, send email to docerrors@omnimark.com

Copyright © OmniMark Technologies Corporation, 1988-2000.