* htmlParseCharRef: * @ctxt: an HTML parser context * * DEPRECATED: Internal function, don't use. * * parse Reference declarations * * [66] CharRef ::= '&#' [0-9]+ ';' | * '&#x' [0-9a-fA-F]+ ';' * * Returns the value parsed (as an int) */
| 3477 | * Returns the value parsed (as an int) |
| 3478 | */ |
| 3479 | int |
| 3480 | htmlParseCharRef(htmlParserCtxtPtr ctxt) { |
| 3481 | int val = 0; |
| 3482 | |
| 3483 | if ((ctxt == NULL) || (ctxt->input == NULL)) |
| 3484 | return(0); |
| 3485 | if ((CUR == '&') && (NXT(1) == '#') && |
| 3486 | ((NXT(2) == 'x') || NXT(2) == 'X')) { |
| 3487 | SKIP(3); |
| 3488 | while (CUR != ';') { |
| 3489 | if ((CUR >= '0') && (CUR <= '9')) { |
| 3490 | if (val < 0x110000) |
| 3491 | val = val * 16 + (CUR - '0'); |
| 3492 | } else if ((CUR >= 'a') && (CUR <= 'f')) { |
| 3493 | if (val < 0x110000) |
| 3494 | val = val * 16 + (CUR - 'a') + 10; |
| 3495 | } else if ((CUR >= 'A') && (CUR <= 'F')) { |
| 3496 | if (val < 0x110000) |
| 3497 | val = val * 16 + (CUR - 'A') + 10; |
| 3498 | } else { |
| 3499 | htmlParseErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, |
| 3500 | "htmlParseCharRef: missing semicolon\n", |
| 3501 | NULL, NULL); |
| 3502 | break; |
| 3503 | } |
| 3504 | NEXT; |
| 3505 | } |
| 3506 | if (CUR == ';') |
| 3507 | NEXT; |
| 3508 | } else if ((CUR == '&') && (NXT(1) == '#')) { |
| 3509 | SKIP(2); |
| 3510 | while (CUR != ';') { |
| 3511 | if ((CUR >= '0') && (CUR <= '9')) { |
| 3512 | if (val < 0x110000) |
| 3513 | val = val * 10 + (CUR - '0'); |
| 3514 | } else { |
| 3515 | htmlParseErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, |
| 3516 | "htmlParseCharRef: missing semicolon\n", |
| 3517 | NULL, NULL); |
| 3518 | break; |
| 3519 | } |
| 3520 | NEXT; |
| 3521 | } |
| 3522 | if (CUR == ';') |
| 3523 | NEXT; |
| 3524 | } else { |
| 3525 | htmlParseErr(ctxt, XML_ERR_INVALID_CHARREF, |
| 3526 | "htmlParseCharRef: invalid value\n", NULL, NULL); |
| 3527 | } |
| 3528 | /* |
| 3529 | * Check the value IS_CHAR ... |
| 3530 | */ |
| 3531 | if (IS_CHAR(val)) { |
| 3532 | return(val); |
| 3533 | } else if (val >= 0x110000) { |
| 3534 | htmlParseErr(ctxt, XML_ERR_INVALID_CHAR, |
| 3535 | "htmlParseCharRef: value too large\n", NULL, NULL); |
| 3536 | } else { |
no outgoing calls
no test coverage detected