summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorRitt Konstantin <ritt.ks@gmail.com>2011-07-15 06:00:05 +0400
committerQt by Nokia <qt-info@nokia.com>2011-08-26 14:15:05 +0200
commit580bd22dc6162f3da2b829093cb14e898f2f628f (patch)
tree90b84fbe132e8f3e5b5a34745d697f56b684528f /src/corelib
parent24667a905d17bb1c11b0673bba4284edf733c03a (diff)
optimize parsing of templates like p{IsArabic}, etc
use qBinaryFind() with a case-sensitive string comparison instead of QHash. This also improves startup time and reduces runtime memory consumption. Change-Id: I5c5f7cae5e42acb3fa727acac19fe39c53310329 Reviewed-on: http://codereview.qt.nokia.com/3673 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/tools/qregexp.cpp321
1 files changed, 160 insertions, 161 deletions
diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp
index 5932fb8aa8..5e2e56ea34 100644
--- a/src/corelib/tools/qregexp.cpp
+++ b/src/corelib/tools/qregexp.cpp
@@ -1252,10 +1252,6 @@ private:
friend class Box;
-#ifndef QT_NO_REGEXP_CCLASS
- void setupCategoriesRangeMap();
-#endif
-
/*
This is the lexical analyzer for regular expressions.
*/
@@ -1295,9 +1291,6 @@ private:
int yyTok; // the last token read
bool yyMayCapture; // set this to false to disable capturing
-#ifndef QT_NO_REGEXP_CCLASS
- QHash<QByteArray, QPair<int, int> > categoriesRangeMap; // fast lookup hash for xml schema extensions
-#endif
friend struct QRegExpMatchState;
};
@@ -2740,152 +2733,161 @@ void QRegExpEngine::Box::addAnchorsToEngine(const Box &to) const
}
#ifndef QT_NO_REGEXP_CCLASS
-void QRegExpEngine::setupCategoriesRangeMap()
-{
- categoriesRangeMap.insert("IsBasicLatin", qMakePair(0x0000, 0x007F));
- categoriesRangeMap.insert("IsLatin-1Supplement", qMakePair(0x0080, 0x00FF));
- categoriesRangeMap.insert("IsLatinExtended-A", qMakePair(0x0100, 0x017F));
- categoriesRangeMap.insert("IsLatinExtended-B", qMakePair(0x0180, 0x024F));
- categoriesRangeMap.insert("IsIPAExtensions", qMakePair(0x0250, 0x02AF));
- categoriesRangeMap.insert("IsSpacingModifierLetters", qMakePair(0x02B0, 0x02FF));
- categoriesRangeMap.insert("IsCombiningDiacriticalMarks", qMakePair(0x0300, 0x036F));
- categoriesRangeMap.insert("IsGreek", qMakePair(0x0370, 0x03FF));
- categoriesRangeMap.insert("IsCyrillic", qMakePair(0x0400, 0x04FF));
- categoriesRangeMap.insert("IsCyrillicSupplement", qMakePair(0x0500, 0x052F));
- categoriesRangeMap.insert("IsArmenian", qMakePair(0x0530, 0x058F));
- categoriesRangeMap.insert("IsHebrew", qMakePair(0x0590, 0x05FF));
- categoriesRangeMap.insert("IsArabic", qMakePair(0x0600, 0x06FF));
- categoriesRangeMap.insert("IsSyriac", qMakePair(0x0700, 0x074F));
- categoriesRangeMap.insert("IsArabicSupplement", qMakePair(0x0750, 0x077F));
- categoriesRangeMap.insert("IsThaana", qMakePair(0x0780, 0x07BF));
- categoriesRangeMap.insert("IsDevanagari", qMakePair(0x0900, 0x097F));
- categoriesRangeMap.insert("IsBengali", qMakePair(0x0980, 0x09FF));
- categoriesRangeMap.insert("IsGurmukhi", qMakePair(0x0A00, 0x0A7F));
- categoriesRangeMap.insert("IsGujarati", qMakePair(0x0A80, 0x0AFF));
- categoriesRangeMap.insert("IsOriya", qMakePair(0x0B00, 0x0B7F));
- categoriesRangeMap.insert("IsTamil", qMakePair(0x0B80, 0x0BFF));
- categoriesRangeMap.insert("IsTelugu", qMakePair(0x0C00, 0x0C7F));
- categoriesRangeMap.insert("IsKannada", qMakePair(0x0C80, 0x0CFF));
- categoriesRangeMap.insert("IsMalayalam", qMakePair(0x0D00, 0x0D7F));
- categoriesRangeMap.insert("IsSinhala", qMakePair(0x0D80, 0x0DFF));
- categoriesRangeMap.insert("IsThai", qMakePair(0x0E00, 0x0E7F));
- categoriesRangeMap.insert("IsLao", qMakePair(0x0E80, 0x0EFF));
- categoriesRangeMap.insert("IsTibetan", qMakePair(0x0F00, 0x0FFF));
- categoriesRangeMap.insert("IsMyanmar", qMakePair(0x1000, 0x109F));
- categoriesRangeMap.insert("IsGeorgian", qMakePair(0x10A0, 0x10FF));
- categoriesRangeMap.insert("IsHangulJamo", qMakePair(0x1100, 0x11FF));
- categoriesRangeMap.insert("IsEthiopic", qMakePair(0x1200, 0x137F));
- categoriesRangeMap.insert("IsEthiopicSupplement", qMakePair(0x1380, 0x139F));
- categoriesRangeMap.insert("IsCherokee", qMakePair(0x13A0, 0x13FF));
- categoriesRangeMap.insert("IsUnifiedCanadianAboriginalSyllabics", qMakePair(0x1400, 0x167F));
- categoriesRangeMap.insert("IsOgham", qMakePair(0x1680, 0x169F));
- categoriesRangeMap.insert("IsRunic", qMakePair(0x16A0, 0x16FF));
- categoriesRangeMap.insert("IsTagalog", qMakePair(0x1700, 0x171F));
- categoriesRangeMap.insert("IsHanunoo", qMakePair(0x1720, 0x173F));
- categoriesRangeMap.insert("IsBuhid", qMakePair(0x1740, 0x175F));
- categoriesRangeMap.insert("IsTagbanwa", qMakePair(0x1760, 0x177F));
- categoriesRangeMap.insert("IsKhmer", qMakePair(0x1780, 0x17FF));
- categoriesRangeMap.insert("IsMongolian", qMakePair(0x1800, 0x18AF));
- categoriesRangeMap.insert("IsLimbu", qMakePair(0x1900, 0x194F));
- categoriesRangeMap.insert("IsTaiLe", qMakePair(0x1950, 0x197F));
- categoriesRangeMap.insert("IsNewTaiLue", qMakePair(0x1980, 0x19DF));
- categoriesRangeMap.insert("IsKhmerSymbols", qMakePair(0x19E0, 0x19FF));
- categoriesRangeMap.insert("IsBuginese", qMakePair(0x1A00, 0x1A1F));
- categoriesRangeMap.insert("IsPhoneticExtensions", qMakePair(0x1D00, 0x1D7F));
- categoriesRangeMap.insert("IsPhoneticExtensionsSupplement", qMakePair(0x1D80, 0x1DBF));
- categoriesRangeMap.insert("IsCombiningDiacriticalMarksSupplement", qMakePair(0x1DC0, 0x1DFF));
- categoriesRangeMap.insert("IsLatinExtendedAdditional", qMakePair(0x1E00, 0x1EFF));
- categoriesRangeMap.insert("IsGreekExtended", qMakePair(0x1F00, 0x1FFF));
- categoriesRangeMap.insert("IsGeneralPunctuation", qMakePair(0x2000, 0x206F));
- categoriesRangeMap.insert("IsSuperscriptsandSubscripts", qMakePair(0x2070, 0x209F));
- categoriesRangeMap.insert("IsCurrencySymbols", qMakePair(0x20A0, 0x20CF));
- categoriesRangeMap.insert("IsCombiningMarksforSymbols", qMakePair(0x20D0, 0x20FF));
- categoriesRangeMap.insert("IsLetterlikeSymbols", qMakePair(0x2100, 0x214F));
- categoriesRangeMap.insert("IsNumberForms", qMakePair(0x2150, 0x218F));
- categoriesRangeMap.insert("IsArrows", qMakePair(0x2190, 0x21FF));
- categoriesRangeMap.insert("IsMathematicalOperators", qMakePair(0x2200, 0x22FF));
- categoriesRangeMap.insert("IsMiscellaneousTechnical", qMakePair(0x2300, 0x23FF));
- categoriesRangeMap.insert("IsControlPictures", qMakePair(0x2400, 0x243F));
- categoriesRangeMap.insert("IsOpticalCharacterRecognition", qMakePair(0x2440, 0x245F));
- categoriesRangeMap.insert("IsEnclosedAlphanumerics", qMakePair(0x2460, 0x24FF));
- categoriesRangeMap.insert("IsBoxDrawing", qMakePair(0x2500, 0x257F));
- categoriesRangeMap.insert("IsBlockElements", qMakePair(0x2580, 0x259F));
- categoriesRangeMap.insert("IsGeometricShapes", qMakePair(0x25A0, 0x25FF));
- categoriesRangeMap.insert("IsMiscellaneousSymbols", qMakePair(0x2600, 0x26FF));
- categoriesRangeMap.insert("IsDingbats", qMakePair(0x2700, 0x27BF));
- categoriesRangeMap.insert("IsMiscellaneousMathematicalSymbols-A", qMakePair(0x27C0, 0x27EF));
- categoriesRangeMap.insert("IsSupplementalArrows-A", qMakePair(0x27F0, 0x27FF));
- categoriesRangeMap.insert("IsBraillePatterns", qMakePair(0x2800, 0x28FF));
- categoriesRangeMap.insert("IsSupplementalArrows-B", qMakePair(0x2900, 0x297F));
- categoriesRangeMap.insert("IsMiscellaneousMathematicalSymbols-B", qMakePair(0x2980, 0x29FF));
- categoriesRangeMap.insert("IsSupplementalMathematicalOperators", qMakePair(0x2A00, 0x2AFF));
- categoriesRangeMap.insert("IsMiscellaneousSymbolsandArrows", qMakePair(0x2B00, 0x2BFF));
- categoriesRangeMap.insert("IsGlagolitic", qMakePair(0x2C00, 0x2C5F));
- categoriesRangeMap.insert("IsCoptic", qMakePair(0x2C80, 0x2CFF));
- categoriesRangeMap.insert("IsGeorgianSupplement", qMakePair(0x2D00, 0x2D2F));
- categoriesRangeMap.insert("IsTifinagh", qMakePair(0x2D30, 0x2D7F));
- categoriesRangeMap.insert("IsEthiopicExtended", qMakePair(0x2D80, 0x2DDF));
- categoriesRangeMap.insert("IsSupplementalPunctuation", qMakePair(0x2E00, 0x2E7F));
- categoriesRangeMap.insert("IsCJKRadicalsSupplement", qMakePair(0x2E80, 0x2EFF));
- categoriesRangeMap.insert("IsKangxiRadicals", qMakePair(0x2F00, 0x2FDF));
- categoriesRangeMap.insert("IsIdeographicDescriptionCharacters", qMakePair(0x2FF0, 0x2FFF));
- categoriesRangeMap.insert("IsCJKSymbolsandPunctuation", qMakePair(0x3000, 0x303F));
- categoriesRangeMap.insert("IsHiragana", qMakePair(0x3040, 0x309F));
- categoriesRangeMap.insert("IsKatakana", qMakePair(0x30A0, 0x30FF));
- categoriesRangeMap.insert("IsBopomofo", qMakePair(0x3100, 0x312F));
- categoriesRangeMap.insert("IsHangulCompatibilityJamo", qMakePair(0x3130, 0x318F));
- categoriesRangeMap.insert("IsKanbun", qMakePair(0x3190, 0x319F));
- categoriesRangeMap.insert("IsBopomofoExtended", qMakePair(0x31A0, 0x31BF));
- categoriesRangeMap.insert("IsCJKStrokes", qMakePair(0x31C0, 0x31EF));
- categoriesRangeMap.insert("IsKatakanaPhoneticExtensions", qMakePair(0x31F0, 0x31FF));
- categoriesRangeMap.insert("IsEnclosedCJKLettersandMonths", qMakePair(0x3200, 0x32FF));
- categoriesRangeMap.insert("IsCJKCompatibility", qMakePair(0x3300, 0x33FF));
- categoriesRangeMap.insert("IsCJKUnifiedIdeographsExtensionA", qMakePair(0x3400, 0x4DB5));
- categoriesRangeMap.insert("IsYijingHexagramSymbols", qMakePair(0x4DC0, 0x4DFF));
- categoriesRangeMap.insert("IsCJKUnifiedIdeographs", qMakePair(0x4E00, 0x9FFF));
- categoriesRangeMap.insert("IsYiSyllables", qMakePair(0xA000, 0xA48F));
- categoriesRangeMap.insert("IsYiRadicals", qMakePair(0xA490, 0xA4CF));
- categoriesRangeMap.insert("IsModifierToneLetters", qMakePair(0xA700, 0xA71F));
- categoriesRangeMap.insert("IsSylotiNagri", qMakePair(0xA800, 0xA82F));
- categoriesRangeMap.insert("IsHangulSyllables", qMakePair(0xAC00, 0xD7A3));
- categoriesRangeMap.insert("IsPrivateUse", qMakePair(0xE000, 0xF8FF));
- categoriesRangeMap.insert("IsCJKCompatibilityIdeographs", qMakePair(0xF900, 0xFAFF));
- categoriesRangeMap.insert("IsAlphabeticPresentationForms", qMakePair(0xFB00, 0xFB4F));
- categoriesRangeMap.insert("IsArabicPresentationForms-A", qMakePair(0xFB50, 0xFDFF));
- categoriesRangeMap.insert("IsVariationSelectors", qMakePair(0xFE00, 0xFE0F));
- categoriesRangeMap.insert("IsVerticalForms", qMakePair(0xFE10, 0xFE1F));
- categoriesRangeMap.insert("IsCombiningHalfMarks", qMakePair(0xFE20, 0xFE2F));
- categoriesRangeMap.insert("IsCJKCompatibilityForms", qMakePair(0xFE30, 0xFE4F));
- categoriesRangeMap.insert("IsSmallFormVariants", qMakePair(0xFE50, 0xFE6F));
- categoriesRangeMap.insert("IsArabicPresentationForms-B", qMakePair(0xFE70, 0xFEFF));
- categoriesRangeMap.insert("IsHalfwidthandFullwidthForms", qMakePair(0xFF00, 0xFFEF));
- categoriesRangeMap.insert("IsSpecials", qMakePair(0xFFF0, 0xFFFF));
- categoriesRangeMap.insert("IsLinearBSyllabary", qMakePair(0x10000, 0x1007F));
- categoriesRangeMap.insert("IsLinearBIdeograms", qMakePair(0x10080, 0x100FF));
- categoriesRangeMap.insert("IsAegeanNumbers", qMakePair(0x10100, 0x1013F));
- categoriesRangeMap.insert("IsAncientGreekNumbers", qMakePair(0x10140, 0x1018F));
- categoriesRangeMap.insert("IsOldItalic", qMakePair(0x10300, 0x1032F));
- categoriesRangeMap.insert("IsGothic", qMakePair(0x10330, 0x1034F));
- categoriesRangeMap.insert("IsUgaritic", qMakePair(0x10380, 0x1039F));
- categoriesRangeMap.insert("IsOldPersian", qMakePair(0x103A0, 0x103DF));
- categoriesRangeMap.insert("IsDeseret", qMakePair(0x10400, 0x1044F));
- categoriesRangeMap.insert("IsShavian", qMakePair(0x10450, 0x1047F));
- categoriesRangeMap.insert("IsOsmanya", qMakePair(0x10480, 0x104AF));
- categoriesRangeMap.insert("IsCypriotSyllabary", qMakePair(0x10800, 0x1083F));
- categoriesRangeMap.insert("IsKharoshthi", qMakePair(0x10A00, 0x10A5F));
- categoriesRangeMap.insert("IsByzantineMusicalSymbols", qMakePair(0x1D000, 0x1D0FF));
- categoriesRangeMap.insert("IsMusicalSymbols", qMakePair(0x1D100, 0x1D1FF));
- categoriesRangeMap.insert("IsAncientGreekMusicalNotation", qMakePair(0x1D200, 0x1D24F));
- categoriesRangeMap.insert("IsTaiXuanJingSymbols", qMakePair(0x1D300, 0x1D35F));
- categoriesRangeMap.insert("IsMathematicalAlphanumericSymbols", qMakePair(0x1D400, 0x1D7FF));
- categoriesRangeMap.insert("IsCJKUnifiedIdeographsExtensionB", qMakePair(0x20000, 0x2A6DF));
- categoriesRangeMap.insert("IsCJKCompatibilityIdeographsSupplement", qMakePair(0x2F800, 0x2FA1F));
- categoriesRangeMap.insert("IsTags", qMakePair(0xE0000, 0xE007F));
- categoriesRangeMap.insert("IsVariationSelectorsSupplement", qMakePair(0xE0100, 0xE01EF));
- categoriesRangeMap.insert("IsSupplementaryPrivateUseArea-A", qMakePair(0xF0000, 0xFFFFF));
- categoriesRangeMap.insert("IsSupplementaryPrivateUseArea-B", qMakePair(0x100000, 0x10FFFF));
-}
-#endif
+// fast lookup hash for xml schema extensions
+// sorted by name for b-search
+static const struct CategoriesRangeMapEntry {
+ const char name[40];
+ uint first, second;
+} categoriesRangeMap[] = {
+ { "AegeanNumbers", 0x10100, 0x1013F },
+ { "AlphabeticPresentationForms", 0xFB00, 0xFB4F },
+ { "AncientGreekMusicalNotation", 0x1D200, 0x1D24F },
+ { "AncientGreekNumbers", 0x10140, 0x1018F },
+ { "Arabic", 0x0600, 0x06FF },
+ { "ArabicPresentationForms-A", 0xFB50, 0xFDFF },
+ { "ArabicPresentationForms-B", 0xFE70, 0xFEFF },
+ { "ArabicSupplement", 0x0750, 0x077F },
+ { "Armenian", 0x0530, 0x058F },
+ { "Arrows", 0x2190, 0x21FF },
+ { "BasicLatin", 0x0000, 0x007F },
+ { "Bengali", 0x0980, 0x09FF },
+ { "BlockElements", 0x2580, 0x259F },
+ { "Bopomofo", 0x3100, 0x312F },
+ { "BopomofoExtended", 0x31A0, 0x31BF },
+ { "BoxDrawing", 0x2500, 0x257F },
+ { "BraillePatterns", 0x2800, 0x28FF },
+ { "Buginese", 0x1A00, 0x1A1F },
+ { "Buhid", 0x1740, 0x175F },
+ { "ByzantineMusicalSymbols", 0x1D000, 0x1D0FF },
+ { "CJKCompatibility", 0x3300, 0x33FF },
+ { "CJKCompatibilityForms", 0xFE30, 0xFE4F },
+ { "CJKCompatibilityIdeographs", 0xF900, 0xFAFF },
+ { "CJKCompatibilityIdeographsSupplement", 0x2F800, 0x2FA1F },
+ { "CJKRadicalsSupplement", 0x2E80, 0x2EFF },
+ { "CJKStrokes", 0x31C0, 0x31EF },
+ { "CJKSymbolsandPunctuation", 0x3000, 0x303F },
+ { "CJKUnifiedIdeographs", 0x4E00, 0x9FFF },
+ { "CJKUnifiedIdeographsExtensionA", 0x3400, 0x4DB5 },
+ { "CJKUnifiedIdeographsExtensionB", 0x20000, 0x2A6DF },
+ { "Cherokee", 0x13A0, 0x13FF },
+ { "CombiningDiacriticalMarks", 0x0300, 0x036F },
+ { "CombiningDiacriticalMarksSupplement", 0x1DC0, 0x1DFF },
+ { "CombiningHalfMarks", 0xFE20, 0xFE2F },
+ { "CombiningMarksforSymbols", 0x20D0, 0x20FF },
+ { "ControlPictures", 0x2400, 0x243F },
+ { "Coptic", 0x2C80, 0x2CFF },
+ { "CurrencySymbols", 0x20A0, 0x20CF },
+ { "CypriotSyllabary", 0x10800, 0x1083F },
+ { "Cyrillic", 0x0400, 0x04FF },
+ { "CyrillicSupplement", 0x0500, 0x052F },
+ { "Deseret", 0x10400, 0x1044F },
+ { "Devanagari", 0x0900, 0x097F },
+ { "Dingbats", 0x2700, 0x27BF },
+ { "EnclosedAlphanumerics", 0x2460, 0x24FF },
+ { "EnclosedCJKLettersandMonths", 0x3200, 0x32FF },
+ { "Ethiopic", 0x1200, 0x137F },
+ { "EthiopicExtended", 0x2D80, 0x2DDF },
+ { "EthiopicSupplement", 0x1380, 0x139F },
+ { "GeneralPunctuation", 0x2000, 0x206F },
+ { "GeometricShapes", 0x25A0, 0x25FF },
+ { "Georgian", 0x10A0, 0x10FF },
+ { "GeorgianSupplement", 0x2D00, 0x2D2F },
+ { "Glagolitic", 0x2C00, 0x2C5F },
+ { "Gothic", 0x10330, 0x1034F },
+ { "Greek", 0x0370, 0x03FF },
+ { "GreekExtended", 0x1F00, 0x1FFF },
+ { "Gujarati", 0x0A80, 0x0AFF },
+ { "Gurmukhi", 0x0A00, 0x0A7F },
+ { "HalfwidthandFullwidthForms", 0xFF00, 0xFFEF },
+ { "HangulCompatibilityJamo", 0x3130, 0x318F },
+ { "HangulJamo", 0x1100, 0x11FF },
+ { "HangulSyllables", 0xAC00, 0xD7A3 },
+ { "Hanunoo", 0x1720, 0x173F },
+ { "Hebrew", 0x0590, 0x05FF },
+ { "Hiragana", 0x3040, 0x309F },
+ { "IPAExtensions", 0x0250, 0x02AF },
+ { "IdeographicDescriptionCharacters", 0x2FF0, 0x2FFF },
+ { "Kanbun", 0x3190, 0x319F },
+ { "KangxiRadicals", 0x2F00, 0x2FDF },
+ { "Kannada", 0x0C80, 0x0CFF },
+ { "Katakana", 0x30A0, 0x30FF },
+ { "KatakanaPhoneticExtensions", 0x31F0, 0x31FF },
+ { "Kharoshthi", 0x10A00, 0x10A5F },
+ { "Khmer", 0x1780, 0x17FF },
+ { "KhmerSymbols", 0x19E0, 0x19FF },
+ { "Lao", 0x0E80, 0x0EFF },
+ { "Latin-1Supplement", 0x0080, 0x00FF },
+ { "LatinExtended-A", 0x0100, 0x017F },
+ { "LatinExtended-B", 0x0180, 0x024F },
+ { "LatinExtendedAdditional", 0x1E00, 0x1EFF },
+ { "LetterlikeSymbols", 0x2100, 0x214F },
+ { "Limbu", 0x1900, 0x194F },
+ { "LinearBIdeograms", 0x10080, 0x100FF },
+ { "LinearBSyllabary", 0x10000, 0x1007F },
+ { "Malayalam", 0x0D00, 0x0D7F },
+ { "MathematicalAlphanumericSymbols", 0x1D400, 0x1D7FF },
+ { "MathematicalOperators", 0x2200, 0x22FF },
+ { "MiscellaneousMathematicalSymbols-A", 0x27C0, 0x27EF },
+ { "MiscellaneousMathematicalSymbols-B", 0x2980, 0x29FF },
+ { "MiscellaneousSymbols", 0x2600, 0x26FF },
+ { "MiscellaneousSymbolsandArrows", 0x2B00, 0x2BFF },
+ { "MiscellaneousTechnical", 0x2300, 0x23FF },
+ { "ModifierToneLetters", 0xA700, 0xA71F },
+ { "Mongolian", 0x1800, 0x18AF },
+ { "MusicalSymbols", 0x1D100, 0x1D1FF },
+ { "Myanmar", 0x1000, 0x109F },
+ { "NewTaiLue", 0x1980, 0x19DF },
+ { "NumberForms", 0x2150, 0x218F },
+ { "Ogham", 0x1680, 0x169F },
+ { "OldItalic", 0x10300, 0x1032F },
+ { "OldPersian", 0x103A0, 0x103DF },
+ { "OpticalCharacterRecognition", 0x2440, 0x245F },
+ { "Oriya", 0x0B00, 0x0B7F },
+ { "Osmanya", 0x10480, 0x104AF },
+ { "PhoneticExtensions", 0x1D00, 0x1D7F },
+ { "PhoneticExtensionsSupplement", 0x1D80, 0x1DBF },
+ { "PrivateUse", 0xE000, 0xF8FF },
+ { "Runic", 0x16A0, 0x16FF },
+ { "Shavian", 0x10450, 0x1047F },
+ { "Sinhala", 0x0D80, 0x0DFF },
+ { "SmallFormVariants", 0xFE50, 0xFE6F },
+ { "SpacingModifierLetters", 0x02B0, 0x02FF },
+ { "Specials", 0xFFF0, 0xFFFF },
+ { "SuperscriptsandSubscripts", 0x2070, 0x209F },
+ { "SupplementalArrows-A", 0x27F0, 0x27FF },
+ { "SupplementalArrows-B", 0x2900, 0x297F },
+ { "SupplementalMathematicalOperators", 0x2A00, 0x2AFF },
+ { "SupplementalPunctuation", 0x2E00, 0x2E7F },
+ { "SupplementaryPrivateUseArea-A", 0xF0000, 0xFFFFF },
+ { "SupplementaryPrivateUseArea-B", 0x100000, 0x10FFFF },
+ { "SylotiNagri", 0xA800, 0xA82F },
+ { "Syriac", 0x0700, 0x074F },
+ { "Tagalog", 0x1700, 0x171F },
+ { "Tagbanwa", 0x1760, 0x177F },
+ { "Tags", 0xE0000, 0xE007F },
+ { "TaiLe", 0x1950, 0x197F },
+ { "TaiXuanJingSymbols", 0x1D300, 0x1D35F },
+ { "Tamil", 0x0B80, 0x0BFF },
+ { "Telugu", 0x0C00, 0x0C7F },
+ { "Thaana", 0x0780, 0x07BF },
+ { "Thai", 0x0E00, 0x0E7F },
+ { "Tibetan", 0x0F00, 0x0FFF },
+ { "Tifinagh", 0x2D30, 0x2D7F },
+ { "Ugaritic", 0x10380, 0x1039F },
+ { "UnifiedCanadianAboriginalSyllabics", 0x1400, 0x167F },
+ { "VariationSelectors", 0xFE00, 0xFE0F },
+ { "VariationSelectorsSupplement", 0xE0100, 0xE01EF },
+ { "VerticalForms", 0xFE10, 0xFE1F },
+ { "YiRadicals", 0xA490, 0xA4CF },
+ { "YiSyllables", 0xA000, 0xA48F },
+ { "YijingHexagramSymbols", 0x4DC0, 0x4DFF }
+};
+
+inline bool operator<(const char *name, const CategoriesRangeMapEntry &entry)
+{ return qstrcmp(name, entry.name) < 0; }
+inline bool operator<(const CategoriesRangeMapEntry &entry, const char *name)
+{ return qstrcmp(entry.name, name) < 0; }
+#endif // QT_NO_REGEXP_CCLASS
int QRegExpEngine::getChar()
{
@@ -3231,15 +3233,12 @@ int QRegExpEngine::getEscape()
break;
}
} else if (catlen > 2 && category.at(0) == 'I' && category.at(1) == 's') {
- if (categoriesRangeMap.isEmpty())
- setupCategoriesRangeMap();
-
- if (categoriesRangeMap.contains(category)) {
- const QPair<int, int> range = categoriesRangeMap.value(category);
- yyCharClass->addRange(range.first, range.second);
- } else {
+ static const int N = sizeof(categoriesRangeMap) / sizeof(categoriesRangeMap[0]);
+ const CategoriesRangeMapEntry *r = qBinaryFind(categoriesRangeMap, categoriesRangeMap + N, category.constData() + 2);
+ if (r != categoriesRangeMap + N)
+ yyCharClass->addRange(r->first, r->second);
+ else
error(RXERR_CATEGORY);
- }
} else {
error(RXERR_CATEGORY);
}