void KPDFOutputDev::initDevice( PDFDoc * pdfDoc ) { m_doc = pdfDoc; startDoc( pdfDoc->getXRef() ); }
static BSErr findXMLTag(XMLParser* parser) { BSErr err = BSERR_OK; BSErr parseErr = BSERR_INVAILD; unsigned char c; while (err == BSERR_OK) { //printf("-\n"); if ((err = readMore(parser)) != BSERR_OK) break; if (parser->size == 0) break; { c = (unsigned char)parser->buffer[parser->ptr++]; //printf("%c",c); if (c <= 0x20 && parser->openclose != XMLPARSER_OPEN) { } else if (c == '<') { //タグ内部の解析 int space = 0; parseErr = BSERR_INVAILD; if ((err = startTag(parser)) != BSERR_OK) break; while (err == BSERR_OK) { if ((err = readMore(parser)) != BSERR_OK) break; if (parser->size == 0) break; c = (unsigned char)parser->buffer[parser->ptr++]; if (c == '=') { if (parser->strptr > 0) { err = foundTag(parser,stringPtr(parser)); resetStr(parser); } while (err == BSERR_OK) { if ((err = readMore(parser)) != BSERR_OK) break; if (parser->size == 0) break; c = (unsigned char)parser->buffer[parser->ptr++]; if (c <= 0x20) { } else if (c == '\"') { while (err == BSERR_OK) { if ((err = readMore(parser)) != BSERR_OK) break; if (parser->size == 0) break; c = (unsigned char)parser->buffer[parser->ptr++]; if (c == '\"') { if (parser->strptr > 0) { err = foundAtr(parser,stringPtr(parser)); resetStr(parser); } break; } else { err = appendChar(parser,c); } } break; } else { err = BSERR_INVAILD; } } } else if (c == '?') { if (parser->strptr > 0) { err = foundTag(parser,stringPtr(parser)); resetStr(parser); } err = appendChar(parser,c); err = foundTag(parser,stringPtr(parser)); resetStr(parser); } else if (c == '/') { if (parser->strptr > 0) { err = foundTag(parser,stringPtr(parser)); resetStr(parser); } err = appendChar(parser,c); err = foundTag(parser,stringPtr(parser)); resetStr(parser); } else if (c <= 0x20) { if (space == 0) { if (parser->strptr > 0) { err = foundTag(parser,stringPtr(parser)); resetStr(parser); } } space = 1; } else if (c == '>') { if (parser->strptr > 0) { err = foundTag(parser,stringPtr(parser)); resetStr(parser); } //printf("et-"); err = endTag(parser); //printf("et\n"); parseErr = BSERR_OK; break; } else { err = appendChar(parser,c); space = 0; } } } else { //文字列の解析 int space = 0; parseErr = BSERR_INVAILD; if ((err = startDoc(parser)) != BSERR_OK) break; if (c <= 0x20) { space = 1; } parser->ptr --; while (err == BSERR_OK) { if ((err = readMore(parser)) != BSERR_OK) break; if (parser->size == 0) break; c = (unsigned char)parser->buffer[parser->ptr++]; if (c <= 0x20) { if (parser->strptr > 0 && space == 0) { err = foundDoc(parser,stringPtr(parser)); resetStr(parser); } space = 1; err = appendChar(parser,c); } else if (c == '<') { if (parser->strptr > 0) { err = foundDoc(parser,stringPtr(parser)); resetStr(parser); } //printf("e-"); err = endDoc(parser); //printf("e\n"); parser->ptr --; break; } else { if (parser->strptr > 0 && space == 1) { err = foundDoc(parser,stringPtr(parser)); resetStr(parser); } err = appendChar(parser,c); space = 0; } } } } } if (parseErr != BSERR_OK) { return parseErr; } return err; }