#libpath

built-in shelf

Purpose

#libpath is a built-in stream shelf whose items specify alternate paths for the system identifiers specified in SGML/XML library declarations. Its initial values are set using the -libpath (or -l) command-line argument.

The #libpath shelf is initialized from the -libpath specifications on the command line only if, somewhere in the OmniMark program, there is some action that initiates SGML or XML parsing (i.e. a do sgml-parse or do xml-parse action). If there is no such markup parsing action, the -libpath command-line arguments are ignored.

The default current item is the last item on the shelf, as for programmer-defined shelves.

#libpath is used by the default external text entity manager. The manager uses the values of items as prefixes when it tries to find files to provide replacement text for the current external text entity.

#libpath can be changed at any time, but these changes will affect the processing of the default external-text-entity rule. The default external text entity manager assumes that the items on this shelf are closed and attached to either buffers or referents that can return a value.

This example illustrates how a repeat over loop can be used to iterate over the items on the #libpath shelf. The external-text-entity rule shown in this example approximates what OmniMark's built-in entity manager does for entities with system identifiers.

In this example, provision is made for there not being a -libpath argument, which is used as a prefix to produce the name of an existing file. If the external-text-entity rule was missing the halt action, then, apart from the message being written to #error, the OmniMark program would simply continue.

  external-text-entity #implied when entity is system
     local stream file-name
  
     do when file "%eq" exists
        set file-name to "%eq"
  
     else
        repeat over #libpath as path
           do when file (path || "%eq") exists
              set file-name to path || "%eq"
              exit
           done
        again
     done
  
     do when file-name is attached
        output file file-name
  
     else
        put #error "no file found for entity %"%q%", system id = %"%eq%"%n"
        halt
     done