bool ParseMarkupSimple(const char *s, MarkupParserCallback *cb) { ParserState *state = new ParserState(s, cb); bool ok = ParseSimple(state); delete state; return ok; }
LDAPExpr LDAPExpr::ParseExpr( ParseState& ps ) { ps.skipWhite(); if (!ps.prefix("(")) ps.error(MALFORMED); int op; ps.skipWhite(); Byte c = ps.peek(); if ( c == '&') { op = AND; } else if ( c == '|' ) { op = OR; } else if ( c == '!' ) { op = NOT; } else { return ParseSimple(ps); } ps.skip(1); // Ignore the d->m_operator std::vector<LDAPExpr> v; do { v.push_back(ParseExpr(ps)); ps.skipWhite(); } while (ps.peek() == '('); std::size_t n = v.size(); if (!ps.prefix(")") || n == 0 || (op == NOT && n > 1)) ps.error(MALFORMED); return LDAPExpr(op, v); }