mirror of
				https://gitlab.gnome.org/GNOME/libxml2.git
				synced 2025-10-26 00:37:43 +03:00 
			
		
		
		
	parser: Consolidate scanning of XML Names
Use new productions by default. Fixes #194. Fixes #364. See #707.
This commit is contained in:
		
							
								
								
									
										37
									
								
								pattern.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								pattern.c
									
									
									
									
									
								
							| @@ -35,6 +35,7 @@ | ||||
| #include <libxml/parserInternals.h> | ||||
|  | ||||
| #include "private/memory.h" | ||||
| #include "private/parser.h" | ||||
|  | ||||
| #ifdef LIBXML_PATTERN_ENABLED | ||||
|  | ||||
| @@ -686,23 +687,13 @@ static xmlChar * | ||||
| xmlPatScanName(xmlPatParserContextPtr ctxt) { | ||||
|     const xmlChar *q, *cur; | ||||
|     xmlChar *ret = NULL; | ||||
|     int val, len; | ||||
|  | ||||
|     SKIP_BLANKS; | ||||
|  | ||||
|     cur = q = CUR_PTR; | ||||
|     val = xmlStringCurrentChar(NULL, cur, &len); | ||||
|     if (!IS_LETTER(val) && (val != '_') && (val != ':')) | ||||
| 	return(NULL); | ||||
|  | ||||
|     while ((IS_LETTER(val)) || (IS_DIGIT(val)) || | ||||
|            (val == '.') || (val == '-') || | ||||
| 	   (val == '_') || | ||||
| 	   (IS_COMBINING(val)) || | ||||
| 	   (IS_EXTENDER(val))) { | ||||
| 	cur += len; | ||||
| 	val = xmlStringCurrentChar(NULL, cur, &len); | ||||
|     } | ||||
|     q = CUR_PTR; | ||||
|     cur = xmlScanName(q, XML_MAX_NAME_LENGTH, 0); | ||||
|     if ((cur == NULL) || (cur == q)) | ||||
|         return(NULL); | ||||
|     if (ctxt->dict) | ||||
| 	ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q); | ||||
|     else | ||||
| @@ -722,23 +713,13 @@ static xmlChar * | ||||
| xmlPatScanNCName(xmlPatParserContextPtr ctxt) { | ||||
|     const xmlChar *q, *cur; | ||||
|     xmlChar *ret = NULL; | ||||
|     int val, len; | ||||
|  | ||||
|     SKIP_BLANKS; | ||||
|  | ||||
|     cur = q = CUR_PTR; | ||||
|     val = xmlStringCurrentChar(NULL, cur, &len); | ||||
|     if (!IS_LETTER(val) && (val != '_')) | ||||
| 	return(NULL); | ||||
|  | ||||
|     while ((IS_LETTER(val)) || (IS_DIGIT(val)) || | ||||
|            (val == '.') || (val == '-') || | ||||
| 	   (val == '_') || | ||||
| 	   (IS_COMBINING(val)) || | ||||
| 	   (IS_EXTENDER(val))) { | ||||
| 	cur += len; | ||||
| 	val = xmlStringCurrentChar(NULL, cur, &len); | ||||
|     } | ||||
|     q = CUR_PTR; | ||||
|     cur = xmlScanName(q, XML_MAX_NAME_LENGTH, XML_SCAN_NC); | ||||
|     if ((cur == NULL) || (cur == q)) | ||||
|         return(NULL); | ||||
|     if (ctxt->dict) | ||||
| 	ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q); | ||||
|     else | ||||
|   | ||||
		Reference in New Issue
	
	Block a user