diff --git a/autotests/folding/test.mss.fold b/autotests/folding/test.mss.fold index a2689ef..875db72 100644 --- a/autotests/folding/test.mss.fold +++ b/autotests/folding/test.mss.fold @@ -1,215 +1,275 @@ /* kate: hl CartoCSS This file contains some content coming from https://github.com/gravitystorm/openstreetmap-carto with CC0 license. This file is just for testing katepart highlighting engine. */ #world { // this syntax polygon-opacity: 50%; // is equivalent to polygon-opacity: 0.5; } @admin-boundaries: #ac46ac; /* For performance reasons, the admin border layers are split into three groups for low, middle and high zoom levels. For each zoomlevel, all borders come from a single attachment, to handle overlapping borders correctly. */ #admin-low-zoom[zoom < 11], // test #admin-mid-zoom[zoom >= 11][zoom < 13], #admin-high-zoom[zoom >= 13] { [admin_level = '2'], [admin_level = '3'] { [zoom >= 4] { background/line-color: white; background/line-width: 0.6; line-color: @admin-boundaries; line-width: 0.6; } [zoom >= 7] { background/line-width: 2; line-width: 2; } [zoom >= 10] { [admin_level = '2'] { background/line-width: 6; line-width: 6; } [admin_level = '3'] { background/line-width: 5; line-width: 5; line-dasharray: 4,2; line-clip: false; } } } [admin_level = '4'] { [zoom >= 4] { background/line-color: white; background/line-width: 0.6; line-color: @admin-boundaries; line-width: 0.6; line-dasharray: 4,3; line-clip: false; } [zoom >= 7] { background/line-width: 1; line-width: 1; } [zoom >= 11] { background/line-width: 3; line-width: 3; } } /* The following code prevents admin boundaries from being rendered on top of each other. Comp-op works on the entire attachment, not on the individual border. Therefore, this code generates an attachment containing a set of @admin-boundaries/white dashed lines (of which only the top one is visible), and with `comp-op: darken` the white part is ignored, while the @admin-boundaries colored part is rendered (as long as the background is not darker than @admin-boundaries). The SQL has `ORDER BY admin_level`, so the boundary with the lowest admin_level is rendered on top, and therefore the only visible boundary. */ opacity: 0.4; comp-op: darken; } #admin-mid-zoom[zoom >= 11][zoom < 13], #admin-high-zoom[zoom >= 13] { [admin_level = '5'][zoom >= 11] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 6,3,2,3,2,3; line-clip: false; } [admin_level = '6'][zoom >= 11] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 6,3,2,3; line-clip: false; } [admin_level = '7'], [admin_level = '8'] { [zoom >= 12] { background/line-color: white; background/line-width: 1.5; line-color: @admin-boundaries; line-width: 1.5; line-dasharray: 5,2; line-clip: false; } } opacity: 0.5; comp-op: darken; } #admin-high-zoom[zoom >= 13] { [admin_level = '9'], [admin_level = '10'] { [zoom >= 13] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 2,3; line-clip: false; } } opacity: 0.5; comp-op: darken; } #nature-reserve-boundaries { [way_pixels > 100][zoom >= 7] { [zoom < 10] { ::fill { opacity: 0.05; polygon-fill: green; } } a/line-width: 1; a/line-offset: -0.5; a/line-color: green; a/line-opacity: 0.15; a/line-join: round; a/line-cap: round; b/line-width: 2; b/line-offset: -1; b/line-color: green; b/line-opacity: 0.15; b/line-join: round; b/line-cap: round; [zoom >= 10] { a/line-width: 2; a/line-offset: -1; b/line-width: 4; b/line-offset: -2; } [zoom >= 14] { b/line-width: 6; b/line-offset: -3; } } } #building-text { [zoom >= 14][way_pixels > 3000], [zoom >= 17] { text-name: "[name]"; text-size: 11; text-fill: #444; text-face-name: @book-fonts; text-halo-radius: 1; text-wrap-width: 20; text-halo-fill: rgba(255,255,255,0.5); text-placement: interior; } } @marina-text: #576ddf; // also swimming_pool @landcover-face-name: @oblique-fonts; @standard-wrap-width: 30; .points { [feature = 'tourism_alpine_hut'][zoom >= 13] { point-file: url('symbols/alpinehut.p.16.png'); point-placement: interior; } } [feature = 'highway_bus_stop'] { [zoom >= 16] { marker-file: url('symbols/square.svg'); marker-fill: @transportation-icon; marker-placement: interior; marker-width: 6; } [zoom >= 17] { marker-file: url('symbols/bus_stop.p.12.png'); marker-width: 12; } } [feature = 'highway_primary'] { [zoom >= 7][zoom < 12] { line-width: 0.5; line-color: @primary-fill; [zoom >= 9] { line-width: 1.2; } [zoom >= 10] { line-width: 2; } [zoom >= 11] { line-width: .5; } } } + +#world { + // this syntax + polygon-opacity: 50%; // the parameter “polygon-opacity” gets the value 0.5 (expressed in %) + // is equivalent to + polygon-opacity: 0.5; +} + +/* +Variables behave similar to C macros +*/ +@lsdjkf: @sdlfkj; // this variable gets defined by the value of another variable +@admin-boundaries: #ac46ac; // this variable gets defined by a color value +@way_pixels: "([way_area]*pow(4,@zoom)/24505740000)"; // A rather complex variable. [way_area] marks a data field. @zoom is a special runtime value (inspite of the @ it has nothing to do with ordinary variables) + +/* This is +a multiline comment. +*/ + +// A single line comment +#admin-low-zoom[zoom < 11], // A single line comment +#admin-mid-zoom[zoom >= 11][zoom < 13] { + [admin_level = '2'], // Within filters, data fields like “admin_level” are referended without extra [] brackets. + [admin_level = '3'] { // These data fields are rendered by default in dark blue, while the data field within expression strings are rendered by default in light blue. + [zoom >= 4] { + background/line-color: white; // symbolizer named “background” + background/line-width: 0.6; // symbolizer named “background” + line-color: @admin-boundaries; // default symbolizer (without name) + name: [test]; // simplified reference to the data field “test” + name: "[test]"; // another reference to the data field “test”, this time within an expression string (by default orange) + name: "([way_area]*pow(4,@zoom)/24505740000)"; // a rather complex expression string that will do some math + name: "'Value: '[test]"; // A verbatim string (by default red) as part of an expression string + name: '"Value: "[test]'; // " and ' are interchangable. The outer is always the expression string and the inner the verbatim string. + } + } + [admin_level = '4'] { // The string '4' is red because at this position it will be interpreted as a verbatim string, not as an expression string. + [zoom >= 4] { + line-dasharray: 4,3; // parameter “line-dasharray” gets as value a list of two integers + line-clip: false; // parameter “line-clip” gets as value a boolean + } + } + comp-op: darken; // parameter “comp-op” gets as value “darken”. +} + +.nature-reserve-boundaries { // .nature-reserve-boudaries references a class, which is similar to a layer like #building-text, so both are rendered the same way + [way_pixels > 100][zoom >= 7] { // Here zoom is a keyword with results in a special filter. However, all other values are interpreted as data fields. + [zoom < 10] { + ::fill { // The :: syntax defined “attachments” (a sort of sub-layer within normal layers). So “fill” is rendered by default in the same style like layer names and class names (but this can be customized). + opacity: 0.05; + // various styles to define colors (all except the color function are rendered the same way): + polygon-fill: white; + polygon-fill: #ffffff; + polygon-fill: #fff; + polygon-fill: rgba(255,255,255,1); // define a color by a speciel function + polygon-fill: #ffff; // invalid color value + text-placement: interior; // all unknown values are hightlighted as named values. + } + } + } +} diff --git a/autotests/html/test.mss.html b/autotests/html/test.mss.html index 47b6292..b8e493d 100644 --- a/autotests/html/test.mss.html +++ b/autotests/html/test.mss.html @@ -1,222 +1,282 @@ test.mss
 /* kate: hl CartoCSS
    This file contains some content coming from
    https://github.com/gravitystorm/openstreetmap-carto
    with CC0 license. This file is just for testing
    katepart highlighting engine.
    */
 
-#world {
+#world {
 // this syntax
-polygon-opacity: 50%;
+polygon-opacity: 50%;
 
 // is equivalent to
-polygon-opacity: 0.5;
-}
+polygon-opacity: 0.5;
+}
 
-@admin-boundaries: #ac46ac;
+@admin-boundaries: #ac46ac;
 
 /* For performance reasons, the admin border layers are split into three groups
 for low, middle and high zoom levels.
 For each zoomlevel, all borders come from a single attachment, to handle
 overlapping borders correctly.
 */
 
-#admin-low-zoom[zoom < 11],  // test
-#admin-mid-zoom[zoom >= 11][zoom < 13],
-#admin-high-zoom[zoom >= 13] {
-  [admin_level = '2'],
-  [admin_level = '3'] {
-    [zoom >= 4] {
-      background/line-color: white;
-      background/line-width: 0.6;
-      line-color: @admin-boundaries;
-      line-width: 0.6;
-    }
-    [zoom >= 7] {
-      background/line-width: 2;
-      line-width: 2;
-    }
-    [zoom >= 10] {
-      [admin_level = '2'] {
-        background/line-width: 6;
-        line-width: 6;
-      }
-      [admin_level = '3'] {
-        background/line-width: 5;
-        line-width: 5;
-        line-dasharray: 4,2;
-        line-clip: false;
-      }
-    }
-  }
-  [admin_level = '4'] {
-    [zoom >= 4] {
-      background/line-color: white;
-      background/line-width: 0.6;
-      line-color: @admin-boundaries;
-      line-width: 0.6;
-      line-dasharray: 4,3;
-      line-clip: false;
-    }
-    [zoom >= 7] {
-      background/line-width: 1;
-      line-width: 1;
-    }
-    [zoom >= 11] {
-      background/line-width: 3;
-      line-width: 3;
-    }
-  }
-  /*
+#admin-low-zoom[zoom < 11],  // test
+#admin-mid-zoom[zoom >= 11][zoom < 13],
+#admin-high-zoom[zoom >= 13] {
+  [admin_level = '2'],
+  [admin_level = '3'] {
+    [zoom >= 4] {
+      background/line-color: white;
+      background/line-width: 0.6;
+      line-color: @admin-boundaries;
+      line-width: 0.6;
+    }
+    [zoom >= 7] {
+      background/line-width: 2;
+      line-width: 2;
+    }
+    [zoom >= 10] {
+      [admin_level = '2'] {
+        background/line-width: 6;
+        line-width: 6;
+      }
+      [admin_level = '3'] {
+        background/line-width: 5;
+        line-width: 5;
+        line-dasharray: 4,2;
+        line-clip: false;
+      }
+    }
+  }
+  [admin_level = '4'] {
+    [zoom >= 4] {
+      background/line-color: white;
+      background/line-width: 0.6;
+      line-color: @admin-boundaries;
+      line-width: 0.6;
+      line-dasharray: 4,3;
+      line-clip: false;
+    }
+    [zoom >= 7] {
+      background/line-width: 1;
+      line-width: 1;
+    }
+    [zoom >= 11] {
+      background/line-width: 3;
+      line-width: 3;
+    }
+  }
+  /*
   The following code prevents admin boundaries from being rendered on top of
   each other. Comp-op works on the entire attachment, not on the individual
   border. Therefore, this code generates an attachment containing a set of
   @admin-boundaries/white dashed lines (of which only the top one is visible),
   and with `comp-op: darken` the white part is ignored, while the
   @admin-boundaries colored part is rendered (as long as the background is not
   darker than @admin-boundaries).
   The SQL has `ORDER BY admin_level`, so the boundary with the lowest
   admin_level is rendered on top, and therefore the only visible boundary.
   */
-  opacity: 0.4;
-  comp-op: darken;
-}
-
-#admin-mid-zoom[zoom >= 11][zoom < 13],
-#admin-high-zoom[zoom >= 13] {
-  [admin_level = '5'][zoom >= 11] {
-    background/line-color: white;
-    background/line-width: 2;
-    line-color: @admin-boundaries;
-    line-width: 2;
-    line-dasharray: 6,3,2,3,2,3;
-    line-clip: false;
-  }
-  [admin_level = '6'][zoom >= 11] {
-    background/line-color: white;
-    background/line-width: 2;
-    line-color: @admin-boundaries;
-    line-width: 2;
-    line-dasharray: 6,3,2,3;
-    line-clip: false;
-  }
-  [admin_level = '7'],
-  [admin_level = '8'] {
-    [zoom >= 12] {
-      background/line-color: white;
-      background/line-width: 1.5;
-      line-color: @admin-boundaries;
-      line-width: 1.5;
-      line-dasharray: 5,2;
-      line-clip: false;
-    }
-  }
-  opacity: 0.5;
-  comp-op: darken;
-}
-
-#admin-high-zoom[zoom >= 13] {
-  [admin_level = '9'],
-  [admin_level = '10'] {
-    [zoom >= 13] {
-      background/line-color: white;
-      background/line-width: 2;
-      line-color: @admin-boundaries;
-      line-width: 2;
-      line-dasharray: 2,3;
-      line-clip: false;
-    }
-  }
-  opacity: 0.5;
-  comp-op: darken;
-}
-
-
-
-#nature-reserve-boundaries {
-  [way_pixels > 100][zoom >= 7] {
-    [zoom < 10] {
-      ::fill {
-        opacity: 0.05;
-        polygon-fill: green;
-      }
-    }
-    a/line-width: 1;
-    a/line-offset: -0.5;
-    a/line-color: green;
-    a/line-opacity: 0.15;
-    a/line-join: round;
-    a/line-cap: round;
-    b/line-width: 2;
-    b/line-offset: -1;
-    b/line-color: green;
-    b/line-opacity: 0.15;
-    b/line-join: round;
-    b/line-cap: round;
-    [zoom >= 10] {
-      a/line-width: 2;
-      a/line-offset: -1;
-      b/line-width: 4;
-      b/line-offset: -2;
-    }
-    [zoom >= 14] {
-      b/line-width: 6;
-      b/line-offset: -3;
-    }
-  }
-}
-
-#building-text {
-[zoom >= 14][way_pixels > 3000],
-[zoom >= 17] {
-text-name: "[name]";
-text-size: 11;
-text-fill: #444;
-text-face-name: @book-fonts;
-text-halo-radius: 1;
-text-wrap-width: 20;
-text-halo-fill: rgba(255,255,255,0.5);
-text-placement: interior;
-}
-}
-
-@marina-text: #576ddf; // also swimming_pool
-@landcover-face-name: @oblique-fonts;
-@standard-wrap-width: 30;
-
-.points {
-  [feature = 'tourism_alpine_hut'][zoom >= 13] {
-    point-file: url('symbols/alpinehut.p.16.png');
-    point-placement: interior;
-  }
-  }
-
-  [feature = 'highway_bus_stop'] {
-    [zoom >= 16] {
-      marker-file: url('symbols/square.svg');
-      marker-fill: @transportation-icon;
-      marker-placement: interior;
-      marker-width: 6;
-    }
-    [zoom >= 17] {
-      marker-file: url('symbols/bus_stop.p.12.png');
-      marker-width: 12;
-    }
-  }
-
-[feature = 'highway_primary'] {
-[zoom >= 7][zoom < 12] {
-line-width: 0.5;
-line-color: @primary-fill;
-[zoom >= 9] { line-width: 1.2; }
-[zoom >= 10] { line-width: 2; }
-[zoom >= 11] { line-width: .5; }
-}
-}
+  opacity: 0.4;
+  comp-op: darken;
+}
+
+#admin-mid-zoom[zoom >= 11][zoom < 13],
+#admin-high-zoom[zoom >= 13] {
+  [admin_level = '5'][zoom >= 11] {
+    background/line-color: white;
+    background/line-width: 2;
+    line-color: @admin-boundaries;
+    line-width: 2;
+    line-dasharray: 6,3,2,3,2,3;
+    line-clip: false;
+  }
+  [admin_level = '6'][zoom >= 11] {
+    background/line-color: white;
+    background/line-width: 2;
+    line-color: @admin-boundaries;
+    line-width: 2;
+    line-dasharray: 6,3,2,3;
+    line-clip: false;
+  }
+  [admin_level = '7'],
+  [admin_level = '8'] {
+    [zoom >= 12] {
+      background/line-color: white;
+      background/line-width: 1.5;
+      line-color: @admin-boundaries;
+      line-width: 1.5;
+      line-dasharray: 5,2;
+      line-clip: false;
+    }
+  }
+  opacity: 0.5;
+  comp-op: darken;
+}
+
+#admin-high-zoom[zoom >= 13] {
+  [admin_level = '9'],
+  [admin_level = '10'] {
+    [zoom >= 13] {
+      background/line-color: white;
+      background/line-width: 2;
+      line-color: @admin-boundaries;
+      line-width: 2;
+      line-dasharray: 2,3;
+      line-clip: false;
+    }
+  }
+  opacity: 0.5;
+  comp-op: darken;
+}
+
+
+
+#nature-reserve-boundaries {
+  [way_pixels > 100][zoom >= 7] {
+    [zoom < 10] {
+      ::fill {
+        opacity: 0.05;
+        polygon-fill: green;
+      }
+    }
+    a/line-width: 1;
+    a/line-offset: -0.5;
+    a/line-color: green;
+    a/line-opacity: 0.15;
+    a/line-join: round;
+    a/line-cap: round;
+    b/line-width: 2;
+    b/line-offset: -1;
+    b/line-color: green;
+    b/line-opacity: 0.15;
+    b/line-join: round;
+    b/line-cap: round;
+    [zoom >= 10] {
+      a/line-width: 2;
+      a/line-offset: -1;
+      b/line-width: 4;
+      b/line-offset: -2;
+    }
+    [zoom >= 14] {
+      b/line-width: 6;
+      b/line-offset: -3;
+    }
+  }
+}
+
+#building-text {
+[zoom >= 14][way_pixels > 3000],
+[zoom >= 17] {
+text-name: "[name]";
+text-size: 11;
+text-fill: #444;
+text-face-name: @book-fonts;
+text-halo-radius: 1;
+text-wrap-width: 20;
+text-halo-fill: rgba(255,255,255,0.5);
+text-placement: interior;
+}
+}
+
+@marina-text: #576ddf; // also swimming_pool
+@landcover-face-name: @oblique-fonts;
+@standard-wrap-width: 30;
+
+.points {
+  [feature = 'tourism_alpine_hut'][zoom >= 13] {
+    point-file: url('symbols/alpinehut.p.16.png');
+    point-placement: interior;
+  }
+  }
+
+  [feature = 'highway_bus_stop'] {
+    [zoom >= 16] {
+      marker-file: url('symbols/square.svg');
+      marker-fill: @transportation-icon;
+      marker-placement: interior;
+      marker-width: 6;
+    }
+    [zoom >= 17] {
+      marker-file: url('symbols/bus_stop.p.12.png');
+      marker-width: 12;
+    }
+  }
+
+[feature = 'highway_primary'] {
+[zoom >= 7][zoom < 12] {
+line-width: 0.5;
+line-color: @primary-fill;
+[zoom >= 9] { line-width: 1.2; }
+[zoom >= 10] { line-width: 2; }
+[zoom >= 11] { line-width: .5; }
+}
+}
+
+#world {
+  // this syntax
+  polygon-opacity: 50%; // the parameter “polygon-opacity” gets the value 0.5 (expressed in %)
+  // is equivalent to
+  polygon-opacity: 0.5;
+}
+
+/*
+Variables behave similar to C macros
+*/
+@lsdjkf: @sdlfkj; // this variable gets defined by the value of another variable
+@admin-boundaries: #ac46ac; // this variable gets defined by a color value
+@way_pixels: "([way_area]*pow(4,@zoom)/24505740000)"; // A rather complex variable. [way_area] marks a data field. @zoom is a special runtime value (inspite of the @ it has nothing to do with ordinary variables)
+
+/* This is
+a multiline comment.
+*/
+
+// A single line comment
+#admin-low-zoom[zoom < 11],  // A single line comment
+#admin-mid-zoom[zoom >= 11][zoom < 13] {
+  [admin_level = '2'], // Within filters, data fields like “admin_level” are referended without extra [] brackets.
+  [admin_level = '3'] { // These data fields are rendered by default in dark blue, while the data field within expression strings are rendered by default in light blue.
+    [zoom >= 4] {
+      background/line-color: white; // symbolizer named “background”
+      background/line-width: 0.6; // symbolizer named “background”
+      line-color: @admin-boundaries; // default symbolizer (without name)
+      name: [test]; // simplified reference to the data field “test”
+      name: "[test]"; // another reference to the data field “test”, this time within an expression string (by default orange)
+      name: "([way_area]*pow(4,@zoom)/24505740000)"; // a rather complex expression string that will do some math
+      name: "'Value: '[test]"; // A verbatim string (by default red) as part of an expression string
+      name: '"Value: "[test]'; // " and ' are interchangable. The outer is always the expression string and the inner the verbatim string.
+    }
+  }
+  [admin_level = '4'] { // The string '4' is red because at this position it will be interpreted as a verbatim string, not as an expression string.
+    [zoom >= 4] {
+      line-dasharray: 4,3; // parameter “line-dasharray” gets as value a list of two integers
+      line-clip: false;  // parameter “line-clip” gets as value a boolean
+    }
+  }
+  comp-op: darken; // parameter “comp-op” gets as value “darken”.
+}
+
+.nature-reserve-boundaries { // .nature-reserve-boudaries references a class, which is similar to a layer like #building-text, so both are rendered the same way
+  [way_pixels > 100][zoom >= 7] { // Here zoom is a keyword with results in a special filter. However, all other values are interpreted as data fields.
+    [zoom < 10] {
+      ::fill { // The :: syntax defined “attachments” (a sort of sub-layer within normal layers). So “fill” is rendered by default in the same style like layer names and class names (but this can be customized).
+        opacity: 0.05;
+        // various styles to define colors (all except the color function are rendered the same way):
+        polygon-fill: white;
+        polygon-fill: #ffffff;
+        polygon-fill: #fff;
+        polygon-fill: rgba(255,255,255,1); // define a color by a speciel function
+        polygon-fill: #ffff; // invalid color value
+        text-placement: interior; // all unknown values are hightlighted as named values.
+      }
+    }
+  }
+}
 
diff --git a/autotests/input/test.mss b/autotests/input/test.mss index 4f742c1..f6c7abc 100644 --- a/autotests/input/test.mss +++ b/autotests/input/test.mss @@ -1,215 +1,275 @@ /* kate: hl CartoCSS This file contains some content coming from https://github.com/gravitystorm/openstreetmap-carto with CC0 license. This file is just for testing katepart highlighting engine. */ #world { // this syntax polygon-opacity: 50%; // is equivalent to polygon-opacity: 0.5; } @admin-boundaries: #ac46ac; /* For performance reasons, the admin border layers are split into three groups for low, middle and high zoom levels. For each zoomlevel, all borders come from a single attachment, to handle overlapping borders correctly. */ #admin-low-zoom[zoom < 11], // test #admin-mid-zoom[zoom >= 11][zoom < 13], #admin-high-zoom[zoom >= 13] { [admin_level = '2'], [admin_level = '3'] { [zoom >= 4] { background/line-color: white; background/line-width: 0.6; line-color: @admin-boundaries; line-width: 0.6; } [zoom >= 7] { background/line-width: 2; line-width: 2; } [zoom >= 10] { [admin_level = '2'] { background/line-width: 6; line-width: 6; } [admin_level = '3'] { background/line-width: 5; line-width: 5; line-dasharray: 4,2; line-clip: false; } } } [admin_level = '4'] { [zoom >= 4] { background/line-color: white; background/line-width: 0.6; line-color: @admin-boundaries; line-width: 0.6; line-dasharray: 4,3; line-clip: false; } [zoom >= 7] { background/line-width: 1; line-width: 1; } [zoom >= 11] { background/line-width: 3; line-width: 3; } } /* The following code prevents admin boundaries from being rendered on top of each other. Comp-op works on the entire attachment, not on the individual border. Therefore, this code generates an attachment containing a set of @admin-boundaries/white dashed lines (of which only the top one is visible), and with `comp-op: darken` the white part is ignored, while the @admin-boundaries colored part is rendered (as long as the background is not darker than @admin-boundaries). The SQL has `ORDER BY admin_level`, so the boundary with the lowest admin_level is rendered on top, and therefore the only visible boundary. */ opacity: 0.4; comp-op: darken; } #admin-mid-zoom[zoom >= 11][zoom < 13], #admin-high-zoom[zoom >= 13] { [admin_level = '5'][zoom >= 11] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 6,3,2,3,2,3; line-clip: false; } [admin_level = '6'][zoom >= 11] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 6,3,2,3; line-clip: false; } [admin_level = '7'], [admin_level = '8'] { [zoom >= 12] { background/line-color: white; background/line-width: 1.5; line-color: @admin-boundaries; line-width: 1.5; line-dasharray: 5,2; line-clip: false; } } opacity: 0.5; comp-op: darken; } #admin-high-zoom[zoom >= 13] { [admin_level = '9'], [admin_level = '10'] { [zoom >= 13] { background/line-color: white; background/line-width: 2; line-color: @admin-boundaries; line-width: 2; line-dasharray: 2,3; line-clip: false; } } opacity: 0.5; comp-op: darken; } #nature-reserve-boundaries { [way_pixels > 100][zoom >= 7] { [zoom < 10] { ::fill { opacity: 0.05; polygon-fill: green; } } a/line-width: 1; a/line-offset: -0.5; a/line-color: green; a/line-opacity: 0.15; a/line-join: round; a/line-cap: round; b/line-width: 2; b/line-offset: -1; b/line-color: green; b/line-opacity: 0.15; b/line-join: round; b/line-cap: round; [zoom >= 10] { a/line-width: 2; a/line-offset: -1; b/line-width: 4; b/line-offset: -2; } [zoom >= 14] { b/line-width: 6; b/line-offset: -3; } } } #building-text { [zoom >= 14][way_pixels > 3000], [zoom >= 17] { text-name: "[name]"; text-size: 11; text-fill: #444; text-face-name: @book-fonts; text-halo-radius: 1; text-wrap-width: 20; text-halo-fill: rgba(255,255,255,0.5); text-placement: interior; } } @marina-text: #576ddf; // also swimming_pool @landcover-face-name: @oblique-fonts; @standard-wrap-width: 30; .points { [feature = 'tourism_alpine_hut'][zoom >= 13] { point-file: url('symbols/alpinehut.p.16.png'); point-placement: interior; } } [feature = 'highway_bus_stop'] { [zoom >= 16] { marker-file: url('symbols/square.svg'); marker-fill: @transportation-icon; marker-placement: interior; marker-width: 6; } [zoom >= 17] { marker-file: url('symbols/bus_stop.p.12.png'); marker-width: 12; } } [feature = 'highway_primary'] { [zoom >= 7][zoom < 12] { line-width: 0.5; line-color: @primary-fill; [zoom >= 9] { line-width: 1.2; } [zoom >= 10] { line-width: 2; } [zoom >= 11] { line-width: .5; } } } + +#world { + // this syntax + polygon-opacity: 50%; // the parameter “polygon-opacity” gets the value 0.5 (expressed in %) + // is equivalent to + polygon-opacity: 0.5; +} + +/* +Variables behave similar to C macros +*/ +@lsdjkf: @sdlfkj; // this variable gets defined by the value of another variable +@admin-boundaries: #ac46ac; // this variable gets defined by a color value +@way_pixels: "([way_area]*pow(4,@zoom)/24505740000)"; // A rather complex variable. [way_area] marks a data field. @zoom is a special runtime value (inspite of the @ it has nothing to do with ordinary variables) + +/* This is +a multiline comment. +*/ + +// A single line comment +#admin-low-zoom[zoom < 11], // A single line comment +#admin-mid-zoom[zoom >= 11][zoom < 13] { + [admin_level = '2'], // Within filters, data fields like “admin_level” are referended without extra [] brackets. + [admin_level = '3'] { // These data fields are rendered by default in dark blue, while the data field within expression strings are rendered by default in light blue. + [zoom >= 4] { + background/line-color: white; // symbolizer named “background” + background/line-width: 0.6; // symbolizer named “background” + line-color: @admin-boundaries; // default symbolizer (without name) + name: [test]; // simplified reference to the data field “test” + name: "[test]"; // another reference to the data field “test”, this time within an expression string (by default orange) + name: "([way_area]*pow(4,@zoom)/24505740000)"; // a rather complex expression string that will do some math + name: "'Value: '[test]"; // A verbatim string (by default red) as part of an expression string + name: '"Value: "[test]'; // " and ' are interchangable. The outer is always the expression string and the inner the verbatim string. + } + } + [admin_level = '4'] { // The string '4' is red because at this position it will be interpreted as a verbatim string, not as an expression string. + [zoom >= 4] { + line-dasharray: 4,3; // parameter “line-dasharray” gets as value a list of two integers + line-clip: false; // parameter “line-clip” gets as value a boolean + } + } + comp-op: darken; // parameter “comp-op” gets as value “darken”. +} + +.nature-reserve-boundaries { // .nature-reserve-boudaries references a class, which is similar to a layer like #building-text, so both are rendered the same way + [way_pixels > 100][zoom >= 7] { // Here zoom is a keyword with results in a special filter. However, all other values are interpreted as data fields. + [zoom < 10] { + ::fill { // The :: syntax defined “attachments” (a sort of sub-layer within normal layers). So “fill” is rendered by default in the same style like layer names and class names (but this can be customized). + opacity: 0.05; + // various styles to define colors (all except the color function are rendered the same way): + polygon-fill: white; + polygon-fill: #ffffff; + polygon-fill: #fff; + polygon-fill: rgba(255,255,255,1); // define a color by a speciel function + polygon-fill: #ffff; // invalid color value + text-placement: interior; // all unknown values are hightlighted as named values. + } + } + } +} diff --git a/autotests/reference/test.mss.ref b/autotests/reference/test.mss.ref index f3f6ff7..36aef0b 100644 --- a/autotests/reference/test.mss.ref +++ b/autotests/reference/test.mss.ref @@ -1,215 +1,275 @@ /* kate: hl CartoCSS
This file contains some content coming from
https://github.com/gravitystorm/openstreetmap-carto
with CC0 license. This file is just for testing
katepart highlighting engine.
*/
-
-#world {
+
+#world {
// this syntax
-polygon-opacity: 50%;
-
+polygon-opacity: 50%;
+
// is equivalent to
-polygon-opacity: 0.5;
+polygon-opacity: 0.5;
}
-
-@admin-boundaries: #ac46ac;
-
+
+@admin-boundaries: #ac46ac;
+
/* For performance reasons, the admin border layers are split into three groups
for low, middle and high zoom levels.
For each zoomlevel, all borders come from a single attachment, to handle
overlapping borders correctly.
*/
-
-#admin-low-zoom[zoom < 11], // test
-#admin-mid-zoom[zoom >= 11][zoom < 13],
-#admin-high-zoom[zoom >= 13] {
- [admin_level = '2'],
- [admin_level = '3'] {
- [zoom >= 4] {
- background/line-color: white;
- background/line-width: 0.6;
- line-color: @admin-boundaries;
- line-width: 0.6;
- }
- [zoom >= 7] {
- background/line-width: 2;
- line-width: 2;
- }
- [zoom >= 10] {
- [admin_level = '2'] {
- background/line-width: 6;
- line-width: 6;
- }
- [admin_level = '3'] {
- background/line-width: 5;
- line-width: 5;
- line-dasharray: 4,2;
- line-clip: false;
- }
- }
- }
- [admin_level = '4'] {
- [zoom >= 4] {
- background/line-color: white;
- background/line-width: 0.6;
- line-color: @admin-boundaries;
- line-width: 0.6;
- line-dasharray: 4,3;
- line-clip: false;
- }
- [zoom >= 7] {
- background/line-width: 1;
- line-width: 1;
- }
- [zoom >= 11] {
- background/line-width: 3;
- line-width: 3;
- }
- }
- /*
+
+#admin-low-zoom[zoom < 11], // test
+#admin-mid-zoom[zoom >= 11][zoom < 13],
+#admin-high-zoom[zoom >= 13] {
+ [admin_level = '2'],
+ [admin_level = '3'] {
+ [zoom >= 4] {
+ background/line-color: white;
+ background/line-width: 0.6;
+ line-color: @admin-boundaries;
+ line-width: 0.6;
+ }
+ [zoom >= 7] {
+ background/line-width: 2;
+ line-width: 2;
+ }
+ [zoom >= 10] {
+ [admin_level = '2'] {
+ background/line-width: 6;
+ line-width: 6;
+ }
+ [admin_level = '3'] {
+ background/line-width: 5;
+ line-width: 5;
+ line-dasharray: 4,2;
+ line-clip: false;
+ }
+ }
+ }
+ [admin_level = '4'] {
+ [zoom >= 4] {
+ background/line-color: white;
+ background/line-width: 0.6;
+ line-color: @admin-boundaries;
+ line-width: 0.6;
+ line-dasharray: 4,3;
+ line-clip: false;
+ }
+ [zoom >= 7] {
+ background/line-width: 1;
+ line-width: 1;
+ }
+ [zoom >= 11] {
+ background/line-width: 3;
+ line-width: 3;
+ }
+ }
+ /*
The following code prevents admin boundaries from being rendered on top of
each other. Comp-op works on the entire attachment, not on the individual
border. Therefore, this code generates an attachment containing a set of
@admin-boundaries/white dashed lines (of which only the top one is visible),
and with `comp-op: darken` the white part is ignored, while the
@admin-boundaries colored part is rendered (as long as the background is not
darker than @admin-boundaries).
The SQL has `ORDER BY admin_level`, so the boundary with the lowest
admin_level is rendered on top, and therefore the only visible boundary.
*/
- opacity: 0.4;
- comp-op: darken;
+ opacity: 0.4;
+ comp-op: darken;
}
-
-#admin-mid-zoom[zoom >= 11][zoom < 13],
-#admin-high-zoom[zoom >= 13] {
- [admin_level = '5'][zoom >= 11] {
- background/line-color: white;
- background/line-width: 2;
- line-color: @admin-boundaries;
- line-width: 2;
- line-dasharray: 6,3,2,3,2,3;
- line-clip: false;
- }
- [admin_level = '6'][zoom >= 11] {
- background/line-color: white;
- background/line-width: 2;
- line-color: @admin-boundaries;
- line-width: 2;
- line-dasharray: 6,3,2,3;
- line-clip: false;
- }
- [admin_level = '7'],
- [admin_level = '8'] {
- [zoom >= 12] {
- background/line-color: white;
- background/line-width: 1.5;
- line-color: @admin-boundaries;
- line-width: 1.5;
- line-dasharray: 5,2;
- line-clip: false;
- }
- }
- opacity: 0.5;
- comp-op: darken;
+
+#admin-mid-zoom[zoom >= 11][zoom < 13],
+#admin-high-zoom[zoom >= 13] {
+ [admin_level = '5'][zoom >= 11] {
+ background/line-color: white;
+ background/line-width: 2;
+ line-color: @admin-boundaries;
+ line-width: 2;
+ line-dasharray: 6,3,2,3,2,3;
+ line-clip: false;
+ }
+ [admin_level = '6'][zoom >= 11] {
+ background/line-color: white;
+ background/line-width: 2;
+ line-color: @admin-boundaries;
+ line-width: 2;
+ line-dasharray: 6,3,2,3;
+ line-clip: false;
+ }
+ [admin_level = '7'],
+ [admin_level = '8'] {
+ [zoom >= 12] {
+ background/line-color: white;
+ background/line-width: 1.5;
+ line-color: @admin-boundaries;
+ line-width: 1.5;
+ line-dasharray: 5,2;
+ line-clip: false;
+ }
+ }
+ opacity: 0.5;
+ comp-op: darken;
}
-
-#admin-high-zoom[zoom >= 13] {
- [admin_level = '9'],
- [admin_level = '10'] {
- [zoom >= 13] {
- background/line-color: white;
- background/line-width: 2;
- line-color: @admin-boundaries;
- line-width: 2;
- line-dasharray: 2,3;
- line-clip: false;
- }
- }
- opacity: 0.5;
- comp-op: darken;
+
+#admin-high-zoom[zoom >= 13] {
+ [admin_level = '9'],
+ [admin_level = '10'] {
+ [zoom >= 13] {
+ background/line-color: white;
+ background/line-width: 2;
+ line-color: @admin-boundaries;
+ line-width: 2;
+ line-dasharray: 2,3;
+ line-clip: false;
+ }
+ }
+ opacity: 0.5;
+ comp-op: darken;
}
-
-
-
-#nature-reserve-boundaries {
- [way_pixels > 100][zoom >= 7] {
- [zoom < 10] {
- ::fill {
- opacity: 0.05;
- polygon-fill: green;
- }
- }
- a/line-width: 1;
- a/line-offset: -0.5;
- a/line-color: green;
- a/line-opacity: 0.15;
- a/line-join: round;
- a/line-cap: round;
- b/line-width: 2;
- b/line-offset: -1;
- b/line-color: green;
- b/line-opacity: 0.15;
- b/line-join: round;
- b/line-cap: round;
- [zoom >= 10] {
- a/line-width: 2;
- a/line-offset: -1;
- b/line-width: 4;
- b/line-offset: -2;
- }
- [zoom >= 14] {
- b/line-width: 6;
- b/line-offset: -3;
- }
- }
+
+
+
+#nature-reserve-boundaries {
+ [way_pixels > 100][zoom >= 7] {
+ [zoom < 10] {
+ ::fill {
+ opacity: 0.05;
+ polygon-fill: green;
+ }
+ }
+ a/line-width: 1;
+ a/line-offset: -0.5;
+ a/line-color: green;
+ a/line-opacity: 0.15;
+ a/line-join: round;
+ a/line-cap: round;
+ b/line-width: 2;
+ b/line-offset: -1;
+ b/line-color: green;
+ b/line-opacity: 0.15;
+ b/line-join: round;
+ b/line-cap: round;
+ [zoom >= 10] {
+ a/line-width: 2;
+ a/line-offset: -1;
+ b/line-width: 4;
+ b/line-offset: -2;
+ }
+ [zoom >= 14] {
+ b/line-width: 6;
+ b/line-offset: -3;
+ }
+ }
}
-
-#building-text {
-[zoom >= 14][way_pixels > 3000],
-[zoom >= 17] {
-text-name: "[name]";
-text-size: 11;
-text-fill: #444;
-text-face-name: @book-fonts;
-text-halo-radius: 1;
-text-wrap-width: 20;
-text-halo-fill: rgba(255,255,255,0.5);
-text-placement: interior;
+
+#building-text {
+[zoom >= 14][way_pixels > 3000],
+[zoom >= 17] {
+text-name: "[name]";
+text-size: 11;
+text-fill: #444;
+text-face-name: @book-fonts;
+text-halo-radius: 1;
+text-wrap-width: 20;
+text-halo-fill: rgba(255,255,255,0.5);
+text-placement: interior;
}
}
-
-@marina-text: #576ddf; // also swimming_pool
-@landcover-face-name: @oblique-fonts;
-@standard-wrap-width: 30;
-
-.points {
- [feature = 'tourism_alpine_hut'][zoom >= 13] {
- point-file: url('symbols/alpinehut.p.16.png');
- point-placement: interior;
- }
- }
-
- [feature = 'highway_bus_stop'] {
- [zoom >= 16] {
- marker-file: url('symbols/square.svg');
- marker-fill: @transportation-icon;
- marker-placement: interior;
- marker-width: 6;
- }
- [zoom >= 17] {
- marker-file: url('symbols/bus_stop.p.12.png');
- marker-width: 12;
- }
- }
-
-[feature = 'highway_primary'] {
-[zoom >= 7][zoom < 12] {
-line-width: 0.5;
-line-color: @primary-fill;
-[zoom >= 9] { line-width: 1.2; }
-[zoom >= 10] { line-width: 2; }
-[zoom >= 11] { line-width: .5; }
+
+@marina-text: #576ddf; // also swimming_pool
+@landcover-face-name: @oblique-fonts;
+@standard-wrap-width: 30;
+
+.points {
+ [feature = 'tourism_alpine_hut'][zoom >= 13] {
+ point-file: url('symbols/alpinehut.p.16.png');
+ point-placement: interior;
+ }
+ }
+
+ [feature = 'highway_bus_stop'] {
+ [zoom >= 16] {
+ marker-file: url('symbols/square.svg');
+ marker-fill: @transportation-icon;
+ marker-placement: interior;
+ marker-width: 6;
+ }
+ [zoom >= 17] {
+ marker-file: url('symbols/bus_stop.p.12.png');
+ marker-width: 12;
+ }
+ }
+
+[feature = 'highway_primary'] {
+[zoom >= 7][zoom < 12] {
+line-width: 0.5;
+line-color: @primary-fill;
+[zoom >= 9] { line-width: 1.2; }
+[zoom >= 10] { line-width: 2; }
+[zoom >= 11] { line-width: .5; }
}
}
+
+#world {
+ // this syntax
+ polygon-opacity: 50%; // the parameter “polygon-opacity” gets the value 0.5 (expressed in %)
+ // is equivalent to
+ polygon-opacity: 0.5;
+}
+
+/*
+Variables behave similar to C macros
+*/
+@lsdjkf: @sdlfkj; // this variable gets defined by the value of another variable
+@admin-boundaries: #ac46ac; // this variable gets defined by a color value
+@way_pixels: "([way_area]*pow(4,@zoom)/24505740000)"; // A rather complex variable. [way_area] marks a data field. @zoom is a special runtime value (inspite of the @ it has nothing to do with ordinary variables)
+
+/* This is
+a multiline comment.
+*/
+
+// A single line comment
+#admin-low-zoom[zoom < 11], // A single line comment
+#admin-mid-zoom[zoom >= 11][zoom < 13] {
+ [admin_level = '2'], // Within filters, data fields like “admin_level” are referended without extra [] brackets.
+ [admin_level = '3'] { // These data fields are rendered by default in dark blue, while the data field within expression strings are rendered by default in light blue.
+ [zoom >= 4] {
+ background/line-color: white; // symbolizer named “background”
+ background/line-width: 0.6; // symbolizer named “background”
+ line-color: @admin-boundaries; // default symbolizer (without name)
+ name: [test]; // simplified reference to the data field “test”
+ name: "[test]"; // another reference to the data field “test”, this time within an expression string (by default orange)
+ name: "([way_area]*pow(4,@zoom)/24505740000)"; // a rather complex expression string that will do some math
+ name: "'Value: '[test]"; // A verbatim string (by default red) as part of an expression string
+ name: '"Value: "[test]'; // " and ' are interchangable. The outer is always the expression string and the inner the verbatim string.
+ }
+ }
+ [admin_level = '4'] { // The string '4' is red because at this position it will be interpreted as a verbatim string, not as an expression string.
+ [zoom >= 4] {
+ line-dasharray: 4,3; // parameter “line-dasharray” gets as value a list of two integers
+ line-clip: false; // parameter “line-clip” gets as value a boolean
+ }
+ }
+ comp-op: darken; // parameter “comp-op” gets as value “darken”.
+}
+
+.nature-reserve-boundaries { // .nature-reserve-boudaries references a class, which is similar to a layer like #building-text, so both are rendered the same way
+ [way_pixels > 100][zoom >= 7] { // Here zoom is a keyword with results in a special filter. However, all other values are interpreted as data fields.
+ [zoom < 10] {
+ ::fill { // The :: syntax defined “attachments” (a sort of sub-layer within normal layers). So “fill” is rendered by default in the same style like layer names and class names (but this can be customized).
+ opacity: 0.05;
+ // various styles to define colors (all except the color function are rendered the same way):
+ polygon-fill: white;
+ polygon-fill: #ffffff;
+ polygon-fill: #fff;
+ polygon-fill: rgba(255,255,255,1); // define a color by a speciel function
+ polygon-fill: #ffff; // invalid color value
+ text-placement: interior; // all unknown values are hightlighted as named values.
+ }
+ }
+ }
+}
diff --git a/data/syntax/carto-css.xml b/data/syntax/carto-css.xml index 5ce4474..6f1a30b 100644 --- a/data/syntax/carto-css.xml +++ b/data/syntax/carto-css.xml @@ -1,405 +1,294 @@  - + - + - - - true - false - + - - AliceBlue - AntiqueWhite - Aqua - Aquamarine - Azure - Beige - Bisque - Black - BlanchedAlmond - Blue - BlueViolet - Brown - BurlyWood - CadetBlue - Chartreuse - Chocolate - Coral - CornflowerBlue - Cornsilk - Crimson - Cyan - DarkBlue - DarkCyan - DarkGoldenRod - DarkGray - DarkGreen - DarkKhaki - DarkMagenta - DarkOliveGreen - DarkOrange - DarkOrchid - DarkRed - DarkSalmon - DarkSeaGreen - DarkSlateBlue - DarkSlateGray - DarkTurquoise - DarkViolet - DeepPink - DeepSkyBlue - DimGray - DodgerBlue - FireBrick - FloralWhite - ForestGreen - Fuchsia - Gainsboro - GhostWhite - Gold - GoldenRod - Gray - Green - GreenYellow - HoneyDew - HotPink - IndianRed - Indigo - Ivory - Khaki - Lavender - LavenderBlush - LawnGreen - LemonChiffon - LightBlue - LightCoral - LightCyan - LightGoldenRodYellow - LightGray - LightGreen - LightPink - LightSalmon - LightSeaGreen - LightSkyBlue - LightSlateGray - LightSteelBlue - LightYellow - Lime - LimeGreen - Linen - Magenta - Maroon - MediumAquaMarine - MediumBlue - MediumOrchid - MediumPurple - MediumSeaGreen - MediumSlateBlue - MediumSpringGreen - MediumTurquoise - MediumVioletRed - MidnightBlue - MintCream - MistyRose - Moccasin - NavajoWhite - Navy - OldLace - Olive - OliveDrab - Orange - OrangeRed - Orchid - PaleGoldenRod - PaleGreen - PaleTurquoise - PaleVioletRed - PapayaWhip - PeachPuff - Peru - Pink - Plum - PowderBlue - Purple - Red - RosyBrown - RoyalBlue - SaddleBrown - Salmon - SandyBrown - SeaGreen - SeaShell - Sienna - Silver - SkyBlue - SlateBlue - SlateGray - Snow - SpringGreen - SteelBlue - Tan - Teal - Thistle - Tomato - Turquoise - Violet - Wheat - White - WhiteSmoke - Yellow - YellowGreen + + + aliceblue + antiquewhite + aqua + aquamarine + azure + beige + bisque + black + blanchedalmond + blue + blueviolet + brown + burlywood + cadetblue + chartreuse + chocolate + coral + cornflowerblue + cornsilk + crimson + cyan + darkblue + darkcyan + darkgoldenrod + darkgray + darkgreen + darkgrey + darkkhaki + darkmagenta + darkolivegreen + darkorange + darkorchid + darkred + darksalmon + darkseagreen + darkslateblue + darkslategrey + darkturquoise + darkviolet + deeppink + deepskyblue + dimgray + dimgrey + dodgerblue + firebrick + floralwhite + forestgreen + fuchsia + gainsboro + ghostwhite + gold + goldenrod + gray + grey + green + greenyellow + honeydew + hotpink + indianred + indigo + ivory + khaki + lavender + lavenderblush + lawngreen + lemonchiffon + lightblue + lightcoral + lightcyan + lightgoldenrodyellow + lightgray + lightgreen + lightgrey + lightpink + lightsalmon + lightseagreen + lightskyblue + lightslategray + lightslategrey + lightsteelblue + lightyellow + lime + limegreen + linen + magenta + maroon + mediumaquamarine + mediumblue + mediumorchid + mediumpurple + mediumseagreen + mediumslateblue + mediumspringgreen + mediumturquoise + mediumvioletred + midnightblue + mintcream + mistyrose + moccasin + navajowhite + navy + oldlace + olive + olivedrab + orange + orangered + orchid + palegoldenrod + palegreen + paleturquoise + palevioletred + papayawhip + peachpuff + peru + pink + plum + powderblue + purple + red + rosybrown + royalblue + saddlebrown + salmon + sandybrown + seagreen + seashell + sienna + silver + skyblue + slateblue + slategray + slategrey + snow + springgreen + steelblue + tan + teal + thistle + tomato + turquoise + violet + wheat + white + whitesmoke + yellow + yellowgreen + transparent - - - - line-clip - line-pattern-clip - marker-allow-overlap - marker-clip - marker-ignore-placement - point-allow-overlap - point-ignore-placement - polygon-clip - polygon-pattern-clip - shield-allow-overlap - shield-avoid-edges - shield-clip - shield-unlock-image - shield-wrap-before - text-allow-overlap - text-avoid-edges - text-clip - - - building-fill - line-color - background-color - marker-fill - marker-line-color - polygon-fill - raster-colorizer-default-color - shield-fill - shield-halo-fill - text-fill - text-halo-fill - - - building-height - marker-height - marker-width - shield-name - text-name - text-orientation - - - opacity - building-fill-opacity - line-gamma - line-miterlimit - line-offset - line-opacity - line-simplify - line-smooth - line-width - line-pattern-offset - line-pattern-simplify - line-pattern-smooth - background-image-opacity - buffer-size - marker-fill-opacity - marker-line-opacity - marker-line-width - marker-max-error - marker-opacity - marker-smooth - marker-spacing - point-opacity - polygon-gamma - polygon-opacity - polygon-simplify - polygon-smooth - polygon-pattern-gamma - polygon-pattern-opacity - polygon-pattern-simplify - polygon-pattern-smooth - raster-colorizer-epsilon - raster-filter-factor - raster-opacity - shield-dx - shield-dy - shield-halo-radius - shield-min-distance - shield-min-padding - shield-opacity - shield-size - shield-spacing - shield-text-dx - shield-text-dy - shield-text-opacity - text-character-spacing - text-dx - text-dy - text-halo-radius - text-max-char-angle-delta - text-min-distance - text-min-padding - text-min-path-length - text-opacity - text-size - - - direct-image-filters - image-filters - line-geometry-transform - line-pattern-geometry-transform - marker-geometry-transform - marker-transform - point-transform - polygon-geometry-transform - polygon-pattern-geometry-transform - shield-transform - - - comp-op - line-cap - line-comp-op - line-gamma-method - line-join - line-rasterizer - line-simplify-algorithm - line-pattern-comp-op - line-pattern-simplify-algorithm - background-image-comp-op - marker-comp-op - marker-multi-policy - marker-placement - marker-type - point-comp-op - point-placement - polygon-comp-op - polygon-gamma-method - polygon-simplify-algorithm - polygon-pattern-alignment - polygon-pattern-comp-op - polygon-pattern-simplify-algorithm - raster-colorizer-default-mode - raster-comp-op - raster-scaling - shield-comp-op - shield-horizontal-alignment - shield-justify-alignment - shield-placement - shield-placement-type - shield-text-transform - shield-vertical-alignment - text-align - text-comp-op - text-halo-rasterizer - text-horizontal-alignment - text-placement - text-placement-type - text-transform - text-vertical-alignment - - - line-dash-offset - line-dasharray - - - debug-mode - base - srs - shield-face-name - shield-placements - shield-wrap-character - text-face-name - text-placements - text-wrap-character + - - raster-colorizer-stops + + + + + + + + + + + + + + - - raster-mesh-size - shield-character-spacing - shield-line-spacing - shield-wrap-width - text-label-position-tolerance - text-line-spacing - text-ratio - text-spacing - text-wrap-width + + + + + + + + + + + + + + + - - line-pattern-file - background-image - font-directory - marker-file - point-file - polygon-pattern-file - shield-file + + + + + + + + + + - + + + - + + + - - + - - - - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + + + + + + + - + - +