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