HashList *Conditionals;
HashList *SortHash;
+int DumpTemplateI18NStrings = 0;
int LoadTemplates = 0;
int dbg_bactrace_template_errors = 0;
WCTemplputParams NoCtx;
+StrBuf *I18nDump = NULL;
#define SV_GETTEXT 1
#define SV_CONDITIONAL 2
#define SV_SUBTEMPL 5
#define SV_PREEVALUATED 6
+
+/*
+ * \brief Dynamic content for variable substitution in templates
+ */
+typedef struct _wcsubst {
+ ContextFilter Filter;
+ int wcs_type; /* which type of Substitution are we */
+ char wcs_key[32]; /* copy of our hashkey for debugging */
+ StrBuf *wcs_value; /* if we're a string, keep it here */
+ long lvalue; /* type long? keep data here */
+ WCHandlerFunc wcs_function; /* funcion hook ???*/
+} wcsubst;
+
+
typedef struct _WCTemplate {
StrBuf *Data;
StrBuf *FileName;
Type,
ChrPtr(Error));
}
+/*
if (Target == NULL)
return;
+*/
WCC = WC;
+ if (WCC == NULL)
+ return;
+
Header = NewStrBuf();
if (TP->Tokens != NULL)
{
Error,
eERROR), 1);
*/
- WildFireSerializePayload(Header, WCC->HBuf, &WCC->nWildfireHeaders, NULL);
+ WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
}
else
{
ChrPtr(Error),
ChrPtr(TP->Tokens->FlatToken));
SerializeJson(Header, WildFireException(HKEY(__FILE__), __LINE__, Info, 1), 1);
- WildFireSerializePayload(Header, WCC->HBuf, &WCC->nWildfireHeaders, NULL);
+ WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
}
FreeStrBuf(&Header);
FreeStrBuf(&Info);
}
+
+
+void LogError (StrBuf *Target, const char *Type, const char *Format, ...)
+{
+ wcsession *WCC;
+ StrBuf *Header;
+ StrBuf *Error;
+ StrBuf *Info;
+ va_list arg_ptr;
+
+ Info = NewStrBuf();
+ Error = NewStrBuf();
+
+ va_start(arg_ptr, Format);
+ StrBufVAppendPrintf(Error, Format, arg_ptr);
+ va_end(arg_ptr);
+
+ lprintf(1, ChrPtr(Error));
+
+ WCC = WC;
+ Header = NewStrBuf();
+
+
+ SerializeJson(Header, WildFireException(Type, strlen(Type),
+ 0,
+ Info,
+ 1), 1);
+ WildFireSerializePayload(Header, WCC->HBuf, &WCC->Hdr->nWildfireHeaders, NULL);
+
+ FreeStrBuf(&Header);
+ FreeStrBuf(&Info);
+ FreeStrBuf(&Error);
+/*
+ if (dbg_bactrace_template_errors)
+ wc_backtrace();
+*/
+}
+
+
void RegisterNS(const char *NSName,
long len,
int nMinArgs,
StrEscAppend(Target, Source, NULL, 0, 0);
break;
case 'J':
- StrECMAEscAppend(Target, Source, NULL);
+ StrECMAEscAppend(Target, Source, NULL);
break;
+ case 'U':
+ StrBufUrlescAppend(Target, Source, NULL);
+ break;
default:
StrBufAppendBuf(Target, Source, 0);
}
(*pch == ',' )||
(*pch == '\n')) pch ++;
+ if (DumpTemplateI18NStrings && (Parm->Type == TYPE_GETTEXT)) {
+ StrBufAppendPrintf(I18nDump, "_(\"%s\");\n", Parm->Start);
+ }
*pCh = pch;
return Parm;
}
NewToken->Flags = 0;
break;
}
+ if (DumpTemplateI18NStrings) {
+ StrBufAppendPrintf(I18nDump, "_(\"%s\");\n", NewToken->Params[0]->Start);
+ }
break;
case SV_SUBTEMPL:
if (NewToken->nParameters != 1) {
Put(Iterators, Name, len, It, NULL);
}
-/* typedef struct _iteratestruct {
+typedef struct _iteratestruct {
int GroupChange;
int oddeven;
const char *Key;
long KeyLen;
int n;
int LastN;
- }IterateStruct; */
+ }IterateStruct;
void tmpl_iterate_subtmpl(StrBuf *Target, WCTemplputParams *TP)
{
SubTP.Filter.ControlContextType = CTX_ITERATE;
SubTP.ControlContext = &Status;
+ if (HAVE_PARAM(2)) {
+ StartAt = GetTemplateTokenNumber(Target, TP, 2, 0);
+ }
if (HAVE_PARAM(3)) {
- StartAt = GetTemplateTokenNumber(Target, TP, 3, 0);
+ StepWidth = GetTemplateTokenNumber(Target, TP, 3, 0);
}
if (HAVE_PARAM(4)) {
- StepWidth = GetTemplateTokenNumber(Target, TP, 4, 0);
- }
- if (HAVE_PARAM(5)) {
- StopAt = GetTemplateTokenNumber(Target, TP, 5, -1);
+ StopAt = GetTemplateTokenNumber(Target, TP, 4, -1);
}
it = GetNewHashPos(List, StepWidth);
if (StopAt < 0) {
RegisterControlNS(HKEY("ITERATE:N"), 0, 0, tmplput_ITERATE_LASTN, CTX_ITERATE);
}
+void
+ServerStartModule_SUBST
+(void)
+{
+ WirelessTemplateCache = NewHash(1, NULL);
+ WirelessLocalTemplateCache = NewHash(1, NULL);
+ LocalTemplateCache = NewHash(1, NULL);
+ TemplateCache = NewHash(1, NULL);
+
+ GlobalNS = NewHash(1, NULL);
+ Iterators = NewHash(1, NULL);
+ Conditionals = NewHash(1, NULL);
+ SortHash = NewHash(1, NULL);
+}
+
+void
+FinalizeModule_SUBST
+(void)
+{
+
+}
+
+void
+ServerShutdownModule_SUBST
+(void)
+{
+ DeleteHash(&WirelessTemplateCache);
+ DeleteHash(&WirelessLocalTemplateCache);
+ DeleteHash(&TemplateCache);
+ DeleteHash(&LocalTemplateCache);
+
+ DeleteHash(&GlobalNS);
+ DeleteHash(&Iterators);
+ DeleteHash(&Conditionals);
+ DeleteHash(&SortHash);
+
+}
+
+
+void
+SessionNewModule_SUBST
+(wcsession *sess)
+{
+
+}
+
+void
+SessionAttachModule_SUBST
+(wcsession *sess)
+{
+ sess->vars = NewHash(1,NULL);
+}
+
+void
+SessionDetachModule_SUBST
+(wcsession *sess)
+{
+ DeleteHash(&sess->vars);
+}
+
+void
+SessionDestroyModule_SUBST
+(wcsession *sess)
+{
+
+}
+
+
+
+
/*@}*/