| 795 | */ |
| 796 | |
| 797 | static xmlChar * |
| 798 | xmlPatScanName(xmlPatParserContextPtr ctxt) { |
| 799 | const xmlChar *q, *cur; |
| 800 | xmlChar *ret = NULL; |
| 801 | int val, len; |
| 802 | |
| 803 | SKIP_BLANKS; |
| 804 | |
| 805 | cur = q = CUR_PTR; |
| 806 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 807 | if (!IS_LETTER(val) && (val != '_') && (val != ':')) |
| 808 | return(NULL); |
| 809 | |
| 810 | while ((IS_LETTER(val)) || (IS_DIGIT(val)) || |
| 811 | (val == '.') || (val == '-') || |
| 812 | (val == '_') || |
| 813 | (IS_COMBINING(val)) || |
| 814 | (IS_EXTENDER(val))) { |
| 815 | cur += len; |
| 816 | val = xmlStringCurrentChar(NULL, cur, &len); |
| 817 | } |
| 818 | if (ctxt->dict) |
| 819 | ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q); |
| 820 | else |
| 821 | ret = xmlStrndup(q, cur - q); |
| 822 | CUR_PTR = cur; |
| 823 | return(ret); |
| 824 | } |
| 825 | |
| 826 | /** |
| 827 | * xmlPatScanNCName: |
no test coverage detected