fm version is "15.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 "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 "colophon" in file "colo.fm";
    put element "dedication" in file "dedicate.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 "accel"
{
  is fm element "Accel";
}
element "alt"
{
  is fm element "Alt";
}
element "answer" 
{
  is fm element "Answer";
}
element "appendixinfo"
{
  is fm element "AppendixInfo";
}
element "area"
{
  drop;
}
element "areaset"
{
  drop;
}
element "areaspec"
{
  drop;
}
element "articleinfo"
{
  is fm element "ArticleInfo";
}
element "attribution"
{
  is fm element "Attribution";
}
element "audiodata"
{
  drop;
}
element "audioobject"
{
  drop;
}
element "bibliographyinfo"
{
  is fm element "BibliographyInfo";
}
element "bibliomixed"
{
  is fm element "BiblioMixed";
}
element "bibliomset"
{
  is fm element "BiblioMSet";
}
element "biblioset"
{
  is fm element "BiblioSet";
}
element "callout" 
{
  is fm footnote element "Callout";
}
element "calloutlist"
{
  drop;
}
element "caption"
{
  is fm element "Caption";
}
element "chapterinfo"
{
  is fm element "ChapterInfo";
}
element "classsynopsisinfo"
{
  is fm element "ClassSynopsisInfo";
}
element "cmdsynopsis"
{
  is fm element "CmdSynopsis";
}
element "co"
{
  drop;
}
element "colophon"
{
  is fm element "Colophon";
}
element "constant"
{
  is fm element "Constant";
}
element "constructorsynopsis"
{
  is fm element "ConstructorSynopsis";
}
element "dedication"
{
  is fm element "Dedication";
}
element "destructorsynopsis"
{
  is fm element "DestructorSynopsis";
}
element "envar"
{
  is fm element "EnVar";
}
element "errorcode"
{
  is fm element "ErrorCode";
}
element "exceptionname"
{
  is fm element "ExceptionName";
}
element "footnote"
{
  is fm footnote element "Footnote";
}
element "fieldsynopsis"
{
  is fm element "FieldSynopsis";
}
element "funcprototype"
{
  is fm element "FuncPrototype";
}
element "glossaryinfo"
{
  is fm element "GlossaryInfo";
}
element "graphicco"
{
  drop;
}
element "guibutton"
{
  is fm element "GUIButton";
}
element "guiicon"
{
  is fm element "GUIIcon";
}
element "guilabel"
{
  is fm element "GUILabel";
}
element "guimenu"
{
  is fm element "GUIMenu";
}
element "guimenuitem"
{
  is fm element "GUIMenuItem";
}
element "guisubmenu"
{
  is fm element "GUISubmenu";
}
element "imagedata"
{
  is fm graphic element;
  attribute "fileref" is fm property file;
  attribute "entityref" 
  {
    is fm property entity;
    is fm attribute;
  }
}
element "imageobject" 
{
  is fm element "ImageObject";
}
element "imageobjectco"
{
  drop;
}
element "indexinfo"
{
  is fm element "IndexInfo";
}
element "informalfigure"
{
  is fm element "InformalFigure";
}
element "initializer" 
{
  is fm element "Initializer";
}
element "inlinemediaobject"
{
  is fm element "InlineMediaObject";
}
element "interfacename" 
{
  is fm element "InterfaceName";
}
element "interface" 
{
  is fm element "Interface";
}
element "itermset"
{
  is fm element "ITermSet";
}
element "keycombo"
{
  is fm element "KeyCombo";
}
element "keyword"
{
  is fm marker element "Keyword";
}
element "keywordset"
{
  is fm element "KeywordSet";
}
element "label"
{
  drop;
}
element "mediaobject"
{
  is fm element "MediaObject";
}
element "mediaobjectco"
{
  is fm element "MediaObjectCO";
}
element "menuchoice"
{
  is fm element "MenuChoice";
}
element "methodname"
{
  is fm element "MethodName";
}
element "methodparam"
{
  is fm element "MethodParam";
}
element "methodsynopsis"
{
  is fm element "MethodSynopsis";
}
element "modifier"
{
  is fm element "Modifier";
}
element "mousebutton"
{
  is fm element "MouseButton";
}
element "objectinfo"
{
  is fm element "ObjectInfo";
}
element "ooclass"
{
  is fm element "OoClass";
}
element "ooexception"
{
  is fm element "OoException";
}
element "oointerface"
{
  is fm element "OoInterface";
}
element "partinfo"
{
  is fm element "PartInfo";
}
element "phrase"
{
  is fm element "Phrase";
}
element "prefaceinfo"
{
  is fm element "PrefaceInfo";
}
element "programlistingco" 
{
  drop;
}
element "prompt"
{
  is fm element "Prompt";
}
element "qandadiv"
{
  is fm element "QandADiv";
}
element "qandaentry"
{
  is fm element "QandAEntry";
}
element "qandaset"
{
  is fm element "QandASet";
}
element "question"
{
  is fm element "Question";
}
element "refentryinfo"
{
  is fm element "RefEntryInfo";
}
element "referenceinfo"
{
  is fm element "ReferenceInfo";
}
element "refsect1info"
{
  is fm element "RefSect1Info";
}
element "refsect2info"
{
  is fm element "RefSect2Info";
}
element "refsect3info"
{
  is fm element "RefSect3Info";
}
element "refsynopsisdivinfo"
{
  is fm element "RefSynopsisDivInfo";
}
element "remark"
{
  is fm marker element;
  marker text is content;
}
element "revdescription"
{
  is fm element "RevDescription";
}
element "sbr"
{
  is fm element "Sbr";
}
element "screenco"
{
  drop;
}
element "sect1info"
{
  is fm element "Sect1Info";
}
element "sect2info"
{
  is fm element "Sect2Info";
}
element "sect3info"
{
  is fm element "Sect3Info";
}
element "sect4info"
{
  is fm element "Sect4Info";
}
element "sect5info"
{
  is fm element "Sect5Info";
}
element "section"
{
  is fm element "Section";
}
element "sectioninfo"
{
  is fm element "SectionInfo";
}
element "setindexinfo"
{
  is fm element "SetIndexInfo";
}
element "shortcut"
{
  is fm element "Shortcut";
}
element "sidebarinfo"
{
  is fm element "SidebarInfo";
}
element "simplemsgentry"
{
  is fm element "SimpleMsgEntry";
}
element "simplesect"
{
  is fm element "SimpleSect";
}
element "subject"
{
  is fm element "Subject";
}
element "subjectset"
{
  is fm element "SubjectSet";
}
element "subjectterm"
{
  is fm marker element "SubjectTerm";
  marker text is content;
}
element "textobject"
{
  is fm element "TextObject";
}
element "varname"
{
  is fm element "VarName";
}
element "videodata"
{
  drop;
}
element "videoobject"
{
  drop;
}







/* ------------------Docbook 2.1 rules-------------- */
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 "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 "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";
  }

/* 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 "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 "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";
  }












