From 307b30e64529f299e94cf4cf61a0dab94223208e Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Tue, 6 Jan 2009 21:15:06 +0000 Subject: Port to modified parserutils API. svn path=/trunk/libcss/; revision=5973 --- src/lex/lex.c | 464 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 242 insertions(+), 222 deletions(-) (limited to 'src/lex/lex.c') diff --git a/src/lex/lex.c b/src/lex/lex.c index 86e669e..3ee01a7 100644 --- a/src/lex/lex.c +++ b/src/lex/lex.c @@ -375,12 +375,13 @@ css_error emitToken(css_lexer *lexer, css_token_type type, t->data.data = lexer->unescapedTokenData->data; } else { size_t clen; - uintptr_t data = parserutils_inputstream_peek( - lexer->input, 0, &clen); + const uint8_t *data; + parserutils_error error; - assert(type == CSS_TOKEN_EOF || - (data != PARSERUTILS_INPUTSTREAM_EOF && - data != PARSERUTILS_INPUTSTREAM_OOD)); + error = parserutils_inputstream_peek(lexer->input, 0, + &data, &clen); + + assert(type == CSS_TOKEN_EOF || error == PARSERUTILS_OK); t->data.data = (type == CSS_TOKEN_EOF) ? NULL : (uint8_t *) data; } @@ -487,10 +488,11 @@ css_error emitToken(css_lexer *lexer, css_token_type type, css_error AtKeyword(css_lexer *lexer, css_token **token) { - uintptr_t cptr; + const uint8_t *cptr; uint8_t c; size_t clen; css_error error; + parserutils_error perror; enum { Initial = 0, Escape = 1, NMChar = 2 }; /* ATKEYWORD = '@' ident @@ -500,15 +502,15 @@ css_error AtKeyword(css_lexer *lexer, css_token **token) switch (lexer->substate) { case Initial: - cptr = parserutils_inputstream_peek(lexer->input, - lexer->bytesReadForToken, &clen); - if (cptr == PARSERUTILS_INPUTSTREAM_OOD) - return CSS_NEEDDATA; + perror = parserutils_inputstream_peek(lexer->input, + lexer->bytesReadForToken, &cptr, &clen); + if (perror != PARSERUTILS_OK && perror != PARSERUTILS_EOF) + return css_error_from_parserutils_error(perror); - if (cptr == PARSERUTILS_INPUTSTREAM_EOF) + if (perror == PARSERUTILS_EOF) return emitToken(lexer, CSS_TOKEN_CHAR, token); - c = *((uint8_t *) cptr); + c = *cptr; if (!startNMStart(c)) return emitToken(lexer, CSS_TOKEN_CHAR, token); @@ -553,10 +555,11 @@ css_error AtKeyword(css_lexer *lexer, css_token **token) css_error CDCOrIdentOrFunctionOrNPD(css_lexer *lexer, css_token **token) { css_token *t = &lexer->token; - uintptr_t cptr; + const uint8_t *cptr; uint8_t c; size_t clen; css_error error; + parserutils_error perror; enum { Initial = 0, Escape = 1, Gt = 2 }; /* CDC = "-->" @@ -574,17 +577,17 @@ css_error CDCOrIdentOrFunctionOrNPD(css_lexer *lexer, css_token **token) switch (lexer->substate) { case Initial: - cptr = parserutils_inputstream_peek(lexer->input, - lexer->bytesReadForToken, &clen); - if (cptr == PARSERUTILS_INPUTSTREAM_OOD) - return CSS_NEEDDATA; + perror = parserutils_inputstream_peek(lexer->input, + lexer->bytesReadForToken, &cptr, &clen); + if (perror != PARSERUTILS_OK && perror != PARSERUTILS_EOF) + return css_error_from_parserutils_error(perror); - if (cptr == PARSERUTILS_INPUTSTREAM_EOF) { + if (perror == PARSERUTILS_EOF) { /* We can only match char with what we've read so far */ return emitToken(lexer, CSS_TOKEN_CHAR, token); } - c = *((uint8_t *) cptr); + c = *cptr; if (isDigit(c) || c == '.') { /* NPD */ @@ -622,12 +625,12 @@ css_error CDCOrIdentOrFunctionOrNPD(css_lexer *lexer, css_token **token) lexer->substate = Gt; /* Ok, so we're dealing with CDC. Expect a '>' */ - cptr = parserutils_inputstream_peek(lexer->input, - lexer->bytesReadForToken, &clen); - if (cptr == PARSERUTILS_INPUTSTREAM_OOD) - return CSS_NEEDDATA; + perror = parserutils_inputstream_peek(lexer->input, + lexer->bytesReadForToken, &cptr, &clen); + if (perror != PARSERUTILS_OK && perror != PARSERUTILS_EOF) + return css_error_from_parserutils_error(perror); - if (cptr == PARSERUTILS_INPUTSTREAM_EOF) { + if (perror == PARSERUTILS_EOF) { /* CHAR is the only match here */ /* Remove the '-' we read above */ lexer->bytesReadForToken -= 1; @@ -635,7 +638,7 @@ css_error CDCOrIdentOrFunctionOrNPD(css_lexer *lexer, css_token **token) return emitToken(lexer, CSS_TOKEN_CHAR, token); } - c = *((uint8_t *) cptr); + c = *cptr; if (c == '>') { APPEND(lexer, cptr, clen); @@ -675,9 +678,10 @@ css_error CDCOrIdentOrFunctionOrNPD(css_lexer *lexer, css_token **token) css_error CDO(css_lexer *lexer, css_token **token) { css_token *t = &lexer->token; - uintptr_t cptr; + const uint8_t *cptr; uint8_t c; size_t clen; + parserutils_error perror; enum { Initial = 0, Dash1 = 1, Dash2 = 2 }; /* CDO = "