TNB Library
TnbTmlTextEscape.h
[詳解]
1#pragma once
13#include "TnbTmlResult.h"
14#include "TnbTmlValue.h"
15#include "TnbStrLib.h"
16
17
18
19//TNB Library
20namespace TNB
21{
22
23
24
36class CTmlTextEscape : public CTml
37{
38public:
39
42 {
43 }
44
49 CTmlTextEscape(const CTmlTextEscape& other) : m_contents(other.m_contents), m_aWildPos(other.m_aWildPos)
50 {
51 }
52
54 virtual ~CTmlTextEscape(void)
55 {
56 }
57
59 void Empty(void)
60 {
61 m_contents.RemoveAll();
62 m_aWildPos.RemoveAll();
63 }
64
70 CTmlValue ToValue(void) const
71 {
72 CTmlValue v;
73 v = m_contents;
74 loop ( i, m_aWildPos.GetSize() )
75 {
76 v.AddWildPoint(m_aWildPos[i]);
77 }
78 return v;
79 }
80
88 CTmlResult SetData(LPCSTR lpszData)
89 {
90 return m_SetNormal(lpszData);
91 }
92
99 CTmlResult SetHexToData(LPCSTR lpszData)
100 {
101 return m_SetHex(lpszData);
102 }
103
104private:
105 CByteVector m_contents;
106 CVectorT<INDEX> m_aWildPos;
107
113 CTmlResult m_SetNormal(LPCSTR lpszData)
114 {
115 Empty();
116 CByteVector ba;
117 int iPos = 0;
118 char c;
119 while ( true )
120 {
121 c = lpszData[iPos++];
122 if ( c == 0 )
123 {
124 //終端か " なら終了
125 break;
126 }
127 else if ( STRLIB::GetCharSize(c) == 2 )
128 {
129 //全角
130 ba.Add(c);
131 ba.Add(lpszData[iPos++]);
132 }
133 else if ( c=='\\' )
134 {
135 //次の文字。
136 c = lpszData[iPos++];
137 switch ( c )
138 {
139 case '0':
140 ba.Add(0);
141 break;
142 case 'x':
143 //HEX表記
144 {
145 int r = 0;
146 int i;
147 c = lpszData[iPos];
148 if ( c == 0 )
149 {
150 //ESCコードが不明
152 }
154 if ( i < 0 )
155 {
156 // HEX表記が異常
158 }
159 r = i * 0x10;
160 c = lpszData[iPos + 1];
161 if ( c == 0 )
162 {
163 //ESCコードが不明
165 }
167 if ( i < 0 )
168 {
169 // HEX表記が異常
171 }
172 r += i;
173 iPos += 2;
174 ba.Add(static_cast<BYTE>(r));
175 }
176 break;
177 case '*':
178 //ワイルドカード
179 m_aWildPos.Add(ba.GetSize());
180 ba.Add('_' );
181 break;
182 default:
183 //ESCコードが不明
185 }
186 }
187 else
188 {
189 ba.Add(c);
190 }
191 }
192 m_contents = ba;
193 return Result_Success;
194 }
195
203 CTmlResult m_SetHex(LPCSTR lpszData)
204 {
205 Empty();
206 //
207 CAscii s = lpszData;
208 s.Remove(' ');
209 s.Remove('-');
210 s.Remove('_');
211 lpszData = s;
212 //
213 CByteVector ba;
214 size_t max = STRLIB::GetLen(lpszData);
215 for ( UINT i = 0; i < max; i += 2 )
216 {
217 if ( lpszData[i] == 0 )
218 {
219 break;
220 }
221 int r1 = STRLIB::HexCharToInt(lpszData[i]);
222 int r2 = STRLIB::HexCharToInt(lpszData[i + 1]);
223 if ( r1 >= 0 && r2 >= 0 )
224 {
225 //HEX表記だ!
226 ba.Add (static_cast<BYTE>(r1 * 0x10 + r2));
227 }
228 else
229 {
230 // HEX表記が異常
232 }
233 }
234 m_contents = ba;
235 return Result_Success;
236 }
237
238 friend class CTmlTextEscapeTest;
239};
240
241
242
243}; // TNB
244
245
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
文字列操作ライブラリ関係のヘッダ
TinyMacroLang 結果関係のヘッダ
TinyMacroLang 値関係のヘッダ
int Remove(TYP t)
[処理] 文字削除.
Definition: TnbStr.h:1108
TinyMacroLang 結果状態管理
Definition: TnbTmlResult.h:133
TinyMacroLang 文字列解析
virtual ~CTmlTextEscape(void)
デストラクタ
CTmlResult SetData(LPCSTR lpszData)
[代入] 文字列を代入.
CTmlResult SetHexToData(LPCSTR lpszData)
[代入] HEX表記文字列を代入.
CTmlTextEscape(const CTmlTextEscape &other)
コピーコンストラクタ;
void Empty(void)
Empty
CTmlValue ToValue(void) const
[取得] CTmlValue 型で取得.
CTmlTextEscape(void)
コンストラクタ
TinyMacroLang 値管理
Definition: TnbTmlValue.h:43
bool AddWildPoint(INDEX index)
[設定] ワイルドカードポイント追加.
Definition: TnbTmlValue.h:140
TinyMacroLang コード管理
Definition: TnbTmlResult.h:48
@ Operation_Text_EscHex
文字列 ¥x 処理中
Definition: TnbTmlResult.h:76
@ Operation_Text_Esc
文字列 ¥? 処理中
Definition: TnbTmlResult.h:75
@ Operation_Text
文字列処理中
Definition: TnbTmlResult.h:74
@ Result_InvalidHexNotation
HEX表記が異常
Definition: TnbTmlResult.h:92
@ Result_InvalidEscSeq
エスケープシーケンスが異常
Definition: TnbTmlResult.h:91
@ Result_Success
成功
Definition: TnbTmlResult.h:88
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
int GetCharSize(char c)
[取得] 文字のサイズ(ASCII/SJIS用)
Definition: TnbStrLib.h:341
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
int HexCharToInt(int c)
[変換] HEX文字数値変換
Definition: TnbStrLib.h:492
TNB Library
Definition: TnbDoxyTitle.txt:2