X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsubst.c;h=2593732906661027b9f5d6b782de491d6d8a3ada;hb=16939d06be6f78ee5ca6b0d5e7072e3cfcfdbb3f;hp=ce0cd8d1b95bf599b52d7b650fe0e736cd2123c9;hpb=175772212814e61c29e8905675d03800c22ddccb;p=citadel.git diff --git a/webcit/subst.c b/webcit/subst.c index ce0cd8d1b..259373290 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -1556,7 +1556,7 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo List = It->StaticList; SubBuf = NewStrBuf(); - it = GetNewHashPos(); + it = GetNewHashPos(List, 0); while (GetNextHashPos(List, it, &len, &Key, &vContext)) { svprintf(HKEY("ITERATE:ODDEVEN"), WCS_STRING, "%s", (oddeven) ? "odd" : "even"); @@ -2075,6 +2075,91 @@ void tmplput_SORT_ORDER(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void } +void tmplput_long_vector(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) +{ + long *LongVector = (long*) Context; + + if ((Tokens->Params[0]->Type == TYPE_LONG) && + (Tokens->Params[0]->lvalue <= LongVector[0])) + { + StrBufAppendPrintf(Target, "%ld", LongVector[Tokens->Params[0]->lvalue]); + } + else + { + if (Tokens->Params[0]->Type == TYPE_LONG) { + lprintf(1, "longvector [%s] (in '%s' line %ld); needs a long Parameter![%s]\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + ChrPtr(Tokens->FlatToken)); + StrBufAppendPrintf( + Target, + "
\nlongvector [%s] (in '%s' line %ld); needs a numerical Parameter!\n[%s]\n
\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + ChrPtr(Tokens->FlatToken)); + } + else { + lprintf(1, "longvector [%s] (in '%s' line %ld); doesn't have %ld Parameters," + " its just the size of %ld![%s]\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + Tokens->Params[0]->lvalue, + LongVector[0], + ChrPtr(Tokens->FlatToken)); + StrBufAppendPrintf( + Target, + "
\nlongvector [%s] (in '%s' line %ld); doesn't have %ld Parameters,"
+				" its just the size of %ld!\n[%s]\n
\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + Tokens->Params[0]->lvalue, + LongVector[0], + ChrPtr(Tokens->FlatToken)); + } + } +} + + + +int ConditionalLongVector(WCTemplateToken *Tokens, void *Context, int ContextType) +{ + long *LongVector = (long*) Context; + + if ((Tokens->Params[2]->Type == TYPE_LONG) && + (Tokens->Params[2]->lvalue <= LongVector[0])&& + (Tokens->Params[3]->Type == TYPE_LONG) && + (Tokens->Params[3]->lvalue <= LongVector[0])) + { + return LongVector[Tokens->Params[2]->lvalue] == LongVector[Tokens->Params[3]->lvalue]; + } + else + { + if ((Tokens->Params[2]->Type == TYPE_LONG) || + (Tokens->Params[2]->Type == TYPE_LONG)) { + lprintf(1, "ConditionalLongVector [%s] (in '%s' line %ld); needs two long Parameter![%s]\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + ChrPtr(Tokens->FlatToken)); + } + else { + lprintf(1, "longvector [%s] (in '%s' line %ld); doesn't have %ld / %ld Parameters," + " its just the size of %ld![%s]\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + Tokens->Params[2]->lvalue, + Tokens->Params[3]->lvalue, + LongVector[0], + ChrPtr(Tokens->FlatToken)); + } + } + return 0; +} void InitModule_SUBST @@ -2087,8 +2172,10 @@ InitModule_SUBST RegisterNamespace("ITERATE", 2, 100, tmpl_iterate_subtmpl, CTX_NONE); RegisterNamespace("DOBOXED", 1, 2, tmpl_do_boxed, CTX_NONE); RegisterNamespace("DOTABBED", 2, 100, tmpl_do_tabbed, CTX_NONE); + RegisterNamespace("LONGVECTOR", 1, 1, tmplput_long_vector, CTX_LONGVECTOR); RegisterConditional(HKEY("COND:SUBST"), 3, ConditionalVar, CTX_NONE); RegisterConditional(HKEY("COND:CONTEXTSTR"), 3, ConditionalContextStr, CTX_STRBUF); + RegisterConditional(HKEY("COND:LONGVECTOR"), 4, ConditionalLongVector, CTX_LONGVECTOR); } /*@}*/