Return to fetchHTMLname.c CVS log | Up to [Public] / Amaya / amaya |
1.1 cvs 1: /* 2: * 1.35 vatton 3: * (c) COPYRIGHT INRIA and W3C, 1996-2005 1.1 cvs 4: * Please first read the full copyright statement in file COPYRIGHT. 5: * 6: */ 7: 8: /* 9: * 10: * fetchHTMLname 11: * 12: * Author: I. Vatton 13: * 14: */ 1.13 cvs 15: 1.1 cvs 16: /* This module is used by the html2thot parser and the css parser. */ 17: 1.32 gully 18: #define THOT_EXPORT extern 1.1 cvs 19: #include "amaya.h" 20: #include "fetchHTMLname.h" 21: #include "parser.h" 22: 1.3 cvs 23: #include "fetchHTMLname_f.h" 24: #include "fetchXMLname_f.h" 25: 1.20 cvs 26: 27: /*---------------------------------------------------------------------- 28: LowercaseGI converts uppercases into lovercases 29: GI is the input string 30: gi is the output string 31: ----------------------------------------------------------------------*/ 1.34 vatton 32: static void LowercaseGI (char *GI, char *gi) 1.4 cvs 33: { 1.20 cvs 34: int i; 1.1 cvs 35: 1.26 cvs 36: for (i = 0; GI[i] != EOS && i < MaxTypeNameLength-1; i++) 1.20 cvs 37: { 1.25 cvs 38: if (GI[i] >= 'A' && GI[i] <= 'Z') 1.26 cvs 39: gi[i] = (char) ((int) GI[i] + 32); 1.20 cvs 40: else 41: gi[i] = GI[i]; 42: } 1.26 cvs 43: gi[i] = EOS; 1.20 cvs 44: } 1.4 cvs 45: 1.1 cvs 46: 47: /*---------------------------------------------------------------------- 48: MapGI 49: search in the mapping tables the entry for the element of 50: name GI and returns the rank of that entry. 51: When returning, schema contains the Thot SSchema that defines that element, 52: Returns -1 and schema = NULL if not found. 53: ----------------------------------------------------------------------*/ 1.27 cvs 54: int MapGI (char *gi, SSchema *schema, Document doc) 1.1 cvs 55: { 1.9 cvs 56: ElementType elType; 1.27 cvs 57: char *ptr; 58: char c; 1.9 cvs 59: int i; 60: int entry; 1.23 cvs 61: ThotBool isHTML; 62: ThotBool level; 1.1 cvs 63: 64: /* TODO: use NameSpaces to search in the right table */ 65: entry = -1; 66: if (*schema == NULL) 67: { 68: isHTML = FALSE; 69: ptr = NULL; 70: } 71: else 72: { 73: ptr = TtaGetSSchemaName (*schema); 1.26 cvs 74: isHTML = !strcmp (ptr, "HTML"); 1.1 cvs 75: } 76: 77: i = 0; 78: if (*schema == NULL || isHTML) 79: { 80: /* 81: First convert the first char into lower case to locate 82: registered tags in the HTML mapping table. 83: Entries are registered in upper case and in alphabetic order. 84: */ 85: 86: /* TODO: define a function which works on unicode */ 1.30 vatton 87: c = tolower (gi[0]); 1.1 cvs 88: /* look for the first concerned entry in the table */ 1.16 cvs 89: while (pHTMLGIMapping[i].XMLname[0] < c 90: && pHTMLGIMapping[i].XMLname[0] != EOS) 1.1 cvs 91: i++; 92: 93: /* look at all entries starting with the right character */ 94: do 95: { 1.26 cvs 96: if (strcasecmp (pHTMLGIMapping[i].XMLname, gi)) 1.1 cvs 97: i++; 98: else 99: entry = i; 100: } 1.16 cvs 101: while (entry < 0 && pHTMLGIMapping[i].XMLname[0] == c); 1.1 cvs 102: } 103: 104: if (entry < 0) 1.22 cvs 105: { 106: if (*schema != NULL && isHTML) 107: *schema = NULL; 108: else 109: /* not found. Look at the XML mapping tables */ 110: { 111: elType.ElTypeNum = 0; 112: elType.ElSSchema = *schema; 113: 1.26 cvs 114: if (!ptr || !strcmp (ptr, "MathML")) 1.23 cvs 115: MapXMLElementType (MATH_TYPE, gi, &elType, &ptr, &c, &level, doc); 1.28 vatton 116: if (elType.ElTypeNum == 0 && (!ptr || !strcmp (ptr, "SVG"))) 1.29 cvs 117: MapXMLElementType (SVG_TYPE, gi, &elType, &ptr, &c, &level, doc); 1.22 cvs 118: if (elType.ElTypeNum == 0) 119: { 120: entry = -1; 121: elType.ElSSchema = NULL; 122: *schema = NULL; 123: } 124: else 125: { 126: entry = elType.ElTypeNum; 127: *schema = elType.ElSSchema; 128: } 129: } 130: } 1.1 cvs 131: return entry; 132: } 133: 134: /*---------------------------------------------------------------------- 135: GIType search in mapping tables the Element type associated with 136: a given GI Name. If not found returns zero. 137: ----------------------------------------------------------------------*/ 1.36 ! kia 138: void GIType (const char *gi, ElementType *elType, Document doc) 1.1 cvs 139: { 1.26 cvs 140: char c; 1.27 cvs 141: char *ptr; 142: int i; 143: ThotBool level; 1.1 cvs 144: 145: /* TODO: use NameSpaces to search in the right table */ 146: elType->ElSSchema = NULL; 147: elType->ElTypeNum = 0; 148: 149: /* 150: First convert the first char into lower case to locate 151: registered tags in the HTML mapping table. 152: Entries are registered in upper case and in alphabetic order. 153: */ 154: 155: /* TODO: define a function which works on unicode */ 1.30 vatton 156: c = tolower (gi[0]); 1.1 cvs 157: 158: i = 0; 159: /* look for the first concerned entry in the table */ 1.16 cvs 160: while (pHTMLGIMapping[i].XMLname[0] < c && 161: pHTMLGIMapping[i].XMLname[0] != EOS) 1.1 cvs 162: i++; 163: /* look at all entries starting with the right character */ 164: do 165: { 1.26 cvs 166: if (!strcasecmp (pHTMLGIMapping[i].XMLname, gi)) 1.4 cvs 167: { 168: if (doc != 0) 1.25 cvs 169: elType->ElSSchema = TtaGetSSchema ("HTML", doc); 1.16 cvs 170: elType->ElTypeNum = pHTMLGIMapping[i].ThotType; 1.4 cvs 171: return; 172: } 1.1 cvs 173: i++; 174: } 1.16 cvs 175: while (pHTMLGIMapping[i].XMLname[0] == c); 1.1 cvs 176: 177: /* if not found, look at the XML mapping tables */ 1.23 cvs 178: MapXMLElementType (MATH_TYPE, gi, elType, &ptr, &c, &level, doc); 1.1 cvs 179: if (elType->ElTypeNum == 0) 1.29 cvs 180: MapXMLElementType (SVG_TYPE, gi, elType, &ptr, &c, &level, doc); 1.4 cvs 181: } 182: 183: /*---------------------------------------------------------------------- 184: MapAttr search in all AttributeMappingTables the entry for the 185: attribute of name Attr and returns a pointer to that entry, 186: as well as the corresponding Thot SSchema 187: ----------------------------------------------------------------------*/ 1.26 cvs 188: AttributeMapping *MapAttr (char *attrName, SSchema *schema, 1.24 cvs 189: int elemEntry, ThotBool *level, Document doc) 1.4 cvs 190: { 1.20 cvs 191: typeName attr, elem; 1.18 cvs 192: int i; 1.20 cvs 193: int thotType; 194: 1.18 cvs 195: *schema = TtaGetDocumentSSchema (doc); 1.20 cvs 196: LowercaseGI (attrName, attr); 197: LowercaseGI (pHTMLGIMapping[elemEntry].XMLname, elem); 1.24 cvs 198: i = MapXMLAttribute (XHTML_TYPE, attr, elem, level, doc, &thotType); 1.20 cvs 199: if (i < 0) 1.18 cvs 200: /* not found */ 201: return (NULL); 1.4 cvs 202: else 1.20 cvs 203: return (&(pHTMLAttributeMapping[i])); 1.4 cvs 204: } 205: 1.18 cvs 206: 1.4 cvs 207: /*---------------------------------------------------------------------- 1.18 cvs 208: MapHTMLAttribute 209: Search in the Attribute Mapping Table the entry for the attribute 210: of name Attr and returns the corresponding Thot attribute type. 1.4 cvs 211: ----------------------------------------------------------------------*/ 1.36 ! kia 212: AttributeMapping *MapHTMLAttribute (const char *attrName, 1.18 cvs 213: AttributeType *attrType, 1.36 ! kia 214: const char *elementName, 1.24 cvs 215: ThotBool *level, 1.18 cvs 216: Document doc) 1.4 cvs 217: { 1.24 cvs 218: int i; 1.4 cvs 219: 1.18 cvs 220: attrType->AttrSSchema = GetXHTMLSSchema (doc); 1.24 cvs 221: i = MapXMLAttribute (XHTML_TYPE, attrName, elementName, 222: level, doc, &(attrType->AttrTypeNum)); 1.20 cvs 223: if (i < 0) 224: return (NULL); 1.4 cvs 225: else 1.20 cvs 226: return (&(pHTMLAttributeMapping[i])); 1.1 cvs 227: } 1.18 cvs 228: