/*
*
* (c) COPYRIGHT MIT and INRIA, 1996-2000
* Please first read the full copyright statement in file COPYRIGHT.
*
*/
/*
*
* fetchXMLname
*
* Author: I. Vatton
*
*/
#define THOT_EXPORT extern
#include "amaya.h"
#include "parser.h"
/* mapping table of XHTML elements */
static ElemMapping XHTMLElemMappingTable[] =
{
/* This table MUST be in alphabetical order */
{TEXT("XMLcomment"), SPACE, HTML_EL_Comment_},
{TEXT("XMLcomment_line"), SPACE, HTML_EL_Comment_line},
{TEXT("a"), SPACE, HTML_EL_Anchor},
{TEXT("abbr"), SPACE, HTML_EL_ABBR},
{TEXT("acronym"), SPACE, HTML_EL_ACRONYM},
{TEXT("address"), SPACE, HTML_EL_Address},
#ifndef XHTML_BASIC
{TEXT("applet"), SPACE, HTML_EL_Applet},
{TEXT("area"), 'E', HTML_EL_AREA},
{TEXT("b"), SPACE, HTML_EL_Bold_text},
#endif /* XHTML_BASIC */
{TEXT("base"), 'E', HTML_EL_BASE},
#ifndef XHTML_BASIC
{TEXT("basefont"), 'E', HTML_EL_BaseFont},
{TEXT("bdo"), SPACE, HTML_EL_BDO},
{TEXT("big"), SPACE, HTML_EL_Big_text},
#endif /* XHTML_BASIC */
{TEXT("blockquote"), SPACE, HTML_EL_Block_Quote},
{TEXT("body"), SPACE, HTML_EL_BODY},
{TEXT("br"), 'E', HTML_EL_BR},
#ifndef XHTML_BASIC
{TEXT("button"), SPACE, HTML_EL_BUTTON},
{TEXT("c"), SPACE, HTML_EL_TEXT_UNIT},
{TEXT("caption"), SPACE, HTML_EL_CAPTION},
{TEXT("center"), SPACE, HTML_EL_Center},
#endif /* XHTML_BASIC */
{TEXT("cite"), SPACE, HTML_EL_Cite},
{TEXT("code"), SPACE, HTML_EL_Code},
#ifndef XHTML_BASIC
{TEXT("colgroup"), SPACE, HTML_EL_COLGROUP},
{TEXT("col"), SPACE, HTML_EL_COL},
#endif /* XHTML_BASIC */
{TEXT("dd"), SPACE, HTML_EL_Definition},
#ifndef XHTML_BASIC
{TEXT("del"), SPACE, HTML_EL_DEL},
#endif /* XHTML_BASIC */
{TEXT("dfn"), SPACE, HTML_EL_Def},
#ifndef XHTML_BASIC
{TEXT("dir"), SPACE, HTML_EL_Directory},
#endif /* XHTML_BASIC */
{TEXT("div"), SPACE, HTML_EL_Division},
{TEXT("dl"), SPACE, HTML_EL_Definition_List},
{TEXT("dt"), SPACE, HTML_EL_Term},
{TEXT("em"), SPACE, HTML_EL_Emphasis},
#ifndef XHTML_BASIC
{TEXT("fieldset"), SPACE, HTML_EL_FIELDSET},
{TEXT("font"), SPACE, HTML_EL_Font_},
#endif /* XHTML_BASIC */
{TEXT("form"), SPACE, HTML_EL_Form},
#ifndef XHTML_BASIC
{TEXT("frame"), 'E', HTML_EL_FRAME},
{TEXT("frameset"), SPACE, HTML_EL_FRAMESET},
#endif /* XHTML_BASIC */
{TEXT("h1"), SPACE, HTML_EL_H1},
{TEXT("h2"), SPACE, HTML_EL_H2},
{TEXT("h3"), SPACE, HTML_EL_H3},
{TEXT("h4"), SPACE, HTML_EL_H4},
{TEXT("h5"), SPACE, HTML_EL_H5},
{TEXT("h6"), SPACE, HTML_EL_H6},
{TEXT("head"), SPACE, HTML_EL_HEAD},
#ifndef XHTML_BASIC
{TEXT("hr"), 'E', HTML_EL_Horizontal_Rule},
#endif /* XHTML_BASIC */
{TEXT("html"), SPACE, HTML_EL_HTML},
#ifndef XHTML_BASIC
{TEXT("i"), SPACE, HTML_EL_Italic_text},
{TEXT("iframe"), SPACE, HTML_EL_IFRAME},
{TEXT("image"), 'E', HTML_EL_PICTURE_UNIT},
#endif /* XHTML_BASIC */
{TEXT("img"), 'E', HTML_EL_PICTURE_UNIT},
{TEXT("input"), 'E', HTML_EL_Input},
#ifndef XHTML_BASIC
{TEXT("ins"), SPACE, HTML_EL_INS},
{TEXT("isindex"), 'E', HTML_EL_ISINDEX},
#endif /* XHTML_BASIC */
{TEXT("kbd"), SPACE, HTML_EL_Keyboard},
{TEXT("label"), SPACE, HTML_EL_LABEL},
#ifndef XHTML_BASIC
{TEXT("legend"), SPACE, HTML_EL_LEGEND},
#endif /* XHTML_BASIC */
{TEXT("li"), SPACE, HTML_EL_List_Item},
{TEXT("link"), 'E', HTML_EL_LINK},
#ifndef XHTML_BASIC
{TEXT("listing"), SPACE, HTML_EL_Preformatted}, /*converted to PRE */
{TEXT("map"), SPACE, HTML_EL_MAP},
{TEXT("math"), SPACE, HTML_EL_Math},
{TEXT("menu"), SPACE, HTML_EL_Menu},
#endif /* XHTML_BASIC */
{TEXT("meta"), 'E', HTML_EL_META},
#ifndef XHTML_BASIC
{TEXT("noframes"), SPACE, HTML_EL_NOFRAMES},
{TEXT("noscript"), SPACE, HTML_EL_NOSCRIPT},
#endif /* XHTML_BASIC */
{TEXT("object"), SPACE, HTML_EL_Object},
{TEXT("ol"), SPACE, HTML_EL_Numbered_List},
#ifndef XHTML_BASIC
{TEXT("optgroup"), SPACE, HTML_EL_OptGroup},
#endif /* XHTML_BASIC */
{TEXT("option"), SPACE, HTML_EL_Option},
{TEXT("p"), SPACE, HTML_EL_Paragraph},
{TEXT("p*"), SPACE, HTML_EL_Pseudo_paragraph},
{TEXT("param"), 'E', HTML_EL_Parameter},
#ifndef XHTML_BASIC
{TEXT("plaintext"), SPACE, HTML_EL_Preformatted},/* converted to PRE */
#endif /* XHTML_BASIC */
{TEXT("pre"), SPACE, HTML_EL_Preformatted},
{TEXT("q"), SPACE, HTML_EL_Quotation},
#ifndef XHTML_BASIC
{TEXT("s"), SPACE, HTML_EL_Struck_text},
#endif /* XHTML_BASIC */
{TEXT("samp"), SPACE, HTML_EL_Sample},
#ifndef XHTML_BASIC
{TEXT("script"), SPACE, HTML_EL_SCRIPT},
#endif /* XHTML_BASIC */
{TEXT("select"), SPACE, HTML_EL_Option_Menu},
#ifndef XHTML_BASIC
{TEXT("small"), SPACE, HTML_EL_Small_text},
#endif /* XHTML_BASIC */
{TEXT("span"), SPACE, HTML_EL_Span},
#ifndef XHTML_BASIC
{TEXT("strike"), SPACE, HTML_EL_Struck_text},
#endif /* XHTML_BASIC */
{TEXT("strong"), SPACE, HTML_EL_Strong},
#ifndef XHTML_BASIC
{TEXT("style"), SPACE, HTML_EL_STYLE_},
{TEXT("sub"), SPACE, HTML_EL_Subscript},
{TEXT("sup"), SPACE, HTML_EL_Superscript},
#endif /* XHTML_BASIC */
{TEXT("table"), SPACE, HTML_EL_Table},
{TEXT("tbody"), SPACE, HTML_EL_tbody},
{TEXT("td"), SPACE, HTML_EL_Data_cell},
{TEXT("textarea"), SPACE, HTML_EL_Text_Area},
#ifndef XHTML_BASIC
{TEXT("tfoot"), SPACE, HTML_EL_tfoot},
#endif /* XHTML_BASIC */
{TEXT("th"), SPACE, HTML_EL_Heading_cell},
#ifndef XHTML_BASIC
{TEXT("thead"), SPACE, HTML_EL_thead},
#endif /* XHTML_BASIC */
{TEXT("title"), SPACE, HTML_EL_TITLE},
{TEXT("tr"), SPACE, HTML_EL_Table_row},
#ifndef XHTML_BASIC
{TEXT("tt"), SPACE, HTML_EL_Teletype_text},
{TEXT("u"), SPACE, HTML_EL_Underlined_text},
#endif /* XHTML_BASIC */
{TEXT("ul"), SPACE, HTML_EL_Unnumbered_List},
{TEXT("var"), SPACE, HTML_EL_Variable},
#ifndef XHTML_BASIC
{TEXT("xmp"), SPACE, HTML_EL_Preformatted}, /* converted to PRE */
#endif /* XHTML_BASIC */
{TEXT(""), SPACE, 0} /* Last entry. Mandatory */
};
/* mapping table of MathML elements */
#include "MathML.h"
static ElemMapping MathMLElemMappingTable[] =
{
/* This table MUST be in alphabetical order */
{TEXT("XMLcomment"), SPACE, MathML_EL_XMLcomment},
{TEXT("XMLcomment_line"), SPACE, MathML_EL_XMLcomment_line},
{TEXT("maligngroup"), 'E', MathML_EL_MALIGNGROUP},
{TEXT("malignmark"), 'E', MathML_EL_MALIGNMARK},
{TEXT("mchar"), 'E', MathML_EL_MCHAR},
{TEXT("menclose"), SPACE, MathML_EL_MENCLOSE},
{TEXT("merror"), SPACE, MathML_EL_MERROR},
{TEXT("mf"), SPACE, MathML_EL_MF}, /* for compatibility with an old version
of MathML: WD-math-970704 */
{TEXT("mfenced"), SPACE, MathML_EL_MFENCED},
{TEXT("mfrac"), SPACE, MathML_EL_MFRAC},
{TEXT("mglyph"), 'E', MathML_EL_MGLYPH},
{TEXT("mi"), SPACE, MathML_EL_MI},
{TEXT("mlabeledtr"), SPACE, MathML_EL_MLABELEDTR},
{TEXT("mmultiscripts"), SPACE, MathML_EL_MMULTISCRIPTS},
{TEXT("mn"), SPACE, MathML_EL_MN},
{TEXT("mo"), SPACE, MathML_EL_MO},
{TEXT("mover"), SPACE, MathML_EL_MOVER},
{TEXT("mpadded"), SPACE, MathML_EL_MPADDED},
{TEXT("mphantom"), SPACE, MathML_EL_MPHANTOM},
{TEXT("mprescripts"), SPACE, MathML_EL_PrescriptPairs},
{TEXT("mroot"), SPACE, MathML_EL_MROOT},
{TEXT("mrow"), SPACE, MathML_EL_MROW},
{TEXT("ms"), SPACE, MathML_EL_MS},
{TEXT("mspace"), 'E', MathML_EL_MSPACE},
{TEXT("msqrt"), SPACE, MathML_EL_MSQRT},
{TEXT("mstyle"), SPACE, MathML_EL_MSTYLE},
{TEXT("msub"), SPACE, MathML_EL_MSUB},
{TEXT("msubsup"), SPACE, MathML_EL_MSUBSUP},
{TEXT("msup"), SPACE, MathML_EL_MSUP},
{TEXT("mtable"), SPACE, MathML_EL_MTABLE},
{TEXT("mtd"), SPACE, MathML_EL_MTD},
{TEXT("mtext"), SPACE, MathML_EL_MTEXT},
{TEXT("mtr"), SPACE, MathML_EL_MTR},
{TEXT("munder"), SPACE, MathML_EL_MUNDER},
{TEXT("munderover"), SPACE, MathML_EL_MUNDEROVER},
{TEXT("none"), SPACE, MathML_EL_Construct},
{TEXT("sep"), 'E', MathML_EL_SEP},
{TEXT(""), SPACE, 0} /* Last entry. Mandatory */
};
#ifdef GRAPHML
/* mapping table of GraphML elements */
#include "GraphML.h"
static ElemMapping GraphMLElemMappingTable[] =
{
/* This table MUST be in alphabetical order */
{TEXT("XMLcomment"), SPACE, GraphML_EL_XMLcomment},
{TEXT("XMLcomment_line"), SPACE, GraphML_EL_XMLcomment_line},
{TEXT("circle"), SPACE, GraphML_EL_Circle},
{TEXT("closedspline"), SPACE, GraphML_EL_ClosedSpline},
{TEXT("group"), SPACE, GraphML_EL_Group},
{TEXT("label"), 'X', GraphML_EL_Label}, /* see function GraphMLGetDTDName */
{TEXT("line"), 'E', GraphML_EL_Line_},
{TEXT("math"), 'X', GraphML_EL_Math}, /* see function GraphMLGetDTDName */
{TEXT("oval"), SPACE, GraphML_EL_Oval},
{TEXT("polygon"), SPACE, GraphML_EL_Polygon},
{TEXT("polyline"), 'E', GraphML_EL_Polyline},
{TEXT("rect"), SPACE, GraphML_EL_Rectangle},
{TEXT("roundrect"), SPACE, GraphML_EL_RoundRect},
{TEXT("spline"), 'E', GraphML_EL_Spline},
{TEXT("text"), 'X', GraphML_EL_Text_}, /* see function GraphMLGetDTDName */
{TEXT(""), SPACE, 0} /* Last entry. Mandatory */
};
#else /* GRAPHML */
/* there is no mapping table of GraphML elements */
static ElemMapping *GraphMLElemMappingTable = NULL;
#endif /* GRAPHML */
#include "fetchXMLname_f.h"
/*----------------------------------------------------------------------
GetXHTMLSSchema returns the XHTML Thot schema for document doc.
----------------------------------------------------------------------*/
#ifdef __STDC__
SSchema GetXHTMLSSchema (Document doc)
#else
SSchema GetXHTMLSSchema (doc)
Document doc;
#endif
{
SSchema XHTMLSSchema;
XHTMLSSchema = TtaGetSSchema (TEXT("HTML"), doc);
if (XHTMLSSchema == NULL)
XHTMLSSchema = TtaNewNature(TtaGetDocumentSSchema(doc),
TEXT("HTML"), TEXT("HTMLP"));
return (XHTMLSSchema);
}
/*----------------------------------------------------------------------
GetMathMLSSchema returns the MathML Thot schema for document doc.
----------------------------------------------------------------------*/
#ifdef __STDC__
SSchema GetMathMLSSchema (Document doc)
#else
SSchema GetMathMLSSchema (doc)
Document doc;
#endif
{
SSchema MathMLSSchema;
MathMLSSchema = TtaGetSSchema (TEXT("MathML"), doc);
if (MathMLSSchema == NULL)
MathMLSSchema = TtaNewNature(TtaGetDocumentSSchema(doc), TEXT("MathML"),
TEXT("MathMLP"));
return (MathMLSSchema);
}
/*----------------------------------------------------------------------
GetGraphMLSSchema returns the GraphML Thot schema for document doc.
----------------------------------------------------------------------*/
#ifdef __STDC__
SSchema GetGraphMLSSchema (Document doc)
#else
SSchema GetGraphMLSSchema (doc)
Document doc;
#endif
{
SSchema GraphMLSSchema;
GraphMLSSchema = TtaGetSSchema (TEXT("GraphML"), doc);
if (GraphMLSSchema == NULL)
GraphMLSSchema = TtaNewNature(TtaGetDocumentSSchema(doc), TEXT("GraphML"),
TEXT("GraphMLP"));
return (GraphMLSSchema);
}
/*----------------------------------------------------------------------
GetXLinkSSchema returns the XLink Thot schema for document doc.
----------------------------------------------------------------------*/
#ifdef __STDC__
SSchema GetXLinkSSchema (Document doc)
#else
SSchema GetXLinkSSchema (doc)
Document doc;
#endif
{
SSchema XLinkSSchema;
XLinkSSchema = TtaGetSSchema (TEXT("XLink"), doc);
if (XLinkSSchema == NULL)
XLinkSSchema = TtaNewNature(TtaGetDocumentSSchema(doc), TEXT("XLink"),
TEXT("XLinkP"));
return (XLinkSSchema);
}
/*----------------------------------------------------------------------
GetXMLSSchema returns the XML Thot schema for document doc.
----------------------------------------------------------------------*/
#ifdef __STDC__
SSchema GetXMLSSchema (int XMLtype, Document doc)
#else
SSchema GetXMLSSchema (XMLtype, doc)
Document doc;
int XMLtype;
#endif
{
if (XMLtype == XHTML_TYPE)
return GetXHTMLSSchema (doc);
else if (XMLtype == MATH_TYPE)
return GetMathMLSSchema (doc);
else if (XMLtype == GRAPH_TYPE)
return GetGraphMLSSchema (doc);
else if (XMLtype == XLINK_TYPE)
return GetXLinkSSchema (doc);
else
return NULL;
}
/*----------------------------------------------------------------------
MapXMLElementType
search in the mapping tables the entry for the element type of name
XMLname and returns the corresponding Thot element type.
Returns:
- ElTypeNum and ElSSchema inelType ElTypeNum = 0 if not found.
- content
----------------------------------------------------------------------*/
#ifdef __STDC__
void MapXMLElementType (int XMLtype,
STRING XMLname,
ElementType *elType,
STRING *mappedName,
CHAR_T *content,
Document doc)
#else
void MapXMLElementType (XMLtype,
XMLname,
elType,
mappedName,
content,
doc)
int XMLtype;
STRING XMLname;
ElementType *elType;
STRING *mappedName;
CHAR_T *content;
Document doc;
#endif
{
int i;
ElemMapping *ptr;
/* Select the right table */
if (XMLtype == XHTML_TYPE)
ptr = XHTMLElemMappingTable;
else if (XMLtype == MATH_TYPE)
ptr = MathMLElemMappingTable;
else if (XMLtype == GRAPH_TYPE)
ptr = GraphMLElemMappingTable;
else
ptr = NULL;
*mappedName = NULL;
elType->ElTypeNum = 0;
if (ptr != NULL)
{
/* search in the ElemMappingTable */
i = 0;
/* look for the first concerned entry in the table */
while (ptr[i].XMLname[0] < XMLname[0] && ptr[i].XMLname[0] != EOS)
i++;
/* look at all entries starting with the right character */
do
if (ustrcmp (ptr[i].XMLname, XMLname))
i++;
else
{
elType->ElTypeNum = ptr[i].ThotType;
if (elType->ElSSchema == NULL)
elType->ElSSchema = GetXMLSSchema (XMLtype, doc);
*mappedName = ptr[i].XMLname;
*content = ptr[i].XMLcontents;
}
while (elType->ElTypeNum <= 0 && ptr[i].XMLname[0] == XMLname[0]);
}
}
/*----------------------------------------------------------------------
GetXMLElementName
search in the mapping tables the XML name for a given Thot type
----------------------------------------------------------------------*/
#ifdef __STDC__
void GetXMLElementName (ElementType elType, CHAR_T** buffer)
#else
void GetXMLElementName (elType, buffer)
ElementType elType;
CHAR_T** buffer;
#endif
{
int i;
ElemMapping *ptr;
STRING name;
if (elType.ElTypeNum > 0)
{
i = 0;
/* Select the table which matches with the element schema */
name = TtaGetSSchemaName (elType.ElSSchema);
if (ustrcmp (TEXT("MathML"), name) == 0)
ptr = MathMLElemMappingTable;
else if (ustrcmp (TEXT("GraphML"), name) == 0)
ptr = GraphMLElemMappingTable;
else
ptr = NULL;
if (ptr)
do
{
if (ptr[i].ThotType == elType.ElTypeNum)
{
*buffer = ptr[i].XMLname;
return;
}
i++;
}
while (ptr[i].XMLname[0] != EOS);
}
*buffer = TEXT("???");
return;
}
Webmaster