    /* 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.
          }
        }
      }
    }