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 + -
显示快捷键?