tokenfactory.cpp
来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 550 行 · 第 1/2 页
CPP
550 行
const int mask) { ModifierToken* tmpTok = new (fMemoryManager) ModifierToken(child, add, mask, fMemoryManager); fTokens->addElement(tmpTok); return tmpTok;}ConditionToken* TokenFactory::createCondition(const int refNo, Token* const condition, Token* const yesFlow, Token* const noFlow) { ConditionToken* tmpTok = new (fMemoryManager) ConditionToken(refNo, condition, yesFlow, noFlow, fMemoryManager); fTokens->addElement(tmpTok); return tmpTok;}// ---------------------------------------------------------------------------// TokenFactory - Getter methods// ---------------------------------------------------------------------------RangeToken* TokenFactory::getRange(const XMLCh* const keyword, const bool complement) { if (!fRangeInitialized) { initializeRegistry(); } return RangeTokenMap::instance()->getRange(keyword, complement);}Token* TokenFactory::getLineBegin() { if (fLineBegin == 0) fLineBegin = createChar(chCaret, true); return fLineBegin;}Token* TokenFactory::getLineBegin2() { if (fLineBegin2 == 0) fLineBegin2 = createChar(chAt, true); return fLineBegin2;}Token* TokenFactory::getLineEnd() { if (fLineEnd == 0) fLineEnd = createChar(chDollarSign, true); return fLineEnd;}Token* TokenFactory::getStringBegin() { if (fStringBegin == 0) fStringBegin = createChar(chLatin_A, true); return fStringBegin;}Token* TokenFactory::getStringEnd() { if (fStringEnd == 0) fStringEnd = createChar(chLatin_z, true); return fStringEnd;}Token* TokenFactory::getStringEnd2() { if (fStringEnd2 == 0) fStringEnd2 = createChar(chLatin_Z, true); return fStringEnd2;}Token* TokenFactory::getWordEdge() { if (fWordEdge == 0) fWordEdge = createChar(chLatin_b, true); return fWordEdge;}Token* TokenFactory::getNotWordEdge(){ if (fNotWordEdge == 0) fNotWordEdge = createChar(chLatin_B, true); return fNotWordEdge;}Token* TokenFactory::getWordBegin() { if (fWordBegin == 0) fWordBegin = createChar(chOpenAngle, true); return fWordBegin;}Token* TokenFactory::getWordEnd() { if (fWordEnd == 0) fWordEnd = createChar(chCloseAngle, true); return fWordEnd;}Token* TokenFactory::getDot() { if (fDot == 0) fDot = createToken(Token::T_DOT); return fDot;}Token* TokenFactory::getCombiningCharacterSequence() { if (fCombiningChar == 0) { Token* foo = createClosure(getRange(fgUniMark)); // \pM* foo = createConcat(getRange(fgUniMark, true), foo); // \PM + \pM* fCombiningChar = foo; } return fCombiningChar;}// static final String viramaString =Token* TokenFactory::getGraphemePattern() { if (fGrapheme == 0) { Token* base_char = createRange(); // [{ASSIGNED}]-[{M},{C}] base_char->mergeRanges(getRange(fgUniAssigned)); base_char->subtractRanges(getRange(fgUniMark)); base_char->subtractRanges(getRange(fgUniControl)); Token* virama = createRange(); virama->addRange(0x094D, 0x094D); virama->addRange(0x09CD, 0x09CD); virama->addRange(0x0A4D, 0x0A4D); virama->addRange(0x0ACD, 0x0ACD); virama->addRange(0x0B4D, 0x0B4D); virama->addRange(0x0BCD, 0x0BCD); virama->addRange(0x0C4D, 0x0C4D); virama->addRange(0x0CCD, 0x0CCD); virama->addRange(0x0D4D, 0x0D4D); virama->addRange(0x0E3A, 0x0E3A); virama->addRange(0x0F84, 0x0F84); Token* combiner_wo_virama = createRange(); combiner_wo_virama->mergeRanges(getRange(fgUniMark)); combiner_wo_virama->addRange(0x1160, 0x11FF); // hangul_medial and hangul_final combiner_wo_virama->addRange(0xFF9F, 0xFF9F); // extras Token* left = TokenFactory::createUnion(); // base_char? left->addChild(base_char, this); left->addChild(createToken(Token::T_EMPTY), this); Token* foo = createUnion(); foo->addChild(TokenFactory::createConcat(virama,getRange(fgUniLetter)), this); foo->addChild(combiner_wo_virama, this); foo = createClosure(foo); foo = createConcat(left, foo); fGrapheme = foo; } return fGrapheme;}// ---------------------------------------------------------------------------// TokenFactory - Helper methods// ---------------------------------------------------------------------------void TokenFactory::initializeRegistry() { if (!fRangeInitialized) { XMLMutexLock lockInit(&gTokenFactoryMutex()); if (!fRangeInitialized) { RangeTokenMap::instance()->initializeRegistry(); // Add categories RangeTokenMap::instance()->addCategory(fgXMLCategory); RangeTokenMap::instance()->addCategory(fgASCIICategory); RangeTokenMap::instance()->addCategory(fgUnicodeCategory); RangeTokenMap::instance()->addCategory(fgBlockCategory); // Add xml range factory RangeFactory* rangeFact = new XMLRangeFactory(); RangeTokenMap::instance()->addRangeMap(fgXMLCategory, rangeFact); rangeFact->initializeKeywordMap(); // Add ascii range factory rangeFact = new ASCIIRangeFactory(); RangeTokenMap::instance()->addRangeMap(fgASCIICategory, rangeFact); rangeFact->initializeKeywordMap(); // Add unicode range factory rangeFact = new UnicodeRangeFactory(); RangeTokenMap::instance()->addRangeMap(fgUnicodeCategory, rangeFact); rangeFact->initializeKeywordMap(); // Add block range factory rangeFact = new BlockRangeFactory(); RangeTokenMap::instance()->addRangeMap(fgBlockCategory, rangeFact); rangeFact->initializeKeywordMap(); fRangeInitialized = true; } }}/*#if defined (XML_USE_ICU_TRANSCODER) #include <unicode/uchar.h>#endif#include <stdio.h>void TokenFactory::printUnicode() {#if defined (XML_USE_ICU_TRANSCODER) // // Write it out to a temp file to be read back into this source later. // printf("Printing\n"); //sprintf(msg, "Printing\n"); FILE* outFl = fopen("table.out", "wt+"); fprintf(outFl, "const XMLByte fgUniCharsTable[0x10000] =\n{ "); for (unsigned int index = 0; index <= 0xFFFF; index += 16) { fprintf(outFl , " , 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X\n" , (unsigned int)u_charType(index) , (unsigned int)u_charType(index+1) , (unsigned int)u_charType(index+2) , (unsigned int)u_charType(index+3) , (unsigned int)u_charType(index+4) , (unsigned int)u_charType(index+5) , (unsigned int)u_charType(index+6) , (unsigned int)u_charType(index+7) , (unsigned int)u_charType(index+8) , (unsigned int)u_charType(index+9) , (unsigned int)u_charType(index+10) , (unsigned int)u_charType(index+11) , (unsigned int)u_charType(index+12) , (unsigned int)u_charType(index+13) , (unsigned int)u_charType(index+14) , (unsigned int)u_charType(index+15)); } fprintf(outFl, "};\n"); fclose(outFl);#endif}*/XERCES_CPP_NAMESPACE_END/** * End of file TokenFactory.cpp */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?