static char *xml_parse_meta_text(ACL_XML3 *xml, char *data) { int ch; if (xml->curr_node->text == xml->addr) SKIP_SPACE(data); if (*data == 0) return data; if (xml->curr_node->text == xml->addr) xml->curr_node->text = data; while ((ch = *data) != 0) { if (xml->curr_node->quote) { if (ch == xml->curr_node->quote) xml->curr_node->quote = 0; } else if (IS_QUOTE(ch)) { if (xml->curr_node->quote == 0) xml->curr_node->quote = ch; } else if (ch == '<') { xml->curr_node->nlt++; } else if (ch != '>') { ; } else if (xml->curr_node->nlt == 0) { char *last; xml->curr_node->text_size = data - xml->curr_node->text; xml->curr_node->status = ACL_XML3_S_MEND; *data++ = 0; if ((xml->curr_node->flag & ACL_XML3_F_META_QM) == 0) break; last = data; while (last > xml->curr_node->text) { if (*last == '?') { xml->curr_node->text_size = last - xml->curr_node->text; *last = 0; break; } last--; } if (last == xml->curr_node->text) break; xml_meta_attr(xml->curr_node); break; } else { xml->curr_node->nlt--; } data++; } return data; }
static const char *xml_parse_meta_text(ACL_XML *xml, const char *data) { int ch; if (LEN(xml->curr_node->text) == 0) { SKIP_SPACE(data); } while ((ch = *data) != 0) { if (xml->curr_node->quote) { if (ch == xml->curr_node->quote) { xml->curr_node->quote = 0; } ACL_VSTRING_ADDCH(xml->curr_node->text, ch); } else if (IS_QUOTE(ch)) { if (xml->curr_node->quote == 0) { xml->curr_node->quote = ch; } ACL_VSTRING_ADDCH(xml->curr_node->text, ch); } else if (ch == '<') { xml->curr_node->nlt++; ACL_VSTRING_ADDCH(xml->curr_node->text, ch); } else if (ch == '>') { if (xml->curr_node->nlt == 0) { char *last; size_t off; data++; xml->curr_node->status = ACL_XML_S_MEND; if ((xml->curr_node->flag & ACL_XML_F_META_QM) == 0) break; last = acl_vstring_end(xml->curr_node->text) - 1; if (last < STR(xml->curr_node->text) || *last != '?') break; off = ACL_VSTRING_LEN(xml->curr_node->text) - 1; if (off == 0) break; ACL_VSTRING_AT_OFFSET(xml->curr_node->text, off); ACL_VSTRING_TERMINATE(xml->curr_node->text); xml_meta_attr(xml->curr_node); break; } xml->curr_node->nlt--; ACL_VSTRING_ADDCH(xml->curr_node->text, ch); } else { ACL_VSTRING_ADDCH(xml->curr_node->text, ch); } data++; } ACL_VSTRING_TERMINATE(xml->curr_node->text); return (data); }
static const char *xml_parse_meta_text(ACL_XML2 *xml, const char *data) { int ch; if (xml->curr_node->text == xml->addr) SKIP_SPACE(data); if (*data == 0) return data; if (xml->curr_node->text == xml->addr) xml->curr_node->text = xml->ptr; while ((ch = *data) != 0) { if (xml->curr_node->quote) { if (xml->len < MIN_LEN) return data; if (ch == xml->curr_node->quote) xml->curr_node->quote = 0; xml->len--; *xml->ptr++ = ch; } else if (IS_QUOTE(ch)) { if (xml->len < MIN_LEN) return data; if (xml->curr_node->quote == 0) xml->curr_node->quote = ch; xml->len--; *xml->ptr++ = ch; } else if (ch == '<') { if (xml->len < MIN_LEN) return data; xml->curr_node->nlt++; xml->len--; *xml->ptr++ = ch; } else if (ch != '>') { if (xml->len < MIN_LEN) return data; xml->len--; *xml->ptr++ = ch; } else if (xml->curr_node->nlt == 0) { char *last; if (xml->len < MIN_LEN) return data; data++; xml->len--; xml->curr_node->text_size = xml->ptr - xml->curr_node->text; *xml->ptr++ = 0; xml->curr_node->status = ACL_XML2_S_MEND; if ((xml->curr_node->flag & ACL_XML2_F_META_QM) == 0) break; last = xml->ptr - 1; while (last > xml->curr_node->text) { if (*last == '?') { *last = 0; xml->curr_node->text_size = last - xml->curr_node->text; break; } last--; } if (last == xml->curr_node->text) break; xml_meta_attr(xml->curr_node); break; } else { if (xml->len < MIN_LEN) return data; xml->curr_node->nlt--; xml->len--; *xml->ptr++ = ch; } data++; } if (xml->curr_node->status == ACL_XML2_S_MEND && (xml->flag & ACL_XML2_FLAG_XML_DECODE) && xml->curr_node->text_size > 0 && xml->len > 0) { const char *txt = xml->curr_node->text; xml->curr_node->text = xml->ptr; (void) acl_xml_decode2(txt, &xml->ptr, &xml->len); xml->curr_node->text_size = xml->ptr - xml->curr_node->text - 1; } return data; }
static const char *xml_parse_meta_text(ACL_XML2 *xml, const char *data) { int ch; if (xml->curr_node->text == xml->dummy) SKIP_SPACE(data); if (*data == 0) return data; if (xml->curr_node->text == xml->dummy) xml->curr_node->text = END(xml); while ((ch = *data) != 0) { if (xml->curr_node->quote) { if (NO_SPACE(xml)) return data; if (ch == xml->curr_node->quote) xml->curr_node->quote = 0; ADD(xml, ch); } else if (IS_QUOTE(ch)) { if (NO_SPACE(xml)) return data; if (xml->curr_node->quote == 0) xml->curr_node->quote = ch; ADD(xml, ch); } else if (ch == '<') { if (NO_SPACE(xml)) return data; xml->curr_node->nlt++; ADD(xml, ch); } else if (ch != '>') { if (NO_SPACE(xml)) return data; ADD(xml, ch); } else if (xml->curr_node->nlt == 0) { char *last; if (NO_SPACE(xml)) return data; xml->curr_node->text_size = END(xml) - xml->curr_node->text; xml->curr_node->status = ACL_XML2_S_MEND; ADD(xml, '\0'); data++; if ((xml->curr_node->flag & ACL_XML2_F_META_QM) == 0) break; last = END(xml) - 1; while (last > xml->curr_node->text) { if (*last == '?') { *last = 0; xml->curr_node->text_size = last - xml->curr_node->text; break; } last--; } if (last == xml->curr_node->text) break; xml_meta_attr(xml->curr_node); break; } else { if (NO_SPACE(xml)) return data; xml->curr_node->nlt--; ADD(xml, ch); } data++; } if (xml->curr_node->status == ACL_XML2_S_MEND && (xml->flag & ACL_XML2_FLAG_XML_DECODE) && xml->curr_node->text_size > 0 && !NO_SPACE(xml)) { const char *txt = xml->curr_node->text; xml->curr_node->text = END(xml); (void) acl_xml_decode(txt, xml->vbuf); xml->curr_node->text_size = END(xml) - xml->curr_node->text; ADD(xml, '\0'); /* skip one byte */ } return data; }