SNAP Library , Developer Reference
2013-01-07 14:03:36
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <xml.h>
Public Member Functions | |
TXmlDoc () | |
TXmlDoc (const PXmlTok &_Tok) | |
TXmlDoc (TSIn &) | |
void | Save (TSOut &) |
TXmlDoc & | operator= (const TXmlDoc &) |
bool | IsOk () const |
TStr | GetMsgStr () const |
PXmlTok | GetTok () const |
bool | IsTagTok (const TStr &TagPath, PXmlTok &TagTok) const |
bool | IsTagTok (const TStr &TagPath) const |
PXmlTok | GetTagTok (const TStr &TagPath) const |
void | PutTagTokStr (const TStr &TagPath, const TStr &TokStr) const |
TStr | GetTagTokStr (const TStr &TagPath) const |
void | GetTagTokV (const TStr &TagPath, TXmlTokV &XmlTokV) const |
void | GetTagValV (const TStr &TagNm, const bool &XmlP, TStrV &ValV) const |
TStr | GetTagVal (const TStr &TagNm, const bool &XmlP) const |
bool | GetTagTokBoolArgVal (const TStr &TagPath, const TStr &ArgNm, const bool &DfVal=false) const |
int | GetTagTokIntArgVal (const TStr &TagPath, const TStr &ArgNm, const int &DfVal=0) const |
double | GetTagTokFltArgVal (const TStr &TagPath, const TStr &ArgNm, const double &DfVal=0) const |
TStr | GetTagTokStrArgVal (const TStr &TagPath, const TStr &ArgNm, const TStr &DfVal=TStr()) const |
void | SaveTxt (const PSOut &SOut) |
void | SaveTxt (const TStr &FNm, const bool &Append=false) |
void | SaveStr (TStr &Str) |
Static Public Member Functions | |
static PXmlDoc | New () |
static PXmlDoc | New (const PXmlTok &Tok) |
static PXmlDoc | Load (TSIn &SIn) |
static TStr | GetXmlStr (const TStr &Str) |
static bool | SkipTopTag (const PSIn &SIn) |
static PXmlDoc | LoadTxt (TXmlLx &Lx) |
static PXmlDoc | LoadTxt (const PSIn &SIn, const TXmlSpacing &Spacing=xspIntact) |
static PXmlDoc | LoadTxt (const TStr &FNm, const TXmlSpacing &Spacing=xspIntact) |
static void | LoadTxt (const TStr &FNm, TXmlDocV &XmlDocV, const TXmlSpacing &Spacing=xspIntact) |
static PXmlDoc | LoadStr (const TStr &Str) |
Static Private Member Functions | |
static void | LoadTxtMiscStar (TXmlLx &Lx) |
static PXmlTok | LoadTxtElement (TXmlLx &Lx) |
Private Attributes | |
TCRef | CRef |
bool | Ok |
TStr | MsgStr |
PXmlTok | Tok |
Friends | |
class | TPt< TXmlDoc > |
TXmlDoc::TXmlDoc | ( | const PXmlTok & | _Tok | ) | [inline] |
TStr TXmlDoc::GetMsgStr | ( | ) | const [inline] |
PXmlTok TXmlDoc::GetTagTok | ( | const TStr & | TagPath | ) | const |
Definition at line 1292 of file xml.cpp.
References TStr::Empty(), TXmlTok::GetStr(), TXmlTok::GetSym(), TXmlTok::GetTagTok(), TStr::SplitOnCh(), Tok, and xsyTag.
Referenced by GetTagTokV(), and PutTagTokStr().
{ if (TagPath.Empty()){ return Tok; } else { TStr TagNm; TStr RestTagPath; TagPath.SplitOnCh(TagNm, '|', RestTagPath); if ((Tok->GetSym()==xsyTag)&&(Tok->GetStr()==TagNm)){ if (RestTagPath.Empty()){return Tok;} else {return Tok->GetTagTok(RestTagPath);} } else { return NULL; } } }
bool TXmlDoc::GetTagTokBoolArgVal | ( | const TStr & | TagPath, |
const TStr & | ArgNm, | ||
const bool & | DfVal = false |
||
) | const |
Definition at line 1326 of file xml.cpp.
References TXmlTok::GetBoolArgVal(), and IsTagTok().
{ PXmlTok TagTok; if (IsTagTok(TagPath, TagTok)){ return TagTok->GetBoolArgVal(ArgNm, DfVal);} else {return DfVal;} }
double TXmlDoc::GetTagTokFltArgVal | ( | const TStr & | TagPath, |
const TStr & | ArgNm, | ||
const double & | DfVal = 0 |
||
) | const |
Definition at line 1342 of file xml.cpp.
References TXmlTok::GetFltArgVal(), and IsTagTok().
{ PXmlTok TagTok; if (IsTagTok(TagPath, TagTok)){ return TagTok->GetFltArgVal(ArgNm, DfVal);} else {return DfVal;} }
int TXmlDoc::GetTagTokIntArgVal | ( | const TStr & | TagPath, |
const TStr & | ArgNm, | ||
const int & | DfVal = 0 |
||
) | const |
Definition at line 1334 of file xml.cpp.
References TXmlTok::GetIntArgVal(), and IsTagTok().
{ PXmlTok TagTok; if (IsTagTok(TagPath, TagTok)){ return TagTok->GetIntArgVal(ArgNm, DfVal);} else {return DfVal;} }
TStr TXmlDoc::GetTagTokStr | ( | const TStr & | TagPath | ) | const [inline] |
TStr TXmlDoc::GetTagTokStrArgVal | ( | const TStr & | TagPath, |
const TStr & | ArgNm, | ||
const TStr & | DfVal = TStr() |
||
) | const |
Definition at line 1350 of file xml.cpp.
References TXmlTok::GetStrArgVal(), and IsTagTok().
{ PXmlTok TagTok; if (IsTagTok(TagPath, TagTok)){ return TagTok->GetStrArgVal(ArgNm, DfVal);} else {return DfVal;} }
void TXmlDoc::GetTagTokV | ( | const TStr & | TagPath, |
TXmlTokV & | XmlTokV | ||
) | const |
Definition at line 1313 of file xml.cpp.
References TVec< TVal >::Add(), TVec< TVal >::Clr(), TPt< TRec >::Empty(), TXmlTok::GetStr(), TXmlTok::GetSubTok(), TXmlTok::GetSubToks(), TXmlTok::GetSym(), GetTagTok(), TStr::SplitOnLastCh(), Tok, and xsyTag.
{ XmlTokV.Clr(); TStr PreTagPath; TStr TagNm; TagPath.SplitOnLastCh(PreTagPath, '|', TagNm); PXmlTok Tok=GetTagTok(PreTagPath); if (!Tok.Empty()){ for (int SubTokN=0; SubTokN<Tok->GetSubToks(); SubTokN++){ PXmlTok SubTok=Tok->GetSubTok(SubTokN); if ((SubTok->GetSym()==xsyTag)&&(SubTok->GetStr()==TagNm)){ XmlTokV.Add(SubTok);} } } }
TStr TXmlDoc::GetTagVal | ( | const TStr & | TagNm, |
const bool & | XmlP | ||
) | const [inline] |
Definition at line 361 of file xml.h.
References TVec< TVal >::Len().
{ TStrV ValV; GetTagValV(TagNm, XmlP, ValV); if (ValV.Len()>0){return ValV[0];} else {return "";}}
void TXmlDoc::GetTagValV | ( | const TStr & | TagNm, |
const bool & | XmlP, | ||
TStrV & | ValV | ||
) | const [inline] |
PXmlTok TXmlDoc::GetTok | ( | ) | const [inline] |
TStr TXmlDoc::GetXmlStr | ( | const TStr & | Str | ) | [static] |
Definition at line 1358 of file xml.cpp.
References TUInt::GetStr(), and TChA::Len().
{ TChA ChA=Str; TChA XmlChA; for (int ChN=0; ChN<ChA.Len(); ChN++){ uchar Ch=ChA[ChN]; if ((' '<=Ch)&&(Ch<='~')){ if (Ch=='&'){XmlChA+="&";} else if (Ch=='>'){XmlChA+="<";} else if (Ch=='<'){XmlChA+=">";} else if (Ch=='\''){XmlChA+="'";} else if (Ch=='\"'){XmlChA+=""";} else {XmlChA+=Ch;} } else { XmlChA+="&#"; XmlChA+=TUInt::GetStr(Ch); XmlChA+=";"; } } return XmlChA; }
bool TXmlDoc::IsOk | ( | ) | const [inline] |
bool TXmlDoc::IsTagTok | ( | const TStr & | TagPath, |
PXmlTok & | TagTok | ||
) | const [inline] |
Definition at line 350 of file xml.h.
References TPt< TRec >::Empty(), and IAssert.
Referenced by GetTagTokBoolArgVal(), GetTagTokFltArgVal(), GetTagTokIntArgVal(), and GetTagTokStrArgVal().
bool TXmlDoc::IsTagTok | ( | const TStr & | TagPath | ) | const [inline] |
static PXmlDoc TXmlDoc::Load | ( | TSIn & | SIn | ) | [inline, static] |
PXmlDoc TXmlDoc::LoadStr | ( | const TStr & | Str | ) | [static] |
PXmlDoc TXmlDoc::LoadTxt | ( | TXmlLx & | Lx | ) | [static] |
Definition at line 1395 of file xml.cpp.
References TXmlLx::GetSym(), LoadTxtElement(), LoadTxtMiscStar(), New(), TXmlLx::Sym, xsyDocTypeDecl, and xsyXmlDecl.
Referenced by IsXLoadFromFileOk(), LoadStr(), LoadTxt(), TExpHelp::LoadXml(), and TPreproc::TPreproc().
{ PXmlDoc Doc=TXmlDoc::New(); // [1] document ::= prolog element Misc* try { Lx.GetSym(); // [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? if (Lx.Sym==xsyXmlDecl){Lx.GetSym();} LoadTxtMiscStar(Lx); if (Lx.Sym==xsyDocTypeDecl){Lx.GetSym();} LoadTxtMiscStar(Lx); Doc->Tok=LoadTxtElement(Lx); LoadTxtMiscStar(Lx); Doc->Ok=true; Doc->MsgStr="Ok"; } catch (PExcept& Except){ Doc->Ok=false; Doc->MsgStr=Except->GetMsgStr(); } return Doc; }
PXmlDoc TXmlDoc::LoadTxt | ( | const PSIn & | SIn, |
const TXmlSpacing & | Spacing = xspIntact |
||
) | [static] |
PXmlDoc TXmlDoc::LoadTxt | ( | const TStr & | FNm, |
const TXmlSpacing & | Spacing = xspIntact |
||
) | [static] |
void TXmlDoc::LoadTxt | ( | const TStr & | FNm, |
TXmlDocV & | XmlDocV, | ||
const TXmlSpacing & | Spacing = xspIntact |
||
) | [static] |
Definition at line 1423 of file xml.cpp.
References TVec< TVal >::Add(), TVec< TVal >::Clr(), forever, LoadTxt(), New(), and TXmlLx::SkipWs().
{ XmlDocV.Clr(); PSIn SIn=TFIn::New(FNm); TXmlLx Lx(SIn, Spacing); PXmlDoc XmlDoc; forever { Lx.SkipWs(); XmlDoc=LoadTxt(Lx); if (XmlDoc->IsOk()){XmlDocV.Add(XmlDoc);} else {break;} } }
PXmlTok TXmlDoc::LoadTxtElement | ( | TXmlLx & | Lx | ) | [static, private] |
Definition at line 1243 of file xml.cpp.
References TXmlTok::AddSubTok(), TPt< TRec >::Empty(), TXmlLx::EThrow(), forever, TXmlTok::GetStr(), TStr::GetStr(), TXmlLx::GetSym(), GetTok(), MsgStr, TXmlLx::Sym, TXmlLx::TagNm, Tok, xsyComment, xsyETag, xsyPI, xsyQStr, xsySETag, xsySTag, xsyStr, and xsyWs.
Referenced by LoadTxt().
{ // [39] element ::= EmptyElemTag | STag content ETag PXmlTok Tok; if (Lx.Sym==xsySETag){ Tok=TXmlTok::GetTok(Lx); } else if (Lx.Sym==xsySTag){ Tok=TXmlTok::GetTok(Lx); forever { Lx.GetSym(); if (Lx.Sym==xsyETag){ if (Tok->GetStr()==Lx.TagNm){ break; } else { TStr MsgStr=TStr("Invalid End-Tag '")+Lx.TagNm+ "' ('"+Tok->GetStr()+"' expected)."; Lx.EThrow(MsgStr); } } else { PXmlTok SubTok; switch (Lx.Sym){ case xsySTag: SubTok=LoadTxtElement(Lx); break; case xsySETag: case xsyStr: case xsyQStr: case xsyWs: SubTok=TXmlTok::GetTok(Lx); break; case xsyPI: case xsyComment: break; default: Lx.EThrow("Content or End-Tag expected."); } if (!SubTok.Empty()){ Tok->AddSubTok(SubTok);} } } } else if (Lx.Sym==xsyETag){ TStr MsgStr= TStr("Xml-Element (Start-Tag or Empty-Element-Tag) required.")+ TStr::GetStr(Lx.TagNm, " End-Tag </%s> encountered."); Lx.EThrow(MsgStr); } else { Lx.EThrow("Xml-Element (Start-Tag or Empty-Element-Tag) required."); } return Tok; }
void TXmlDoc::LoadTxtMiscStar | ( | TXmlLx & | Lx | ) | [static, private] |
Definition at line 1237 of file xml.cpp.
References TXmlLx::GetSym(), TXmlLx::Sym, xsyComment, xsyPI, and xsyWs.
Referenced by LoadTxt(), and SkipTopTag().
{ // [27] Misc ::= Comment | PI | S while ((Lx.Sym==xsyComment)||(Lx.Sym==xsyPI)||(Lx.Sym==xsyWs)){ Lx.GetSym();} }
static PXmlDoc TXmlDoc::New | ( | ) | [inline, static] |
static PXmlDoc TXmlDoc::New | ( | const PXmlTok & | Tok | ) | [inline, static] |
void TXmlDoc::PutTagTokStr | ( | const TStr & | TagPath, |
const TStr & | TokStr | ||
) | const |
Definition at line 1306 of file xml.cpp.
References TXmlTok::AddSubTok(), TXmlTok::ClrSubTok(), GetTagTok(), New(), Tok, and xsyStr.
{ PXmlTok Tok=GetTagTok(TagPath); Tok->ClrSubTok(); PXmlTok StrTok=TXmlTok::New(xsyStr, TokStr); Tok->AddSubTok(StrTok); }
void TXmlDoc::Save | ( | TSOut & | ) | [inline] |
void TXmlDoc::SaveStr | ( | TStr & | Str | ) |
void TXmlDoc::SaveTxt | ( | const PSOut & | SOut | ) | [inline] |
Definition at line 383 of file xml.h.
References TSOut::PutStr().
Referenced by SaveStr().
{ SOut->PutStr(GetTok()->GetTokStr());}
void TXmlDoc::SaveTxt | ( | const TStr & | FNm, |
const bool & | Append = false |
||
) | [inline] |
Definition at line 385 of file xml.h.
References TFOut::New().
{ PSOut SOut=TFOut::New(FNm, Append); SaveTxt(SOut);}
bool TXmlDoc::SkipTopTag | ( | const PSIn & | SIn | ) | [static] |
Definition at line 1377 of file xml.cpp.
References TXmlLx::GetSym(), LoadTxtMiscStar(), Ok, TXmlLx::Sym, xspIntact, xsyDocTypeDecl, and xsyXmlDecl.
{ bool Ok=true; TXmlLx Lx(SIn, xspIntact); try { Lx.GetSym(); // [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? if (Lx.Sym==xsyXmlDecl){Lx.GetSym();} LoadTxtMiscStar(Lx); if (Lx.Sym==xsyDocTypeDecl){Lx.GetSym();} LoadTxtMiscStar(Lx); Ok=true; } catch (PExcept Except){ Ok=false; } return Ok; }
TCRef TXmlDoc::CRef [private] |
TStr TXmlDoc::MsgStr [private] |
Definition at line 329 of file xml.h.
Referenced by LoadTxtElement().
bool TXmlDoc::Ok [private] |
Definition at line 328 of file xml.h.
Referenced by SkipTopTag().
PXmlTok TXmlDoc::Tok [private] |
Definition at line 330 of file xml.h.
Referenced by GetTagTok(), GetTagTokV(), LoadTxtElement(), and PutTagTokStr().