MapCSS/0.2/BNF

From OpenStreetMap Wiki
< MapCSS‎ | 0.2
Jump to navigation Jump to search

This page contains BNF for MapCSS 0.2. This grammar is SLR. Note that it requires a tokeniser that only produces a whitespace token immediately following an object.

ruleset      ::= rule | ruleset rule;

rule         ::= selectors declarations | import;

import       ::= AT "import" "url" "(" QUOTED ")" ID ";";

selectors    ::= uSelectors | uSelectors ",";

uSelectors   ::= selector | uSelectors "," selector;

selector     ::= subselector | selector subselector;

subselector  ::= object SPACE | object zoom | object zoom tests | maybeClass;

zoom         ::= PIPE "z" range | ;

range        ::= NUMBER | NUMBER "-" NUMBER | NUMBER "-" | "-" NUMBER;

tests        ::= test | tests test;

test         ::= "[" condition "]";

condition    ::= tag binary value | unary tag | tag;

tag          ::= key | tag ":" key;

key          ::= ID;

value        ::= ID | REGEX | NUMBER;

binary       ::= "=" | "!=" | "=~" | "<" | ">" | "<=" | ">=";

unary        ::= "-" | "!";

maybeClass   ::= class | "!" class;

class        ::= "." ID | ":" ID;

object       ::= "node" | "way" | "relation" | "area" | "line" | "canvas" | "*" | ;

declarations ::= declaration | declarations declaration;

declaration  ::= "{" styleset "}" | "{" "}";

styleset     ::= uStyleset | uStyleset ";" ;

uStyleset    ::= style | uStyleset ";" style;

style        ::= key ":" specifier;

specifier    ::= named | sizes | colour | url | eval;

named        ::= ID;

sizes        ::= size | sizes "," size;

size         ::= NUMBER units;

colour       ::= HASHCOLOUR | "rgb" "(" NUMBER "," NUMBER "," NUMBER ")" | "rgba" "(" NUMBER "," NUMBER "," NUMBER "," NUMBER ")";

url          ::= "url" "(" urlContent ")";

urlContent   ::= QUOTED | eval;

units        ::= "px" | "pt" | "%" | ;

eval         ::= "eval" "(" QUOTED ")";

Compatibility issues

  • With Potlatch 2
    • Potlatch 2 uses the :area pseudo-class to detect areas. This grammar will trip here because area is a keyword not an identifier. The wiki page on 0.2 seems to suggest that :closed should be used here instead.
    • Potlatch 2 does not expect URLs to be surrounded by url('blah'), this grammar does.
  • With Kothic
    • Kothic does not expect URLs to be surrounded by url('blah'), this grammar does.
    • Kothic does not expect eval expressions to have quotes inside, this grammar does.