Add modulo operator for the list iterator so the templates can do multi level list...
[citadel.git] / webcit / subst.c
index 7aa54bff8ad451b36691366c016413487941051a..e76044f48b5619685c8bff4bc3e4e084e831ee92 100644 (file)
@@ -2242,10 +2242,20 @@ int conditional_ITERATE_FIRSTN(StrBuf *Target, WCTemplputParams *TP)
        return Ctx->n == 0;
 }
 
+int conditional_ITERATE_ISMOD(StrBuf *Target, WCTemplputParams *TP)
+{
+       IterateStruct *Ctx = CTX(CTX_ITERATE);
+       
+       return Ctx->n == 0;
+}
+
 int conditional_ITERATE_LASTN(StrBuf *Target, WCTemplputParams *TP)
 {
        IterateStruct *Ctx = CTX(CTX_ITERATE);
-       return Ctx->LastN;
+
+       long divisor = GetTemplateTokenNumber(Target, TP, 2, 1);
+       long expectRemainder = GetTemplateTokenNumber(Target, TP, 2, 1);
+       return Ctx->n % divisor == expectRemainder;
 }
 
 
@@ -2978,6 +2988,9 @@ InitModule_SUBST
        RegisterConditional("COND:ITERATE:FIRSTN", 2, 
                            conditional_ITERATE_FIRSTN, 
                            CTX_ITERATE);
+       RegisterConditional("COND:ITERATE:ISMOD", 3, 
+                           conditional_ITERATE_ISMOD, 
+                           CTX_ITERATE);
 
        RegisterNamespace("ITERATE:ODDEVEN", 0, 0, tmplput_ITERATE_ODDEVEN, NULL, CTX_ITERATE);
        RegisterNamespace("ITERATE:KEY", 0, 0, tmplput_ITERATE_KEY, NULL, CTX_ITERATE);