Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 17758)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 17759)
@@ -190,4 +190,5 @@
         FACTORY_MAP.put("lower", Factory.of(String.class, Functions::lower));
         FACTORY_MAP.put("minus", Factory.ofNumberVarArgs(Functions::minus));
+        FACTORY_MAP.put("mod", Factory.of(float.class, float.class, Functions::mod));
         FACTORY_MAP.put("not", Factory.of(boolean.class, Functions::not));
         FACTORY_MAP.put("not_equal", Factory.of(Object.class, Object.class, Functions::not_equal));
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 17758)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 17759)
@@ -112,4 +112,14 @@
 
     /**
+     * Function associated to the math modulo "%" operator.
+     * @param a first value
+     * @param b second value
+     * @return {@code a mod b}, e.g., {@code mod(7, 5) = 2}
+     */
+    public static float mod(float a, float b) { // NO_UCD (unused code)
+        return a % b;
+    }
+
+    /**
      * Creates a list of values, e.g., for the {@code dashes} property.
      * @param ignored The environment (ignored)
