Changes between Version 41 and Version 69 of Styles/Lane_and_Road_Attributes


Ignore:
Timestamp:
(multiple changes)
Author:
(multiple changes)
Comment:
(multiple changes)

Legend:

Unmodified
Added
Removed
Modified
  • Styles/Lane_and_Road_Attributes

    v41 v69  
    11[[TranslatedPages]]
    2 = Lanes and Road Attributes mappaint style
     2[[PageOutline(2-10)]]
     3= [[Image(icon.svg,48,link=,middle,inline,margin-right=20)]] Lanes and Road Attributes mappaint style
    34
    45This style visualizes a number of lane and road specific attributes. Namely common variants of the following tags are considered:
    56* [[osmwiki:Key:lanes|lanes]]: Number of lanes for motorized traffic.
    6 * [[osmwiki:Key:width|width]]: The width of the carriageway. Lane-dependent width using width:lanes is fully supported.
     7* [[osmwiki:Key:width|width]]: The width of the carriageway. Lane-dependent width using `width:lanes` is fully supported.
    78* [[osmwiki:Key:change|change]]: Allowed resp. forbidden lane changes.
    89* [[osmwiki:Key:turn|turn]]: Indication of turning lanes, including preliminary support for values hook_right and hook_left (this might change!)
    9 * [[osmwiki:Key:cycleway|cycleway]]: Only cycle tracks are supported if specified with cycleway. Cycle lanes need bicycle:lanes=...|designated|... to be visible.
     10* [[osmwiki:Key:cycleway|cycleway]]: Only cycle tracks are supported if specified with cycleway. Cycle lanes need `bicycle:lanes=...|designated|...` to be visible.
    1011* [[osmwiki:Key:bicycle|bicycle:lanes]]: Dedicated bicycle lanes.
    1112* [[osmwiki:Key:bus|bus:lanes]]: Dedicated bus lanes.
    12 * [[osmwiki:Key:psv|psv:lanes]]: Dedicated PSV (public service vehicle) lanes.
     13* [[osmwiki:Key:lanes:psv|psv:lanes]]: Dedicated PSV (public service vehicle) lanes.
    1314* [[osmwiki:Key:placement|placement]]: Placement of the road relative to the OSM-way. The value transition is not supported.
    1415* [[osmwiki:Tag:man_made=bridge|man_made=bridge]]: Used to indicate the outline of a bridge and group together all features of that bridge.
     
    1819* [[osmwiki:Proposed_features/highway=junction|highway=junction]]: Can be used to indicate the outline of a junction and group together all features of it.
    1920* [[osmwiki:Relation:enforcement|Relation enforcement]]: The to and from members of such relations are highlighted
    20 * [[osmwiki:Key:traffic_sign|traffic_sign]]: Traffic signs for speed limits and overtaking are displayed if tagged with traffic_sign=maxspeed/overtaking and maxspeed=<limit> resp. overtaking=yes/no. The value implicit for maxspeed is interpreted as the end of the speed limit. Combinations like traffic_sign=maxspeed;overtaking are also supported.
     21* [[osmwiki:Key:traffic_sign|traffic_sign]]: Traffic signs for speed limits and overtaking are displayed if tagged with `traffic_sign=maxspeed/overtaking` and `maxspeed=<limit>` resp. `overtaking=yes/no.` The value implicit for `maxspeed` is interpreted as the end of the speed limit. Combinations like `traffic_sign=maxspeed;overtaking` are also supported.
    2122* [[osmwiki:Key:hov|hov:lanes]]: Dedicated HOV lanes. The minimum requirement can be specified by hov:minimum (supported values: 2 and 3)
    2223* [[osmwiki:Relation:destination_sign|Relation destination_sign]]: Experimental and very limited support!
    2324* [[osmwiki:Key:driving_side|driving_side]]: Used to specify the driving side of the traffic. This is only supported on ways.
     25* [[osmwiki:Key:railway|railway]]: Tracks of railways are rendered with limited support for gauge, embedded and electrified.
     26* [[osmwiki:Key:transit|transit]]: Specify how a lane continues in the next road segment. Only verification of valid values!
    2427
    2528Furthermore:
    26 * Common suffixes like :forward, :backward, :left, :right: and :both as well as the proposed :both_ways (for lanes in both directions) are supported where appropriate.
     29* Common suffixes like `:forward`, `:backward`, `:left`, `:right` and `:both` as well as the proposed `:both_ways` (for lanes in both directions) are supported where appropriate.
    2730* Some common tagging errors are detected and displayed, e.g. inconsistent number of lane-dependent values and typos in the keys turn and change.
    28 * The style also supports '''left-hand traffic'''; see section Settings.
    29 
    30 Use the [[Help/Dialog/MapPaint|Map Style Dialog]] to download and activate the style. A good starting point to see it in action is the [osmwww:#map=14/47.0705/15.4353 area around Graz in Austria].
     31* The style also supports '''left-hand traffic'''; see section Settings, below.
     32
     33Use the register [[JOSMImage(dialogs/mapstyle,24,link=,middle)]] [wikitr:/Help/Preferences/MapPaintPreference Map Paint Styles] in [[JOSMImage(preference)]] [wikitr:/Help/Action/Preferences Preferences] to download and activate the style. A good starting point to see it in action is the [osmwww:#map=14/47.0705/15.4353 area around Graz in Austria].
    3134
    3235To '''report bugs or provide feedback''' send [[osmwiki:User:Imagic|me a message]].
    3336
    34 === Settings
    35 Some settings of the style can be configured using Edit -> Preferences -> Display settings -> Colours. All settings start with mappaint.lane.and.road.attributes. Settings that contain the text "boolean" treat white as yes and any other color as no. Settings that contain the text "opacity" use the lightness to specify the opacity (the values for transparency or alpha are completely ignored!)
    36 * The settings '''carriage.way.backward''', '''carriage.way.forward''' and '''carriage.way.both_ways''' specify the colour of the respective lanes.
    37 * The settings '''sidewalk''', '''cycletrack''' and '''combined.sidewalk.and.cycletrack''' specify the colour of the sidewalk, a cycletrack and a combined sidewalk and cycletrack
    38 * If '''boolean.right.hand.traffic''' is set to white, lanes are rendered for right hand traffic, otherwise for left hand traffic.
    39 * If '''boolean.use.svg''' is set to white, the markings for turning lanes are rendered more precisely. '''If you run into memory problems, set this to black.'''
    40 * The settings '''opacity.lane''', '''opacity.markings''' and '''opacity.sidewalk''' specify the opacity of the lane background, road markings and the sidewalk background. If set to white they are opaque; if set to black they are completely transparent, any grey setting in between is treated an appropriate opacity.
    41 
    42 === Known limitations/bugs
    43 * [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artefacts.
     37== Settings
     38Some settings of the style can be configured in [[JOSMImage(preference)]] [wikitr:/Help/Action/Preferences Preferences] in [[JOSMImage(preferences/color,24,link=,middle)]]  [wikitr:/Help/Preferences/ColorPreference Colors] or in [wikitr:/Help/Preferences/Advanced Advanded preferences]. All settings start with **`Paint Style Lane and Road Attributes: `**, respectively, **`clr.mappaint.lane and road attributes.`**. Settings that contain the text **`Boolean_`** treat `white` (`#FFFFFF`) as `yes` and any other color as `no`. Settings that contain the text **`Opacity_`** use the lightness to specify the opacity (the values for `transparency` or `alpha` are completely ignored!)
     39* The settings **`Carriage_way_backward`**, **`Carriage_way_forward`** and **`Carriage_way_bothways`** specify the color of the respective lanes.
     40* The settings **`Sidewalk`**, **`Cycletrack`** and **`Combined_sidewalk_and_cycletrack`** specify the color of the sidewalk, a cycletrack and a combined sidewalk and cycletrack
     41* **`No_access`** sets the color of the dashes if lane's value in `access:lanes[:forward/backward/both_ways]=*` is `no`
     42* If **`Boolean_right_hand_traffic`** is set to `white` (`#FFFFFF`), lanes are rendered for right hand traffic, if set to `black` (`#000000`) for left hand traffic and if set to anything else (which is now the default) the right- and left-hand traffic [wikitr:/left-right-hand-traffic database] from JOSM is used to automatically determine the side.
     43* If **`Boolean_use_svg_for_turning_markings`** is set to `white`, the markings for turning lanes are rendered more precisely. **If you run into memory problems, set this to `black`**.
     44 * If this is set to `black`, the setting **`Integer_PNG_turn_variant`** can be used to specify which set of png images should be used for turn markings. Currently two sets are supplied (value `#000000` and `#000001`).
     45* If **`Boolean_use_svg_for_destination`** is set to `white`, the destination texts are rendered more smoothly.
     46* The settings **`Opacity_lane`**, **`Opacity_markings`** and **`Opacity_sidewalk`** specify the opacity of the lane background, road markings and the sidewalk background. If set to `white` they are opaque; if set to `black` they are completely transparent, any `grey` setting in between is treated an appropriate opacity.
     47* If **`Boolean_show_warning`** is set to `white` warnings about `:lanes` tags are rendered
     48* If **`Boolean_show_error`** is set to `white` error about `:lanes` tags are rendered
     49* If **`Boolean_show_disputed`** is set to `white`, disputed warnings about non numerical values for `maxspeed` and missing tag `source:maxspeed` or its value not in format `<country code>:<context>` are rendered.
     50
     51
     52== Known limitations/bugs
     53* [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artifacts.
    4454* Left-hand traffic is nearly untested. Please provide feedback.
    45 * Roads with oneway=-1 may lead to incorrect results. Please provide feedback.
    46 * change:lanes without suffix is currently only supported on one-ways and for the special case of change:lanes=no|no.
     55* Roads with `oneway=-1` may lead to incorrect results. Please provide feedback.
     56* `change:lanes` without suffix is currently only supported on one-ways and for the special case of `change:lanes=no|no`.
    4757* In forward and backward direction a maximum of eight lanes and for lanes in both directions a maximum of four lanes is displayed.
    48 
    49 === Acknowledgments
     58* `turn:lanes` (without `forward` or `backward`) is only used when combined with `oneway=yes`.
     59* Width as shown in the mapview is not accurate (#8588)
     60
     61== Acknowledgments
    5062* To Wolfgang Hinsch who created a first style which visualizes many lane-specific features. Before I saw his style I wouldn't believe that this is possible.
    5163* To Paul Hartmann who implemented some desperately needed extensions for JOSM which made the implementation of this style a lot easier and improved performance significantly.
    5264* To all who provided valuable feedback during the creation of this style.
    5365
    54 === Preset
    55 An appropriate preset for lane attributes is available at [wiki:Presets/LaneAttributes Lane Attributes].
     66== Preset
     67An appropriate preset for lane attributes is available at [wikitr:/Presets/LaneAttributes Lane Attributes].
    5668
    5769== Screenshot
    58 [[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg)]]
     70[[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg,link=)]]
    5971
    6072== Code
     
    6375#!style type="mapcss"
    6476
    65 
    66 meta {
     77meta
     78{
    6779    title: "Lane and road attributes";
    6880    description: "Visualization of lanes, width, turn lanes, changing the lane, destination, lighting and street lamps, sidewalk, cycletracks, bicycle lanes, bus lanes, psv lanes.";
    69     link: "http://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes";
     81    link: "https://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes";
    7082    author: "Martin Vonwald";
    71     version: "2.4-[[revision]]_[[date]]";
     83    version: "2.10-[[revision]]_[[date]]";
    7284    license: "CC-BY-SA";
    73     min-josm-version: "6950";
     85    icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNyAxOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM4NSAtNTI0LjM2KSI+PHBhdGggZmlsbD0iIzIwMmQyMCIgZD0ibSAzODUgNTI0LjM2IGggMTcgdiAxOCBoIC0xNyB6Ii8+PGcgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxwYXRoIGQ9Im0gMzg3LjUgNTI1LjI2IHYgMTYuMiIgc3Ryb2tlPSIjZTRlN2U0Ii8+PHBhdGggZD0ibSAzOTkuNSA1MjUuMjYgdiAxNi4yIiBzdHJva2U9IiNlNWU3ZTUiLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MjYuMzYgdiA0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MzUuMzYgdiA0IiBmaWxsPSIjZTRlN2U0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PC9zdmc+";
     86    min-josm-version: "7287";
    7487}
    7588
     
    7891    title: "Fahrspur- und Straßenattribute";
    7992    description: "Anzeige von Fahrspuren, Breite, Abbiegespuren, Spurwechsel, Zielangaben, Beleuchtung inkl. Straßenlampen, Gehsteig/Bürgersteig, Radwege, Fahrradspuren, Busspuren, Öffi-Spuren.";
     93    link: "https://josm.openstreetmap.de/wiki/De:Styles/Lane_and_Road_Attributes";
    8094}
    8195
     
    97111  style_show_disputed: no;        /* Will be overriden by ugly hack below */
    98112  style_use_svg_turn: yes;        /* Will be overriden by ugly hack below */
    99 
     113 
    100114  /* Ugly hack to make opacity configurable */
    101115  ugly_lane_opacity: Opacity_lane#808080;
     
    107121
    108122  /* Ugly hack to make boolean configurable */
    109   ugly_right_hand_traffic: Boolean_right_hand_traffic#FFFFFF;
    110   style_right_hand_traffic: eval(red(prop(ugly_right_hand_traffic)))=1;
     123  ugly_right_hand_traffic: Boolean_right_hand_traffic#888888;
     124  /*style_right_hand_traffic: eval(red(prop(ugly_right_hand_traffic)))=1;*/
     125  /*style_right_hand_traffic: eval(is_right_hand_traffic());*/
     126  style_right_hand_traffic: eval((red(prop(ugly_right_hand_traffic))=1)?yes:((red(prop(ugly_right_hand_traffic))=0)?no:is_right_hand_traffic()));
    111127  ugly_show_warnings: Boolean_show_warnings#FFFFFF;
    112128  style_show_warnings: eval(red(prop(ugly_show_warnings)))=1;
     
    117133  ugly_use_svg_turn: Boolean_use_svg_for_turning_markings#FFFFFF;
    118134  style_use_svg_turn: eval(red(prop(ugly_use_svg_turn)))=1;
     135  ugly_png_turn_variant: Integer_PNG_turn_variant#000000;
     136  style_png_turn_variant: eval(round(blue(prop((ugly_png_turn_variant)))*256));
    119137  ugly_use_svg_destination: Boolean_use_svg_for_destination#FFFFFF;
    120138  style_use_svg_destination: eval(red(prop(ugly_use_svg_destination)))=1;
     
    430448way["turn:forward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:forward"))?prop(data_error):"invalid turn:forward value"); }
    431449way["turn:backward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:backward"))?prop(data_error):"invalid turn:backward value"); }
     450way["turn:both_ways"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:both_ways"))?prop(data_error):"invalid turn:both_ways value"); }
    432451way["turn:lanes"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes"))?prop(data_error):"invalid turn:lanes value"); }
    433452way["turn:lanes:forward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:forward"))?prop(data_error):"invalid turn:lanes:forward value"); }
    434453way["turn:lanes:backward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:backward"))?prop(data_error):"invalid turn:lanes:backward value"); }
     454way["turn:lanes:both_ways"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:both_ways"))?prop(data_error):"invalid turn:lanes:both_ways value"); }
    435455
    436456/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    454474                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    455475                                (
    456                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     476                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    457477                                (
    458                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    459                                     concat("images/turn forward ",prop(t),".png")
     478                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     479                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    460480                                )
    461481                                )
     
    465485                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    466486                                (
    467                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     487                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    468488                                (
    469                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    470                                     concat("images/turn forward ",prop(t),".png")
     489                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     490                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    471491                                )
    472492                                )
     
    476496                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    477497                                (
    478                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     498                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    479499                                (
    480                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    481                                     concat("images/turn forward ",prop(t),".png")
     500                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     501                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    482502                                )
    483503                                )
     
    487507                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    488508                                (
    489                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     509                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    490510                                (
    491                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    492                                     concat("images/turn forward ",prop(t),".png")
     511                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     512                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    493513                                )
    494514                                )
     
    498518                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    499519                                (
    500                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     520                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    501521                                (
    502                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    503                                     concat("images/turn forward ",prop(t),".png")
     522                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     523                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    504524                                )
    505525                                )
     
    509529                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    510530                                (
    511                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     531                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    512532                                (
    513                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    514                                     concat("images/turn forward ",prop(t),".png")
     533                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     534                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    515535                                )
    516536                                )
     
    520540                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    521541                                (
    522                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     542                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    523543                                (
    524                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    525                                     concat("images/turn forward ",prop(t),".png")
     544                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     545                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    526546                                )
    527547                                )
     
    531551                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    532552                                (
    533                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png":"images/turn forward reverse lefthand.png"):
     553                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")):
    534554                                (
    535                                     regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    536                                     concat("images/turn forward ",prop(t),".png")
     555                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     556                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png")
    537557                                )
    538558                                )
     
    567587                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    568588                                (
    569                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     589                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    570590                                (
    571                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    572                                     concat("images/turn backward ",prop(t),".png")
     591                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     592                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    573593                                )
    574594                                )
     
    578598                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    579599                                (
    580                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     600                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    581601                                (
    582                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    583                                     concat("images/turn backward ",prop(t),".png")
     602                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     603                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    584604                                )
    585605                                )
     
    589609                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    590610                                (
    591                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     611                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    592612                                (
    593                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    594                                     concat("images/turn backward ",prop(t),".png")
     613                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     614                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    595615                                )
    596616                                )
     
    600620                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    601621                                (
    602                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     622                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    603623                                (
    604                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    605                                     concat("images/turn backward ",prop(t),".png")
     624                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     625                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    606626                                )
    607627                                )
     
    611631                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    612632                                (
    613                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     633                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    614634                                (
    615                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    616                                     concat("images/turn backward ",prop(t),".png")
     635                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     636                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    617637                                )
    618638                                )
     
    622642                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    623643                                (
    624                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     644                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    625645                                (
    626                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    627                                     concat("images/turn backward ",prop(t),".png")
     646                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     647                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    628648                                )
    629649                                )
     
    633653                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    634654                                (
    635                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     655                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    636656                                (
    637                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    638                                     concat("images/turn backward ",prop(t),".png")
     657                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     658                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    639659                                )
    640660                                )
     
    644664                                ((prop(t)="none") || (prop(t)=""))?prop(unset_property):
    645665                                (
    646                                 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):
     666                                (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")):
    647667                                (
    648                                     regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
    649                                     concat("images/turn backward ",prop(t),".png")
     668                                    regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"):
     669                                    concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png")
    650670                                )
    651671                                )
     
    9951015}
    9961016
     1017/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1018/* Both-way lanes (SVG)                                                                                                                            */
     1019/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1020way|z17-[is_prop_set(ok)][prop(style_use_svg_turn)]["turn:lanes:both_ways"],
     1021way|z17-[is_prop_set(ok)][prop(style_use_svg_turn)]["turn:both_ways"]
     1022{
     1023    temp: eval(cond(has_tag_key("turn:lanes:both_ways"),tag("turn:lanes:both_ways"),tag("turn:both_ways")));
     1024    temp_list: eval(split("|",prop(temp)));
     1025    temp_length: eval(length(prop(temp_list)));
     1026
     1027    turn_image_bothways_1: ""; t: eval(get(prop(temp_list),0)); t_scale: 1.0;
     1028    t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t)));         turn_image_bothways_1: eval(prop(t_test)?prop(turn_svg_through_forward):                                                                                              prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1029    t_scale_after_through: eval(prop(t_scale));
     1030    t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t)));    turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1031    t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t)));           turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"):       prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1032    t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t)));     turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1033    t_scale: eval(prop(t_scale_after_through));
     1034    t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t)));     turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1035    t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t)));            turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"):        prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1036    t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t)));      turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"):  prop(turn_image_bothways_1));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1037    turn_image_bothways_1: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_1));
     1038    turn_image_bothways_1: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_1));
     1039    turn_image_bothways_1: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_1));
     1040    turn_image_bothways_1: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_1));
     1041    turn_image_bothways_1: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_1));
     1042    turn_image_bothways_1: eval((prop(turn_image_bothways_1)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_1),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_1),"</g></svg>"));
     1043
     1044    turn_image_bothways_2: ""; t: eval(get(prop(temp_list),1)); t_scale: 1.0;
     1045    t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t)));         turn_image_bothways_2: eval(prop(t_test)?prop(turn_svg_through_forward):                                                                                              prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1046    t_scale_after_through: eval(prop(t_scale));
     1047    t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t)));    turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1048    t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t)));           turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"):       prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1049    t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t)));     turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1050    t_scale: eval(prop(t_scale_after_through));
     1051    t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t)));     turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1052    t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t)));            turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"):        prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1053    t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t)));      turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"):  prop(turn_image_bothways_2));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1054    turn_image_bothways_2: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_2));
     1055    turn_image_bothways_2: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_2));
     1056    turn_image_bothways_2: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_2));
     1057    turn_image_bothways_2: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_2));
     1058    turn_image_bothways_2: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_2));
     1059    turn_image_bothways_2: eval((prop(turn_image_bothways_2)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_2),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_2),"</g></svg>"));
     1060
     1061    turn_image_bothways_3: ""; t: eval(get(prop(temp_list),2)); t_scale: 1.0;
     1062    t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t)));         turn_image_bothways_3: eval(prop(t_test)?prop(turn_svg_through_forward):                                                                                              prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1063    t_scale_after_through: eval(prop(t_scale));
     1064    t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t)));    turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1065    t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t)));           turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"):       prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1066    t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t)));     turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1067    t_scale: eval(prop(t_scale_after_through));
     1068    t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t)));     turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1069    t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t)));            turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"):        prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1070    t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t)));      turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"):  prop(turn_image_bothways_3));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1071    turn_image_bothways_3: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_3));
     1072    turn_image_bothways_3: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_3));
     1073    turn_image_bothways_3: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_3));
     1074    turn_image_bothways_3: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_3));
     1075    turn_image_bothways_3: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_3));
     1076    turn_image_bothways_3: eval((prop(turn_image_bothways_3)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_3),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_3),"</g></svg>"));
     1077
     1078    turn_image_bothways_4: ""; t: eval(get(prop(temp_list),3)); t_scale: 1.0;
     1079    t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t)));         turn_image_bothways_4: eval(prop(t_test)?prop(turn_svg_through_forward):                                                                                              prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1080    t_scale_after_through: eval(prop(t_scale));
     1081    t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t)));    turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1082    t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t)));           turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"):       prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1083    t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t)));     turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1084    t_scale: eval(prop(t_scale_after_through));
     1085    t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t)));     turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1086    t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t)));            turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"):        prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1087    t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t)));      turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"):  prop(turn_image_bothways_4));    t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale));
     1088    turn_image_bothways_4: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_4));
     1089    turn_image_bothways_4: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_4));
     1090    turn_image_bothways_4: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_4));
     1091    turn_image_bothways_4: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_4));
     1092    turn_image_bothways_4: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_4));
     1093    turn_image_bothways_4: eval((prop(turn_image_bothways_4)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_4),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_4),"</g></svg>"));
     1094}
     1095
    9971096/***************************************************************************************************************************************************/
    9981097/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    15791678}
    15801679
    1581 
     1680/**
     1681 * Convert width to meters
     1682 */
     1683way[width=~/^(\d+)'$/] {
     1684  road_width: 0.3048 * get(regexp_match("^(\\d+)'$", tag(width)), 1);
     1685}
     1686way[width=~/^(\d+)"$/] {
     1687  road_width: 0.0254 * get(regexp_match("^(\\d+)\"$", tag(width)), 1);
     1688}
     1689way[width=~/^(\d+)'(\d+)"$/] {
     1690  _match: regexp_match("^(\\d+)'(\\d+)\"$", tag(width));
     1691  road_width: 0.3048 * get(prop(_match), 1) + 0.0254 * get(prop(_match), 2);
     1692}
     1693way[width=~/^(\d+)(\.\d+)?$/] {
     1694  road_width: tag(width);
     1695}
    15821696/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    15831697/* Determine the width of the lanes, road markings and the inner lane width                                                                        */
     
    15861700{
    15871701    lane_min_width: 4;
    1588     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((1.25*tag(width))/prop(lanes_all)):4)));
     1702    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    15891703    change_allowed: list(6,9);
    15901704    road_marking_width: 1;
     
    15951709{
    15961710    lane_min_width: 8;
    1597     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((2.5*tag(width))/prop(lanes_all)):8)));
     1711    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    15981712    change_allowed: list(12,18);
    15991713    road_marking_width: 2;
     
    16041718{
    16051719    lane_min_width: 8;
    1606     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((5*tag(width))/prop(lanes_all)):16)));
     1720    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16071721    change_allowed: list(24,36);
    16081722    road_marking_width: 2;
     
    16131727{
    16141728    lane_min_width: 8;
    1615     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((10*tag(width))/prop(lanes_all)):32)));
     1729    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16161730    change_allowed: list(48,72);
    16171731    road_marking_width: 2;
     
    16221736{
    16231737    lane_min_width: 12;
    1624     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((20*tag(width))/prop(lanes_all)):64)));
     1738    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16251739    change_allowed: list(96,144);
    16261740    road_marking_width: 4;
     
    16311745{
    16321746    lane_min_width: 20;
    1633     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((40*tag(width))/prop(lanes_all)):128)));
     1747    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16341748    change_allowed: list(192,288);
    16351749    road_marking_width: 6;
     
    21532267/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    21542268/***************************************************************************************************************************************************/
    2155 way[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground
     2269way[is_prop_set(ok, "default")][is_prop_set(lanes_all, "default")]::Ground
    21562270{
    21572271    linecap: none;
     
    21652279/* Sidewalk and cycletrack */
    21662280way|z17- {} /* ATTENTION: For whatever reason this is needed, otherwise the following won't be interpreted correctly */
    2167 way|z17-[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground
     2281way|z17-[is_prop_set(ok, "default")][is_prop_set(lanes_all, "default")]::Ground
    21682282{
    21692283    /* Cycletrack in an one-way on the left side? */
     
    30263140    right-casing-dashes:                                  eval(prop(change_bothways_1_right,"default"));
    30273141    left-casing-dashes:                                   eval(prop(change_bothways_1_left,"default"));
     3142    repeat-image:                                     eval(prop(turn_image_bothways_1,"default"));
    30283143
    30293144    opacity: 0.0; linecap: none;
     3145    repeat-image-offset: eval(prop(offset));
     3146    repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width)));
     3147    repeat-image-spacing: eval(prop(repeat-image-height) * 3);
    30303148    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default"));
    30313149    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default"));
     
    30503168    right-casing-dashes:                                  eval(prop(change_bothways_2_right,"default"));
    30513169    left-casing-dashes:                                   eval(prop(change_bothways_2_left,"default"));
     3170    repeat-image:                                     eval(prop(turn_image_bothways_2,"default"));
    30523171
    30533172    opacity: 0.0; linecap: none;
     3173    repeat-image-offset: eval(prop(offset));
     3174    repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width)));
     3175    repeat-image-spacing: eval(prop(repeat-image-height) * 3);
    30543176    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default"));
    30553177    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default"));
     
    30743196    right-casing-dashes:                                  eval(prop(change_bothways_3_right,"default"));
    30753197    left-casing-dashes:                                   eval(prop(change_bothways_3_left,"default"));
     3198    repeat-image:                                     eval(prop(turn_image_bothways_3,"default"));
    30763199
    30773200    opacity: 0.0; linecap: none;
     3201    repeat-image-offset: eval(prop(offset));
     3202    repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width)));
     3203    repeat-image-spacing: eval(prop(repeat-image-height) * 3);
    30783204    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default"));
    30793205    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default"));
     
    30983224    right-casing-dashes:                                  eval(prop(change_bothways_4_right,"default"));
    30993225    left-casing-dashes:                                   eval(prop(change_bothways_4_left,"default"));
     3226    repeat-image:                                     eval(prop(turn_image_bothways_4,"default"));
    31003227
    31013228    opacity: 0.0; linecap: none;
     3229    repeat-image-offset: eval(prop(offset));
     3230    repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width)));
     3231    repeat-image-spacing: eval(prop(repeat-image-height) * 3);
    31023232    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default"));
    31033233    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default"));
     
    31183248/***************************************************************************************************************************************************/
    31193249/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3250/* Railway rendering                                                                                                                               */
     3251/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3252/***************************************************************************************************************************************************/
     3253way|z18-[railway=rail]::Railway_Way,
     3254way|z18-[railway=light_rail]::Railway_Way,
     3255way|z18-[railway=subway]::Railway_Way,
     3256way|z18-[railway=miniature]::Railway_Way,
     3257way|z18-[railway=tram]::Railway_Way
     3258{
     3259    /* Determine gauge (safety limits: 1 - 10000 mm) */
     3260    rail_gauge_list: eval(has_tag_key("gauge")?split(";",tag("gauge")):list(1435));
     3261    rail_gauge: eval(get(prop(rail_gauge_list),length(prop(rail_gauge_list))-1));
     3262    rail_gauge: eval(min(10000,cond(prop(rail_gauge)<1,1435,prop(rail_gauge))));
     3263 
     3264    /* Ties should be rendered in case standard and miniature railways; this might be override by the key embedded */
     3265    rail_show_ties: eval(cond(((tag("railway")=="rail") || (tag("railway")=="miniature")),yes,no));
     3266    rail_show_ties: eval(cond(has_tag_key("embedded"),cond(tag("embedded")=="no",yes,no),prop(rail_show_ties)));
     3267
     3268    /* Type of electrification:  */
     3269    /*    * rail -> show a yellow border on one rail */
     3270    /*    * contact_line -> show a contact line near the middle of the track */
     3271    rail_show_contact_line: eval(cond(has_tag_key("electrified"),cond(tag("electrified")="contact_line",yes,no),no));
     3272    rail_electrified_rail: eval(cond(has_tag_key("electrified"),cond(tag("electrified")="rail",yes,no),no));
     3273   
     3274    /* Make rails transparent within tunnels */
     3275    rail_image_opacity: eval(cond(((has_tag_key("tunnel")) && (tag("tunnel")=="yes")),0.2,0.8));
     3276   
     3277    /* Create image */
     3278    rail_image: eval(concat(
     3279                cond(prop(rail_show_ties),"<rect x='0' y='0' width='8' height='80' style='stroke:#301004; fill:#90300C;'/>",""),
     3280                "<line x1='0' y1= '8' x2='32' y2= '8' style='stroke:",cond(prop(rail_electrified_rail),"#FFFF00","#301004"),";'/>",
     3281                "<line x1='0' y1='10' x2='32' y2='10' style='stroke:#602008;stroke-width:3px'/>",
     3282                "<line x1='0' y1='12' x2='32' y2='12' style='stroke:#301004;'/>",
     3283                "<line x1='0' y1='67' x2='32' y2='67' style='stroke:#301004;'/>",
     3284                "<line x1='0' y1='69' x2='32' y2='69' style='stroke:#602008;stroke-width:3px'/>",
     3285                "<line x1='0' y1='71' x2='32' y2='71' style='stroke:#301004;'/>",
     3286                cond(prop(rail_show_contact_line),"<line x1='0' y1='35' x2='32' y2='35' style='stroke:#060200;'/>","")
     3287                ));   
     3288    repeat-image: concat("data:image/svg+xml,<svg width='32px' height='80px'><g fill-opacity='",prop(rail_image_opacity),"' opacity='",prop(rail_image_opacity),"'>",prop(rail_image),"</g></svg>");
     3289    repeat-image-height: eval(max(2,ceil((prop(rail_gauge)*prop(pixel_per_metre,"default"))*0.0012)));
     3290}
     3291
     3292/***************************************************************************************************************************************************/
     3293/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3294/* Extra rendering for footways/cycleways if not already rendered                                                                                  */
     3295/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3296/***************************************************************************************************************************************************/
     3297way|z17-[!is_prop_set(ok, "default")][highway=footway],
     3298way|z17-[!is_prop_set(ok, "default")][highway=cycleway]
     3299{
     3300    width: eval(2*prop(pixel_per_metre,"default"));
     3301    linecap: none;
     3302    opacity: eval(prop("style_lane_opacity","default"));
     3303    right-casing-width: eval(max(1,0.15*prop(pixel_per_metre,"default")));   right-casing-color: gray;
     3304    left-casing-width:  eval(max(1,0.15*prop(pixel_per_metre,"default")));   left-casing-color:  gray;   
     3305    casing-linecap: none;
     3306    temp: 0;
     3307    temp: eval(prop(temp)+(((tag("highway")="footway")  || ((has_tag_key("foot"))    && (tag("foot")   ="designated")))?1:0));
     3308    temp: eval(prop(temp)+(((tag("highway")="cycleway") || ((has_tag_key("bicycle")) && (tag("bicycle")="designated")))?2:0));
     3309    color: eval(get(prop(style_sidewalk_color,"default"),prop(temp)));
     3310}
     3311
     3312/***************************************************************************************************************************************************/
     3313/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    31203314/* Additional attributes/features                                                                                                                  */
    31213315/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    31683362    symbol-fill-opacity: 0.05;
    31693363}
    3170 
    31713364
    31723365/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    31983391/* Destination                                                                                                                                     */
    31993392/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    3200 way|z17-[is_prop_set(ok)][destination][!prop(style_use_svg_destination)]::Destination
     3393way|z17-[is_prop_set(ok, "default")][destination][!prop(style_use_svg_destination, "default")]::Destination
    32013394{
    32023395    text-offset: eval(prop("placement_offset","default"));
     
    32073400    text-halo-radius: 2;    text-halo-color: blue;    text-halo-opacity: 0.3;
    32083401}
    3209 way|z17-[is_prop_set(ok)]["destination:forward"][!prop(style_use_svg_destination)]::Destination_Forward
     3402way|z17-[is_prop_set(ok, "default")]["destination:forward"][!prop(style_use_svg_destination, "default")]::Destination_Forward
    32103403{
    32113404    text-offset: eval(prop("placement_offset","default")+(eval(prop(lane_width_all,"default"))/4));
     
    32163409    text-halo-radius: 2;    text-halo-color: blue;    text-halo-opacity: 0.3;
    32173410}
    3218 way|z17-[is_prop_set(ok)]["destination:backward"][!prop(style_use_svg_destination)]::Destination_Backward
     3411way|z17-[is_prop_set(ok, "default")]["destination:backward"][!prop(style_use_svg_destination, "default")]::Destination_Backward
    32193412{
    32203413    text-offset: eval(prop("placement_offset","default")-(eval(prop(lane_width_all,"default"))/4));
     
    32283421/* TODO: make opacity configurable */
    32293422way{} /* If this is removed the following won't be interpreted */
    3230 way|z17-[is_prop_set(ok)][destination][prop(style_use_svg_destination)]::Destination
     3423way|z17-[is_prop_set(ok, "default")][destination][prop(style_use_svg_destination, "default")]::Destination
    32313424{
    32323425    complete_destination: eval(get(split(";",tag(destination)),0));
     
    32443437}
    32453438way{} /* If this is removed the following won't be interpreted */
    3246 way|z17-[is_prop_set(ok)]["destination:forward"][prop(style_use_svg_destination)]::Destination_Forward
     3439way|z17-[is_prop_set(ok, "default")]["destination:forward"][prop(style_use_svg_destination, "default")]::Destination_Forward
    32473440{
    32483441    complete_destination: eval(get(split(";",tag("destination:forward")),0));
     
    32593452}
    32603453way{} /* If this is removed the following won't be interpreted */
    3261 way|z17-[is_prop_set(ok)]["destination:backward"][prop(style_use_svg_destination)]::Destination_Backward
     3454way|z17-[is_prop_set(ok, "default")]["destination:backward"][prop(style_use_svg_destination, "default")]::Destination_Backward
    32623455{
    32633456    complete_destination: eval(get(split(";",tag("destination:backward")),0));
     
    32773470/* destination_sign relation (experimental support - only one sign per way is supported)                                                           */
    32783471/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    3279 relation[is_prop_set(ok)][type="destination_sign"] >[role="to"] way|z17-::Destination_Sign
     3472relation[is_prop_set(ok, "default")][type="destination_sign"] >[role="to"] way|z17-::Destination_Sign
    32803473{   
    32813474    sign_font_size: 50;
     
    34163609
    34173610/* Now render the traffic sign */
    3418 node|z16-[!(prop(traffic_sign_svg)="")]
    3419 {
     3611node|z16-[!(prop(traffic_sign_svg,"default")="")]
     3612{
     3613    major-z-index: 5; /* JOSM added some default rendering, which interferes with this */
    34203614    icon-image: eval(concat("data:image/svg+xml,<svg width='100px' height='",prop(traffic_sign_top),"'>",prop(traffic_sign_svg),"</svg>"));
    34213615    icon-width: eval(max(12,prop(pixel_per_metre)));
     3616}
     3617
     3618/* Disable JOSMs default rendering (this is a hack and may fail at any time) */
     3619/* Make sure, that the selector is identical to the one that actually renders the traffic sign */
     3620node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodebg
     3621{
     3622    symbol-shape: none;
     3623}
     3624node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodefg
     3625{
     3626    text: none;
     3627    symbol-shape: none;
    34223628}
    34233629
     
    34583664way["destination:forward:int_ref"]              { data_error:   "use destination:int_ref:forward"; }
    34593665way["destination:backward:int_ref"]             { data_error:   "use destination:int_ref:backward"; }
    3460 way["destination:forward:sign"]                 { data_error:   "use destination:sign:forward"; }
    3461 way["destination:backward:sign"]                { data_error:   "use destination:sign:backward"; }
     3666way["destination:forward:symbol"]               { data_error:   "use destination:symbol:forward"; }
     3667way["destination:backward:symbol"]              { data_error:   "use destination:symbol:backward"; }
    34623668way["destination:forward:country"]              { data_error:   "use destination:country:forward"; }
    34633669way["destination:backward:country"]             { data_error:   "use destination:country:backward"; }
     3670
     3671way["destination:sign"]                         { data_error:   "use destination:symbol"; }
     3672way["destination:sign:forward"]                 { data_error:   "use destination:symbol"; }
     3673way["destination:sign:backward"]                { data_error:   "use destination:symbol"; }
     3674way["destination:sign:lanes"]                   { data_error:   "use destination:symbol"; }
     3675way["destination:sign:lanes:forward"]           { data_error:   "use destination:symbol"; }
     3676way["destination:sign:lanes:backward"]          { data_error:   "use destination:symbol"; }
     3677
     3678way[destination=~/:\S/]                         { data_error:   "use ; instead of : to separate values"; }
     3679way[destination:lanes=~/:\S/]                   { data_error:   "use ; instead of : to separate values"; }
     3680way[destination:lanes:forward=~/:\S/]           { data_error:   "use ; instead of : to separate values"; }
     3681way[destination:lanes:backward=~/:\S/]          { data_error:   "use ; instead of : to separate values"; }
     3682
     3683way[destination=~/,/]                           { data_error:   "use ; instead of , to separate values"; }
     3684way[destination:lanes=~/,/]                     { data_error:   "use ; instead of , to separate values"; }
     3685way[destination:lanes:forward=~/,/]             { data_error:   "use ; instead of , to separate values"; }
     3686way[destination:lanes:backward=~/,/]            { data_error:   "use ; instead of , to separate values"; }
     3687
     3688way["transit"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit"))?prop(data_error):"invalid transit value"); }
     3689way["transit:forward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:forward"))?prop(data_error):"invalid transit:forward value"); }
     3690way["transit:backward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:backward"))?prop(data_error):"invalid transit:backward value"); }
     3691way["transit:lanes"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes"))?prop(data_error):"invalid transit:lanes value"); }
     3692way["transit:lanes:forward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:forward"))?prop(data_error):"invalid transit:lanes:forward value"); }
     3693way["transit:lanes:backward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:backward"))?prop(data_error):"invalid transit:lanes:backward value"); }
     3694way["transit:both_ways"]                        { data_error:   "use the relation instead of transit:both_ways"; }
     3695way["transit:lanes:both_ways"]                  { data_error:   "use the relation instead of transit:lanes:both_ways"; }
    34643696
    34653697/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    34953727}
    34963728
    3497 
    34983729}}}