1b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho******************************************************************************* 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Copyright (C) 2011, International Business Machines 4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Corporation and others. All Rights Reserved. 5b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho******************************************************************************* 6b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* file name: patternprops.cpp 7b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* encoding: US-ASCII 8b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* tab size: 8 (not used) 9b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* indentation:4 10b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* 11b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* created on: 2011mar13 12b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* created by: Markus W. Scherer 13b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*/ 14b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 15b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/utypes.h" 16b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "patternprops.h" 17b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_NAMESPACE_BEGIN 19b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 21b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * One byte per Latin-1 character. 22b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Bit 0 is set if either Pattern property is true, 23b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * bit 1 if Pattern_Syntax is true, 24b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * bit 2 if Pattern_White_Space is true. 25b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * That is, Pattern_Syntax is encoded as 3 and Pattern_White_Space as 5. 26b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 27b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const uint8_t latin1[256]={ 28b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // WS: 9..D 29b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 30b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // WS: 20 Syntax: 21..2F 32b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: 3A..40 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: 5B..5E 37b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: 60 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: 7B..7E 41b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // WS: 85 43b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: A1..A7, A9, AB, AC, AE 46b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3, 0, 3, 0, 47b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: B0, B1, B6, BB, BF 48b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 3, 49b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: D7 51b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 52b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Syntax: F7 54b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0 55b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 57b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 58b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * One byte per 32 characters from U+2000..U+303F indexing into 59b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * a small table of 32-bit data words. 60b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * The first two data words are all-zeros and all-ones. 61b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 62b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const uint8_t index2000[130]={ 63b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 2, 3, 4, 0, 0, 0, 0, 0, // 20xx 64b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 5, 1, 1, 1, // 21xx 65b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 22xx 66b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 23xx 67b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 0, 0, 0, 0, 0, // 24xx 68b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 25xx 69b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 26xx 70b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 6, 7, 1, 1, 1, // 27xx 71b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 28xx 72b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 29xx 73b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 2Axx 74b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 1, 1, 1, 1, // 2Bxx 75b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, // 2Cxx 76b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, // 2Dxx 77b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1, 1, 1, 1, 0, 0, 0, 0, // 2Exx 78b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 0, 0, 0, 0, 0, 0, 0, // 2Fxx 79b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 8, 9 // 3000..303F 80b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 81b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 82b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 83b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * One 32-bit integer per 32 characters. Ranges of all-false and all-true 84b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * are mapped to the first two values, other ranges map to appropriate bit patterns. 85b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const uint32_t syntax2000[]={ 87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffffffff, 89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffff0000, // 2: 2010..201F 90b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x7fff00ff, // 3: 2020..2027, 2030..203E 91b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x7feffffe, // 4: 2041..2053, 2055..205E 92b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffff0000, // 5: 2190..219F 93b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x003fffff, // 6: 2760..2775 94b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xfff00000, // 7: 2794..279F 95b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffffff0e, // 8: 3001..3003, 3008..301F 96b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x00010001 // 9: 3020, 3030 97b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 98b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 99b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/* 100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Same as syntax2000, but with additional bits set for the 101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Pattern_White_Space characters 200E 200F 2028 2029. 102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const uint32_t syntaxOrWhiteSpace2000[]={ 104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0, 105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffffffff, 106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffffc000, // 2: 200E..201F 107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x7fff03ff, // 3: 2020..2029, 2030..203E 108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x7feffffe, // 4: 2041..2053, 2055..205E 109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffff0000, // 5: 2190..219F 110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x003fffff, // 6: 2760..2775 111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xfff00000, // 7: 2794..279F 112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0xffffff0e, // 8: 3001..3003, 3008..301F 113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 0x00010001 // 9: 3020, 3030 114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::isSyntax(UChar32 c) { 118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(c<0) { 119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<=0xff) { 121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return (UBool)(latin1[c]>>1)&1; 122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<0x2010) { 123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 124b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<=0x3030) { 125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t bits=syntax2000[index2000[(c-0x2000)>>5]]; 126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return (UBool)((bits>>(c&0x1f))&1); 127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(0xfd3e<=c && c<=0xfe46) { 128b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return c<=0xfd3f || 0xfe45<=c; 129b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 130b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 131b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 132b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 133b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 134b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 135b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::isSyntaxOrWhiteSpace(UChar32 c) { 136b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(c<0) { 137b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 138b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<=0xff) { 139b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return (UBool)(latin1[c]&1); 140b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<0x200e) { 141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 142b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<=0x3030) { 143b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t bits=syntaxOrWhiteSpace2000[index2000[(c-0x2000)>>5]]; 144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return (UBool)((bits>>(c&0x1f))&1); 145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(0xfd3e<=c && c<=0xfe46) { 146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return c<=0xfd3f || 0xfe45<=c; 147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 151b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 152b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 153b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::isWhiteSpace(UChar32 c) { 154b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(c<0) { 155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(c<=0xff) { 157b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return (UBool)(latin1[c]>>2)&1; 158b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else if(0x200e<=c && c<=0x2029) { 159b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return c<=0x200f || 0x2028<=c; 160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 161b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 163b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 164b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoconst UChar * 166b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::skipWhiteSpace(const UChar *s, int32_t length) { 167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while(length>0 && isWhiteSpace(*s)) { 168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ++s; 169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho --length; 170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 171b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return s; 172b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 173b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 174b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoconst UChar * 175b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::trimWhiteSpace(const UChar *s, int32_t &length) { 176b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(length<=0 || (!isWhiteSpace(s[0]) && !isWhiteSpace(s[length-1]))) { 177b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return s; 178b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 179b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t start=0; 180b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t limit=length; 181b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while(start<limit && isWhiteSpace(s[start])) { 182b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ++start; 183b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 184b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(start<limit) { 185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // There is non-white space at start; we will not move limit below that, 186b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // so we need not test start<limit in the loop. 187b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while(isWhiteSpace(s[limit-1])) { 188b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho --limit; 189b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 190b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 191b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho length=limit-start; 192b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return s+start; 193b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 195b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoUBool 196b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::isIdentifier(const UChar *s, int32_t length) { 197b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(length<=0) { 198b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 199b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 200b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar *limit=s+length; 201b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho do { 202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(isSyntaxOrWhiteSpace(*s++)) { 203b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 204b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 205b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } while(s<limit); 206b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return TRUE; 207b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 208b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 209b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoconst UChar * 210b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoPatternProps::skipIdentifier(const UChar *s, int32_t length) { 211b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while(length>0 && !isSyntaxOrWhiteSpace(*s)) { 212b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ++s; 213b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho --length; 214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return s; 216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 217b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 218b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoU_NAMESPACE_END 219