Syntax;
#"ib_logoff"
will be resolved to the long value of ib_logoff at parse time
HashList *Iterators;
HashList *Conditionals;
HashList *SortHash;
HashList *Iterators;
HashList *Conditionals;
HashList *SortHash;
int DumpTemplateI18NStrings = 0;
int LoadTemplates = 0;
int DumpTemplateI18NStrings = 0;
int LoadTemplates = 0;
switch (TP->Tokens->Params[N]->Type) {
switch (TP->Tokens->Params[N]->Type) {
case TYPE_STR:
*Value = TP->Tokens->Params[N]->Start;
*len = TP->Tokens->Params[N]->len;
case TYPE_STR:
*Value = TP->Tokens->Params[N]->Start;
*len = TP->Tokens->Params[N]->len;
}
if (get_PREF_LONG(TKEY(N), &Ret, dflt))
return Ret;
}
if (get_PREF_LONG(TKEY(N), &Ret, dflt))
return Ret;
+ return 0;
+ case TYPE_INTDEFINE:
case TYPE_LONG:
return TP->Tokens->Params[N]->lvalue;
case TYPE_PREFINT:
case TYPE_LONG:
return TP->Tokens->Params[N]->lvalue;
case TYPE_PREFINT:
Template->Tokens[(Template->nTokensUsed)++] = NewToken;
}
Template->Tokens[(Template->nTokensUsed)++] = NewToken;
}
-TemplateParam *GetNextParameter(StrBuf *Buf, const char **pCh, const char *pe, WCTemplateToken *Tokens, WCTemplate *pTmpl)
+TemplateParam *GetNextParameter(StrBuf *Buf,
+ const char **pCh,
+ const char *pe,
+ WCTemplateToken *Tokens,
+ WCTemplate *pTmpl,
+ WCTemplputParams *TP)
{
const char *pch = *pCh;
const char *pchs, *pche;
{
const char *pch = *pCh;
const char *pchs, *pche;
+ else if (*pch == '#') {
+ Parm->Type = TYPE_INTDEFINE;
+ pch ++;
+ }
else if (*pch == '_') {
Parm->Type = TYPE_GETTEXT;
pch ++;
else if (*pch == '_') {
Parm->Type = TYPE_GETTEXT;
pch ++;
if (DumpTemplateI18NStrings && (Parm->Type == TYPE_GETTEXT)) {
StrBufAppendPrintf(I18nDump, "_(\"%s\");\n", Parm->Start);
}
if (DumpTemplateI18NStrings && (Parm->Type == TYPE_GETTEXT)) {
StrBufAppendPrintf(I18nDump, "_(\"%s\");\n", Parm->Start);
}
+ if (Parm->Type == TYPE_INTDEFINE)
+ {
+ void *vPVal;
+
+ if (GetHash(Defines, Parm->Start, Parm->len, &vPVal) &&
+ (vPVal != NULL))
+ {
+ long *PVal;
+ PVal = (long*) vPVal;
+
+ Parm->lvalue = *PVal;
+ }
+ else
+ {
+ LogTemplateError(NULL, "Define", ERR_PARM1, TP,
+ "%s isn't known!!",
+ Parm->Start);
+ }
+ }
*pCh = pch;
return Parm;
}
*pCh = pch;
return Parm;
}
"Warning, Non welformed Token; missing right parenthesis");
}
while (pch < pTmplEnd - 1) {
"Warning, Non welformed Token; missing right parenthesis");
}
while (pch < pTmplEnd - 1) {
- Param = GetNextParameter(Buf, &pch, pTmplEnd - 1, NewToken, pTmpl);
+ Param = GetNextParameter(Buf, &pch, pTmplEnd - 1, NewToken, pTmpl, &TP);
if (Param != NULL) {
NewToken->HaveParameters = 1;
if (NewToken->nParameters > MAXPARAM) {
if (Param != NULL) {
NewToken->HaveParameters = 1;
if (NewToken->nParameters > MAXPARAM) {
Put(Conditionals, Name, len, Cond, NULL);
}
Put(Conditionals, Name, len, Cond, NULL);
}
+void RegisterTokenParamDefine(const char *Name, long len,
+ long Value)
+{
+ long *PVal;
+
+ PVal = (long*)malloc(sizeof(long));
+ *PVal = Value;
+ Put(Defines, Name, len, PVal, NULL);
+}
+
+HashList *Defines;
+
/*-----------------------------------------------------------------------------
* Context Strings
*/
/*-----------------------------------------------------------------------------
* Context Strings
*/
Iterators = NewHash(1, NULL);
Conditionals = NewHash(1, NULL);
SortHash = NewHash(1, NULL);
Iterators = NewHash(1, NULL);
Conditionals = NewHash(1, NULL);
SortHash = NewHash(1, NULL);
+ Defines = NewHash(1, NULL);
DeleteHash(&Iterators);
DeleteHash(&Conditionals);
DeleteHash(&SortHash);
DeleteHash(&Iterators);
DeleteHash(&Conditionals);
DeleteHash(&SortHash);
#define TYPE_GETTEXT 5
#define TYPE_BSTR 6
#define TYPE_SUBTEMPLATE 7
#define TYPE_GETTEXT 5
#define TYPE_BSTR 6
#define TYPE_SUBTEMPLATE 7
+#define TYPE_INTDEFINE 8
WCConditionalFunc CondF,
int ContextRequired);
WCConditionalFunc CondF,
int ContextRequired);
+/**
+ * @brief register a string that will represent a long value
+ * this will allow to resolve <?...(#"Name")> to Value; that way
+ * plain strings can be used an lexed in templates without having the
+ * lookup overhead at runtime.
+ * @param Name The name of the define
+ * @param len length of Name
+ * @param Value the value to associate with Name
+ */
+void RegisterTokenParamDefine(const char *Name, long len,
+ long Value);
#define IT_NOFLAG 0
#define IT_FLAG_DETECT_GROUPCHANGE (1<<0)
#define IT_NOFLAG 0
#define IT_FLAG_DETECT_GROUPCHANGE (1<<0)