Return to fetchXMLname.c CVS log | Up to [Public] / Amaya / amaya |
1.1 cvs 1: /* 2: * 1.13 cvs 3: * (c) COPYRIGHT MIT and INRIA, 1996-2000 1.1 cvs 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" 1.24 cvs 19: #include "HTMLnames.h" 20: #include "MathMLnames.h" 21: #include "GraphMLnames.h" 22: #include "XLinknames.h" 23: 24: /* define a pointer to let other parser functions access the local table */ 25: int HTML_ENTRIES = (sizeof(XHTMLElemMappingTable) / sizeof(ElemMapping)); 26: ElemMapping *pHTMLGIMapping = XHTMLElemMappingTable; 27: AttributeMapping *pHTMLAttributeMapping = XHTMLAttributeMappingTable; 1.14 cvs 28: 1.1 cvs 29: 30: #include "fetchXMLname_f.h" 31: 32: /*---------------------------------------------------------------------- 1.14 cvs 33: GetXHTMLSSchema returns the XHTML Thot schema for document doc. 34: ----------------------------------------------------------------------*/ 35: #ifdef __STDC__ 36: SSchema GetXHTMLSSchema (Document doc) 37: #else 38: SSchema GetXHTMLSSchema (doc) 39: Document doc; 40: 41: #endif 42: { 43: SSchema XHTMLSSchema; 44: 45: XHTMLSSchema = TtaGetSSchema (TEXT("HTML"), doc); 46: if (XHTMLSSchema == NULL) 1.17 cvs 47: XHTMLSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc), 1.14 cvs 48: TEXT("HTML"), TEXT("HTMLP")); 49: return (XHTMLSSchema); 50: } 51: 52: /*---------------------------------------------------------------------- 1.1 cvs 53: GetMathMLSSchema returns the MathML Thot schema for document doc. 54: ----------------------------------------------------------------------*/ 55: #ifdef __STDC__ 56: SSchema GetMathMLSSchema (Document doc) 57: #else 58: SSchema GetMathMLSSchema (doc) 59: Document doc; 60: 61: #endif 62: { 63: SSchema MathMLSSchema; 64: 1.13 cvs 65: MathMLSSchema = TtaGetSSchema (TEXT("MathML"), doc); 66: if (MathMLSSchema == NULL) 1.17 cvs 67: MathMLSSchema = TtaNewNature(doc, 68: TtaGetDocumentSSchema(doc), TEXT("MathML"), 1.13 cvs 69: TEXT("MathMLP")); 70: return (MathMLSSchema); 1.1 cvs 71: } 72: 73: /*---------------------------------------------------------------------- 74: GetGraphMLSSchema returns the GraphML Thot schema for document doc. 75: ----------------------------------------------------------------------*/ 76: #ifdef __STDC__ 77: SSchema GetGraphMLSSchema (Document doc) 78: #else 79: SSchema GetGraphMLSSchema (doc) 80: Document doc; 81: 82: #endif 83: { 84: SSchema GraphMLSSchema; 85: 1.8 cvs 86: GraphMLSSchema = TtaGetSSchema (TEXT("GraphML"), doc); 1.1 cvs 87: if (GraphMLSSchema == NULL) 1.17 cvs 88: GraphMLSSchema = TtaNewNature(doc, 89: TtaGetDocumentSSchema(doc), TEXT("GraphML"), 1.13 cvs 90: TEXT("GraphMLP")); 1.1 cvs 91: return (GraphMLSSchema); 92: } 93: 94: /*---------------------------------------------------------------------- 1.13 cvs 95: GetXLinkSSchema returns the XLink Thot schema for document doc. 96: ----------------------------------------------------------------------*/ 97: #ifdef __STDC__ 98: SSchema GetXLinkSSchema (Document doc) 99: #else 100: SSchema GetXLinkSSchema (doc) 101: Document doc; 102: 103: #endif 104: { 105: SSchema XLinkSSchema; 106: 107: XLinkSSchema = TtaGetSSchema (TEXT("XLink"), doc); 108: if (XLinkSSchema == NULL) 1.17 cvs 109: XLinkSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc), TEXT("XLink"), 1.13 cvs 110: TEXT("XLinkP")); 111: return (XLinkSSchema); 112: } 113: 114: /*---------------------------------------------------------------------- 115: GetXMLSSchema returns the XML Thot schema for document doc. 1.1 cvs 116: ----------------------------------------------------------------------*/ 117: #ifdef __STDC__ 118: SSchema GetXMLSSchema (int XMLtype, Document doc) 119: #else 120: SSchema GetXMLSSchema (XMLtype, doc) 121: Document doc; 122: int XMLtype; 123: #endif 124: { 1.14 cvs 125: if (XMLtype == XHTML_TYPE) 126: return GetXHTMLSSchema (doc); 127: else if (XMLtype == MATH_TYPE) 1.13 cvs 128: return GetMathMLSSchema (doc); 129: else if (XMLtype == GRAPH_TYPE) 130: return GetGraphMLSSchema (doc); 131: else if (XMLtype == XLINK_TYPE) 1.15 cvs 132: return GetXLinkSSchema (doc); 1.13 cvs 133: else 134: return NULL; 1.1 cvs 135: } 136: 137: 138: /*---------------------------------------------------------------------- 1.22 cvs 139: MapXMLElementType 140: Generic function which searchs in the Element Mapping table, selected 141: by the parameter XMLtype, the entry XMLname and returns the corresponding 142: Thot element type. 1.1 cvs 143: Returns: 1.22 cvs 144: - ElTypeNum and ElSSchema into elType ElTypeNum = 0 if not found. 1.1 cvs 145: - content 146: ----------------------------------------------------------------------*/ 147: #ifdef __STDC__ 1.14 cvs 148: void MapXMLElementType (int XMLtype, 149: STRING XMLname, 150: ElementType *elType, 151: STRING *mappedName, 152: CHAR_T *content, 153: Document doc) 1.1 cvs 154: #else 1.14 cvs 155: void MapXMLElementType (XMLtype, 156: XMLname, 157: elType, 158: mappedName, 159: content, 160: doc) 1.6 cvs 161: int XMLtype; 1.12 cvs 162: STRING XMLname; 163: ElementType *elType; 164: STRING *mappedName; 165: CHAR_T *content; 1.6 cvs 166: Document doc; 1.1 cvs 167: #endif 168: { 169: int i; 170: ElemMapping *ptr; 171: 172: /* Select the right table */ 1.14 cvs 173: if (XMLtype == XHTML_TYPE) 174: ptr = XHTMLElemMappingTable; 175: else if (XMLtype == MATH_TYPE) 1.1 cvs 176: ptr = MathMLElemMappingTable; 177: else if (XMLtype == GRAPH_TYPE) 178: ptr = GraphMLElemMappingTable; 179: else 180: ptr = NULL; 1.16 cvs 181: *mappedName = NULL; 1.1 cvs 182: elType->ElTypeNum = 0; 183: if (ptr != NULL) 184: { 185: /* search in the ElemMappingTable */ 186: i = 0; 187: /* look for the first concerned entry in the table */ 1.22 cvs 188: while (ptr[i].XMLname[0] < XMLname[0] && ptr[i].XMLname[0] != WC_EOS) 1.1 cvs 189: i++; 1.22 cvs 190: 1.1 cvs 191: /* look at all entries starting with the right character */ 192: do 1.22 cvs 193: if (ustrcmp (ptr[i].XMLname, XMLname) || ptr[i].Level > ParsingLevel[doc]) 194: /* it's not the tag or this tag is not valid for the current parsing level */ 1.1 cvs 195: i++; 196: else 197: { 198: elType->ElTypeNum = ptr[i].ThotType; 199: if (elType->ElSSchema == NULL) 200: elType->ElSSchema = GetXMLSSchema (XMLtype, doc); 201: *mappedName = ptr[i].XMLname; 202: *content = ptr[i].XMLcontents; 203: } 204: while (elType->ElTypeNum <= 0 && ptr[i].XMLname[0] == XMLname[0]); 205: } 206: } 207: 208: 209: /*---------------------------------------------------------------------- 210: GetXMLElementName 1.22 cvs 211: Generic function which searchs in the mapping table the XML name for 212: a given Thot type. 1.1 cvs 213: ----------------------------------------------------------------------*/ 214: #ifdef __STDC__ 1.25 cvs 215: CHAR_T* GetXMLElementName (ElementType elType, Document doc) 1.1 cvs 216: #else 1.25 cvs 217: CHAR_T* GetXMLElementName (elType, doc) 1.1 cvs 218: ElementType elType; 1.25 cvs 219: Document doc; 1.1 cvs 220: #endif 221: { 222: int i; 223: ElemMapping *ptr; 224: STRING name; 1.26 ! cvs 225: ThotBool invalid = FALSE; 1.1 cvs 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 1.25 cvs 237: ptr = XHTMLElemMappingTable; 1.1 cvs 238: 1.4 cvs 239: if (ptr) 240: do 241: { 1.25 cvs 242: if (ptr[i].ThotType == elType.ElTypeNum) 243: { 1.26 ! cvs 244: if (doc == 0 || ptr[i].Level <= ParsingLevel[doc]) 1.25 cvs 245: return ptr[i].XMLname; 246: else 1.26 ! cvs 247: invalid = TRUE; 1.25 cvs 248: } 249: i++; 1.4 cvs 250: } 1.22 cvs 251: while (ptr[i].XMLname[0] != WC_EOS); 1.1 cvs 252: } 1.26 ! cvs 253: if (invalid) ! 254: return TEXT(""); ! 255: else ! 256: return TEXT("???"); 1.22 cvs 257: } 1.25 cvs 258: 259: 1.22 cvs 260: /*---------------------------------------------------------------------- 1.24 cvs 261: MapXMLAttribute 1.22 cvs 262: Generic function which searchs in the Attribute Mapping Table (table) 263: the entry attrName associated to the element elementName. 1.24 cvs 264: Returns the corresponding entry or -1. 1.22 cvs 265: ----------------------------------------------------------------------*/ 266: #ifdef __STDC__ 1.24 cvs 267: int MapXMLAttribute (int XMLtype, 268: CHAR_T *attrName, 1.22 cvs 269: CHAR_T *elementName, 270: Document doc, 1.24 cvs 271: int *thotType) 1.22 cvs 272: #else 1.24 cvs 273: int MapXMLAttribute (XMLtype, 274: attrName, 1.22 cvs 275: elementName, 276: doc, 1.24 cvs 277: thotType) 278: int XMLtype; 1.22 cvs 279: CHAR_T *attrName; 280: CHAR_T *elementName; 281: Document doc; 1.24 cvs 282: int *thotType; 1.22 cvs 283: #endif 284: { 1.24 cvs 285: int i; 286: AttributeMapping *ptr; 287: 288: /* Select the right table */ 289: if (XMLtype == XHTML_TYPE) 290: ptr = XHTMLAttributeMappingTable; 291: else if (XMLtype == MATH_TYPE) 292: ptr = MathMLAttributeMappingTable; 293: else if (XMLtype == GRAPH_TYPE) 294: ptr = GraphMLAttributeMappingTable; 295: else if (XMLtype == XLINK_TYPE) 296: ptr = XLinkAttributeMappingTable; 297: else 298: ptr = NULL; 299: 300: i = 1; 301: *thotType = 0; 302: if (ptr == NULL) 303: return -1; 1.22 cvs 304: 305: /* look for the first concerned entry in the table */ 1.24 cvs 306: while (ptr[i].XMLattribute[0] < attrName[0] && ptr[i].XMLattribute[0] != WC_EOS) 1.22 cvs 307: i++; 1.24 cvs 308: while (ptr[i].XMLattribute[0] == attrName[0]) 1.22 cvs 309: { 1.24 cvs 310: if (ptr[i].Level > ParsingLevel[doc] || 311: ustrcmp (ptr[i].XMLattribute, attrName) || 312: (ptr[i].XMLelement[0] != WC_EOS && ustrcmp (ptr[i].XMLelement, elementName))) 1.22 cvs 313: i++; 314: else 1.24 cvs 315: { 316: *thotType = ptr[i].ThotAttribute; 317: return (i); 318: } 1.22 cvs 319: } 1.24 cvs 320: return (-1); 1.25 cvs 321: } 322: 323: 324: /*---------------------------------------------------------------------- 325: GetXMLElementName 326: Generic function which searchs in the mapping table the XML name for 327: a given Thot type. 328: ----------------------------------------------------------------------*/ 329: #ifdef __STDC__ 330: CHAR_T* GetXMLAttributeName (AttributeType attrType, Document doc) 331: #else 332: CHAR_T* GetXMLAttributeName (attrType, doc) 333: AttributeType attrType; 334: Document doc; 335: #endif 336: { 337: AttributeMapping *ptr; 338: STRING name; 339: int i; 340: 341: if (attrType.AttrTypeNum > 0) 342: { 343: i = 0; 344: /* Select the table which matches with the element schema */ 345: name = TtaGetSSchemaName (attrType.AttrSSchema); 346: if (ustrcmp (TEXT("MathML"), name) == 0) 347: ptr = MathMLAttributeMappingTable; 348: else if (ustrcmp (TEXT("GraphML"), name) == 0) 349: ptr = GraphMLAttributeMappingTable; 350: else if (ustrcmp (TEXT("XLink"), name) == 0) 351: ptr = XLinkAttributeMappingTable; 352: else 353: ptr = XHTMLAttributeMappingTable; 354: 355: if (ptr) 356: do 357: { 358: if (ptr[i].ThotAttribute == attrType.AttrTypeNum) 359: { 1.26 ! cvs 360: if (doc == 0 || ptr[i].Level <= ParsingLevel[doc]) 1.25 cvs 361: return ptr[i].XMLattribute; 362: else 363: return TEXT("???"); 364: } 365: i++; 366: } 367: while (ptr[i].XMLattribute[0] != WC_EOS); 368: } 369: return TEXT("???"); 1.1 cvs 370: }