Provided by: latexml_0.7.0-1_all bug

NAME

       "LaTeXML::Model" - represents the Document Model

DESCRIPTION

       "LaTeXML::Model" encapsulates information about the document model to be used in converting a digested
       document into XML by the LaTeXML::Document.  This information is based on the document schema (eg, DTD,
       RelaxNG), but is also modified by package modules; thus the model may not be complete until digestion is
       completed.

       The kinds of information that is relevant is not only the content model (what each element can contain
       contain), but also SGML-like information such as whether an element can be implicitly opened or closed,
       if needed to insert a new element into the document.

       Currently, only an approximation to the schema is understood and used.  For example, we only record that
       certain elements can appear within another; we don't preserve any information about required order or
       number of instances.

   Model Creation
       "$model = LaTeXML::Model->new(%options);"
           Creates a new model.  The only useful option is "permissive=>1" which ignores any DTD and allows the
           document to be built without following any particular content model.

   Document Type
       "$model->setDocType($rootname,$publicid,$systemid,%namespaces);"
           Declares the expected rootelement, the public and system ID's of the document type to be used in the
           final document.  The hash %namespaces specifies the namespace prefixes that are expected to be found
           in the DTD, along with the associated namespace URI.  These prefixes may be different from the
           prefixes used in implementation code (eg. in ltxml files; see RegisterNamespace).  The generated
           document will use the namespaces and prefixes defined here.

   Namespaces
       Note that there are two namespace mappings between namespace URIs and prefixes that are relevant to
       LaTeXML.  The `code' mapping is the one used in code implementing packages, and in particular,
       constructors defined within those packages.  The prefix "ltx" is used consistently to refer to LaTeXML's
       own namespace ("http://dlmf.nist.gov/LaTeXML)".

       The other mapping, the `document' mapping, is used in the created document; this may be different from
       the `code' mapping in order to accommodate DTDs, for example, or for use by other applications that
       expect a rigid namespace mapping.

       "$model->registerNamespace($prefix,$namespace_url);"
           Register $prefix to stand for the namespace $namespace_url.  This prefix can then be used to create
           nodes in constructors and Document methods.  It will also be recognized in XPath expressions.

       "$model->getNamespacePrefix($namespace);"
           Return the prefix to use for the given $namespace.

       "$model->getNamespace($prefix);"
           Return the namespace url for the given $prefix.

   Model queries
       "$boole = $model->canContain($tag,$childtag);"
         Returns whether an element with qualified name $tag can contain an element with qualified name
         $childtag.  The tag names #PCDATA, #Document, #Comment and #ProcessingInstruction are specially
         recognized.

       "$auto = $model->canContainIndirect($tag,$childtag);"
         Checks whether an element with qualified name $tag could contain an element with qualified name
         $childtag, provided an `autoOpen'able element $auto were inserted in $tag.

       "$boole = $model->canContainSomehow($tag,$childtag);"
         Returns whether an element with qualified name $tag could contain an element with qualified name
         $childtag, either directly or indirectly.

       "$boole = $model->canAutoClose($tag);"
         Returns whether an element with qualified name $tag is allowed to be closed automatically, if needed.

       "$boole = $model->canHaveAttribute($tag,$attribute);"
         Returns whether an element with qualified name $tag is allowed to have an attribute with the given
         name.

   Tag Properties
       "$value = $model->getTagProperty($tag,$property);"
         Gets the value of the $property associated with the qualified name $tag Known properties are:

          autoOpen   : This asserts that the tag is allowed to
                       be opened automatically if needed to
                       insert some other element.  If not set,
                       the tag can only be opened explicitly.
          autoClose  : This asserts that the $tag is allowed to
                       be closed automatically if needed to
                       insert some other element.  If not set,
                       the tag can only be closed explicitly.
          afterOpen  : supplies code to be executed whenever
                       an element of this type is opened. It
                       is called with the created node and the
                       responsible digested object as arguments.
          afterClose : supplies code to be executed whenever
                       an element of this type is closed.  It
                       is called with the created node and the
                       responsible digested object as arguments.

       "$model->setTagProperty($tag,$property,$value);"
         sets the value of the $property associated with the qualified name $tag to $value.

   Rewrite Rules
       "$model->addRewriteRule($mode,@specs);"
         Install a new rewrite rule with the given @specs to be used in $mode (being either "math" or "text").
         See LaTeXML::Rewrite for a description of the specifications.

       "$model->applyRewrites($document,$node,$until_rule);"
         Apply all matching rewrite rules to $node in the given document.  If $until_rule is define, apply all
         those rules that were defined before it, otherwise, all rules

AUTHOR

       Bruce Miller <bruce.miller@nist.gov>

COPYRIGHT

       Public domain software, produced as part of work done by the United States Government & not subject to
       copyright in the US.