]> code.citadel.org Git - citadel.git/blobdiff - webcit/subst.h
* first work on doing ical elements in templates. does nothing usefull yet.
[citadel.git] / webcit / subst.h
index 37ce34fe547f0d219650275242db1bd5bc2f0a7f..fec6d958925861a2f98d5a74f36798de4ece996f 100644 (file)
@@ -1,4 +1,4 @@
-
+\
 extern HashList *Conditionals;
 extern HashList *GlobalNS;
 extern HashList *Iterators;
@@ -50,8 +50,9 @@ enum {
 #define CTX_ROOMS 14
 #define CTX_FLOORS 15
 #define CTX_ITERATE 16
+#define CTX_ICAL 17
 
-#define CTX_UNKNOWN 17
+#define CTX_UNKNOWN 18
 
 
 /**
@@ -78,21 +79,6 @@ typedef void (*WCHandlerFunc)(StrBuf *Target, WCTemplputParams *TP);
 /* make a template token a lookup key: */
 #define TKEY(a) TP->Tokens->Params[a]->Start, TP->Tokens->Params[a]->len
 
-/* TODO: wcsubst should be private! */
-
-/*
- * \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;
-
-
 /**
  * this is the signature of a conditional function 
  * Note: Target is just passed in for error messages; don't write onto it in regular cases.
@@ -166,8 +152,6 @@ typedef struct _ConditionalStruct {
 } ConditionalStruct;
 
 
-
-
 typedef void (*SubTemplFunc)(StrBuf *TemplBuffer, WCTemplputParams *TP);
 typedef HashList *(*RetrieveHashlistFunc)(StrBuf *Target, WCTemplputParams *TP);
 typedef void (*HashDestructorFunc) (HashList **KillMe);
@@ -175,7 +159,7 @@ typedef void (*HashDestructorFunc) (HashList **KillMe);
 
 extern WCTemplputParams NoCtx;
 
-
+#define HAVE_PARAM(a) (TP->Tokens->nParameters > a)
 
 
 #define ERR_NAME 0
@@ -194,6 +178,15 @@ void LogTemplateError (StrBuf *Target,
                       WCTemplputParams *TP, 
                       const char *Format, ...)__attribute__((__format__(__printf__,5,6)));
 
+
+/**
+ * \Brief log an error while in global context; print it to Wildfire / Target
+ * \param Target your Target Buffer to print the error message next to the log
+ * \param Type What sort of thing are we talking about? Tokens? Conditionals?
+ * \param Format for the custom error message
+ */ 
+void LogError (StrBuf *Target, const char *Type, const char *Format, ...);
+
 /**
  * \Brief get the actual value of a token parameter
  * in your tmplputs or conditionals use this function to access parameters that can also be 
@@ -207,11 +200,31 @@ void LogTemplateError (StrBuf *Target,
  * \param Value reference to the string of the token; don't free me.
  * \param len the length of Value
  */
-void GetTemplateTokenString(WCTemplputParams *TP,
+void GetTemplateTokenString(StrBuf *Target, 
+                           WCTemplputParams *TP,
                            int N,
                            const char **Value, 
                            long *len);
 
+
+
+/**
+ * \Brief get the actual integer value of a token parameter
+ * in your tmplputs or conditionals use this function to access parameters that can also be 
+ * retrieved from dynamic facilities:
+ *  _ -> Gettext; retrieve this token from the i18n facilities
+ *  : -> lookup a setting of that name
+ *  B -> bstr; an URL-Parameter
+ *  = -> subtemplate; parse a template by this name, and treat its content as this tokens value 
+ * 
+ * \param N which token do you want to lookup?
+ * \param dflt default value to be retrieved if not found in preferences
+ * \returns the long value
+ */
+long GetTemplateTokenNumber(StrBuf *Target, 
+                           WCTemplputParams *TP, 
+                           int N, long dflt);
+
 /**
  * \Brief put a token value into the template
  * use this function to append your strings into a Template. 
@@ -284,7 +297,7 @@ void dbg_print_longvector(long *LongVector);
 
 
 #define do_template(a, b) DoTemplate(a, sizeof(a) -1, NULL, &NoCtx);
-void DoTemplate(const char *templatename, long len, StrBuf *Target, WCTemplputParams *TP);
+const StrBuf *DoTemplate(const char *templatename, long len, StrBuf *Target, WCTemplputParams *TP);
 void url_do_template(void);