]> code.citadel.org Git - citadel.git/blobdiff - webcit/subst.c
ICAL: some work on adding ical items into templates
[citadel.git] / webcit / subst.c
index 52f50f4489d3a4e9f4827c0bcbe8101b91688b91..1370ca5b5fd7e6af2507b95c712bc14f4a3c6a17 100644 (file)
@@ -448,6 +448,7 @@ int HaveTemplateTokenString(StrBuf *Target,
        case TYPE_STR:
        case TYPE_BSTR:
        case TYPE_PREFSTR:
+       case TYPE_ROOMPREFSTR:
        case TYPE_GETTEXT:
        case TYPE_SUBTEMPLATE:
                return 1;
@@ -509,6 +510,19 @@ void GetTemplateTokenString(StrBuf *Target,
                *Value = ChrPtr(Buf);
                *len = StrLength(Buf);
                break;
+       case TYPE_ROOMPREFSTR:
+               if (TP->Tokens->Params[N]->len == 0) {
+                       LogTemplateError(Target, 
+                                        "TokenParameter", N, TP, 
+                                        "Requesting parameter %d; of type PREFSTR, empty lookup string not admitted.", N);
+                       *len = 0;
+                       *Value = EmptyStr;
+                       break;
+               }
+               Buf = get_ROOM_PREFS(TKEY(N));
+               *Value = ChrPtr(Buf);
+               *len = StrLength(Buf);
+               break;
        case TYPE_LONG:
                LogTemplateError(Target, 
                                 "TokenParameter", N, TP, 
@@ -588,6 +602,19 @@ long GetTemplateTokenNumber(StrBuf *Target, WCTemplputParams *TP, int N, long df
                if (get_PREF_LONG(TKEY(N), &Ret, dflt))
                        return Ret;
                return 0;
+       case TYPE_ROOMPREFSTR:
+               LogTemplateError(Target, 
+                                "TokenParameter", N, TP, 
+                                "requesting a prefstring in param %d want a number", N);
+               if (TP->Tokens->Params[N]->len == 0) {
+                       LogTemplateError(Target, 
+                                        "TokenParameter", N, TP, 
+                                        "Requesting parameter %d; of type PREFSTR, empty lookup string not admitted.", N);
+                       return 0;
+               }
+               if (get_ROOM_PREFS_LONG(TKEY(N), &Ret, dflt))
+                       return Ret;
+               return 0;
        case TYPE_INTDEFINE:
        case TYPE_LONG:
                return TP->Tokens->Params[N]->lvalue;
@@ -667,6 +694,55 @@ void StrBufAppendTemplate(StrBuf *Target,
        }
 }
 
+/*
+ * puts string into the template and computes which escape methon we should use
+ * Source = the string we should put into the template
+ * FormatTypeIndex = where should we look for escape types if?
+ */
+void StrBufAppendTemplateStr(StrBuf *Target, 
+                            WCTemplputParams *TP,
+                            const char *Source, int FormatTypeIndex)
+{
+       const char *pFmt = NULL;
+       char EscapeAs = ' ';
+
+       if ((FormatTypeIndex < TP->Tokens->nParameters) &&
+           (TP->Tokens->Params[FormatTypeIndex]->Type == TYPE_STR) &&
+           (TP->Tokens->Params[FormatTypeIndex]->len >= 1)) {
+               pFmt = TP->Tokens->Params[FormatTypeIndex]->Start;
+               EscapeAs = *pFmt;
+       }
+
+       switch(EscapeAs)
+       {
+       case 'H':
+               StrEscAppend(Target, NULL, Source, 0, 2);
+               break;
+       case 'X':
+               StrEscAppend(Target, NULL, Source, 0, 0);
+               break;
+       case 'J':
+               StrECMAEscAppend(Target, NULL, Source);
+         break;
+       case 'K':
+               StrHtmlEcmaEscAppend(Target, NULL, Source, 0, 0);
+         break;
+       case 'U':
+               StrBufUrlescAppend(Target, NULL, Source);
+               break;
+/*
+       case 'F':
+               if (pFmt != NULL)       pFmt++;
+               else                    pFmt = "JUSTIFY";
+               if (*pFmt == '\0')      pFmt = "JUSTIFY";
+               FmOut(Target, pFmt, Source);
+               break;
+*/
+       default:
+               StrBufAppendBufPlain(Target, Source, 0, 0);
+       }
+}
+
 
 void PutNewToken(WCTemplate *Template, WCTemplateToken *NewToken)
 {
@@ -730,6 +806,14 @@ int GetNextParameter(StrBuf *Buf,
                        ParamBrace = 1;
                }
        }
+       else if (*pch == '.') {
+               Parm->Type = TYPE_ROOMPREFSTR;
+               pch ++;
+               if (*pch == '(') {
+                       pch ++;
+                       ParamBrace = 1;
+               }
+       }
        else if (*pch == ';') {
                Parm->Type = TYPE_PREFINT;
                pch ++;