// --------------------------------------------------------------------------- // BlockRangeFactory: Range creation methods // --------------------------------------------------------------------------- void BlockRangeFactory::buildRanges() { if (fRangesCreated) return; if (!fKeywordsInitialized) { initializeKeywordMap(); } RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); //for performance, once the desired specials and private use are found //don't need to compareString anymore bool foundSpecial = false; bool foundPrivate = false; for (int i=0; i < BLOCKNAMESIZE; i++) { RangeToken* tok = tokFactory->createRange(); tok->addRange(blockRanges[i*2], blockRanges[(i*2)+1]); if (!foundSpecial && XMLString::equals((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsSpecials)) { tok->addRange(0xFFF0, 0xFFFD); foundSpecial = true; } if (!foundPrivate && XMLString::equals((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsPrivateUse)) { tok->addRange(0xF0000, 0xFFFFD); tok->addRange(0x100000, 0x10FFFD); foundPrivate = true; } rangeTokMap->setRangeToken(fgBlockNames[i], tok); } fRangesCreated = true; }
// --------------------------------------------------------------------------- // ASCIIRangeFactory: Range creation methods // --------------------------------------------------------------------------- void ASCIIRangeFactory::buildRanges() { if (fRangesCreated) return; if (!fKeywordsInitialized) { initializeKeywordMap(); } RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); // Create space ranges RangeToken* tok = tokFactory->createRange(); tok->addRange(chHTab, chHTab); tok->addRange(chLF, chLF); tok->addRange(chFF, chFF); tok->addRange(chCR, chCR); tok->addRange(chSpace, chSpace); rangeTokMap->setRangeToken(fgASCIISpace, tok); // Create digits ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); rangeTokMap->setRangeToken(fgASCIIDigit, tok); // Create word ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); tok->addRange(chLatin_A, chLatin_Z); tok->addRange(chUnderscore, chUnderscore); tok->addRange(chLatin_a, chLatin_z); rangeTokMap->setRangeToken(fgASCIIWord, tok); // Create xdigit ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); tok->addRange(chLatin_A, chLatin_F); tok->addRange(chLatin_a, chLatin_a); rangeTokMap->setRangeToken(fgASCIIXDigit, tok); // Create ascii ranges tok = tokFactory->createRange(); tok->addRange(0x00, 0x7F); rangeTokMap->setRangeToken(fgASCII, tok); fRangesCreated = true; }
// --------------------------------------------------------------------------- // ASCIIRangeFactory: Range creation methods // --------------------------------------------------------------------------- void ASCIIRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { initializeKeywordMap(rangeTokMap); } TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); // Create space ranges RangeToken* tok = tokFactory->createRange(); tok->addRange(chHTab, chHTab); tok->addRange(chLF, chLF); tok->addRange(chFF, chFF); tok->addRange(chCR, chCR); tok->addRange(chSpace, chSpace); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIISpace, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIISpace, tok , true); // Create digits ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIDigit, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIDigit, tok , true); // Create word ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); tok->addRange(chLatin_A, chLatin_Z); tok->addRange(chUnderscore, chUnderscore); tok->addRange(chLatin_a, chLatin_z); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIWord, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIWord, tok , true); // Create xdigit ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); tok->addRange(chLatin_A, chLatin_F); tok->addRange(chLatin_a, chLatin_a); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIXDigit, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCIIXDigit, tok , true); // Create ascii ranges tok = tokFactory->createRange(); tok->addRange(0x00, 0x7F); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCII, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgASCII, tok , true); fRangesCreated = true; }
// --------------------------------------------------------------------------- // XMLRangeFactory: Range creation methods // --------------------------------------------------------------------------- void XMLRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { initializeKeywordMap(rangeTokMap); } TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); // Create space ranges unsigned int wsTblLen = getTableLen(gWhitespaceChars); RangeToken* tok = tokFactory->createRange(); XMLInt32* wsRange = (XMLInt32*) XMLPlatformUtils::fgMemoryManager->allocate ( wsTblLen * sizeof(XMLInt32) );//new XMLInt32[wsTblLen]; tok->setRangeValues(wsRange, wsTblLen); setupRange(wsRange, gWhitespaceChars, 0); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLSpace, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLSpace, tok , true); // Create digits ranges tok = tokFactory->createRange(); unsigned int digitTblLen = getTableLen(gDigitChars); XMLInt32* digitRange = (XMLInt32*) XMLPlatformUtils::fgMemoryManager->allocate ( digitTblLen * sizeof(XMLInt32) );//new XMLInt32[digitTblLen]; tok->setRangeValues(digitRange, digitTblLen); setupRange(digitRange, gDigitChars, 0); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLDigit, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLDigit, tok , true); // Build word ranges unsigned int baseTblLen = getTableLen(gBaseChars); unsigned int ideoTblLen = getTableLen(gIdeographicChars); unsigned int wordRangeLen = baseTblLen + ideoTblLen + digitTblLen; XMLInt32* wordRange = (XMLInt32*) XMLPlatformUtils::fgMemoryManager->allocate ( wordRangeLen * sizeof(XMLInt32) );//new XMLInt32[wordRangeLen]; ArrayJanitor<XMLInt32> janWordRange(wordRange, XMLPlatformUtils::fgMemoryManager); setupRange(wordRange, gBaseChars, 0); setupRange(wordRange, gIdeographicChars, baseTblLen); memcpy(wordRange + baseTblLen + ideoTblLen, digitRange, digitTblLen * sizeof(XMLInt32)); // Create NameChar ranges tok = tokFactory->createRange(); unsigned int combTblLen = getTableLen(gCombiningChars); unsigned int extTblLen = getTableLen(gExtenderChars); unsigned int nameTblLen = wordRangeLen + combTblLen + extTblLen; XMLInt32* nameRange = (XMLInt32*) XMLPlatformUtils::fgMemoryManager->allocate ( (nameTblLen + 8) * sizeof(XMLInt32) );//new XMLInt32[nameTblLen + 8]; tok->setRangeValues(nameRange, nameTblLen + 8); memcpy(nameRange, wordRange, wordRangeLen * sizeof(XMLInt32)); setupRange(nameRange, gCombiningChars, wordRangeLen); setupRange(nameRange, gExtenderChars, wordRangeLen + combTblLen); nameRange[nameTblLen++] = chDash; nameRange[nameTblLen++] = chDash; nameRange[nameTblLen++] = chColon; nameRange[nameTblLen++] = chColon; nameRange[nameTblLen++] = chPeriod; nameRange[nameTblLen++] = chPeriod; nameRange[nameTblLen++] = chUnderscore; nameRange[nameTblLen++] = chUnderscore; tok->sortRanges(); tok->compactRanges(); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLNameChar, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLNameChar, tok , true); // Create initialNameChar ranges tok = tokFactory->createRange(); unsigned int initialNameTblLen = baseTblLen + ideoTblLen; XMLInt32* initialNameRange = (XMLInt32*) XMLPlatformUtils::fgMemoryManager->allocate ( (initialNameTblLen + 4) * sizeof(XMLInt32) );//new XMLInt32[initialNameTblLen + 4]; tok->setRangeValues(initialNameRange, initialNameTblLen + 4); memcpy(initialNameRange, wordRange, initialNameTblLen * sizeof(XMLInt32)); initialNameRange[initialNameTblLen++] = chColon; initialNameRange[initialNameTblLen++] = chColon; initialNameRange[initialNameTblLen++] = chUnderscore; initialNameRange[initialNameTblLen++] = chUnderscore; tok->sortRanges(); tok->compactRanges(); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLInitialNameChar, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLInitialNameChar, tok , true); // Create word range tok = tokFactory->createRange(); tok->setRangeValues(wordRange, wordRangeLen); janWordRange.orphan(); tok->sortRanges(); tok->compactRanges(); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLWord, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // Build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgXMLWord, tok , true); fRangesCreated = true; }
// --------------------------------------------------------------------------- // UnicodeRangeFactory: Range creation methods // --------------------------------------------------------------------------- void UnicodeRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { initializeKeywordMap(rangeTokMap); } TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); RangeToken* ranges[UNICATEGSIZE]; RangeToken* tok; for (int i=0; i < UNICATEGSIZE; i++) { ranges[i] = tokFactory->createRange(); } for (int j=0; j < 0x10000; j++) { unsigned short charType = XMLUniCharacter::getType(j); ranges[charType]->addRange(j, j); charType = getUniCategory(charType); ranges[charType]->addRange(j, j); } ranges[XMLUniCharacter::UNASSIGNED]->addRange(0x10000, Token::UTF16_MAX); for (int k=0; k < UNICATEGSIZE; k++) { tok = (RangeToken*) RangeToken::complementRanges(ranges[k], tokFactory); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(uniCategNames[k], ranges[k]); rangeTokMap->setRangeToken(uniCategNames[k], tok , true); } // Create all range tok = tokFactory->createRange(); tok->addRange(0, Token::UTF16_MAX); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniAll, tok); // Create alpha range tok = tokFactory->createRange(); tok->mergeRanges(ranges[XMLUniCharacter::UPPERCASE_LETTER]); tok->mergeRanges(ranges[XMLUniCharacter::LOWERCASE_LETTER]); tok->mergeRanges(ranges[XMLUniCharacter::OTHER_LETTER]); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniIsAlpha, tok); // Create alpha-num range RangeToken* alnumTok = tokFactory->createRange(); alnumTok->mergeRanges(tok); alnumTok->mergeRanges(ranges[XMLUniCharacter::DECIMAL_DIGIT_NUMBER]); // build the internal map. alnumTok->createMap(); rangeTokMap->setRangeToken(fgUniIsAlnum, alnumTok); // Create word range tok = tokFactory->createRange(); tok->mergeRanges(alnumTok); tok->addRange(chUnderscore, chUnderscore); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniIsWord, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniIsWord, tok , true); // Create assigned range tok = (RangeToken*)RangeToken::complementRanges( ranges[XMLUniCharacter::UNASSIGNED], tokFactory, tokFactory->getMemoryManager()); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniAssigned,tok); // Create space range tok = tokFactory->createRange(); tok->mergeRanges(ranges[XMLUniCharacter::SPACE_SEPARATOR]); tok->mergeRanges(ranges[XMLUniCharacter::LINE_SEPARATOR]); //tok->mergeRanges(ranges[XMLUniCharacter::PARAGRAPH_SEPARATOR]); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniIsSpace, tok); tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); // build the internal map. tok->createMap(); rangeTokMap->setRangeToken(fgUniIsSpace, tok , true); // build the internal maps. for (int l=0; l < UNICATEGSIZE; l++) { ranges[l]->createMap(); } fRangesCreated = true; }