StrBufAppendPrintf(Target, "%ld", ptr->lvalue);
break;
default:
- lprintf(1,"WARNING: invalid value in SV-Hash at %s!", keyname);
+ lprintf(1,"WARNING: invalid value in SV-Hash at %s!\n", keyname);
+ StrBufAppendPrintf(Target, "<pre>WARNING: \ninvalid value in SV-Hash at %s!</pre>", keyname);
}
}
}
return ParamToCompare->lvalue == ptr->lvalue;
break;
default:
- lprintf(1,"WARNING: invalid value in SV-Hash at %s!",
+ lprintf(1,"WARNING: invalid value in SV-Hash at %s!\n",
ParamToLookup->Start);
}
}
case WCS_LONG:
return StrTol(Compare) == ptr->lvalue;
default:
- lprintf(1,"WARNING: invalid value in SV-Hash at %s!",
+ lprintf(1,"WARNING: invalid value in SV-Hash at %s!\n",
ParamToLookup->Start);
}
}
NewToken->TokenEnd = (pTmplEnd - pStart) - NewToken->TokenStart;
NewToken->pTokenEnd = pTmplEnd;
NewToken->NameEnd = NewToken->TokenEnd - 2;
- NewToken->FlatToken = NewStrBufPlain(pTmplStart, pTmplEnd - pTmplStart);
+ NewToken->FlatToken = NewStrBufPlain(pTmplStart + 2, pTmplEnd - pTmplStart - 2);
StrBufPeek(Buf, pTmplStart, + 1, '\0');
StrBufPeek(Buf, pTmplEnd, -1, '\0');
if (Param != NULL) {
NewToken->HaveParameters = 1;
if (NewToken->nParameters > MAXPARAM) {
- lprintf(1, "Only %ld Tokens supported!\n", MAXPARAM);
+ lprintf(1, "Error (in '%s' line %ld); "
+ "only [%ld] Params allowed in Tokens [%s]\n",
+ ChrPtr(pTmpl->FileName),
+ NewToken->Line,
+ MAXPARAM,
+ ChrPtr(NewToken->FlatToken));
free(Param);
return NULL;
}
}
-int EvaluateConditional(WCTemplateToken *Token, WCTemplate *pTmpl, void *Context, int Neg, int state)
+int EvaluateConditional(StrBuf *Target, WCTemplateToken *Token, WCTemplate *pTmpl, void *Context, int Neg, int state)
{
- void *vConditional;
+ void *vConditional = NULL;
ConditionalStruct *Cond;
if ((Token->Params[0]->len == 1) &&
if (!GetHash(Contitionals,
Token->Params[0]->Start,
Token->Params[0]->len,
- &vConditional)) {
+ &vConditional) ||
+ (vConditional == NULL)) {
lprintf(1, "Conditional [%s] (in '%s' line %ld); Not found![%s]\n",
Token->Params[0]->Start,
ChrPtr(pTmpl->FileName),
Token->Line,
ChrPtr(Token->FlatToken));
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nConditional [%s] (in '%s' line %ld); Not found!\n[%s]\n</pre>\n",
+ Token->Params[0]->Start,
+ ChrPtr(pTmpl->FileName),
+ Token->Line,
+ ChrPtr(Token->FlatToken));
}
Cond = (ConditionalStruct *) vConditional;
- if (Cond == NULL) {
- lprintf(1, "Conditional [%s] (in '%s' line %ld); Not found![%s]\n",
+ if (Token->nParameters < Cond->nParams) {
+ lprintf(1, "Conditional [%s] (in '%s' line %ld); needs %ld Params![%s]\n",
Token->Params[0]->Start,
ChrPtr(pTmpl->FileName),
Token->Line,
+ Cond->nParams,
ChrPtr(Token->FlatToken));
- return 0;
- }
- if (Token->nParameters < Cond->nParams) {
- lprintf(1, "Conditional [%s] (in '%s' line %ld); needs %ld Params![%s]\n",
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nConditional [%s] (in '%s' line %ld); needs %ld Params!\n[%s]\n</pre>\n",
Token->Params[0]->Start,
ChrPtr(pTmpl->FileName),
Token->Line,
TmplGettext(Target, Token->nParameters, Token);
break;
case SV_CONDITIONAL: /** Forward conditional evaluation */
- return EvaluateConditional(Token, pTmpl, Context, 1, state);
+ return EvaluateConditional(Target, Token, pTmpl, Context, 1, state);
break;
case SV_NEG_CONDITIONAL: /** Reverse conditional evaluation */
- return EvaluateConditional(Token, pTmpl, Context, 0, state);
+ return EvaluateConditional(Target, Token, pTmpl, Context, 0, state);
break;
case SV_CUST_STR_CONDITIONAL: /** Conditional put custom strings from params */
if (Token->nParameters >= 6) {
- if (EvaluateConditional(Token, pTmpl, Context, 0, state))
+ if (EvaluateConditional(Target, Token, pTmpl, Context, 0, state))
StrBufAppendBufPlain(Target,
Token->Params[5]->Start,
Token->Params[5]->len,
if ((Token->nParameters < Handler->nMinArgs) ||
(Token->nParameters > Handler->nMaxArgs)) {
lprintf(1, "Handler [%s] (in '%s' line %ld); "
- "doesn't work with %ld params [%s]",
+ "doesn't work with %ld params [%s]\n",
Token->pName,
ChrPtr(pTmpl->FileName),
Token->Line,
Token->nParameters,
ChrPtr(Token->FlatToken));
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nHandler [%s] (in '%s' line %ld);"
+ " doesn't work with %ld params!\n[%s]\n</pre>\n",
+ Token->pName,
+ ChrPtr(pTmpl->FileName),
+ Token->Line,
+ Token->nParameters,
+ ChrPtr(Token->FlatToken));
}
else {
Handler->HandlerFunc(Target,
Token,
Context); /*TODO: subset of that */
-
}
}
else {
lprintf(1, "DBG: ----- loading: [%s] ------ \n",
ChrPtr(Tmpl->FileName));
pTmpl = load_template(Tmpl->FileName, NULL, NULL);
+ if(pTmpl == NULL) {
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nError loading Template [%s]\n See Logfile for details\n</pre>\n",
+ ChrPtr(Tmpl->FileName));
+ return;
+
+
+ }
+
}
pS = pData = ChrPtr(pTmpl->Data);
i++;
if ((pTmpl->Tokens[i]->Flags == SV_CONDITIONAL) ||
(pTmpl->Tokens[i]->Flags == SV_NEG_CONDITIONAL)) {
- if (state == EvaluateConditional(pTmpl->Tokens[i],
- pTmpl,
- Context,
- pTmpl->Tokens[i]->Flags,
- state))
+ if (state == EvaluateConditional(
+ Target,
+ pTmpl->Tokens[i],
+ pTmpl,
+ Context,
+ pTmpl->Tokens[i]->Flags,
+ state))
state = 0;
}
}
StaticLocal = LocalTemplateCache;
}
+ if (len == 0)
+ {
+ lprintf (1, "Can't to load a template with empty name!\n");
+ StrBufAppendPrintf(Target, "<pre>\nCan't to load a template with empty name!\n</pre>");
+ return;
+ }
+
if (!GetHash(StaticLocal, templatename, len, &vTmpl) &&
!GetHash(Static, templatename, len, &vTmpl)) {
- printf ("didn't find %s %ld %ld\n", templatename, len , (long)strlen(templatename));
+ lprintf (1, "didn't find Template [%s] %ld %ld\n", templatename, len , (long)strlen(templatename));
+ StrBufAppendPrintf(Target, "<pre>\ndidn't find Template [%s] %ld %ld\n</pre>",
+ templatename, len,
+ (long)strlen(templatename));
/// dbg_PrintHash(Static, PrintTemplate, NULL);
// PrintHash(Static, VarPrintTransition, PrintTemplate);
return;
d_without_ext --;
if ((d_without_ext == 0) || (d_namelen < 3))
continue;
+ if ((d_namelen > 1) && filedir_entry->d_name[d_namelen - 1] == '~')
+ continue; /* Ignore backup files... */
IsMobile = (strstr(filedir_entry->d_name, ".m.html")!= NULL);
PStart = filedir_entry->d_name;
StrBufPlain(Tag, filedir_entry->d_name, MinorPtr - filedir_entry->d_name);
- printf("%s %d %s\n",ChrPtr(FileName), IsMobile, ChrPtr(Tag));
+ lprintf(1, "%s %d %s\n",ChrPtr(FileName), IsMobile, ChrPtr(Tag));
if (LoadTemplates == 0)
load_template(FileName, Tag, (IsMobile)?wireless:big);
else
typedef struct _HashIterator {
HashList *StaticList;
+ int AdditionalParams;
RetrieveHashlistFunc GetHash;
HashDestructorFunc Destructor;
SubTemplFunc DoSubTemplate;
Tokens->Params[0]->len,
&vIt))
return;
+
It = (HashIterator*) vIt;
+
+ if (Tokens->nParameters < It->AdditionalParams + 2) {
+ lprintf(1, "Iterator [%s] (in line %ld); "
+ "doesn't work with %ld params [%s]\n",
+ Tokens->Params[0]->Start,
+ Tokens->Line,
+ Tokens->nParameters,
+ ChrPtr(Tokens->FlatToken));
+ StrBufAppendPrintf(
+ Target,
+ "<pre>Iterator [%s] \n(in line %ld);\n"
+ "doesn't work with %ld params \n[%s]\n</pre>",
+ Tokens->Params[0]->Start,
+ Tokens->Line,
+ Tokens->nParameters,
+ ChrPtr(Tokens->FlatToken));
+ return;
+ }
+
if (It->StaticList == NULL)
- List = It->GetHash();
+ List = It->GetHash(Tokens);
else
List = It->StaticList;
it = GetNewHashPos();
while (GetNextHashPos(List, it, &len, &Key, &vContext)) {
svprintf(HKEY("ITERATE:ODDEVEN"), WCS_STRING, "%s", (oddeven)?"odd":"even");
- It->DoSubTemplate(SubBuf, vContext);
+ svprintf(HKEY("ITERATE:KEY"), WCS_STRING, "%s",Key);
+ It->DoSubTemplate(SubBuf, vContext, Tokens);
DoTemplate(Tokens->Params[1]->Start,
Tokens->Params[1]->len,
vContext, SubBuf);
}
void RegisterITERATOR(const char *Name, long len,
+ int AdditionalParams,
HashList *StaticList,
RetrieveHashlistFunc GetHash,
SubTemplFunc DoSubTempl,
{
HashIterator *It = (HashIterator*)malloc(sizeof(HashIterator));
It->StaticList = StaticList;
+ It->AdditionalParams = AdditionalParams;
It->GetHash = GetHash;
It->DoSubTemplate = DoSubTempl;
It->Destructor = Destructor;
/// RegisterNamespace("SERV:LDAP_SUPP", 0, 0, tmmplput_serv_ldap_enabled);
RegisterNamespace("CURRENT_USER", 0, 0, tmplput_current_user);
RegisterNamespace("CURRENT_ROOM", 0, 0, tmplput_current_room);
- RegisterNamespace("ITERATE", 2, 4, tmpl_iterate_subtmpl);
+ RegisterNamespace("ITERATE", 2, 100, tmpl_iterate_subtmpl);
RegisterNamespace("DOBOXED", 1, 2, tmpl_do_boxed);
RegisterNamespace("DOTABBED", 2, 100, tmpl_do_tabbed);
RegisterConditional(HKEY("COND:SUBST"), 3, ConditionalVar);