Annotation of Amaya/amaya/fetchXMLname.c, revision 1.1
1.1 ! cvs 1: /*
! 2: *
! 3: * (c) COPYRIGHT MIT and INRIA, 1996.
! 4: * Please first read the full copyright statement in file COPYRIGHT.
! 5: *
! 6: */
! 7:
! 8: /*
! 9: *
! 10: * fetchXMLname
! 11: *
! 12: * Author: I. Vatton
! 13: *
! 14: */
! 15:
! 16: #define THOT_EXPORT extern
! 17: #include "amaya.h"
! 18: #include "parser.h"
! 19:
! 20: #ifdef MATHML
! 21: /* mapping table of MathML elements */
! 22: #include "MathML.h"
! 23: static ElemMapping MathMLElemMappingTable[] =
! 24: {
! 25: /* This table MUST be in alphabetical order */
! 26: {TEXT ("XMLcomment"), SPACE, MathML_EL_XMLcomment},
! 27: {TEXT ("XMLcomment_line"), SPACE, MathML_EL_XMLcomment_line},
! 28: {TEXT ("maligngroup"), 'E', MathML_EL_MALIGNGROUP},
! 29: {TEXT ("malignmark"), 'E', MathML_EL_MALIGNMARK},
! 30: {TEXT ("merror"), SPACE, MathML_EL_MERROR},
! 31: {TEXT ("mf"), SPACE, MathML_EL_MF}, /* for compatibility with an old version of
! 32: MathML: WD-math-970704 */
! 33: {TEXT ("mfenced"), SPACE, MathML_EL_MFENCED},
! 34: {TEXT ("mfrac"), SPACE, MathML_EL_MFRAC},
! 35: {TEXT ("mi"), SPACE, MathML_EL_MI},
! 36: {TEXT ("mmultiscripts"), SPACE, MathML_EL_MMULTISCRIPTS},
! 37: {TEXT ("mn"), SPACE, MathML_EL_MN},
! 38: {TEXT ("mo"), SPACE, MathML_EL_MO},
! 39: {TEXT ("mover"), SPACE, MathML_EL_MOVER},
! 40: {TEXT ("mpadded"), SPACE, MathML_EL_MPADDED},
! 41: {TEXT ("mphantom"), SPACE, MathML_EL_MPHANTOM},
! 42: {TEXT ("mprescripts"), SPACE, MathML_EL_PrescriptPairs},
! 43: {TEXT ("mroot"), SPACE, MathML_EL_MROOT},
! 44: {TEXT ("mrow"), SPACE, MathML_EL_MROW},
! 45: {TEXT ("ms"), SPACE, MathML_EL_MS},
! 46: {TEXT ("mspace"), 'E', MathML_EL_MSPACE},
! 47: {TEXT ("msqrt"), SPACE, MathML_EL_MSQRT},
! 48: {TEXT ("mstyle"), SPACE, MathML_EL_MSTYLE},
! 49: {TEXT ("msub"), SPACE, MathML_EL_MSUB},
! 50: {TEXT ("msubsup"), SPACE, MathML_EL_MSUBSUP},
! 51: {TEXT ("msup"), SPACE, MathML_EL_MSUP},
! 52: {TEXT ("mtable"), SPACE, MathML_EL_MTABLE},
! 53: {TEXT ("mtd"), SPACE, MathML_EL_MTD},
! 54: {TEXT ("mtext"), SPACE, MathML_EL_MTEXT},
! 55: {TEXT ("mtr"), SPACE, MathML_EL_MTR},
! 56: {TEXT ("munder"), SPACE, MathML_EL_MUNDER},
! 57: {TEXT ("munderover"), SPACE, MathML_EL_MUNDEROVER},
! 58: {TEXT ("none"), SPACE, MathML_EL_Construct},
! 59: {TEXT ("sep"), 'E', MathML_EL_SEP},
! 60: {TEXT (""), SPACE, 0} /* Last entry. Mandatory */
! 61: };
! 62: #else /* MATHML */
! 63: /* there is no mapping table of MathML elements */
! 64:
! 65: static ElemMapping *MathMLElemMappingTable = NULL;
! 66: #endif /* MATHML */
! 67:
! 68: #ifdef GRAPHML
! 69: /* mapping table of GraphML elements */
! 70: #include "GraphML.h"
! 71: static ElemMapping GraphMLElemMappingTable[] =
! 72: {
! 73: /* This table MUST be in alphabetical order */
! 74: {TEXT ("XMLcomment"), SPACE, GraphML_EL_XMLcomment},
! 75: {TEXT ("XMLcomment_line"), SPACE, GraphML_EL_XMLcomment_line},
! 76: {TEXT ("circle"), SPACE, GraphML_EL_Circle},
! 77: {TEXT ("closedspline"), SPACE, GraphML_EL_ClosedSpline},
! 78: {TEXT ("group"), SPACE, GraphML_EL_Group},
! 79: {TEXT ("label"), 'X', GraphML_EL_Label}, /* see function GraphMLGetDTDName */
! 80: {TEXT ("line"), 'E', GraphML_EL_Line_},
! 81: {TEXT ("math"), 'X', GraphML_EL_Math}, /* see function GraphMLGetDTDName */
! 82: {TEXT ("oval"), SPACE, GraphML_EL_Oval},
! 83: {TEXT ("polygon"), SPACE, GraphML_EL_Polygon},
! 84: {TEXT ("polyline"), 'E', GraphML_EL_Polyline},
! 85: {TEXT ("rect"), SPACE, GraphML_EL_Rectangle},
! 86: {TEXT ("roundrect"), SPACE, GraphML_EL_RoundRect},
! 87: {TEXT ("spline"), 'E', GraphML_EL_Spline},
! 88: {TEXT ("text"), 'X', GraphML_EL_Text_}, /* see function GraphMLGetDTDName */
! 89: {TEXT (""), SPACE, 0} /* Last entry. Mandatory */
! 90: };
! 91: #else /* GRAPHML */
! 92: /* there is no mapping table of GraphML elements */
! 93:
! 94: static ElemMapping *GraphMLElemMappingTable = NULL;
! 95: #endif /* GRAPHML */
! 96:
! 97: #include "fetchXMLname_f.h"
! 98:
! 99: /*----------------------------------------------------------------------
! 100: GetMathMLSSchema returns the MathML Thot schema for document doc.
! 101: ----------------------------------------------------------------------*/
! 102: #ifdef __STDC__
! 103: SSchema GetMathMLSSchema (Document doc)
! 104: #else
! 105: SSchema GetMathMLSSchema (doc)
! 106: Document doc;
! 107:
! 108: #endif
! 109: {
! 110: SSchema MathMLSSchema;
! 111:
! 112: MathMLSSchema = TtaGetSSchema (TEXT("MathML"), doc);
! 113: if (MathMLSSchema == NULL)
! 114: MathMLSSchema = TtaNewNature(TtaGetDocumentSSchema(doc), TEXT("MathML"), TEXT("MathMLP"));
! 115: return (MathMLSSchema);
! 116: }
! 117:
! 118: /*----------------------------------------------------------------------
! 119: GetGraphMLSSchema returns the GraphML Thot schema for document doc.
! 120: ----------------------------------------------------------------------*/
! 121: #ifdef __STDC__
! 122: SSchema GetGraphMLSSchema (Document doc)
! 123: #else
! 124: SSchema GetGraphMLSSchema (doc)
! 125: Document doc;
! 126:
! 127: #endif
! 128: {
! 129: SSchema GraphMLSSchema;
! 130:
! 131: GraphMLSSchema = TtaGetSSchema ("GraphML", doc);
! 132: if (GraphMLSSchema == NULL)
! 133: GraphMLSSchema = TtaNewNature(TtaGetDocumentSSchema(doc), "GraphML", "GraphMLP");
! 134: return (GraphMLSSchema);
! 135: }
! 136:
! 137: /*----------------------------------------------------------------------
! 138: GetXMLSSchema returns the XMLML Thot schema for document doc.
! 139: ----------------------------------------------------------------------*/
! 140: #ifdef __STDC__
! 141: SSchema GetXMLSSchema (int XMLtype, Document doc)
! 142: #else
! 143: SSchema GetXMLSSchema (XMLtype, doc)
! 144: Document doc;
! 145: int XMLtype;
! 146: #endif
! 147: {
! 148: if (XMLtype == MATH_TYPE)
! 149: return GetMathMLSSchema (doc);
! 150: else if (XMLtype == GRAPH_TYPE)
! 151: return GetGraphMLSSchema (doc);
! 152: else
! 153: return NULL;
! 154: }
! 155:
! 156:
! 157: /*----------------------------------------------------------------------
! 158: MapXMLElementType
! 159: search in the mapping tables the entry for the element type of name
! 160: XMLname and returns the corresponding Thot element type.
! 161: Returns:
! 162: - ElTypeNum and ElSSchema inelType ElTypeNum = 0 if not found.
! 163: - content
! 164: ----------------------------------------------------------------------*/
! 165: #ifdef __STDC__
! 166: void MapXMLElementType (int XMLtype, STRING XMLname, ElementType *elType, USTRING* mappedName, STRING content, Document doc)
! 167: #else
! 168: void MapXMLElementType (XMLtype, XMLname, elType, mappedName, content, doc)
! 169: int XMLtype;
! 170: STRING XMLname;
! 171: ElementType *elType;
! 172: USTRING *mappedName;
! 173: STRING content;
! 174: Document doc;
! 175: #endif
! 176: {
! 177: int i;
! 178: ElemMapping *ptr;
! 179:
! 180: /* Select the right table */
! 181: if (XMLtype == MATH_TYPE)
! 182: ptr = MathMLElemMappingTable;
! 183: else if (XMLtype == GRAPH_TYPE)
! 184: ptr = GraphMLElemMappingTable;
! 185: else
! 186: ptr = NULL;
! 187:
! 188: elType->ElTypeNum = 0;
! 189: if (ptr != NULL)
! 190: {
! 191: /* search in the ElemMappingTable */
! 192: i = 0;
! 193: /* look for the first concerned entry in the table */
! 194: while (ptr[i].XMLname[0] < XMLname[0] && ptr[i].XMLname[0] != EOS)
! 195: i++;
! 196: /* look at all entries starting with the right character */
! 197: do
! 198: if (ustrcmp (ptr[i].XMLname, XMLname))
! 199: i++;
! 200: else
! 201: {
! 202: elType->ElTypeNum = ptr[i].ThotType;
! 203: if (elType->ElSSchema == NULL)
! 204: elType->ElSSchema = GetXMLSSchema (XMLtype, doc);
! 205: *mappedName = ptr[i].XMLname;
! 206: *content = ptr[i].XMLcontents;
! 207: }
! 208: while (elType->ElTypeNum <= 0 && ptr[i].XMLname[0] == XMLname[0]);
! 209: }
! 210: }
! 211:
! 212:
! 213: /*----------------------------------------------------------------------
! 214: GetXMLElementName
! 215: search in the mapping tables the XML name for a given Thot type
! 216: ----------------------------------------------------------------------*/
! 217: #ifdef __STDC__
! 218: void GetXMLElementName (ElementType elType, STRING *buffer)
! 219: #else
! 220: void GetXMLElementName (elType, buffer)
! 221: ElementType elType;
! 222: STRING buffer;
! 223: #endif
! 224: {
! 225: int i;
! 226: ElemMapping *ptr;
! 227: STRING name;
! 228:
! 229: if (elType.ElTypeNum > 0)
! 230: {
! 231: i = 0;
! 232: /* Select the table which matches with the element schema */
! 233: name = TtaGetSSchemaName (elType.ElSSchema);
! 234: if (ustrcmp (TEXT("MathML"), name) == 0)
! 235: ptr = MathMLElemMappingTable;
! 236: if (ustrcmp (TEXT("GraphML"), name) == 0)
! 237: ptr = GraphMLElemMappingTable;
! 238:
! 239: do
! 240: {
! 241: if (ptr[i].ThotType == elType.ElTypeNum)
! 242: {
! 243: *buffer = ptr[i].XMLname;
! 244: return;
! 245: }
! 246: i++;
! 247: }
! 248: while (ptr[i].XMLname[0] != EOS);
! 249: }
! 250: *buffer = TEXT("???");
! 251: return;
! 252: }
Webmaster