fmsgml version is "6.0";

#include "isoall.rw"

/* Preserve some element definitions for assorted reasons:
   - Navigation components have different models in the FrameMaker+SGML and SGML
      views.
   - Instead of DocBooks unlimited possible values for the Mark attribute of ItemizedList
     (and the corresponding Override attribute of ListItem), this implementation allows only
    an enumerated list of possibilities
  - Use the Role attribute on Graphic and InlineGraphic to control the initial
    object format; provide an explicit choice of values
  - Store Comments in FM Type 18 Markers (hence do not allow subelements)
  - Set order of attributes for XRef
  - The name token "faxtile" appears in the declared value of some notation attributes
    even though it is not a declared notation type
 */
reader preserve fm element definition "Comment", "Graphic", "Index", "IndexTerm",
  "InlineGraphic", "ItemizedList", "ListItem", "LoT", "ModeSpec", "SetIndex", 
  "ToC", "XRef";

/* Book structure */
reader generate book for  doctype "set", "book", "part"
  {
    put element "appendix" in file "app.fm";
    put element "article" in file "art.fm";
    put element "bibliography" in file "biblio.fm";
    put element "bookinfo" in file "info.fm";
    put element "chapter" in file "chap.fm";
    put element "docinfo" in file "info.fm";
    put element "glossary" in file "gloss.fm";
    put element "index" in file;
    put element "lot" in file;
    put element "part" in file;
    put element "preface" in file "preface.fm";
    put element "refentry" in file "refent.fm";
    put element "reference" in file "ref.fm";
    put element "setindex" in file "setind.fm";
    put element "setinfo" in file "info.fm";
    put element "title" in file;
    put element "titleabbrev" in file "titlea.fm";
    put element "toc" in file "toc.fm";
 }
writer do not output book processing instructions;

/* Rules for case in tokens of name token groups used in declared values in attribute
    definitions. */
value "CDRom" is fm value "CDRom";
value "CGM-BINARY" is fm value "CGM-BINARY";
value "CGM-CHAR" is fm value "CGM-CHAR";
value "CGM-CLEAR" is fm value "CGM-CLEAR";
value "DITROFF" is fm value "DITROFF";
value "DVI" is fm value "DVI";
value "EnvironVar" is fm value "EnvironVar";
value "EPS" is fm value "EPS";
value "EQN" is fm value "EQN";
value "FAX" is fm value "FAX";
value "GenEntity" is fm value "GenEntity";
value "GIF" is fm value "GIF";
value "IGES" is fm value "IGES";
value "MenuItem" is fm value "MenuItem";
value "OSname" is fm value "OSname";
value "ParamEntity" is fm value "ParamEntity";
value "PIC" is fm value "PIC";
value "PS" is fm value "PS";
value "SystemName" is fm value "SystemName";
value "TBL" is fm value "TBL";
value "TEX" is fm value "TEX";
value "TIFF" is fm value "TIFF";
value "RefEntry" is fm value "RefEntry";

/* Rules for case of attribute names. */
attribute "FPI" is fm attribute "FPI";
attribute "InheritNum" is fm attribute "InheritNum";
attribute "LinkMode" is fm attribute "LinkMode";
attribute "LocalInfo" is fm attribute "LocalInfo";
attribute "MoreInfo" is fm attribute "MoreInfo";
attribute "OtherTerm" is fm attribute "OtherTerm";
attribute "ParentBook" is fm attribute "ParentBook";
attribute "SortAs" is fm attribute "SortAs";
attribute "SpanEnd" is fm attribute "SpanEnd";
attribute "SrcCredit" is fm attribute "SrcCredit";
attribute "TGroupStyle" is fm attribute "TGroupStyle";
attribute "TargetDocEnt" is fm attribute "TargetDocEnt";
attribute "URL" is fm attribute "URL";
attribute "XRefLabel" is fm attribute "XRefLabel";

/* Element rules. Many of these rules simply capitalize letters other than the initial one in
    FrameMaker+SGML element tags.*/
element "ArtHeader"
  {
    is fm element "ArtHeader";
  }

element "ArtPageNums"
  {
    is fm element "ArtPageNums";
  }

element "AuthorBlurb"
  {
    is fm element "AuthorBlurb";
  }

element "AuthorGroup"
  {
    is fm element "AuthorGroup";
  }

element "AuthorInitials"
  {
    is fm element "AuthorInitials";
  }

element "BeginPage"
  {
    is fm element "BeginPage";
  }

element "BiblioDiv"
  {
    is fm element "BiblioDiv";
  }

element "BiblioEntry"
  {
    is fm element "BiblioEntry";
  }

element "BiblioMisc"
  {
    is fm element "BiblioMisc";
  }

element "BlockQuote"
  {
    is fm element "BlockQuote";
  }

element "BookBiblio"
  {
    is fm element "BookBiblio";
  }

element "BookInfo"
  {
    is fm element "BookInfo";
  }

element "BridgeHead"
  {
    is fm element "BridgeHead";
  }

element "CiteRefEntry"
  {
    is fm element "CiteRefEntry";
  }

element "CiteTitle"
  {
    is fm element "CiteTitle";
  }

element "CmdSynopsis"
  {
    is fm element "CmdSynopsis";
  }

element "CollabName"
  {
    is fm element "CollabName";
  }

element "Comment"
  {
  is fm marker element ;
  marker text is content ;
  }

element "ComputerOutput"
  {
    is fm element "ComputerOutput";
  }

element "ConfDates"
  {
    is fm element "ConfDates";
  }

element "ConfGroup"
  {
    is fm element "ConfGroup";
  }

element "ConfNum"
  {
    is fm element "ConfNum";
  }

element "ConfSponsor"
  {
    is fm element "ConfSponsor";
  }

element "ConfTitle"
  {
    is fm element "ConfTitle";
  }

element "ContractNum"
  {
    is fm element "ContractNum";
  }

element "ContractSponsor"
  {
    is fm element "ContractSponsor";
  }

element "CorpAuthor"
  {
    is fm element "CorpAuthor";
  }

element "CorpName"
  {
    is fm element "CorpName";
  }

element "DocInfo"
  {
    is fm element "DocInfo";
  }

/* FrameMaker+SGML does not support nested tables, so drop the element used for this
    purpose. */
element "EntryTbl"
  {
    drop;
  }

element "ErrorName"
  {
    is fm element "ErrorName";
  }

element "ErrorType"
  {
    is fm element "ErrorType";
  }

element "FirstTerm"
  {
    is fm element "FirstTerm";
  }

element "FootnoteRef"
  {
    is fm element "FootnoteRef";
  }

element "ForeignPhrase"
  {
    is fm element "ForeignPhrase";
  }

element "FormalPara"
  {
    is fm element "FormalPara";
  }

element "FuncDef"
  {
    is fm element "FuncDef";
  }

element "FuncParams"
  {
    is fm element "FuncParams";
  }

element "FuncSynopsis"
  {
    is fm element "FuncSynopsis";
  }

element "FuncSynopsisInfo"
  {
    is fm element "FuncSynopsisInfo";
  }

element "GlossDef"
  {
    is fm element "GlossDef";
  }

element "GlossDiv"
  {
    is fm element "GlossDiv";
  }

element "GlossEntry"
  {
    is fm element "GlossEntry";
  }

element "GlossList"
  {
    is fm element "GlossList";
  }

element "GlossSee"
  {
    is fm element "GlossSee";
  }

element "GlossSeeAlso"
  {
    is fm element "GlossSeeAlso";
  }

element "GlossTerm"
  {
    is fm element "GlossTerm";
  }

element "Graphic"
  {
    is fm graphic element;
    attribute "Fileref" is fm property file;
    attribute "Entityref"
      {
        is fm property entity;
        is fm attribute;
      }
  }

element "ISBN"
  {
    is fm element "ISBN";
  }

element "ISSN"
  {
    is fm element "ISSN";
  }

element "Index"
  {
    reader drop content;
    writer drop content;
  }

element "IndexDiv"
  {
    drop;
  }

element "IndexEntry"
  {
    drop;
  }

element "IndexTerm"
  {
    is fm marker element "IndexTerm";
  }

element "InformalEquation"
  {
    is fm element "InformalEquation";
  }

element "InformalExample"
  {
    is fm element "InformalExample";
  }

element "InformalTable"
  {
    is fm element "InformalTable";
    attribute "Colsep" is fm property column ruling;
    attribute "Frame" is fm property table border ruling;
    attribute "Orient" drop;
    attribute "Pgwide" is fm property page wide;
    attribute "Rowsep" is fm property row ruling;
    attribute "Tabstyle" is fm property table format;
  }

element "InlineEquation"
  {
    is fm element "InlineEquation";
  }

element "InlineGraphic"
  {
    is fm graphic element "InlineGraphic";
    attribute "Fileref" is fm property file;
    attribute "Entityref"
      {
        is fm property entity;
        is fm attribute;
      }
  }

element "InterfaceDefinition"
  {
    is fm element "InterfaceDefinition";
  }

element "InvPartNumber"
  {
    is fm element "InvPartNumber";
  }

element "IssueNum"
  {
    is fm element "IssueNum";
  }

element "ItemizedList"
  {
    is fm element "ItemizedList";
  }

element "JobTitle"
  {
    is fm element "JobTitle";
  }

element "KeyCap"
  {
    is fm element "KeyCap";
  }

element "KeyCode"
  {
    is fm element "KeyCode";
  }

element "KeySym"
  {
    is fm element "KeySym";
  }

element "LegalNotice"
  {
    is fm element "LegalNotice";
  }

element "LineAnnotation"
  {
    is fm element "LineAnnotation";
  }

element "ListItem"
  {
    is fm element "ListItem";
  }

element "LiteralLayout"
  {
    is fm element "LiteralLayout";
    preserve line breaks;
  }

element "LoT"
  {
    is fm element "LoT";
    writer drop content;
    reader drop content;
  }

element "LoTentry" drop;

element "ManVolNum"
  {
    is fm element "ManVolNum";
  }

element "MediaLabel"
  {
    is fm element "MediaLabel";
  }

element "ModeSpec"
  {
    is fm element "ModeSpec";
  }

element "MsgAud"
  {
    is fm element "MsgAud";
  }

element "MsgEntry"
  {
    is fm element "MsgEntry";
  }

element "MsgExplan"
  {
    is fm element "MsgExplan";
  }

element "MsgInfo"
  {
    is fm element "MsgInfo";
  }

element "MsgLevel"
  {
    is fm element "MsgLevel";
  }

element "MsgMain"
  {
    is fm element "MsgMain";
  }

element "MsgOrig"
  {
    is fm element "MsgOrig";
  }

element "MsgRel"
  {
    is fm element "MsgRel";
  }

element "MsgSet"
  {
    is fm element "MsgSet";
  }

element "MsgSub"
  {
    is fm element "MsgSub";
  }

element "MsgText"
  {
    is fm element "MsgText";
  }

element "OLink"
  {
    is fm element "OLink";
  }

element "Option"
  {
    is fm element "Option";
  }

element "Optional"
  {
    is fm element "Optional";
  }

element "OrderedList"
  {
    is fm element "OrderedList";
  }

element "OrgDiv"
  {
    is fm element "OrgDiv";
  }

element "OrgName"
  {
    is fm element "OrgName";
  }

element "OtherAddr"
  {
    is fm element "OtherAddr";
  }

element "OtherCredit"
  {
    is fm element "OtherCredit";
  }

element "OtherName"
  {
    is fm element "OtherName";
  }

element "PageNums"
  {
    is fm element "PageNums";
  }

element "ParamDef"
  {
    is fm element "ParamDef";
  }

element "PartIntro"
  {
    is fm element "PartIntro";
  }

element "POB"
  {
    is fm element "POB";
  }

/* Primary is handled by the client during import and export */

element "PrimaryIE" drop;

element "PrintHistory"
  {
    is fm element "PrintHistory";
  }

element "ProductName"
  {
    is fm element "ProductName";
  }

element "ProductNumber"
  {
    is fm element "ProductNumber";
  }

element "ProgramListing"
  {
    is fm element "ProgramListing";
  }

element "PubDate"
  {
    is fm element "PubDate";
  }

element "PublisherName"
  {
    is fm element "PublisherName";
  }

element "PubsNumber"
  {
    is fm element "PubsNumber";
  }

element "RefClass"
  {
    is fm element "RefClass";
  }

element "RefDescriptor"
  {
    is fm element "RefDescriptor";
  }

element "RefEntry"
  {
    is fm element "RefEntry";
  }

element "RefEntryTitle"
  {
    is fm element "RefEntryTitle";
  }

element "RefMeta"
  {
    is fm element "RefMeta";
  }

element "RefMiscInfo"
  {
    is fm element "RefMiscInfo";
  }

element "RefName"
  {
    is fm element "RefName";
  }

element "RefNameDiv"
  {
    is fm element "RefNameDiv";
  }

element "RefPurpose"
  {
    is fm element "RefPurpose";
  }

element "RefSect1"
  {
    is fm element "RefSect1";
  }

element "RefSect2"
  {
    is fm element "RefSect2";
  }

element "RefSect3"
  {
    is fm element "RefSect3";
  }

element "RefSynopsisDiv"
  {
    is fm element "RefSynopsisDiv";
  }

element "ReleaseInfo"
  {
    is fm marker element "ReleaseInfo";
    marker text is content;
  }

element "ReturnValue"
  {
    is fm element "ReturnValue";
  }

element "RevHistory"
  {
    is fm element "RevHistory";
  }

element "RevNumber"
  {
    is fm element "RevNumber";
  }

element "RevRemark"
  {
    is fm element "RevRemark";
  }

element "Screen" {
   preserve line breaks;
  }

element "ScreenInfo"
  {
    is fm element "ScreenInfo";
  }

element "ScreenShot"
  {
    is fm element "ScreenShot";
  }

/* Secondary is handled by the client during import and export*/

element "SecondaryIE" drop;

/* See is handled by the client during import and export */

/* SeeAlso is handled by the client during import and export */

element "SeeAlsoIE" drop;

element "SeeIE" drop;

element "SegListItem"
  {
    is fm element "SegListItem";
  }

element "SegTitle"
  {
    is fm element "SegTitle";
  }

element "SegmentedList"
  {
    is fm element "SegmentedList";
  }

element "SeriesInfo"
  {
    is fm element "SeriesInfo";
  }

element "SeriesVolNums"
  {
    is fm element "SeriesVolNums";
  }

element "SetIndex"
  {
    is fm element "SetIndex";
    reader drop content;
    writer drop content;
  }

element "SetInfo"
  {
    is fm element "SetInfo";
  }

element "SGMLTag"
  {
    is fm element "SGMLTag";
  }

element "ShortAffil"
  {
    is fm element "ShortAffil";
  }

element "SimPara"
  {
    is fm element "SimPara";
  }

element "SimpleList"
  {
    is fm element "SimpleList";
  }

element "StructField"
  {
    is fm element "StructField";
  }

element "StructName"
  {
    is fm element "StructName";
  }

element "SubSteps"
  {
    is fm element "SubSteps";
  }

element "SynopFragment"
  {
    is fm element "SynopFragment";
  }

element "SynopFragmentRef"
  {
    is fm element "SynopFragmentRef";
  }

element "Synopsis"
  {
    is fm element "Synopsis";
  }

element "SystemItem"
  {
    is fm element "SystemItem";
  }

element "Table"
  {
    attribute "Orient" drop;
  }

element "TBody"
  {
    is fm table body element "TBody";
  }

/* Tertiary is handled by the client during import and export */

element "TertiaryIE" drop;

element "TFoot"
  {
    is fm table footing element "TFoot";
  }

element "TGroup"
  {
    is fm table element "TGroup";
    attribute "TGroupStyle" is fm property table format;
  }

element "THead"
  {
    is fm table heading element "THead";
  }

element "Title"
  {
     is fm element "Title";
  }

element "TitleAbbrev"
  {
    is fm element "TitleAbbrev";
  }

/* exporting the ToC element to the DocBook DTD is not implemented. */
fm element "ToC" drop;

element "ToC"
  {
    is fm element "ToC";
    reader drop content;
  }

element "ToCback" drop;

element "ToCchap" drop;

element "ToCentry" drop;

element "ToCfront" drop;

element "ToClevel1" drop;

element "ToClevel2" drop;

element "ToClevel3" drop;

element "ToClevel4" drop;

element "ToClevel5" drop;

element "ToCpart" drop;

/* ULink is handled by the client during import and export*/

element "UserInput"
  {
    is fm element "UserInput";
  }

element "VarListEntry"
  {
    is fm element "VarListEntry";
  }

element "VariableList"
  {
    is fm element "VariableList";
  }

element "VolumeNum"
  {
    is fm element "VolumeNum";
  }

element "WordAsWord"
  {
    is fm element "WordAsWord";
  }

element "XRef"
  {
    is fm cross-reference element "XRef"; 
    attribute "Role" is fm property cross-reference format;
    attribute "Linkend" is fm property cross-reference id;
  }

element "varargs"
  {
    is fm element "varargs";
  }

element "void"
  {
    is fm element "void";
  }










