sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
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 <string>
14 #include <vector>
15 
16 #ifdef _DEBUG
17 #define _DS(i) (i ? &((const char*)m_csDoc.c_str())[m_aPos[i].nStartL] : 0)
18 #define MARKUP_SETDEBUGSTATE \
19  m_pMainDS = _DS(m_iPos); \
20  m_pChildDS = _DS(m_iPosChild)
21 #else
22 #define MARKUP_SETDEBUGSTATE
23 #endif
24 
25 class CMarkup {
26  public:
27  CMarkup() {
28  SetDoc(NULL);
29  mnIndent = 4;
30  };
31  CMarkup(const char* szDoc) { SetDoc(szDoc); };
32  CMarkup(const CMarkup& markup) { *this = markup; };
33  void operator=(const CMarkup& markup);
34  virtual ~CMarkup() {};
35 
36  // Settings
37  void SetIndent(int nIndent = 4);
38 
39  // Create
40  std::string GetDoc() const { return m_csDoc; };
41  bool AddElem(const char* szName, const char* szData = NULL) {
42  return x_AddElem(szName, szData, false, false);
43  };
44  bool AddChildElem(const char* szName, const char* szData = NULL) {
45  return x_AddElem(szName, szData, false, true);
46  };
47  bool AddAttrib(const char* szAttrib, const char* szValue) {
48  return x_SetAttrib(m_iPos, szAttrib, szValue);
49  };
50  bool AddChildAttrib(const char* szAttrib, const char* szValue) {
51  return x_SetAttrib(m_iPosChild, szAttrib, szValue);
52  };
53  bool SetAttrib(const char* szAttrib, const char* szValue) {
54  return x_SetAttrib(m_iPos, szAttrib, szValue);
55  };
56  bool SetChildAttrib(const char* szAttrib, const char* szValue) {
57  return x_SetAttrib(m_iPosChild, szAttrib, szValue);
58  };
59 
60  // Navigate
61  bool SetDoc(const char* szDoc);
62  bool IsWellFormed();
63  bool FindElem(const char* szName = NULL);
64  bool FindChildElem(const char* szName = NULL);
65  bool IntoElem();
66  bool OutOfElem();
68  void ResetMainPos() { x_SetPos(m_iPosParent, 0, 0); };
69  void ResetPos() { x_SetPos(0, 0, 0); };
70  std::string GetTagName() const;
71  std::string GetChildTagName() const { return x_GetTagName(m_iPosChild); };
72  std::string GetData() const { return x_GetData(m_iPos); };
73  std::string GetChildData() const { return x_GetData(m_iPosChild); };
74  std::string GetAttrib(const char* szAttrib) const {
75  return x_GetAttrib(m_iPos, szAttrib);
76  };
77  std::string GetChildAttrib(const char* szAttrib) const {
78  return x_GetAttrib(m_iPosChild, szAttrib);
79  };
80  std::string GetError() const { return m_csError; };
81 
82  static std::string Format(const char* fmt, ...);
83 
85  MNT_ELEMENT = 1, // 0x01
86  MNT_TEXT = 2, // 0x02
87  MNT_WHITESPACE = 4, // 0x04
88  MNT_CDATA_SECTION = 8, // 0x08
90  MNT_COMMENT = 32, // 0x20
91  MNT_DOCUMENT_TYPE = 64, // 0x40
92  MNT_EXCLUDE_WHITESPACE = 123, // 0x7b
93  };
94 
95  protected:
96 #ifdef _DEBUG
97  const char* m_pMainDS;
98  const char* m_pChildDS;
99 #endif
100 
101  std::string m_csDoc;
102  std::string m_csError;
103 
104  struct ElemPos {
105  ElemPos() { Clear(); };
106  ElemPos(const ElemPos& pos) { *this = pos; };
107  bool IsEmptyElement() const { return (nStartR == nEndL + 1); };
108  void Clear() {
109  nStartL = 0;
110  nStartR = 0;
111  nEndL = 0;
112  nEndR = 0;
113  nReserved = 0;
114  iElemParent = 0;
115  iElemChild = 0;
116  iElemNext = 0;
117  };
118  void AdjustStart(int n) {
119  nStartL += n;
120  nStartR += n;
121  };
122  void AdjustEnd(int n) {
123  nEndL += n;
124  nEndR += n;
125  };
126  int nStartL;
127  int nStartR;
128  int nEndL;
129  int nEndR;
134  };
135 
136  std::vector<ElemPos> m_aPos;
138  int m_iPos;
142 
143  struct TokenPos {
144  TokenPos(const char* sz) {
145  Clear();
146  szDoc = sz;
147  };
148  bool IsValid() const { return (nL <= nR); };
149  void Clear() {
150  nL = 0;
151  nR = -1;
152  nNext = 0;
153  bIsString = false;
154  };
155  bool Match(const char* szName) const;
156  int nL;
157  int nR;
158  int nNext;
159  const char* szDoc;
160  bool bIsString;
161  };
162 
163  void x_SetPos(int iPosParent, int iPos, int iPosChild) {
164  m_iPosParent = iPosParent;
165  m_iPos = iPos;
166  m_iPosChild = iPosChild;
167  m_nNodeType = iPos ? MNT_ELEMENT : 0;
169  };
170 
171  int x_GetFreePos();
172  int x_ReleasePos();
173  int x_ParseElem(int iPos);
174  int x_ParseError(const char* szError, const char* szName = NULL);
175  static bool x_FindChar(const char* szDoc, int& nChar, char c);
176  static bool x_FindAny(const char* szDoc, int& nChar);
177  static bool x_FindToken(TokenPos& token);
178  std::string x_GetToken(const TokenPos& token) const;
179  int x_FindElem(int iPosParent, int iPos, const char* szPath);
180  std::string x_GetTagName(int iPos) const;
181  std::string x_GetData(int iPos) const;
182  std::string x_GetAttrib(int iPos, const char* szAttrib) const;
183  bool x_AddElem(const char* szName, const char* szValue, bool bInsert,
184  bool bAddChild);
185  bool x_FindAttrib(TokenPos& token, const char* szAttrib = NULL) const;
186  bool x_SetAttrib(int iPos, const char* szAttrib, const char* szValue);
187  void x_LocateNew(int iPosParent, int& iPosRel, int& nOffset, int nLength,
188  int nFlags);
189  int x_ParseNode(TokenPos& token);
190  void x_DocChange(int nLeft, int nReplace, const std::string& csInsert);
191  void x_Adjust(int iPos, int nShift, bool bAfterPos = false);
192  std::string x_TextToDoc(const char* szText, bool bAttrib = false) const;
193  std::string x_TextFromDoc(int nLeft, int nRight) const;
194 
195  protected:
196  char mtIndent[1000];
197  int mnIndent;
198 
199  private:
200  std::string Mid(const std::string& tStr, int nFirst) const;
201  std::string Mid(const std::string& tStr, int nFirst, int nCount) const;
202  char* GetBuffer(std::string& tStr, int nMinLen = -1) const;
203  void ReleaseBuffer(std::string& tStr, int nNewLen = -1) const;
204 };
205 
206 #endif /* QUALISYS_NBC_NBC_MARKUP_H_INCLUDED */
#define MARKUP_SETDEBUGSTATE
Definition: Markup.h:22
Definition: Markup.h:25
std::string GetTagName() const
Definition: Markup.cpp:119
static bool x_FindChar(const char *szDoc, int &nChar, char c)
Definition: Markup.cpp:295
bool IntoElem()
Definition: Markup.cpp:127
std::vector< ElemPos > m_aPos
Definition: Markup.h:136
std::string GetChildAttrib(const char *szAttrib) const
Definition: Markup.h:77
int m_nNodeType
Definition: Markup.h:141
std::string GetData() const
Definition: Markup.h:72
int m_iPos
Definition: Markup.h:138
std::string x_GetToken(const TokenPos &token) const
Definition: Markup.cpp:368
int x_ReleasePos()
Definition: Markup.cpp:166
void ResetPos()
Definition: Markup.h:69
bool AddChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:50
CMarkup()
Definition: Markup.h:27
std::string x_GetAttrib(int iPos, const char *szAttrib) const
Definition: Markup.cpp:519
static bool x_FindToken(TokenPos &token)
Definition: Markup.cpp:318
void operator=(const CMarkup &markup)
Definition: Markup.cpp:29
int m_iPosFree
Definition: Markup.h:140
bool AddElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:41
bool AddChildElem(const char *szName, const char *szData=NULL)
Definition: Markup.h:44
std::string m_csDoc
Definition: Markup.h:101
std::string GetChildTagName() const
Definition: Markup.h:71
std::string x_TextToDoc(const char *szText, bool bAttrib=false) const
Definition: Markup.cpp:593
bool SetDoc(const char *szDoc)
Definition: Markup.cpp:41
int m_iPosParent
Definition: Markup.h:137
std::string m_csError
Definition: Markup.h:102
void ResetMainPos()
Definition: Markup.h:68
bool FindElem(const char *szName=NULL)
Definition: Markup.cpp:87
char mtIndent[1000]
Definition: Markup.h:196
std::string x_GetData(int iPos) const
Definition: Markup.cpp:572
bool x_FindAttrib(TokenPos &token, const char *szAttrib=NULL) const
Definition: Markup.cpp:486
void ResetChildPos()
Definition: Markup.h:67
int mnIndent
Definition: Markup.h:197
int x_GetFreePos()
Definition: Markup.cpp:156
CMarkup(const CMarkup &markup)
Definition: Markup.h:32
bool x_SetAttrib(int iPos, const char *szAttrib, const char *szValue)
Definition: Markup.cpp:533
std::string x_GetTagName(int iPos) const
Definition: Markup.cpp:476
void x_Adjust(int iPos, int nShift, bool bAfterPos=false)
Definition: Markup.cpp:721
void x_SetPos(int iPosParent, int iPos, int iPosChild)
Definition: Markup.h:163
std::string GetAttrib(const char *szAttrib) const
Definition: Markup.h:74
void x_LocateNew(int iPosParent, int &iPosRel, int &nOffset, int nLength, int nFlags)
Definition: Markup.cpp:763
std::string GetChildData() const
Definition: Markup.h:73
int x_ParseNode(TokenPos &token)
Definition: Markup.cpp:401
virtual ~CMarkup()
Definition: Markup.h:34
bool SetChildAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:56
static std::string Format(const char *fmt,...)
Definition: Markup.cpp:984
int m_iPosChild
Definition: Markup.h:139
int x_FindElem(int iPosParent, int iPos, const char *szPath)
Definition: Markup.cpp:377
std::string x_TextFromDoc(int nLeft, int nRight) const
Definition: Markup.cpp:643
static bool x_FindAny(const char *szDoc, int &nChar)
Definition: Markup.cpp:310
bool OutOfElem()
Definition: Markup.cpp:143
CMarkup(const char *szDoc)
Definition: Markup.h:31
bool SetAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:53
bool x_AddElem(const char *szName, const char *szValue, bool bInsert, bool bAddChild)
Definition: Markup.cpp:838
MarkupNodeType
Definition: Markup.h:84
@ MNT_EXCLUDE_WHITESPACE
Definition: Markup.h:92
@ MNT_WHITESPACE
Definition: Markup.h:87
@ MNT_TEXT
Definition: Markup.h:86
@ MNT_PROCESSING_INSTRUCTION
Definition: Markup.h:89
@ MNT_DOCUMENT_TYPE
Definition: Markup.h:91
@ MNT_COMMENT
Definition: Markup.h:90
@ MNT_CDATA_SECTION
Definition: Markup.h:88
@ MNT_ELEMENT
Definition: Markup.h:85
std::string GetError() const
Definition: Markup.h:80
bool IsWellFormed()
Definition: Markup.cpp:82
bool FindChildElem(const char *szName=NULL)
Definition: Markup.cpp:101
void x_DocChange(int nLeft, int nReplace, const std::string &csInsert)
Definition: Markup.cpp:692
int x_ParseError(const char *szError, const char *szName=NULL)
Definition: Markup.cpp:175
void SetIndent(int nIndent=4)
Definition: Markup.cpp:27
bool AddAttrib(const char *szAttrib, const char *szValue)
Definition: Markup.h:47
int x_ParseElem(int iPos)
Definition: Markup.cpp:184
std::string GetDoc() const
Definition: Markup.h:40
ElemPos(const ElemPos &pos)
Definition: Markup.h:106
void AdjustStart(int n)
Definition: Markup.h:118
void Clear()
Definition: Markup.h:108
void AdjustEnd(int n)
Definition: Markup.h:122
bool IsEmptyElement() const
Definition: Markup.h:107
void Clear()
Definition: Markup.h:149
bool Match(const char *szName) const
Definition: Markup.cpp:1068
bool IsValid() const
Definition: Markup.h:148
const char * szDoc
Definition: Markup.h:159
TokenPos(const char *sz)
Definition: Markup.h:144