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;
}