| 
    SNAP Library 2.0, Developer Reference
    2013-05-13 16:33:57
    
   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 1298 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 1332 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 1348 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 1340 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 1356 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 1319 of file xml.cpp.
References TVec< TVal, TSizeTy >::Add(), TVec< TVal, TSizeTy >::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, TSizeTy >::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 1364 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 1401 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 1429 of file xml.cpp.
References TVec< TVal, TSizeTy >::Add(), TVec< TVal, TSizeTy >::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 1249 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 1243 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 1312 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] | 
        
| 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 1383 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().