22 using namespace std::string_literals;
26 return "<"s + TagName() +
">";
31 return "</"s + TagName() +
">";
43 if (fDoClr) dwClr = this->dwClr;
54 char Tag[50];
C4MarkupTag *pNewTag=
nullptr;
int iTagLen,iParLen;
59 char *szPars=
nullptr;
int iSPos;
69 if (szPars)
return false;
73 if (!pLast)
return false;
74 if (!
SEqual(pLast->TagName(), Tag+1))
return false;
83 if (szPars)
return false;
91 if (!szPars)
return false;
92 if ((iParLen=
SLen(szPars))>8)
return false;
97 for (
int i=0; i<iParLen; ++i)
100 if (szPars[i]>=
'0' && szPars[i]<=
'9')
b=szPars[i]-
'0';
101 else if (szPars[i]>=
'a' && szPars[i]<=
'f')
b=szPars[i]-
'a'+10;
103 dwClr|=(
b<<((iParLen-i-1)*4));
106 if (iParLen<=6) dwClr|=0xff000000;
114 if (pNewTag) Push(pNewTag);
126 while (**ppText==
'<')
if (!Read(ppText,
true))
break;
135 for (
auto tag = pLast; tag; tag = tag->pPrev)
136 result += tag->ClosingTag();
143 for (
auto tag = pTags; tag; tag = tag->pNext)
144 result += tag->OpeningTag();
152 const char *szRead = szText, *szPos2;
156 if (szRead[0] ==
'{' && szRead[1] ==
'{' && szRead[2] !=
'{')
158 if ((szPos2 =
SSearch(szRead+2,
"}}")))
165 else if (szRead[0] ==
'}' && szRead[1] ==
'}')
169 while ((*szText++ = *szRead++));
170 return szText != szRead;
177 if (!buf)
return false;
178 bool fSuccess = StripMarkup(buf);
const char * SSearch(const char *szString, const char *szIndex)
bool SCopyEnclosed(const char *szSource, char cOpen, char cClose, char *sTarget, int iSize)
int SCharPos(char cTarget, const char *szInStr, int iIndex)
bool SEqual(const char *szStr1, const char *szStr2)
size_t SLen(const char *sptr)
StdStrBuf FormatString(const char *szFmt,...)
std::string OpeningTags() const
std::string ClosingTags() const
bool SkipTags(const char **ppText)
static bool StripMarkup(char *szText)
bool Read(const char **ppText, bool fSkip=false)
void Apply(C4BltTransform &rBltTrf, bool fDoClr, DWORD &dwClr) override
std::string OpeningTag() const override
virtual std::string OpeningTag() const
virtual std::string ClosingTag() const
void Apply(C4BltTransform &rBltTrf, bool fDoClr, DWORD &dwClr) override
const char * getData() const