sot-talos-balance  1.5.0
Markup.h
Go to the documentation of this file.
1 #ifndef QUALISYS_NBC_NBC_MARKUP_H_INCLUDED
2 #define QUALISYS_NBC_NBC_MARKUP_H_INCLUDED
3 
4 // Markup.h: interface for the NBC_CMarkup class.
5 //
6 // NBC_CMarkup Release 6.5 Lite
7 // Copyright (C) 1999-2003 First Objective Software, Inc. All rights reserved
8 // This entire notice must be retained in this source code
9 // Redistributing this source code requires written permission
10 // This software is provided "as is", with no warranty.
11 // Latest fixes enhancements and documentation at www.firstobject.com
12 
13 #include <vector>
14 #include <string>
15 
16 #ifdef _DEBUG
17 #define _DS(i) (i?&((const char*)m_csDoc.c_str())[m_aPos[i].nStartL]:0)
18 #define MARKUP_SETDEBUGSTATE m_pMainDS=_DS(m_iPos); m_pChildDS=_DS(m_iPosChild)
19 #else
20 #define MARKUP_SETDEBUGSTATE
21 #endif
22 
23 class CMarkup
24 {
25 public:
26  CMarkup() { SetDoc(NULL); mnIndent = 4; };
27  CMarkup(const char* szDoc) { SetDoc(szDoc); };
28  CMarkup(const CMarkup& markup) { *this = markup; };
29  void operator=(const CMarkup& markup);
30  virtual ~CMarkup() {};
31 
32  // Settings
33  void SetIndent(int nIndent = 4);
34 
35  // Create
36  std::string GetDoc() const { return m_csDoc; };
37  bool AddElem(const char* szName, const char* szData=NULL) { return x_AddElem(szName,szData,false,false); };
38  bool AddChildElem(const char* szName, const char* szData=NULL) { return x_AddElem(szName,szData,false,true); };
39  bool AddAttrib(const char* szAttrib, const char* szValue) { return x_SetAttrib(m_iPos,szAttrib,szValue); };
40  bool AddChildAttrib(const char* szAttrib, const char* szValue) { return x_SetAttrib(m_iPosChild,szAttrib,szValue); };
41  bool SetAttrib(const char* szAttrib, const char* szValue) { return x_SetAttrib(m_iPos,szAttrib,szValue); };
42  bool SetChildAttrib(const char* szAttrib, const char* szValue) { return x_SetAttrib(m_iPosChild,szAttrib,szValue); };
43 
44  // Navigate
45  bool SetDoc(const char* szDoc);
46  bool IsWellFormed();
47  bool FindElem(const char* szName=NULL);
48  bool FindChildElem(const char* szName=NULL);
49  bool IntoElem();
50  bool OutOfElem();
53  void ResetPos() { x_SetPos(0,0,0); };
54  std::string GetTagName() const;
55  std::string GetChildTagName() const { return x_GetTagName(m_iPosChild); };
56  std::string GetData() const { return x_GetData(m_iPos); };
57  std::string GetChildData() const { return x_GetData(m_iPosChild); };
58  std::string GetAttrib(const char* szAttrib) const { return x_GetAttrib(m_iPos,szAttrib); };
59  std::string GetChildAttrib(const char* szAttrib) const { return x_GetAttrib(m_iPosChild,szAttrib); };
60  std::string GetError() const { return m_csError; };
61 
62  static std::string Format(const char *fmt, ...);
63 
65  {
66  MNT_ELEMENT = 1, // 0x01
67  MNT_TEXT = 2, // 0x02
68  MNT_WHITESPACE = 4, // 0x04
69  MNT_CDATA_SECTION = 8, // 0x08
71  MNT_COMMENT = 32, // 0x20
72  MNT_DOCUMENT_TYPE = 64, // 0x40
73  MNT_EXCLUDE_WHITESPACE = 123,// 0x7b
74  };
75 
76 protected:
77 
78 #ifdef _DEBUG
79  const char* m_pMainDS;
80  const char* m_pChildDS;
81 #endif
82 
83  std::string m_csDoc;
84  std::string m_csError;
85 
86  struct ElemPos
87  {
88  ElemPos() { Clear(); };
89  ElemPos(const ElemPos& pos) { *this = pos; };
90  bool IsEmptyElement() const { return (nStartR == nEndL + 1); };
91  void Clear()
92  {
93  nStartL=0; nStartR=0; nEndL=0; nEndR=0; nReserved=0;
95  };
96  void AdjustStart(int n) { nStartL+=n; nStartR+=n; };
97  void AdjustEnd(int n) { nEndL+=n; nEndR+=n; };
98  int nStartL;
99  int nStartR;
100  int nEndL;
101  int nEndR;
106  };
107 
108  std::vector<ElemPos> m_aPos;
110  int m_iPos;
114 
115  struct TokenPos
116  {
117  TokenPos(const char* sz) { Clear(); szDoc = sz; };
118  bool IsValid() const { return (nL <= nR); };
119  void Clear() { nL=0; nR=-1; nNext=0; bIsString=false; };
120  bool Match(const char* szName) const;
121  int nL;
122  int nR;
123  int nNext;
124  const char* szDoc;
125  bool bIsString;
126  };
127 
128  void x_SetPos(int iPosParent, int iPos, int iPosChild)
129  {
130  m_iPosParent = iPosParent;
131  m_iPos = iPos;
132  m_iPosChild = iPosChild;
133  m_nNodeType = iPos?MNT_ELEMENT:0;
135  };
136 
137  int x_GetFreePos();
138  int x_ReleasePos();
139  int x_ParseElem(int iPos);
140  int x_ParseError(const char* szError, const char* szName = NULL);
141  static bool x_FindChar(const char* szDoc, int& nChar, char c);
142  static bool x_FindAny(const char* szDoc, int& nChar);
143  static bool x_FindToken(TokenPos& token);
144  std::string x_GetToken(const TokenPos& token) const;
145  int x_FindElem(int iPosParent, int iPos, const char* szPath);
146  std::string x_GetTagName(int iPos) const;
147  std::string x_GetData(int iPos) const;
148  std::string x_GetAttrib(int iPos, const char* szAttrib) const;
149  bool x_AddElem(const char* szName, const char* szValue, bool bInsert, bool bAddChild);
150  bool x_FindAttrib(TokenPos& token, const char* szAttrib=NULL) const;
151  bool x_SetAttrib(int iPos, const char* szAttrib, const char* szValue);
152  void x_LocateNew(int iPosParent, int& iPosRel, int& nOffset, int nLength, int nFlags);
153  int x_ParseNode(TokenPos& token);
154  void x_DocChange(int nLeft, int nReplace, const std::string& csInsert);
155  void x_Adjust(int iPos, int nShift, bool bAfterPos = false);
156  std::string x_TextToDoc(const char* szText, bool bAttrib = false) const;
157  std::string x_TextFromDoc(int nLeft, int nRight) const;
158 
159 protected:
160  char mtIndent[ 1000 ];
161  int mnIndent;
162 
163 private:
164  std::string Mid(const std::string &tStr, int nFirst) const;
165  std::string Mid(const std::string &tStr, int nFirst, int nCount) const;
166  char* GetBuffer(std::string &tStr, int nMinLen = -1) const;
167  void ReleaseBuffer(std::string &tStr, int nNewLen = -1) const;
168 };
169 
170 #endif /* QUALISYS_NBC_NBC_MARKUP_H_INCLUDED */
void SetIndent(int nIndent=4)
Definition: Markup.cpp:26
void x_Adjust(int iPos, int nShift, bool bAfterPos=false)
Definition: Markup.cpp:832
static bool x_FindAny(const char *szDoc, int &nChar)
Definition: Markup.cpp:353
void AdjustStart(int n)
Definition: Markup.h:96
void operator=(const CMarkup &markup)
Definition: Markup.cpp:31
bool AddElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:37
std::string GetError() const
Definition: Markup.h:60
static bool x_FindToken(TokenPos &token)
Definition: Markup.cpp:363
CMarkup(const CMarkup &markup)
Definition: Markup.h:28
int m_iPosChild
Definition: Markup.h:111
void x_DocChange(int nLeft, int nReplace, const std::string &csInsert)
Definition: Markup.cpp:804
bool SetChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:42
#define MARKUP_SETDEBUGSTATE
Definition: Markup.h:20
void x_SetPos(int iPosParent, int iPos, int iPosChild)
Definition: Markup.h:128
std::string GetChildAttrib(const char *szAttrib) const
Definition: Markup.h:59
static bool x_FindChar(const char *szDoc, int &nChar, char c)
Definition: Markup.cpp:335
bool x_AddElem(const char *szName, const char *szValue, bool bInsert, bool bAddChild)
Definition: Markup.cpp:979
bool OutOfElem()
Definition: Markup.cpp:165
int m_iPos
Definition: Markup.h:110
int x_ReleasePos()
Definition: Markup.cpp:191
std::string GetData() const
Definition: Markup.h:56
std::string GetAttrib(const char *szAttrib) const
Definition: Markup.h:58
bool SetDoc(const char *szDoc)
Definition: Markup.cpp:44
Definition: Markup.h:23
void ResetMainPos()
Definition: Markup.h:52
int x_FindElem(int iPosParent, int iPos, const char *szPath)
Definition: Markup.cpp:430
int mnIndent
Definition: Markup.h:161
std::string x_GetAttrib(int iPos, const char *szAttrib) const
Definition: Markup.cpp:610
const char * szDoc
Definition: Markup.h:124
std::string m_csDoc
Definition: Markup.h:83
void Clear()
Definition: Markup.h:119
int x_ParseElem(int iPos)
Definition: Markup.cpp:211
std::string x_GetToken(const TokenPos &token) const
Definition: Markup.cpp:420
std::string x_TextToDoc(const char *szText, bool bAttrib=false) const
Definition: Markup.cpp:695
ElemPos(const ElemPos &pos)
Definition: Markup.h:89
bool x_SetAttrib(int iPos, const char *szAttrib, const char *szValue)
Definition: Markup.cpp:624
bool AddChildElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:38
CMarkup()
Definition: Markup.h:26
int m_iPosParent
Definition: Markup.h:109
static std::string Format(const char *fmt,...)
Definition: Markup.cpp:1154
int x_GetFreePos()
Definition: Markup.cpp:180
CMarkup(const char *szDoc)
Definition: Markup.h:27
char mtIndent[1000]
Definition: Markup.h:160
int x_ParseNode(TokenPos &token)
Definition: Markup.cpp:458
bool IsEmptyElement() const
Definition: Markup.h:90
std::string m_csError
Definition: Markup.h:84
std::vector< ElemPos > m_aPos
Definition: Markup.h:108
virtual ~CMarkup()
Definition: Markup.h:30
std::string GetDoc() const
Definition: Markup.h:36
int m_iPosFree
Definition: Markup.h:112
std::string x_GetTagName(int iPos) const
Definition: Markup.cpp:558
bool FindChildElem(const char *szName=NULL)
Definition: Markup.cpp:114
TokenPos(const char *sz)
Definition: Markup.h:117
std::string GetChildData() const
Definition: Markup.h:57
bool AddAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:39
std::string GetTagName() const
Definition: Markup.cpp:136
void ResetChildPos()
Definition: Markup.h:51
std::string x_GetData(int iPos) const
Definition: Markup.cpp:669
bool x_FindAttrib(TokenPos &token, const char *szAttrib=NULL) const
Definition: Markup.cpp:570
int x_ParseError(const char *szError, const char *szName=NULL)
Definition: Markup.cpp:201
MarkupNodeType
Definition: Markup.h:64
bool IntoElem()
Definition: Markup.cpp:147
void ResetPos()
Definition: Markup.h:53
void AdjustEnd(int n)
Definition: Markup.h:97
bool AddChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:40
bool FindElem(const char *szName=NULL)
Definition: Markup.cpp:97
void Clear()
Definition: Markup.h:91
bool IsWellFormed()
Definition: Markup.cpp:90
void x_LocateNew(int iPosParent, int &iPosRel, int &nOffset, int nLength, int nFlags)
Definition: Markup.cpp:884
int m_nNodeType
Definition: Markup.h:113
std::string GetChildTagName() const
Definition: Markup.h:55
bool SetAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:41
std::string x_TextFromDoc(int nLeft, int nRight) const
Definition: Markup.cpp:750
bool IsValid() const
Definition: Markup.h:118