xmlwf.c (104349) | xmlwf.c (178848) |
---|---|
1/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd 2 See the file COPYING for copying permission. 3*/ 4 5#include <stdio.h> 6#include <stdlib.h> 7#include <stddef.h> 8#include <string.h> 9 10#include "expat.h" 11#include "codepage.h" 12#include "xmlfile.h" 13#include "xmltchar.h" 14 15#ifdef _MSC_VER 16#include <crtdbg.h> 17#endif 18 | 1/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd 2 See the file COPYING for copying permission. 3*/ 4 5#include <stdio.h> 6#include <stdlib.h> 7#include <stddef.h> 8#include <string.h> 9 10#include "expat.h" 11#include "codepage.h" 12#include "xmlfile.h" 13#include "xmltchar.h" 14 15#ifdef _MSC_VER 16#include <crtdbg.h> 17#endif 18 |
19#if defined(__amigaos__) && defined(__USE_INLINE__) 20#include <proto/expat.h> 21#endif 22 |
|
19/* This ensures proper sorting. */ 20 21#define NSSEP T('\001') 22 | 23/* This ensures proper sorting. */ 24 25#define NSSEP T('\001') 26 |
23static void | 27static void XMLCALL |
24characterData(void *userData, const XML_Char *s, int len) 25{ | 28characterData(void *userData, const XML_Char *s, int len) 29{ |
26 FILE *fp = userData; | 30 FILE *fp = (FILE *)userData; |
27 for (; len > 0; --len, ++s) { 28 switch (*s) { 29 case T('&'): 30 fputts(T("&"), fp); 31 break; 32 case T('<'): 33 fputts(T("<"), fp); 34 break; --- 73 unchanged lines hidden (view full) --- 108is equivalent to lexicographically comparing based on the character number. */ 109 110static int 111attcmp(const void *att1, const void *att2) 112{ 113 return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2); 114} 115 | 31 for (; len > 0; --len, ++s) { 32 switch (*s) { 33 case T('&'): 34 fputts(T("&"), fp); 35 break; 36 case T('<'): 37 fputts(T("<"), fp); 38 break; --- 73 unchanged lines hidden (view full) --- 112is equivalent to lexicographically comparing based on the character number. */ 113 114static int 115attcmp(const void *att1, const void *att2) 116{ 117 return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2); 118} 119 |
116static void | 120static void XMLCALL |
117startElement(void *userData, const XML_Char *name, const XML_Char **atts) 118{ 119 int nAtts; 120 const XML_Char **p; | 121startElement(void *userData, const XML_Char *name, const XML_Char **atts) 122{ 123 int nAtts; 124 const XML_Char **p; |
121 FILE *fp = userData; | 125 FILE *fp = (FILE *)userData; |
122 puttc(T('<'), fp); 123 fputts(name, fp); 124 125 p = atts; 126 while (*p) 127 ++p; | 126 puttc(T('<'), fp); 127 fputts(name, fp); 128 129 p = atts; 130 while (*p) 131 ++p; |
128 nAtts = (p - atts) >> 1; | 132 nAtts = (int)((p - atts) >> 1); |
129 if (nAtts > 1) 130 qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp); 131 while (*atts) { 132 puttc(T(' '), fp); 133 fputts(*atts++, fp); 134 attributeValue(fp, *atts); 135 atts++; 136 } 137 puttc(T('>'), fp); 138} 139 | 133 if (nAtts > 1) 134 qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp); 135 while (*atts) { 136 puttc(T(' '), fp); 137 fputts(*atts++, fp); 138 attributeValue(fp, *atts); 139 atts++; 140 } 141 puttc(T('>'), fp); 142} 143 |
140static void | 144static void XMLCALL |
141endElement(void *userData, const XML_Char *name) 142{ | 145endElement(void *userData, const XML_Char *name) 146{ |
143 FILE *fp = userData; | 147 FILE *fp = (FILE *)userData; |
144 puttc(T('<'), fp); 145 puttc(T('/'), fp); 146 fputts(name, fp); 147 puttc(T('>'), fp); 148} 149 150static int 151nsattcmp(const void *p1, const void *p2) 152{ 153 const XML_Char *att1 = *(const XML_Char **)p1; 154 const XML_Char *att2 = *(const XML_Char **)p2; 155 int sep1 = (tcsrchr(att1, NSSEP) != 0); 156 int sep2 = (tcsrchr(att1, NSSEP) != 0); 157 if (sep1 != sep2) 158 return sep1 - sep2; 159 return tcscmp(att1, att2); 160} 161 | 148 puttc(T('<'), fp); 149 puttc(T('/'), fp); 150 fputts(name, fp); 151 puttc(T('>'), fp); 152} 153 154static int 155nsattcmp(const void *p1, const void *p2) 156{ 157 const XML_Char *att1 = *(const XML_Char **)p1; 158 const XML_Char *att2 = *(const XML_Char **)p2; 159 int sep1 = (tcsrchr(att1, NSSEP) != 0); 160 int sep2 = (tcsrchr(att1, NSSEP) != 0); 161 if (sep1 != sep2) 162 return sep1 - sep2; 163 return tcscmp(att1, att2); 164} 165 |
162static void | 166static void XMLCALL |
163startElementNS(void *userData, const XML_Char *name, const XML_Char **atts) 164{ 165 int nAtts; 166 int nsi; 167 const XML_Char **p; | 167startElementNS(void *userData, const XML_Char *name, const XML_Char **atts) 168{ 169 int nAtts; 170 int nsi; 171 const XML_Char **p; |
168 FILE *fp = userData; | 172 FILE *fp = (FILE *)userData; |
169 const XML_Char *sep; 170 puttc(T('<'), fp); 171 172 sep = tcsrchr(name, NSSEP); 173 if (sep) { 174 fputts(T("n1:"), fp); 175 fputts(sep + 1, fp); 176 fputts(T(" xmlns:n1"), fp); 177 attributeValue(fp, name); 178 nsi = 2; 179 } 180 else { 181 fputts(name, fp); 182 nsi = 1; 183 } 184 185 p = atts; 186 while (*p) 187 ++p; | 173 const XML_Char *sep; 174 puttc(T('<'), fp); 175 176 sep = tcsrchr(name, NSSEP); 177 if (sep) { 178 fputts(T("n1:"), fp); 179 fputts(sep + 1, fp); 180 fputts(T(" xmlns:n1"), fp); 181 attributeValue(fp, name); 182 nsi = 2; 183 } 184 else { 185 fputts(name, fp); 186 nsi = 1; 187 } 188 189 p = atts; 190 while (*p) 191 ++p; |
188 nAtts = (p - atts) >> 1; | 192 nAtts = (int)((p - atts) >> 1); |
189 if (nAtts > 1) 190 qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp); 191 while (*atts) { 192 name = *atts++; 193 sep = tcsrchr(name, NSSEP); 194 puttc(T(' '), fp); 195 if (sep) { 196 ftprintf(fp, T("n%d:"), nsi); --- 6 unchanged lines hidden (view full) --- 203 ftprintf(fp, T(" xmlns:n%d"), nsi++); 204 attributeValue(fp, name); 205 } 206 atts++; 207 } 208 puttc(T('>'), fp); 209} 210 | 193 if (nAtts > 1) 194 qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp); 195 while (*atts) { 196 name = *atts++; 197 sep = tcsrchr(name, NSSEP); 198 puttc(T(' '), fp); 199 if (sep) { 200 ftprintf(fp, T("n%d:"), nsi); --- 6 unchanged lines hidden (view full) --- 207 ftprintf(fp, T(" xmlns:n%d"), nsi++); 208 attributeValue(fp, name); 209 } 210 atts++; 211 } 212 puttc(T('>'), fp); 213} 214 |
211static void | 215static void XMLCALL |
212endElementNS(void *userData, const XML_Char *name) 213{ | 216endElementNS(void *userData, const XML_Char *name) 217{ |
214 FILE *fp = userData; | 218 FILE *fp = (FILE *)userData; |
215 const XML_Char *sep; 216 puttc(T('<'), fp); 217 puttc(T('/'), fp); 218 sep = tcsrchr(name, NSSEP); 219 if (sep) { 220 fputts(T("n1:"), fp); 221 fputts(sep + 1, fp); 222 } 223 else 224 fputts(name, fp); 225 puttc(T('>'), fp); 226} 227 228#ifndef W3C14N 229 | 219 const XML_Char *sep; 220 puttc(T('<'), fp); 221 puttc(T('/'), fp); 222 sep = tcsrchr(name, NSSEP); 223 if (sep) { 224 fputts(T("n1:"), fp); 225 fputts(sep + 1, fp); 226 } 227 else 228 fputts(name, fp); 229 puttc(T('>'), fp); 230} 231 232#ifndef W3C14N 233 |
230static void | 234static void XMLCALL |
231processingInstruction(void *userData, const XML_Char *target, 232 const XML_Char *data) 233{ | 235processingInstruction(void *userData, const XML_Char *target, 236 const XML_Char *data) 237{ |
234 FILE *fp = userData; | 238 FILE *fp = (FILE *)userData; |
235 puttc(T('<'), fp); 236 puttc(T('?'), fp); 237 fputts(target, fp); 238 puttc(T(' '), fp); 239 fputts(data, fp); 240 puttc(T('?'), fp); 241 puttc(T('>'), fp); 242} 243 244#endif /* not W3C14N */ 245 | 239 puttc(T('<'), fp); 240 puttc(T('?'), fp); 241 fputts(target, fp); 242 puttc(T(' '), fp); 243 fputts(data, fp); 244 puttc(T('?'), fp); 245 puttc(T('>'), fp); 246} 247 248#endif /* not W3C14N */ 249 |
246static void | 250static void XMLCALL |
247defaultCharacterData(void *userData, const XML_Char *s, int len) 248{ 249 XML_DefaultCurrent((XML_Parser) userData); 250} 251 | 251defaultCharacterData(void *userData, const XML_Char *s, int len) 252{ 253 XML_DefaultCurrent((XML_Parser) userData); 254} 255 |
252static void | 256static void XMLCALL |
253defaultStartElement(void *userData, const XML_Char *name, 254 const XML_Char **atts) 255{ 256 XML_DefaultCurrent((XML_Parser) userData); 257} 258 | 257defaultStartElement(void *userData, const XML_Char *name, 258 const XML_Char **atts) 259{ 260 XML_DefaultCurrent((XML_Parser) userData); 261} 262 |
259static void | 263static void XMLCALL |
260defaultEndElement(void *userData, const XML_Char *name) 261{ 262 XML_DefaultCurrent((XML_Parser) userData); 263} 264 | 264defaultEndElement(void *userData, const XML_Char *name) 265{ 266 XML_DefaultCurrent((XML_Parser) userData); 267} 268 |
265static void | 269static void XMLCALL |
266defaultProcessingInstruction(void *userData, const XML_Char *target, 267 const XML_Char *data) 268{ 269 XML_DefaultCurrent((XML_Parser) userData); 270} 271 | 270defaultProcessingInstruction(void *userData, const XML_Char *target, 271 const XML_Char *data) 272{ 273 XML_DefaultCurrent((XML_Parser) userData); 274} 275 |
272static void | 276static void XMLCALL |
273nopCharacterData(void *userData, const XML_Char *s, int len) 274{ 275} 276 | 277nopCharacterData(void *userData, const XML_Char *s, int len) 278{ 279} 280 |
277static void | 281static void XMLCALL |
278nopStartElement(void *userData, const XML_Char *name, const XML_Char **atts) 279{ 280} 281 | 282nopStartElement(void *userData, const XML_Char *name, const XML_Char **atts) 283{ 284} 285 |
282static void | 286static void XMLCALL |
283nopEndElement(void *userData, const XML_Char *name) 284{ 285} 286 | 287nopEndElement(void *userData, const XML_Char *name) 288{ 289} 290 |
287static void | 291static void XMLCALL |
288nopProcessingInstruction(void *userData, const XML_Char *target, 289 const XML_Char *data) 290{ 291} 292 | 292nopProcessingInstruction(void *userData, const XML_Char *target, 293 const XML_Char *data) 294{ 295} 296 |
293static void | 297static void XMLCALL |
294markup(void *userData, const XML_Char *s, int len) 295{ | 298markup(void *userData, const XML_Char *s, int len) 299{ |
296 FILE *fp = XML_GetUserData((XML_Parser) userData); | 300 FILE *fp = (FILE *)XML_GetUserData((XML_Parser) userData); |
297 for (; len > 0; --len, ++s) 298 puttc(*s, fp); 299} 300 301static void 302metaLocation(XML_Parser parser) 303{ 304 const XML_Char *uri = XML_GetBase(parser); 305 if (uri) | 301 for (; len > 0; --len, ++s) 302 puttc(*s, fp); 303} 304 305static void 306metaLocation(XML_Parser parser) 307{ 308 const XML_Char *uri = XML_GetBase(parser); 309 if (uri) |
306 ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri); 307 ftprintf(XML_GetUserData(parser), 308 T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""), | 310 ftprintf((FILE *)XML_GetUserData(parser), T(" uri=\"%s\""), uri); 311 ftprintf((FILE *)XML_GetUserData(parser), 312 T(" byte=\"%" XML_FMT_INT_MOD "d\" nbytes=\"%d\" \ 313 line=\"%" XML_FMT_INT_MOD "u\" col=\"%" XML_FMT_INT_MOD "u\""), |
309 XML_GetCurrentByteIndex(parser), 310 XML_GetCurrentByteCount(parser), 311 XML_GetCurrentLineNumber(parser), 312 XML_GetCurrentColumnNumber(parser)); 313} 314 315static void 316metaStartDocument(void *userData) 317{ | 314 XML_GetCurrentByteIndex(parser), 315 XML_GetCurrentByteCount(parser), 316 XML_GetCurrentLineNumber(parser), 317 XML_GetCurrentColumnNumber(parser)); 318} 319 320static void 321metaStartDocument(void *userData) 322{ |
318 fputts(T(" | 323 fputts(T("<document>\n"), (FILE *)XML_GetUserData((XML_Parser) userData)); |
319} 320 321static void 322metaEndDocument(void *userData) 323{ | 324} 325 326static void 327metaEndDocument(void *userData) 328{ |
324 fputts(T("\n"), XML_GetUserData((XML_Parser) userData)); | 329 fputts(T("</document>\n"), (FILE *)XML_GetUserData((XML_Parser) userData)); |
325} 326 | 330} 331 |
327static void | 332static void XMLCALL |
328metaStartElement(void *userData, const XML_Char *name, 329 const XML_Char **atts) 330{ 331 XML_Parser parser = (XML_Parser) userData; | 333metaStartElement(void *userData, const XML_Char *name, 334 const XML_Char **atts) 335{ 336 XML_Parser parser = (XML_Parser) userData; |
332 FILE *fp = XML_GetUserData(parser); | 337 FILE *fp = (FILE *)XML_GetUserData(parser); |
333 const XML_Char **specifiedAttsEnd 334 = atts + XML_GetSpecifiedAttributeCount(parser); 335 const XML_Char **idAttPtr; 336 int idAttIndex = XML_GetIdAttributeIndex(parser); 337 if (idAttIndex < 0) 338 idAttPtr = 0; 339 else 340 idAttPtr = atts + idAttIndex; 341 342 ftprintf(fp, T("<starttag name=\"%s\""), name); 343 metaLocation(parser); 344 if (*atts) { 345 fputts(T(">\n"), fp); 346 do { 347 ftprintf(fp, T("<attribute name=\"%s\" value=\""), atts[0]); | 338 const XML_Char **specifiedAttsEnd 339 = atts + XML_GetSpecifiedAttributeCount(parser); 340 const XML_Char **idAttPtr; 341 int idAttIndex = XML_GetIdAttributeIndex(parser); 342 if (idAttIndex < 0) 343 idAttPtr = 0; 344 else 345 idAttPtr = atts + idAttIndex; 346 347 ftprintf(fp, T("<starttag name=\"%s\""), name); 348 metaLocation(parser); 349 if (*atts) { 350 fputts(T(">\n"), fp); 351 do { 352 ftprintf(fp, T("<attribute name=\"%s\" value=\""), atts[0]); |
348 characterData(fp, atts[1], tcslen(atts[1])); | 353 characterData(fp, atts[1], (int)tcslen(atts[1])); |
349 if (atts >= specifiedAttsEnd) 350 fputts(T("\" defaulted=\"yes\"/>\n"), fp); 351 else if (atts == idAttPtr) 352 fputts(T("\" id=\"yes\"/>\n"), fp); 353 else 354 fputts(T("\"/>\n"), fp); 355 } while (*(atts += 2)); 356 fputts(T("</starttag>\n"), fp); 357 } 358 else 359 fputts(T("/>\n"), fp); 360} 361 | 354 if (atts >= specifiedAttsEnd) 355 fputts(T("\" defaulted=\"yes\"/>\n"), fp); 356 else if (atts == idAttPtr) 357 fputts(T("\" id=\"yes\"/>\n"), fp); 358 else 359 fputts(T("\"/>\n"), fp); 360 } while (*(atts += 2)); 361 fputts(T("</starttag>\n"), fp); 362 } 363 else 364 fputts(T("/>\n"), fp); 365} 366 |
362static void | 367static void XMLCALL |
363metaEndElement(void *userData, const XML_Char *name) 364{ 365 XML_Parser parser = (XML_Parser) userData; | 368metaEndElement(void *userData, const XML_Char *name) 369{ 370 XML_Parser parser = (XML_Parser) userData; |
366 FILE *fp = XML_GetUserData(parser); | 371 FILE *fp = (FILE *)XML_GetUserData(parser); |
367 ftprintf(fp, T("<endtag name=\"%s\""), name); 368 metaLocation(parser); 369 fputts(T("/>\n"), fp); 370} 371 | 372 ftprintf(fp, T("<endtag name=\"%s\""), name); 373 metaLocation(parser); 374 fputts(T("/>\n"), fp); 375} 376 |
372static void | 377static void XMLCALL |
373metaProcessingInstruction(void *userData, const XML_Char *target, 374 const XML_Char *data) 375{ 376 XML_Parser parser = (XML_Parser) userData; | 378metaProcessingInstruction(void *userData, const XML_Char *target, 379 const XML_Char *data) 380{ 381 XML_Parser parser = (XML_Parser) userData; |
377 FILE *fp = XML_GetUserData(parser); | 382 FILE *fp = (FILE *)XML_GetUserData(parser); |
378 ftprintf(fp, T("<pi target=\"%s\" data=\""), target); | 383 ftprintf(fp, T("<pi target=\"%s\" data=\""), target); |
379 characterData(fp, data, tcslen(data)); | 384 characterData(fp, data, (int)tcslen(data)); |
380 puttc(T('"'), fp); 381 metaLocation(parser); 382 fputts(T("/>\n"), fp); 383} 384 | 385 puttc(T('"'), fp); 386 metaLocation(parser); 387 fputts(T("/>\n"), fp); 388} 389 |
385static void | 390static void XMLCALL |
386metaComment(void *userData, const XML_Char *data) 387{ 388 XML_Parser parser = (XML_Parser) userData; | 391metaComment(void *userData, const XML_Char *data) 392{ 393 XML_Parser parser = (XML_Parser) userData; |
389 FILE *fp = XML_GetUserData(parser); | 394 FILE *fp = (FILE *)XML_GetUserData(parser); |
390 fputts(T("<comment data=\""), fp); | 395 fputts(T("<comment data=\""), fp); |
391 characterData(fp, data, tcslen(data)); | 396 characterData(fp, data, (int)tcslen(data)); |
392 puttc(T('"'), fp); 393 metaLocation(parser); 394 fputts(T("/>\n"), fp); 395} 396 | 397 puttc(T('"'), fp); 398 metaLocation(parser); 399 fputts(T("/>\n"), fp); 400} 401 |
397static void | 402static void XMLCALL |
398metaStartCdataSection(void *userData) 399{ 400 XML_Parser parser = (XML_Parser) userData; | 403metaStartCdataSection(void *userData) 404{ 405 XML_Parser parser = (XML_Parser) userData; |
401 FILE *fp = XML_GetUserData(parser); | 406 FILE *fp = (FILE *)XML_GetUserData(parser); |
402 fputts(T("<startcdata"), fp); 403 metaLocation(parser); 404 fputts(T("/>\n"), fp); 405} 406 | 407 fputts(T("<startcdata"), fp); 408 metaLocation(parser); 409 fputts(T("/>\n"), fp); 410} 411 |
407static void | 412static void XMLCALL |
408metaEndCdataSection(void *userData) 409{ 410 XML_Parser parser = (XML_Parser) userData; | 413metaEndCdataSection(void *userData) 414{ 415 XML_Parser parser = (XML_Parser) userData; |
411 FILE *fp = XML_GetUserData(parser); | 416 FILE *fp = (FILE *)XML_GetUserData(parser); |
412 fputts(T("<endcdata"), fp); 413 metaLocation(parser); 414 fputts(T("/>\n"), fp); 415} 416 | 417 fputts(T("<endcdata"), fp); 418 metaLocation(parser); 419 fputts(T("/>\n"), fp); 420} 421 |
417static void | 422static void XMLCALL |
418metaCharacterData(void *userData, const XML_Char *s, int len) 419{ 420 XML_Parser parser = (XML_Parser) userData; | 423metaCharacterData(void *userData, const XML_Char *s, int len) 424{ 425 XML_Parser parser = (XML_Parser) userData; |
421 FILE *fp = XML_GetUserData(parser); | 426 FILE *fp = (FILE *)XML_GetUserData(parser); |
422 fputts(T("<chars str=\""), fp); 423 characterData(fp, s, len); 424 puttc(T('"'), fp); 425 metaLocation(parser); 426 fputts(T("/>\n"), fp); 427} 428 | 427 fputts(T("<chars str=\""), fp); 428 characterData(fp, s, len); 429 puttc(T('"'), fp); 430 metaLocation(parser); 431 fputts(T("/>\n"), fp); 432} 433 |
429static void | 434static void XMLCALL |
430metaStartDoctypeDecl(void *userData, 431 const XML_Char *doctypeName, 432 const XML_Char *sysid, 433 const XML_Char *pubid, 434 int has_internal_subset) 435{ 436 XML_Parser parser = (XML_Parser) userData; | 435metaStartDoctypeDecl(void *userData, 436 const XML_Char *doctypeName, 437 const XML_Char *sysid, 438 const XML_Char *pubid, 439 int has_internal_subset) 440{ 441 XML_Parser parser = (XML_Parser) userData; |
437 FILE *fp = XML_GetUserData(parser); | 442 FILE *fp = (FILE *)XML_GetUserData(parser); |
438 ftprintf(fp, T("<startdoctype name=\"%s\""), doctypeName); 439 metaLocation(parser); 440 fputts(T("/>\n"), fp); 441} 442 | 443 ftprintf(fp, T("<startdoctype name=\"%s\""), doctypeName); 444 metaLocation(parser); 445 fputts(T("/>\n"), fp); 446} 447 |
443static void | 448static void XMLCALL |
444metaEndDoctypeDecl(void *userData) 445{ 446 XML_Parser parser = (XML_Parser) userData; | 449metaEndDoctypeDecl(void *userData) 450{ 451 XML_Parser parser = (XML_Parser) userData; |
447 FILE *fp = XML_GetUserData(parser); | 452 FILE *fp = (FILE *)XML_GetUserData(parser); |
448 fputts(T("<enddoctype"), fp); 449 metaLocation(parser); 450 fputts(T("/>\n"), fp); 451} 452 | 453 fputts(T("<enddoctype"), fp); 454 metaLocation(parser); 455 fputts(T("/>\n"), fp); 456} 457 |
453static void | 458static void XMLCALL |
454metaNotationDecl(void *userData, 455 const XML_Char *notationName, 456 const XML_Char *base, 457 const XML_Char *systemId, 458 const XML_Char *publicId) 459{ 460 XML_Parser parser = (XML_Parser) userData; | 459metaNotationDecl(void *userData, 460 const XML_Char *notationName, 461 const XML_Char *base, 462 const XML_Char *systemId, 463 const XML_Char *publicId) 464{ 465 XML_Parser parser = (XML_Parser) userData; |
461 FILE *fp = XML_GetUserData(parser); | 466 FILE *fp = (FILE *)XML_GetUserData(parser); |
462 ftprintf(fp, T("<notation name=\"%s\""), notationName); 463 if (publicId) 464 ftprintf(fp, T(" public=\"%s\""), publicId); 465 if (systemId) { 466 fputts(T(" system=\""), fp); | 467 ftprintf(fp, T("<notation name=\"%s\""), notationName); 468 if (publicId) 469 ftprintf(fp, T(" public=\"%s\""), publicId); 470 if (systemId) { 471 fputts(T(" system=\""), fp); |
467 characterData(fp, systemId, tcslen(systemId)); | 472 characterData(fp, systemId, (int)tcslen(systemId)); |
468 puttc(T('"'), fp); 469 } 470 metaLocation(parser); 471 fputts(T("/>\n"), fp); 472} 473 474 | 473 puttc(T('"'), fp); 474 } 475 metaLocation(parser); 476 fputts(T("/>\n"), fp); 477} 478 479 |
475static void | 480static void XMLCALL |
476metaEntityDecl(void *userData, 477 const XML_Char *entityName, 478 int is_param, 479 const XML_Char *value, 480 int value_length, 481 const XML_Char *base, 482 const XML_Char *systemId, 483 const XML_Char *publicId, 484 const XML_Char *notationName) 485{ 486 XML_Parser parser = (XML_Parser) userData; | 481metaEntityDecl(void *userData, 482 const XML_Char *entityName, 483 int is_param, 484 const XML_Char *value, 485 int value_length, 486 const XML_Char *base, 487 const XML_Char *systemId, 488 const XML_Char *publicId, 489 const XML_Char *notationName) 490{ 491 XML_Parser parser = (XML_Parser) userData; |
487 FILE *fp = XML_GetUserData(parser); | 492 FILE *fp = (FILE *)XML_GetUserData(parser); |
488 489 if (value) { 490 ftprintf(fp, T("<entity name=\"%s\""), entityName); 491 metaLocation(parser); 492 puttc(T('>'), fp); 493 characterData(fp, value, value_length); 494 fputts(T("</entity/>\n"), fp); 495 } 496 else if (notationName) { 497 ftprintf(fp, T("<entity name=\"%s\""), entityName); 498 if (publicId) 499 ftprintf(fp, T(" public=\"%s\""), publicId); 500 fputts(T(" system=\""), fp); | 493 494 if (value) { 495 ftprintf(fp, T("<entity name=\"%s\""), entityName); 496 metaLocation(parser); 497 puttc(T('>'), fp); 498 characterData(fp, value, value_length); 499 fputts(T("</entity/>\n"), fp); 500 } 501 else if (notationName) { 502 ftprintf(fp, T("<entity name=\"%s\""), entityName); 503 if (publicId) 504 ftprintf(fp, T(" public=\"%s\""), publicId); 505 fputts(T(" system=\""), fp); |
501 characterData(fp, systemId, tcslen(systemId)); | 506 characterData(fp, systemId, (int)tcslen(systemId)); |
502 puttc(T('"'), fp); 503 ftprintf(fp, T(" notation=\"%s\""), notationName); 504 metaLocation(parser); 505 fputts(T("/>\n"), fp); 506 } 507 else { 508 ftprintf(fp, T("<entity name=\"%s\""), entityName); 509 if (publicId) 510 ftprintf(fp, T(" public=\"%s\""), publicId); 511 fputts(T(" system=\""), fp); | 507 puttc(T('"'), fp); 508 ftprintf(fp, T(" notation=\"%s\""), notationName); 509 metaLocation(parser); 510 fputts(T("/>\n"), fp); 511 } 512 else { 513 ftprintf(fp, T("<entity name=\"%s\""), entityName); 514 if (publicId) 515 ftprintf(fp, T(" public=\"%s\""), publicId); 516 fputts(T(" system=\""), fp); |
512 characterData(fp, systemId, tcslen(systemId)); | 517 characterData(fp, systemId, (int)tcslen(systemId)); |
513 puttc(T('"'), fp); 514 metaLocation(parser); 515 fputts(T("/>\n"), fp); 516 } 517} 518 | 518 puttc(T('"'), fp); 519 metaLocation(parser); 520 fputts(T("/>\n"), fp); 521 } 522} 523 |
519static void | 524static void XMLCALL |
520metaStartNamespaceDecl(void *userData, 521 const XML_Char *prefix, 522 const XML_Char *uri) 523{ 524 XML_Parser parser = (XML_Parser) userData; | 525metaStartNamespaceDecl(void *userData, 526 const XML_Char *prefix, 527 const XML_Char *uri) 528{ 529 XML_Parser parser = (XML_Parser) userData; |
525 FILE *fp = XML_GetUserData(parser); | 530 FILE *fp = (FILE *)XML_GetUserData(parser); |
526 fputts(T("<startns"), fp); 527 if (prefix) 528 ftprintf(fp, T(" prefix=\"%s\""), prefix); 529 if (uri) { 530 fputts(T(" ns=\""), fp); | 531 fputts(T("<startns"), fp); 532 if (prefix) 533 ftprintf(fp, T(" prefix=\"%s\""), prefix); 534 if (uri) { 535 fputts(T(" ns=\""), fp); |
531 characterData(fp, uri, tcslen(uri)); | 536 characterData(fp, uri, (int)tcslen(uri)); |
532 fputts(T("\"/>\n"), fp); 533 } 534 else 535 fputts(T("/>\n"), fp); 536} 537 | 537 fputts(T("\"/>\n"), fp); 538 } 539 else 540 fputts(T("/>\n"), fp); 541} 542 |
538static void | 543static void XMLCALL |
539metaEndNamespaceDecl(void *userData, const XML_Char *prefix) 540{ 541 XML_Parser parser = (XML_Parser) userData; | 544metaEndNamespaceDecl(void *userData, const XML_Char *prefix) 545{ 546 XML_Parser parser = (XML_Parser) userData; |
542 FILE *fp = XML_GetUserData(parser); | 547 FILE *fp = (FILE *)XML_GetUserData(parser); |
543 if (!prefix) 544 fputts(T("<endns/>\n"), fp); 545 else 546 ftprintf(fp, T("<endns prefix=\"%s\"/>\n"), prefix); 547} 548 | 548 if (!prefix) 549 fputts(T("<endns/>\n"), fp); 550 else 551 ftprintf(fp, T("<endns prefix=\"%s\"/>\n"), prefix); 552} 553 |
549static int | 554static int XMLCALL |
550unknownEncodingConvert(void *data, const char *p) 551{ 552 return codepageConvert(*(int *)data, p); 553} 554 | 555unknownEncodingConvert(void *data, const char *p) 556{ 557 return codepageConvert(*(int *)data, p); 558} 559 |
555static int | 560static int XMLCALL |
556unknownEncoding(void *userData, const XML_Char *name, XML_Encoding *info) 557{ 558 int cp; 559 static const XML_Char prefixL[] = T("windows-"); 560 static const XML_Char prefixU[] = T("WINDOWS-"); 561 int i; 562 563 for (i = 0; prefixU[i]; i++) 564 if (name[i] != prefixU[i] && name[i] != prefixL[i]) 565 return 0; 566 567 cp = 0; 568 for (; name[i]; i++) { 569 static const XML_Char digits[] = T("0123456789"); 570 const XML_Char *s = tcschr(digits, name[i]); 571 if (!s) 572 return 0; 573 cp *= 10; | 561unknownEncoding(void *userData, const XML_Char *name, XML_Encoding *info) 562{ 563 int cp; 564 static const XML_Char prefixL[] = T("windows-"); 565 static const XML_Char prefixU[] = T("WINDOWS-"); 566 int i; 567 568 for (i = 0; prefixU[i]; i++) 569 if (name[i] != prefixU[i] && name[i] != prefixL[i]) 570 return 0; 571 572 cp = 0; 573 for (; name[i]; i++) { 574 static const XML_Char digits[] = T("0123456789"); 575 const XML_Char *s = tcschr(digits, name[i]); 576 if (!s) 577 return 0; 578 cp *= 10; |
574 cp += s - digits; | 579 cp += (int)(s - digits); |
575 if (cp >= 0x10000) 576 return 0; 577 } 578 if (!codepageMap(cp, info->map)) 579 return 0; 580 info->convert = unknownEncodingConvert; 581 /* We could just cast the code page integer to a void *, 582 and avoid the use of release. */ 583 info->release = free; 584 info->data = malloc(sizeof(int)); 585 if (!info->data) 586 return 0; 587 *(int *)info->data = cp; 588 return 1; 589} 590 | 580 if (cp >= 0x10000) 581 return 0; 582 } 583 if (!codepageMap(cp, info->map)) 584 return 0; 585 info->convert = unknownEncodingConvert; 586 /* We could just cast the code page integer to a void *, 587 and avoid the use of release. */ 588 info->release = free; 589 info->data = malloc(sizeof(int)); 590 if (!info->data) 591 return 0; 592 *(int *)info->data = cp; 593 return 1; 594} 595 |
591static int | 596static int XMLCALL |
592notStandalone(void *userData) 593{ 594 return 0; 595} 596 597static void 598showVersion(XML_Char *prog) 599{ 600 XML_Char *s = prog; 601 XML_Char ch; 602 const XML_Feature *features = XML_GetFeatureList(); 603 while ((ch = *s) != 0) { 604 if (ch == '/' | 597notStandalone(void *userData) 598{ 599 return 0; 600} 601 602static void 603showVersion(XML_Char *prog) 604{ 605 XML_Char *s = prog; 606 XML_Char ch; 607 const XML_Feature *features = XML_GetFeatureList(); 608 while ((ch = *s) != 0) { 609 if (ch == '/' |
605#ifdef WIN32 | 610#if (defined(WIN32) || defined(__WATCOMC__)) |
606 || ch == '\\' 607#endif 608 ) 609 prog = s + 1; 610 ++s; 611 } 612 ftprintf(stdout, T("%s using %s\n"), prog, XML_ExpatVersion()); 613 if (features != NULL && features[0].feature != XML_FEATURE_END) { --- 26 unchanged lines hidden (view full) --- 640 int i, j; 641 const XML_Char *outputDir = NULL; 642 const XML_Char *encoding = NULL; 643 unsigned processFlags = XML_MAP_FILE; 644 int windowsCodePages = 0; 645 int outputType = 0; 646 int useNamespaces = 0; 647 int requireStandalone = 0; | 611 || ch == '\\' 612#endif 613 ) 614 prog = s + 1; 615 ++s; 616 } 617 ftprintf(stdout, T("%s using %s\n"), prog, XML_ExpatVersion()); 618 if (features != NULL && features[0].feature != XML_FEATURE_END) { --- 26 unchanged lines hidden (view full) --- 645 int i, j; 646 const XML_Char *outputDir = NULL; 647 const XML_Char *encoding = NULL; 648 unsigned processFlags = XML_MAP_FILE; 649 int windowsCodePages = 0; 650 int outputType = 0; 651 int useNamespaces = 0; 652 int requireStandalone = 0; |
648 int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; | 653 enum XML_ParamEntityParsing paramEntityParsing = 654 XML_PARAM_ENTITY_PARSING_NEVER; |
649 int useStdin = 0; 650 651#ifdef _MSC_VER 652 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); 653#endif 654 655 i = 1; 656 j = 0; --- 104 unchanged lines hidden (view full) --- 761 /* This is for doing timings; this gives a more realistic estimate of 762 the parsing time. */ 763 outputDir = 0; 764 XML_SetElementHandler(parser, nopStartElement, nopEndElement); 765 XML_SetCharacterDataHandler(parser, nopCharacterData); 766 XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction); 767 } 768 else if (outputDir) { | 655 int useStdin = 0; 656 657#ifdef _MSC_VER 658 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); 659#endif 660 661 i = 1; 662 j = 0; --- 104 unchanged lines hidden (view full) --- 767 /* This is for doing timings; this gives a more realistic estimate of 768 the parsing time. */ 769 outputDir = 0; 770 XML_SetElementHandler(parser, nopStartElement, nopEndElement); 771 XML_SetCharacterDataHandler(parser, nopCharacterData); 772 XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction); 773 } 774 else if (outputDir) { |
775 const XML_Char * delim = T("/"); |
|
769 const XML_Char *file = useStdin ? T("STDIN") : argv[i]; | 776 const XML_Char *file = useStdin ? T("STDIN") : argv[i]; |
770 if (tcsrchr(file, T('/'))) 771 file = tcsrchr(file, T('/')) + 1; 772#ifdef WIN32 773 if (tcsrchr(file, T('\\'))) 774 file = tcsrchr(file, T('\\')) + 1; | 777 if (!useStdin) { 778 /* Jump after last (back)slash */ 779 const XML_Char * lastDelim = tcsrchr(file, delim[0]); 780 if (lastDelim) 781 file = lastDelim + 1; 782#if (defined(WIN32) || defined(__WATCOMC__)) 783 else { 784 const XML_Char * winDelim = T("\\"); 785 lastDelim = tcsrchr(file, winDelim[0]); 786 if (lastDelim) { 787 file = lastDelim + 1; 788 delim = winDelim; 789 } 790 } |
775#endif | 791#endif |
776 outName = malloc((tcslen(outputDir) + tcslen(file) + 2) | 792 } 793 outName = (XML_Char *)malloc((tcslen(outputDir) + tcslen(file) + 2) |
777 * sizeof(XML_Char)); 778 tcscpy(outName, outputDir); | 794 * sizeof(XML_Char)); 795 tcscpy(outName, outputDir); |
779 tcscat(outName, T("/")); | 796 tcscat(outName, delim); |
780 tcscat(outName, file); 781 fp = tfopen(outName, T("wb")); 782 if (!fp) { 783 tperror(outName); 784 exit(1); 785 } 786 setvbuf(fp, NULL, _IOFBF, 16384); 787#ifdef XML_UNICODE --- 55 unchanged lines hidden --- | 797 tcscat(outName, file); 798 fp = tfopen(outName, T("wb")); 799 if (!fp) { 800 tperror(outName); 801 exit(1); 802 } 803 setvbuf(fp, NULL, _IOFBF, 16384); 804#ifdef XML_UNICODE --- 55 unchanged lines hidden --- |