| 3382 | */ |
| 3383 | |
| 3384 | static int |
| 3385 | xmlValidateNamesValueInternal(xmlDocPtr doc, const xmlChar *value) { |
| 3386 | const xmlChar *cur; |
| 3387 | int val, len; |
| 3388 | |
| 3389 | if (value == NULL) return(0); |
| 3390 | cur = value; |
| 3391 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3392 | cur += len; |
| 3393 | |
| 3394 | if (!xmlIsDocNameStartChar(doc, val)) |
| 3395 | return(0); |
| 3396 | |
| 3397 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3398 | cur += len; |
| 3399 | while (xmlIsDocNameChar(doc, val)) { |
| 3400 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3401 | cur += len; |
| 3402 | } |
| 3403 | |
| 3404 | /* Should not test IS_BLANK(val) here -- see erratum E20*/ |
| 3405 | while (val == 0x20) { |
| 3406 | while (val == 0x20) { |
| 3407 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3408 | cur += len; |
| 3409 | } |
| 3410 | |
| 3411 | if (!xmlIsDocNameStartChar(doc, val)) |
| 3412 | return(0); |
| 3413 | |
| 3414 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3415 | cur += len; |
| 3416 | |
| 3417 | while (xmlIsDocNameChar(doc, val)) { |
| 3418 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 3419 | cur += len; |
| 3420 | } |
| 3421 | } |
| 3422 | |
| 3423 | if (val != 0) return(0); |
| 3424 | |
| 3425 | return(1); |
| 3426 | } |
| 3427 | |
| 3428 | /** |
| 3429 | * xmlValidateNamesValue: |
no test coverage detected