X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsubst.c;h=c764ce6527b6a06b951484a5e94fa3e96a517f72;hb=c5d32a4b382cc366776eb0ec06c93ab15245c6da;hp=cca998a4014eae990d10473cb20ce374f3edc390;hpb=5b9736dec3d511d35fb4a86ff913afcf9d7a811c;p=citadel.git diff --git a/webcit/subst.c b/webcit/subst.c index cca998a40..c764ce652 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -696,6 +696,7 @@ WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf, TemplateParam *Param; WCTemplateToken *NewToken = (WCTemplateToken*)malloc(sizeof(WCTemplateToken)); + NewToken->FileName = pTmpl->FileName; /* to print meaningfull log messages... */ NewToken->Flags = 0; NewToken->Line = Line + 1; NewToken->pTokenStart = pTmplStart; @@ -1312,6 +1313,7 @@ typedef struct _HashIterator { HashList *StaticList; int AdditionalParams; int ContextType; + int XPectContextType; RetrieveHashlistFunc GetHash; HashDestructorFunc Destructor; SubTemplFunc DoSubTemplate; @@ -1333,16 +1335,18 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo Tokens->Params[0]->Start, Tokens->Params[0]->len, &vIt)) { - lprintf(1, "unknown Iterator [%s] (in line %ld); " + lprintf(1, "unknown Iterator [%s] (in '%s' line %ld); " " [%s]\n", Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), Tokens->Line, ChrPtr(Tokens->FlatToken)); StrBufAppendPrintf( Target, - "
\nunknown Iterator [%s] (in line %ld); \n"
+			"
\nunknown Iterator [%s] (in '%s' line %ld); \n"
 			" [%s]\n
", Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), Tokens->Line, ChrPtr(Tokens->FlatToken)); return; @@ -1351,23 +1355,52 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo It = (HashIterator*) vIt; if (Tokens->nParameters < It->AdditionalParams + 2) { - lprintf(1, "Iterator [%s] (in line %ld); " + lprintf(1, "Iterator [%s] (in '%s' line %ld); " "doesn't work with %ld params [%s]\n", Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), Tokens->Line, Tokens->nParameters, ChrPtr(Tokens->FlatToken)); StrBufAppendPrintf( Target, - "
Iterator [%s] \n(in line %ld);\n"
+			"
Iterator [%s] \n(in '%s' line %ld);\n"
 			"doesn't work with %ld params \n[%s]\n
", Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), Tokens->Line, Tokens->nParameters, ChrPtr(Tokens->FlatToken)); return; } + if ((It->XPectContextType != CTX_NONE) && + (It->XPectContextType != ContextType)) { + lprintf(1, "Iterator [%s] (in '%s' line %ld); " + "requires context of type %ld, have %ld [%s]\n", + Tokens->pName, + ChrPtr(Tokens->FileName), + Tokens->Line, + It->XPectContextType, + ContextType, + ChrPtr(Tokens->FlatToken)); + StrBufAppendPrintf( + Target, + "
\nIterator [%s] (in '%s' line %ld);"
+			" requires context of type %ld, have %ld!\n[%s]\n
\n", + Tokens->pName, + ChrPtr(Tokens->FileName), + Tokens->Line, + It->XPectContextType, + ContextType, + ChrPtr(Tokens->FlatToken)); + return ; + + } + + + + if (It->StaticList == NULL) List = It->GetHash(Target, nArgs, Tokens, Context, ContextType); else @@ -1443,7 +1476,8 @@ void RegisterITERATOR(const char *Name, long len, RetrieveHashlistFunc GetHash, SubTemplFunc DoSubTempl, HashDestructorFunc Destructor, - int ContextType) + int ContextType, + int XPectContextType) { HashIterator *It = (HashIterator*)malloc(sizeof(HashIterator)); It->StaticList = StaticList; @@ -1452,6 +1486,7 @@ void RegisterITERATOR(const char *Name, long len, It->DoSubTemplate = DoSubTempl; It->Destructor = Destructor; It->ContextType = ContextType; + It->XPectContextType = XPectContextType; Put(Iterators, Name, len, It, NULL); }