libxml snippets

        } else if ((cur == '<') && (next == '!') &&
            (ctxt->input->cur[2] == 'D') &&
            (ctxt->input->cur[3] == 'O') &&
            (ctxt->input->cur[4] == 'C') &&
            (ctxt->input->cur[5] == 'T') &&
            (ctxt->input->cur[6] == 'Y') &&
            (ctxt->input->cur[7] == 'P') &&
            (ctxt->input->cur[8] == 'E')) {
            if ((!terminate) &&
                (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0))
            goto done;
#ifdef DEBUG_PUSH
            xmlGenericError(xmlGenericErrorContext,
                "PP: Parsing internal subset\n");
#endif
            ctxt->inSubset = 1;
            xmlParseDocTypeDecl(ctxt);
            if (RAW == '[') {

こんな。さっきのCMP9は使わないのか!? xmlParseDocTypeDeclははじめがこうなってる。

void
xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) {
    const xmlChar *name = NULL;
    xmlChar *ExternalID = NULL;
    xmlChar *URI = NULL;

    /*
     * We know that '<!DOCTYPE' has been detected.
     */
    SKIP(9);

    SKIP_BLANKS;

geckoのパーサはこんなわかりやすくなかったきがする。
あーこのコード、ストリームから読み込まないバージョンなのかな。ストリームから読んでたらこんなことできない。