int DumpTemplateI18NStrings = 0;
int LoadTemplates = 0;
-int dbg_bactrace_template_errors = 0;
+int dbg_backtrace_template_errors = 0;
WCTemplputParams NoCtx;
StrBuf *I18nDump = NULL;
"Context ITERATE",
"Context ICAL",
"Context DavNamespace",
+ "Context TAB",
"Context UNKNOWN"
};
FreeStrBuf(&Info);
FreeStrBuf(&Error);
/*
- if (dbg_bactrace_template_errors)
+ if (dbg_backtrace_template_errors)
wc_backtrace();
*/
}
FreeStrBuf(&Info);
FreeStrBuf(&Error);
/*
- if (dbg_bactrace_template_errors)
+ if (dbg_backtrace_template_errors)
wc_backtrace();
*/
}
Parm->lvalue = *PVal;
}
- else
+ else if (strchr(Parm->Start, '|') != NULL)
{
+ const char *Pos;
+ StrBuf *pToken;
+ StrBuf *Match;
+
+ Parm->MaskBy = eOR;
+ pToken = NewStrBufPlain (Parm->Start, Parm->len);
+ Match = NewStrBufPlain (NULL, Parm->len);
+ Pos = ChrPtr(pToken);
+
+ while ((Pos != NULL) && (Pos != StrBufNOTNULL))
+ {
+ StrBufExtract_NextToken(Match, pToken, &Pos, '|');
+ StrBufTrim(Match);
+ if (StrLength (Match) > 0)
+ {
+ if (GetHash(Defines, SKEY(Match), &vPVal) &&
+ (vPVal != NULL))
+ {
+ long *PVal;
+ PVal = (long*) vPVal;
+
+ Parm->lvalue |= *PVal;
+ }
+ else {
+ LogTemplateError(NULL, "Define",
+ Tokens->nParameters,
+ TP,
+ "%s isn't known!!",
+ ChrPtr(Match));
+
+ }
+ }
+ }
+ }
+ else if (strchr(Parm->Start, '&') != NULL)
+ {
+ const char *Pos;
+ StrBuf *pToken;
+ StrBuf *Match;
+
+ Parm->MaskBy = eAND;
+ pToken = NewStrBufPlain (Parm->Start, Parm->len);
+ Match = NewStrBufPlain (NULL, Parm->len);
+ Pos = ChrPtr(pToken);
+
+ while ((Pos != NULL) && (Pos != StrBufNOTNULL))
+ {
+ StrBufExtract_NextToken(Match, pToken, &Pos, '&');
+ StrBufTrim(Match);
+ if (StrLength (Match) > 0)
+ {
+ if (GetHash(Defines, SKEY(Match), &vPVal) &&
+ (vPVal != NULL))
+ {
+ long *PVal;
+ PVal = (long*) vPVal;
+
+ Parm->lvalue |= *PVal;
+ }
+ else {
+ LogTemplateError(NULL, "Define",
+ Tokens->nParameters,
+ TP,
+ "%s isn't known!!",
+ ChrPtr(Match));
+
+ }
+ }
+ }
+ }
+ else {
+
+
LogTemplateError(NULL, "Define",
Tokens->nParameters,
TP,
}
+
+void tmplput_Comment(StrBuf *Target, WCTemplputParams *TP)
+{
+ if (LoadTemplates != 0)
+ {
+ StrBuf *Comment;
+ const char *pch;
+ long len;
+
+ GetTemplateTokenString(Target, TP, 2, &pch, &len);
+ Comment = NewStrBufPlain(pch, len);
+ StrBufAppendTemplate(Target, TP, Comment, 1);
+
+ FreeStrBuf(&Comment);
+ }
+}
+
/*-----------------------------------------------------------------------------
* Iterators
*/
/*-----------------------------------------------------------------------------
* Tabbed-API
*/
+
+typedef struct _tab_struct {
+ long CurrentTab;
+ StrBuf *TabTitle;
+} tab_struct;
+
int preeval_do_tabbed(WCTemplateToken *Token)
{
WCTemplputParams TPP;
{
StrBuf **TabNames;
int i, ntabs, nTabs;
+ tab_struct TS;
+ WCTemplputParams SubTP;
+
+ memset(&TS, 0, sizeof(tab_struct));
+ memcpy (&SubTP, &TP, sizeof(WCTemplputParams));
nTabs = ntabs = TP->Tokens->nParameters / 2;
TabNames = (StrBuf **) malloc(ntabs * sizeof(StrBuf*));
nTabs --;
}
}
+ memcpy (&SubTP, TP, sizeof(WCTemplputParams));
+ SubTP.Filter.ControlContextType = CTX_TAB;
+ SubTP.ControlContext = &TS;
StrTabbedDialog(Target, nTabs, TabNames);
for (i = 0; i < ntabs; i++) {
- StrBeginTab(Target, i, nTabs);
- DoTemplate(TKEY(i * 2 + 1), Target, TP);
+ memset(&TS, 0, sizeof(tab_struct));
+ TS.CurrentTab = i;
+ TS.TabTitle = TabNames[i];
+ StrBeginTab(Target, i, nTabs, TabNames);
+ DoTemplate(TKEY(i * 2 + 1), Target, &SubTP);
StrEndTab(Target, i, nTabs);
}
for (i = 0; i < ntabs; i++)
FreeStrBuf(&TabNames[i]);
}
+void tmplput_TAB_N(StrBuf *Target, WCTemplputParams *TP)
+{
+ tab_struct *Ctx = CCTX;
+
+ StrBufAppendPrintf(Target, "%d", Ctx->CurrentTab);
+}
+
+void tmplput_TAB_TITLE(StrBuf *Target, WCTemplputParams *TP)
+{
+ tab_struct *Ctx = CCTX;
+ StrBufAppendTemplate(Target, TP, Ctx->TabTitle, 0);
+}
/*-----------------------------------------------------------------------------
* Sorting-API
(void)
{
memset(&NoCtx, 0, sizeof(WCTemplputParams));
+ RegisterNamespace("--", 0, 2, tmplput_Comment, NULL, CTX_NONE);
RegisterNamespace("SORT:ICON", 1, 2, tmplput_SORT_ICON, NULL, CTX_NONE);
RegisterNamespace("SORT:ORDER", 1, 2, tmplput_SORT_ORDER, NULL, CTX_NONE);
RegisterNamespace("SORT:NEXT", 1, 2, tmplput_SORT_NEXT, NULL, CTX_NONE);
RegisterNamespace("CONTEXTSTR", 0, 1, tmplput_ContextString, NULL, CTX_STRBUF);
- RegisterNamespace("CONTEXTSTRARR", 1, 2, tmplput_ContextStringArray, NULL, CTX_STRBUF);
+ RegisterNamespace("CONTEXTSTRARR", 1, 2, tmplput_ContextStringArray, NULL, CTX_STRBUFARR);
RegisterNamespace("ITERATE", 2, 100, tmpl_iterate_subtmpl, preeval_iterate, CTX_NONE);
RegisterNamespace("DOBOXED", 1, 2, tmpl_do_boxed, NULL, CTX_NONE);
RegisterNamespace("DOTABBED", 2, 100, tmpl_do_tabbed, preeval_do_tabbed, CTX_NONE);
+ RegisterControlNS(HKEY("TAB:N"), 0, 0, tmplput_TAB_N, CTX_TAB);
+ RegisterControlNS(HKEY("TAB:SUBJECT"), 0, 1, tmplput_TAB_TITLE, CTX_TAB);
+
+
RegisterNamespace("LONGVECTOR", 1, 1, tmplput_long_vector, NULL, CTX_LONGVECTOR);
RegisterConditional(HKEY("COND:CONTEXTSTRARR"), 4, ConditionalContextStrinArray, CTX_STRBUFARR);
RegisterConditional(HKEY("COND:LONGVECTOR"), 4, ConditionalLongVector, CTX_LONGVECTOR);
+
RegisterControlConditional(HKEY("COND:ITERATE:ISGROUPCHANGE"), 2,
conditional_ITERATE_ISGROUPCHANGE,
CTX_ITERATE);