亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parser.cpp

?? symbian 下的解析xml文件的源代碼 個人感覺這個比較簡單
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * $Id: Parser.cpp,v 1.12 2006/10/20 11:36:39 matti Exp $
 *
 * EAXP - Lightweight XML SAX parser for Symbian Environments
 * Copyright (C) 2004-2006 Matti Dahlbom
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Contact: Matti Dahlbom <matti at 777-team.org>
 */

#include "eaxp.h"

/////////////////////////////////////////////////
// global util functions
/////////////////////////////////////////////////

void XMLStringTrim(TPtr aPtr)
{
    TInt len = aPtr.Length();

    for( TInt i = 0; i < len; i++ ) {
        if( (aPtr[i] == KNewline) || (aPtr[i] == KCarriageReturn) ) {
            aPtr[i] = KWhitespace;
        }
    }
    aPtr.TrimAll();
}

/////////////////////////////////////////////////
// class CAttribute
/////////////////////////////////////////////////

CAttribute* CAttribute::NewL(const TDesC &aName, 
                             const TDesC &aNamespace, 
                             const TDesC &aValue)
{
    CAttribute *attr = new (ELeave) CAttribute();
    CleanupStack::PushL(attr);
    attr->ConstructL(aName, aNamespace, aValue);
    CleanupStack::Pop(); // attr

    return attr;
}

CAttribute::CAttribute()
{
}

CAttribute::~CAttribute()
{
    delete iName;
    delete iNamespace;
    delete iValue;
}

void CAttribute::ConstructL(const TDesC &aName, 
                            const TDesC &aNamespace, 
                            const TDesC &aValue)
{
    iName = aName.AllocL();
    iNamespace = aNamespace.AllocL();
    iValue = aValue.AllocL();

    ::XMLStringTrim(iValue->Des());
}

EXPORT_C const TDesC& CAttribute::GetName() const
{
    return *iName;
}

EXPORT_C const TDesC& CAttribute::GetNamespace() const
{
    return *iNamespace;
}

EXPORT_C const TDesC& CAttribute::GetValue() const
{
    return *iValue;
}

/////////////////////////////////////////////////
// class CEAXPParser
/////////////////////////////////////////////////

EXPORT_C CEAXPParser* CEAXPParser::NewLC(MSAXEventListener &aListener)
{
    CEAXPParser *parser = new (ELeave) CEAXPParser(aListener);
    CleanupStack::PushL(parser);
    parser->ConstructL();

    return parser;
}

EXPORT_C CEAXPParser* CEAXPParser::NewL(MSAXEventListener &aListener)
{
    CEAXPParser *parser = CEAXPParser::NewLC(aListener);
    CleanupStack::Pop(); // parser

    return parser;
}

CEAXPParser::CEAXPParser(MSAXEventListener &aListener)
    : iListener(aListener),
      iCoreState(ECoreNullState)
{
}

CEAXPParser::~CEAXPParser()
{
    // dealloc buffers
    delete iAttrName;
    delete iAttrValue;
    delete iFreeText;
    delete iUnescapeBuffer;
    delete[] iEscapedCharMap;
}

void CEAXPParser::ConstructL()
{
    // construct default size buffers
    AllocateDefaultSizeBuffersL();

    // construct the escaped character mapping tables
    iNumEscapeMappings = 0;
    iEscapeMapCapacity = 10;
    iEscapedCharMap = new (ELeave) TEscapedCharMapping[iEscapeMapCapacity];
    AddEscapeMappingL(_L("amp"), '&');
    AddEscapeMappingL(_L("lt"), '<');
    AddEscapeMappingL(_L("gt"), '>');
    AddEscapeMappingL(_L("quot"), '\"');
    AddEscapeMappingL(_L("apos"), '\'');
}

void CEAXPParser::AllocateDefaultSizeBuffersL()
{
    delete iAttrName;
    iAttrName = NULL;
    iAttrName = HBufC::NewL(32);
    delete iAttrValue;
    iAttrValue = NULL;
    iAttrValue = HBufC::NewL(32);
    delete iFreeText;
    iFreeText = NULL;
    iFreeText = HBufC::NewL(128);
    delete iUnescapeBuffer;
    iUnescapeBuffer = NULL;
    iUnescapeBuffer = HBufC::NewL(128);
}

void CEAXPParser::AddEscapeMappingL(const TDesC &aEscape, TChar aChar)
{
    if( iNumEscapeMappings == iEscapeMapCapacity ) {
        iEscapeMapCapacity *= 2;
        delete[] iEscapedCharMap;
        iEscapedCharMap = NULL;
        iEscapedCharMap = new (ELeave) TEscapedCharMapping[iEscapeMapCapacity];
    }

    TEscapedCharMapping *mapping = iEscapedCharMap + iNumEscapeMappings; 
    iNumEscapeMappings++;
    mapping->iEscape.Copy(aEscape);
    mapping->iChar = aChar;
}

void CEAXPParser::ValidateSizeAndCopyL(HBufC **aTo, const TDesC &aFrom)
{
    // check if need to realloc
    if( (*aTo)->Des().MaxLength() < aFrom.Length() ) {
        delete *aTo;
        *aTo = NULL;
        *aTo = aFrom.AllocL();
    } else {
        // buffer large enough; just copy
        (*aTo)->Des().Copy(aFrom);
    }
}

void CEAXPParser::ValidateSizeL(HBufC **aBuf, TInt aSize)
{
    if( (*aBuf)->Des().MaxLength() < aSize ) {
        delete *aBuf;
        *aBuf = NULL;
        *aBuf = HBufC::NewL(aSize);
    }
}

TChar CEAXPParser::FindEscapeL(const TPtrC &aEscape)
{
    register TEscapedCharMapping *mapping = iEscapedCharMap;
    for( register TInt i = 0; i < iNumEscapeMappings; i++ ) {
        if( mapping->iEscape.Compare(aEscape) == 0 ) {
            return mapping->iChar;
        }
        
        mapping++;
    }

    // escape not found!
    _LIT(KNotSupportedEscape, "Not supported escape sequence &%S; on line %d!");
    iErrorReason.Format(KNotSupportedEscape, &aEscape, iLineNum);
    User::Leave(KErrParsingError);

    // to suppress compiler warning
    return 0;
}

void CEAXPParser::UnescapeL(const TPtrC &aFrom, TBool aTrim)
{
    TLex lex(aFrom);
    TChar esc_char;
    TInt offset;

    ValidateSizeL(&iUnescapeBuffer, aFrom.Length());
    TPtr ptr = iUnescapeBuffer->Des();
    ptr.Zero();

    TBool parsing_escape = EFalse;

    while( !lex.Eos() ) {
        TChar peek = lex.Peek();

        switch( peek ) {
            case KAmpersand:
                // consume ampersand and mark the start of escape
                lex.Inc();
                lex.Mark();
                parsing_escape = ETrue;
                break;
            case KSemicolon:
                if ( parsing_escape )
                    {
                    // consume semicolon and try to replace the escape sequence
                    offset = lex.Offset();
                    esc_char = FindEscapeL(aFrom.Mid(lex.MarkedOffset(), 
                                                     offset - lex.MarkedOffset()));
                    ptr.Append(esc_char);
                    parsing_escape = EFalse;
                    }
                else
                    {
                    // not parsing escape; append the semicolon normally
                    ptr.Append( KSemicolon );
                    }
                lex.Inc();
                break;
            default:
                // other char; consume and add to unescape buffer unless 
                // currently parsing an escape sequence
                lex.Inc();
                if( !parsing_escape ) {
                    ptr.Append(peek);
                }
                break;
        }
    }

    if( aTrim ) {
        iUnescapeBuffer->Des().Trim();
    }
}

EXPORT_C TBool CEAXPParser::ParseL( const TDesC8& aDocument )
    {
    HBufC* buf = HBufC::NewLC( aDocument.Length() );
    buf->Des().Copy( aDocument );
    TBool ret = ParseL( *buf );
    CleanupStack::PopAndDestroy( buf );

    return ret;
    }

EXPORT_C TBool CEAXPParser::ParseL(const TDesC &aDocument)
{
    iDocument.Set(aDocument);
    iLineNum = 1;

    TRAPD(err, ParseImplL());

    // after parsing is complete, make sure the buffers consume only the 
    // default amount of memory
    AllocateDefaultSizeBuffersL();

    if( err == KErrParsingError ) {
        iListener.ParsingError(iErrorReason);
        return EFalse;
    } else if( err != KErrNone ) {
        User::Leave(err);
    }

    return ETrue;
}

void CEAXPParser::ParseImplL()
{
    TLex lex(iDocument);
    TBool in_string = EFalse;
    TInt start_offs = 0;
    TPtrC ptr;

    iCoreState = ECoreNullState;

    // core parsing loop
    while( !lex.Eos() ) {
        TChar peek = lex.Peek();
        switch( peek ) {
            case KLessThan:
                if( iCoreState == ECoreParsingElement ) {
                    IllegalCharacterMetL(peek);
                } else if( iCoreState == ECoreParsingFreeText ) {
                    ValidateSizeAndCopyL(&iFreeText, 
                                         iDocument.Mid(lex.MarkedOffset(),
                                                       lex.Offset() - lex.MarkedOffset()));
                    ::XMLStringTrim(iFreeText->Des());

                    if( iFreeText->Length() > 0 ) {
                        UnescapeL(*iFreeText, ETrue);
                        iListener.FreeText(*iUnescapeBuffer);
                    }
                } 

                lex.Mark();
                iCoreState = ECoreParsingElement;
                break;
            case KGreaterThan:
                if( in_string || (iCoreState == ECoreParsingFreeText) ) {
                    IllegalCharacterMetL(peek);
                }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一本大道香蕉久在线精品| 婷婷开心久久网| 黑人巨大精品欧美一区| 精品视频全国免费看| 亚洲第四色夜色| 91精选在线观看| 国内精品在线播放| 久久久久88色偷偷免费 | 精品福利一二区| 国产一区二区三区免费播放| 精品日韩欧美一区二区| 国产成人精品一区二区三区四区| 一本到不卡精品视频在线观看| 欧美日韩午夜精品| 日本成人在线看| 久久亚洲捆绑美女| 91网址在线看| 美女免费视频一区二区| 日本一区二区三区视频视频| www.色精品| 亚洲成人中文在线| 精品国产青草久久久久福利| 国产.欧美.日韩| 懂色av中文一区二区三区| 国产精品久久久久影院色老大| 三级欧美在线一区| 久久久亚洲午夜电影| 欧洲亚洲国产日韩| 蜜桃精品视频在线| 中文字幕在线不卡视频| 在线不卡欧美精品一区二区三区| 亚洲免费观看在线观看| 欧美一卡在线观看| 国产91对白在线观看九色| 亚洲aaa精品| 欧美国产精品中文字幕| 3d动漫精品啪啪1区2区免费| 成人免费毛片aaaaa**| 日韩激情视频在线观看| 成人欧美一区二区三区视频网页| 大陆成人av片| 日韩国产成人精品| 亚洲人成7777| 欧美精品一区二区三区蜜桃 | 亚洲国产成人在线| 91精品福利在线一区二区三区| 亚洲综合色丁香婷婷六月图片| 91丨porny丨首页| 国内精品伊人久久久久av一坑| 欧美一区二区三区的| 97精品久久久久中文字幕| 精品综合久久久久久8888| 亚洲日本一区二区| 久久久亚洲午夜电影| 欧美一级二级三级蜜桃| 欧美体内she精高潮| 成人涩涩免费视频| 国产一区二区三区四区五区美女 | 激情五月婷婷综合网| 99视频一区二区| 青娱乐精品在线视频| 一区二区成人在线视频| 最新不卡av在线| 国产日产亚洲精品系列| 26uuu成人网一区二区三区| 欧美日韩精品一区二区在线播放| 亚洲aaa精品| 亚洲第一综合色| 亚洲一区二区精品久久av| 国产精品三级视频| 国产亚洲欧美一级| 久久久噜噜噜久噜久久综合| 精品国产精品网麻豆系列| 日韩视频免费观看高清完整版在线观看| 精品一区二区在线免费观看| 亚洲成人av在线电影| 午夜精品久久久久| 性做久久久久久久免费看| 亚洲大片一区二区三区| 亚洲一区二区黄色| 亚洲国产成人tv| 午夜精品久久久久久不卡8050| 2022国产精品视频| 日韩欧美国产小视频| 欧美成人精品二区三区99精品| 成人黄色大片在线观看| av毛片久久久久**hd| 91天堂素人约啪| 91福利在线播放| 91精品婷婷国产综合久久竹菊| 国产精品资源在线看| 日韩欧美一区二区久久婷婷| 欧美日韩小视频| 日韩欧美aaaaaa| 久久一区二区视频| 成人欧美一区二区三区黑人麻豆 | 9人人澡人人爽人人精品| 成人午夜在线免费| 91在线精品一区二区| 欧美视频一区二| 日韩精品一区二区三区中文不卡| 97精品久久久久中文字幕| 色欧美88888久久久久久影院| 国产一区在线观看视频| 成人免费电影视频| 欧美三级电影在线看| 日韩三级中文字幕| 久久久777精品电影网影网 | 国产日产欧美一区| 成人欧美一区二区三区白人| 亚洲自拍都市欧美小说| 韩国三级中文字幕hd久久精品| 一区二区三区在线看| 亚洲成a人片在线不卡一二三区| 国产欧美精品国产国产专区| 国产精品九色蝌蚪自拍| 日韩黄色一级片| 国产传媒日韩欧美成人| 91福利国产成人精品照片| 欧美成人猛片aaaaaaa| 国产精品的网站| 麻豆成人久久精品二区三区红| 亚洲高清免费视频| 国产一区二区三区四区五区美女 | 国产精品久久久久久久久果冻传媒 | 国产精品欧美经典| 亚洲大尺度视频在线观看| 国产乱子伦视频一区二区三区| 蜜桃久久精品一区二区| 91香蕉视频在线| 精品日韩在线一区| 亚洲综合视频在线观看| 狠狠狠色丁香婷婷综合久久五月| 久久激情五月婷婷| 色国产综合视频| 国产免费久久精品| 美女脱光内衣内裤视频久久网站| 亚洲一区二区三区爽爽爽爽爽| 亚洲乱码一区二区三区在线观看| 国产精品高清亚洲| 经典三级在线一区| 欧美狂野另类xxxxoooo| 日本一二三四高清不卡| 久久国产精品72免费观看| 欧美日韩中文字幕一区| 日韩理论电影院| 成人av中文字幕| 久久夜色精品一区| 亚洲不卡在线观看| 91精品办公室少妇高潮对白| 国产精品天美传媒| 国产精品一线二线三线精华| 日韩免费观看2025年上映的电影| 国产午夜亚洲精品羞羞网站| 老司机免费视频一区二区| 91九色最新地址| 亚洲精选视频免费看| www.欧美色图| 中文字幕一区日韩精品欧美| 国产精品一二三区| 久久婷婷成人综合色| 国内精品写真在线观看| 日韩免费高清av| 美女网站视频久久| 欧美大白屁股肥臀xxxxxx| 首页亚洲欧美制服丝腿| 欧美一级专区免费大片| 日本成人在线网站| 欧美大片日本大片免费观看| 老司机一区二区| 久久久另类综合| 高清成人在线观看| 国产精品久久久久久久久快鸭 | 亚洲国产欧美在线| 欧美中文字幕一区| 亚洲综合在线视频| 欧美日韩三级视频| 麻豆免费看一区二区三区| 精品国免费一区二区三区| 国产一区二区三区免费在线观看| 在线观看国产日韩| 午夜久久久久久久久| 欧美一区二区三区性视频| 免费看欧美美女黄的网站| 欧美mv日韩mv国产网站app| 捆绑紧缚一区二区三区视频 | 欧洲生活片亚洲生活在线观看| 日韩精品一区在线| 欧美日韩高清影院| 蜜臀av性久久久久蜜臀aⅴ流畅| 成人黄色综合网站| 国产精品理伦片| 在线观看国产精品网站| 日韩精品电影一区亚洲| ww久久中文字幕| 96av麻豆蜜桃一区二区| 婷婷久久综合九色国产成人| 欧美mv日韩mv亚洲| 91免费看`日韩一区二区| 日韩av二区在线播放|