Sub->Sub = Super->Sub;
Super->Sub = Sub;
}
+ if (Sub->Sub != NULL)
+ Sub->Sub->Super = Sub;
Sub->Super = Super;
Sub->Context = Context;
{
Sub->Super->Sub = Sub->Sub;
}
+ if (Sub->Sub != NULL)
+ {
+ Sub->Sub->Super = Sub->Super;
+ }
}
void UnStackDynamicContext(StrBuf *Target, WCTemplputParams **TPP)
{
*/
}
-
-
-
void LogError (StrBuf *Target, const char *Type, const char *Format, ...)
{
wcsession *WCC;
return 1;
LogTemplateError(
- Target, ErrType, ERR_PARM1, TP,
+ Target, ErrType, ERR_NAME, TP,
" WARNING: requires Context: [%s], have [%s]!",
ContextName(Need->ContextType),
ContextName(TP->Filter.ContextType));
StrBufPeek(Buf, pch, -1, '\0');
if (LoadTemplates > 1) {
syslog(1,
- "DBG: got param [%s] %d %d\n",
+ "DBG: got param [%s] "SIZE_T_FMT" "SIZE_T_FMT"\n",
pchs, pche - pchs, strlen(pchs)
);
}
case SV_CONDITIONAL: /** Forward conditional evaluation */
Handler = (HashHandler*) TP->Tokens->PreEval;
if (!CheckContext(Target, &Handler->Filter, TP, "Conditional")) {
- return -1;
+ return 0;
}
return EvaluateConditional(Target, 1, state, TPP);
break;
case SV_NEG_CONDITIONAL: /** Reverse conditional evaluation */
Handler = (HashHandler*) TP->Tokens->PreEval;
if (!CheckContext(Target, &Handler->Filter, TP, "Conditional")) {
- return -1;
+ return 0;
}
return EvaluateConditional(Target, 0, state, TPP);
break;
case SV_CUST_STR_CONDITIONAL: /** Conditional put custom strings from params */
Handler = (HashHandler*) TP->Tokens->PreEval;
if (!CheckContext(Target, &Handler->Filter, TP, "Conditional")) {
- return -1;
+ return 0;
}
if (TP->Tokens->nParameters >= 6) {
if (EvaluateConditional(Target, 0, state, TPP)) {
case SV_PREEVALUATED:
Handler = (HashHandler*) TP->Tokens->PreEval;
if (!CheckContext(Target, &Handler->Filter, TP, "Token")) {
- return -1;
+ return 0;
}
Handler->HandlerFunc(Target, TP);
break;
if (GetHash(GlobalNS, TP->Tokens->pName, TP->Tokens->NameEnd, &vVar)) {
Handler = (HashHandler*) vVar;
if (!CheckContext(Target, &Handler->Filter, TP, "Token")) {
- return -1;
+ return 0;
}
else {
Handler->HandlerFunc(Target, TP);
WCTemplputParams TP;
WCTemplputParams *TPtr = &TP;
+ memset(TPtr, 0, sizeof(WCTemplputParams));
+
memcpy(&TP.Filter, &CallingTP->Filter, sizeof(ContextFilter));
TP.Context = CallingTP->Context;
TPtr->nArgs = pTmpl->Tokens[i]->nParameters;
TokenRc = EvaluateToken(Target, TokenRc, &TPtr);
- if (TokenRc != 0) state = eSkipTilEnd;
+ if (TokenRc > 0)
+ {
+ state = eSkipTilEnd;
+ }
+ else if (TokenRc < 0)
+ {
+ if ((TPtr != &TP) &&
+ (TPtr->ExitCTXID == -TokenRc))
+ {
+ UnStackDynamicContext(Target, &TPtr);
+ }
+ TokenRc = 0;
+ }
while ((state != eNext) && (i+1 < pTmpl->nTokensUsed)) {
/* condition told us to skip till its end condition */
pTmpl->Tokens[i]->Flags,
TokenRc,
&TPtr);
- if (rc == TokenRc)
+ if (-rc == TokenRc)
{
TokenRc = 0;
state = eNext;
- if (TPtr != &TP)
+ if ((TPtr != &TP) &&
+ (TPtr->ExitCTXID == - rc))
+ {
UnStackDynamicContext(Target, &TPtr);
+ }
}
}
}
+
pData = pTmpl->Tokens[i++]->pTokenEnd + 1;
if (i > pTmpl->nTokensUsed)
done = 1;
if ((TP->Tokens->Params[0]->len == 1) &&
(TP->Tokens->Params[0]->Start[0] == 'X'))
{
- return (state != 0)?TP->Tokens->Params[1]->lvalue:0;
+ return - (TP->Tokens->Params[1]->lvalue);
}
Cond = (ConditionalStruct *) TP->Tokens->PreEval;
LogTemplateError(
Target, "Conditional", ERR_PARM1, TP,
"unknown!");
- return 1;
+ return 0;
}
if (!CheckContext(Target, &Cond->Filter, TP, "Conditional")) {
res = Cond->CondF(Target, TP);
if (res == Neg)
rc = TP->Tokens->Params[1]->lvalue;
+
if (LoadTemplates > 5)
syslog(1, "<%s> : %d %d==%d\n",
ChrPtr(TP->Tokens->FlatToken),
rc, res, Neg);
+
if (TP->Sub != NULL)
{
-//// *XC = Cond->CondExitCtx;
*TPP = TP->Sub;
}
return rc;