Changes between Initial Version and Version 1 of Styles/Lane_and_Road_Attributes


Ignore:
Timestamp:
2013-02-16T20:48:28+01:00 (11 years ago)
Author:
imagic
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Styles/Lane_and_Road_Attributes

    v1 v1  
     1This style visualizes common variants of the following tags:
     2* lanes (Number of lanes for motorized traffic)
     3* width (Width of the carriageway. The tag width:lanes for lane-dependent width is also supported)
     4* change (Allowed lane changes)
     5* turn (Turning lanes)
     6* cycleway (Only cycle tracks are supported if specified with cycleway. Cycle lanes need bicycle:lanes to be displayed.)
     7* bicycle:lanes (Dedicated bicycle lanes)
     8* bus:lanes (Dedicated bus lanes)
     9* psv:lanes (Dedicated PSV lanes)
     10* placement (Placement of the road relative to the OSM-way. The valuation transition is not supported.)
     11* man_made=bridge (Outline of a bridge)
     12* lit and highway=street_lamp (Street lightning)
     13
     14Some common tagging errors are detected and displayed. The style also supports left-hand traffic if the parameter style_right_hand_traffic is set to no.
     15
     16
     17{{{
     18#!style type="mapcss"
     19
     20meta {
     21    title: "Lane and road attributes";
     22    description: "Visualization of lanes, width, turn lanes, changing the lane, lightning and street lamps, sidewalk, cycletracks, bicycle lanes, bus lanes, psv lanes.";
     23    author: "Martin Vonwald";
     24    version: "0.99-beta.[[revision]]_[[date]]";
     25    license: "CC-BY-SA";
     26    min-josm-version: "5714";
     27}
     28
     29meta[lang=de]
     30{
     31    title: "Fahrspur- und Straßenattribute";
     32    description: "Anzeige von Fahrspuren, Breite, Abbiegespuren, Spurwechsel, Beleuchtung inkl. Straßenlampen, Gehsteig/Bürgersteig, Radwege, Fahrradspuren, Busspuren, Öffi-Spuren.";
     33}
     34
     35
     36/***************************************************************************************************************************************************/
     37/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     38/* Global settings and initialization                                                                                                             */
     39/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     40/***************************************************************************************************************************************************/
     41way
     42{
     43  /* Settings: change if necessary */
     44  style_right_hand_traffic: yes;
     45  style_lane_opacity: 0.5;
     46  style_ground_opacity: 0.5;
     47  style_show_warnings: yes;
     48  style_show_errors: yes;
     49  style_show_disputed: no;
     50
     51  /* Color of the sidewalk: none (ignored), sidewalk only, cycletrack only, sidewalk and cycletrack */
     52  style_sidewalk_color: eval(list(#000000,#808080,#8080C0,#C08080));
     53
     54  /* Color of the lane if bicycle=designated */
     55  style_bicycle_color: #8080C0;
     56
     57  /* Color of the dashes if lanes is psv=designated */
     58  style_psv_color: red;
     59
     60  /* Color of the dashes if lanes is bus=designated */
     61  style_bus_color: red;
     62}
     63
     64/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     65/* Decide which roads should be rendered                                                                                                           */
     66/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     67way[lanes][!leisure],
     68way[lanes:forward],
     69way[lanes:backward],
     70way[turn:lanes],way[turn:lanes:forward],way[turn:lanes:backward],way[turn:lanes:both_ways],
     71way[change:lanes],way[change:lanes:forward],way[change:lanes:backward],way[change:lanes:both_ways],
     72way[sidewalk],
     73way[cycleway=track],way[cycleway:left],way[cycleway:right],way[cycleway:both]
     74{ ok: yes; }
     75
     76/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     77/* One-ways                                                                                                                                        */
     78/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     79way[is_prop_set(ok)]            { oneway_type:  0; }
     80way[is_prop_set(ok)][oneway?]   { oneway_type:  1; }
     81way[is_prop_set(ok)][oneway=-1] { oneway_type: -1; }
     82
     83/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     84/* Pixel per metre (on average)                                                                                                                    */
     85/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     86*|z17  { pixel_per_metre: 1.25; }
     87*|z18  { pixel_per_metre: 2.5; }
     88*|z19  { pixel_per_metre: 5; }
     89*|z20  { pixel_per_metre: 10; }
     90*|z21  { pixel_per_metre: 20; }
     91*|z22- { pixel_per_metre: 40; }
     92
     93/***************************************************************************************************************************************************/
     94/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     95/* Colors                                                                                                                                          */
     96/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     97/***************************************************************************************************************************************************/
     98way[is_prop_set(ok)]
     99{
     100    /* Base color of the carriage way */
     101    ground-color:   eval((has_tag_key(lit)&&(tag(lit)=yes))?#707070:#404040);
     102
     103    /* Individual colors for each direction */
     104    color_forward:  eval(rgb(red(prop(ground-color))    ,green(prop(ground-color))+0.1,blue(prop(ground-color))    ));
     105    color_backward: eval(rgb(red(prop(ground-color))+0.1,green(prop(ground-color))    ,blue(prop(ground-color))    ));
     106    color_bothways: eval(rgb(red(prop(ground-color))    ,green(prop(ground-color))    ,blue(prop(ground-color))+0.1));
     107}
     108
     109/***************************************************************************************************************************************************/
     110/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     111/* Lane initializiation                                                                                                                            */
     112/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     113/***************************************************************************************************************************************************/
     114way|z17- {} /* ATTENTION: For whatever reason this is needed, otherwise the following won't be interpreted correctly */
     115way|z17-[is_prop_set(ok)]
     116{
     117    change_forward_1_left: yes;    change_forward_1_right: yes;
     118    change_forward_2_left: yes;    change_forward_2_right: yes;
     119    change_forward_3_left: yes;    change_forward_3_right: yes;
     120    change_forward_4_left: yes;    change_forward_4_right: yes;
     121    change_forward_5_left: yes;    change_forward_5_right: yes;
     122    change_forward_6_left: yes;    change_forward_6_right: yes;
     123    change_forward_7_left: yes;    change_forward_7_right: yes;
     124    change_forward_8_left: yes;    change_forward_8_right: yes;
     125
     126    change_backward_1_left: yes;    change_backward_1_right: yes;
     127    change_backward_2_left: yes;    change_backward_2_right: yes;
     128    change_backward_3_left: yes;    change_backward_3_right: yes;
     129    change_backward_4_left: yes;    change_backward_4_right: yes;
     130    change_backward_5_left: yes;    change_backward_5_right: yes;
     131    change_backward_6_left: yes;    change_backward_6_right: yes;
     132    change_backward_7_left: yes;    change_backward_7_right: yes;
     133    change_backward_8_left: yes;    change_backward_8_right: yes;
     134
     135    change_bothways_1_left: yes;    change_bothways_1_right: yes;
     136    change_bothways_2_left: yes;    change_bothways_2_right: yes;
     137    change_bothways_3_left: yes;    change_bothways_3_right: yes;
     138    change_bothways_4_left: yes;    change_bothways_4_right: yes;
     139
     140    color_forward_1: prop(color_forward);
     141    color_forward_2: prop(color_forward);
     142    color_forward_3: prop(color_forward);
     143    color_forward_4: prop(color_forward);
     144    color_forward_5: prop(color_forward);
     145    color_forward_6: prop(color_forward);
     146    color_forward_7: prop(color_forward);
     147    color_forward_8: prop(color_forward);
     148
     149    color_backward_1: prop(color_backward);
     150    color_backward_2: prop(color_backward);
     151    color_backward_3: prop(color_backward);
     152    color_backward_4: prop(color_backward);
     153    color_backward_5: prop(color_backward);
     154    color_backward_6: prop(color_backward);
     155    color_backward_7: prop(color_backward);
     156    color_backward_8: prop(color_backward);
     157   
     158    color_bothways_1: prop(color_bothways);
     159    color_bothways_2: prop(color_bothways);
     160    color_bothways_3: prop(color_bothways);
     161    color_bothways_4: prop(color_bothways);
     162
     163    tag_lanes_all_min:  9999; tag_lanes_all_max: 0;
     164    tag_lanes_fwd_min:  9999; tag_lanes_fwd_max: 0;
     165    tag_lanes_bwd_min:  9999; tag_lanes_bwd_max: 0;
     166    tag_lanes_both_min: 9999; tag_lanes_both_max: 0;
     167
     168}
     169
     170/***************************************************************************************************************************************************/
     171/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     172/* Determine allowed lane changes                                                                                                                  */
     173/* TODO: change:lanes without oneway, but only with values yes or no                                                                          */
     174/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     175/***************************************************************************************************************************************************/
     176/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     177/* Forward lanes                                                                                                                                   */
     178/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     179way|z17-[is_prop_set(ok)]["change:lanes:forward"],
     180way|z17-[is_prop_set(ok)]["change:forward"],
     181way|z17-[is_prop_set(ok)]["change:lanes"][oneway?],
     182way|z17-[is_prop_set(ok)]["change"][oneway?]
     183{
     184    temp: eval(cond(has_tag_key("change:lanes"),tag("change:lanes"),cond(has_tag_key("change"),tag("change"),
     185                                cond(has_tag_key("change:lanes:forward"),tag("change:lanes:forward"),tag("change:forward")))));
     186    data_error: eval(regexp_test("^(yes|no|only_left|only_right|not_left|not_right|\\|)*$",prop(temp))?prop(data_error):"invalid forward change lanes");
     187    temp_list: eval(split("|",prop(temp)));
     188    temp_length: eval(length(prop(temp_list)));
     189    change_forward_1_left:  eval((prop(temp_length)>0) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),0)));
     190    change_forward_1_right: eval((prop(temp_length)>0) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),0)));
     191    change_forward_2_left:  eval((prop(temp_length)>1) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),1)));
     192    change_forward_2_right: eval((prop(temp_length)>1) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),1)));
     193    change_forward_3_left:  eval((prop(temp_length)>2) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),2)));
     194    change_forward_3_right: eval((prop(temp_length)>2) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),2)));
     195    change_forward_4_left:  eval((prop(temp_length)>3) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),3)));
     196    change_forward_4_right: eval((prop(temp_length)>3) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),3)));
     197    change_forward_5_left:  eval((prop(temp_length)>4) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),4)));
     198    change_forward_5_right: eval((prop(temp_length)>4) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),4)));
     199    change_forward_6_left:  eval((prop(temp_length)>5) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),5)));
     200    change_forward_6_right: eval((prop(temp_length)>5) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),5)));
     201    change_forward_7_left:  eval((prop(temp_length)>6) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),6)));
     202    change_forward_7_right: eval((prop(temp_length)>6) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),6)));
     203    change_forward_8_left:  eval((prop(temp_length)>7) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),7)));
     204    change_forward_8_right: eval((prop(temp_length)>7) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),7)));
     205
     206    /* Lane count based on :lanes values */
     207    tag_lanes_all_min: eval(has_tag_key("change:lanes")?min(prop(tag_lanes_all_min),prop(temp_length)):prop(tag_lanes_all_min));
     208    tag_lanes_all_max: eval(has_tag_key("change:lanes")?max(prop(tag_lanes_all_max),prop(temp_length)):prop(tag_lanes_all_max));
     209    tag_lanes_fwd_min: eval(has_tag_key("change:lanes:forward")?min(prop(tag_lanes_fwd_min),prop(temp_length)):prop(tag_lanes_fwd_min));
     210    tag_lanes_fwd_max: eval(has_tag_key("change:lanes:forward")?max(prop(tag_lanes_fwd_max),prop(temp_length)):prop(tag_lanes_fwd_max));
     211}
     212
     213/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     214/* Backward lanes                                                                                                                                   */
     215/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     216way|z17-[is_prop_set(ok)]["change:lanes:backward"],
     217way|z17-[is_prop_set(ok)]["change:backward"],
     218way|z17-[is_prop_set(ok)]["change:lanes"][oneway=-1],
     219way|z17-[is_prop_set(ok)]["change"][oneway=-1]
     220{
     221    temp: eval(cond(has_tag_key("change:lanes"),tag("change:lanes"),cond(has_tag_key("change"),tag("change"),
     222                                cond(has_tag_key("change:lanes:backward"),tag("change:lanes:backward"),tag("change:backward")))));
     223    data_error: eval(regexp_test("^(yes|no|only_left|only_right|not_left|not_right|\\|)*$",prop(temp))?prop(data_error):"invalid backward change lanes");
     224    temp_list: eval(split("|",prop(temp)));
     225    temp_length: eval(length(prop(temp_list)));
     226    change_lanes_bwd: eval(length(prop(temp_list)));
     227    change_backward_1_left:  eval((prop(temp_length)>0) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),0)));
     228    change_backward_1_right: eval((prop(temp_length)>0) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),0)));
     229    change_backward_2_left:  eval((prop(temp_length)>1) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),1)));
     230    change_backward_2_right: eval((prop(temp_length)>1) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),1)));
     231    change_backward_3_left:  eval((prop(temp_length)>2) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),2)));
     232    change_backward_3_right: eval((prop(temp_length)>2) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),2)));
     233    change_backward_4_left:  eval((prop(temp_length)>3) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),3)));
     234    change_backward_4_right: eval((prop(temp_length)>3) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),3)));
     235    change_backward_5_left:  eval((prop(temp_length)>4) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),4)));
     236    change_backward_5_right: eval((prop(temp_length)>4) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),4)));
     237    change_backward_6_left:  eval((prop(temp_length)>5) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),5)));
     238    change_backward_6_right: eval((prop(temp_length)>5) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),5)));
     239    change_backward_7_left:  eval((prop(temp_length)>6) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),6)));
     240    change_backward_7_right: eval((prop(temp_length)>6) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),6)));
     241    change_backward_8_left:  eval((prop(temp_length)>7) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),7)));
     242    change_backward_8_right: eval((prop(temp_length)>7) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),7)));
     243
     244    /* Lane count based on :lanes values */
     245    tag_lanes_bwd_min: eval(has_tag_key("change:lanes:backward")?min(prop(tag_lanes_bwd_min),prop(temp_length)):prop(tag_lanes_bwd_min));
     246    tag_lanes_bwd_max: eval(has_tag_key("change:lanes:backward")?max(prop(tag_lanes_bwd_max),prop(temp_length)):prop(tag_lanes_bwd_max));
     247}
     248
     249/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     250/* Bothways lanes                                                                                                                                  */
     251/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     252way|z17-[is_prop_set(ok)]["change:lanes:both_ways"],
     253way|z17-[is_prop_set(ok)]["change:both_ways"]
     254{
     255    temp: eval(cond(has_tag_key("change:lanes:both_ways"),tag("change:lanes:both_ways"),tag("change:both_ways")));
     256    data_error: eval(regexp_test("^(yes|no|only_left|only_right|not_left|not_right|\\|)*$",prop(temp))?prop(data_error):"invalid both_ways change lanes");
     257    temp_list: eval(split("|",prop(temp)));
     258    temp_length: eval(length(prop(temp_list)));
     259
     260    change_lanes_bth: eval(length(prop(temp_list)));
     261    change_bothways_1_left:  eval((prop(temp_length)>0) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),0)));
     262    change_bothways_1_right: eval((prop(temp_length)>0) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),0)));
     263    change_bothways_2_left:  eval((prop(temp_length)>1) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),1)));
     264    change_bothways_2_right: eval((prop(temp_length)>1) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),1)));
     265    change_bothways_3_left:  eval((prop(temp_length)>2) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),2)));
     266    change_bothways_3_right: eval((prop(temp_length)>2) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),2)));
     267    change_bothways_4_left:  eval((prop(temp_length)>3) && regexp_test("^(yes|only_left|not_right)$",get(prop(temp_list),3)));
     268    change_bothways_4_right: eval((prop(temp_length)>3) && regexp_test("^(yes|only_right|not_left)$",get(prop(temp_list),3)));
     269
     270    /* Lane count based on :lanes values */
     271    tag_lanes_both_min: eval(has_tag_key("change:lanes:both_ways")?min(prop(tag_lanes_both_min),prop(temp_length)):prop(tag_lanes_both_min));
     272    tag_lanes_both_max: eval(has_tag_key("change:lanes:both_ways")?max(prop(tag_lanes_both_max),prop(temp_length)):prop(tag_lanes_both_max));
     273}
     274
     275/***************************************************************************************************************************************************/
     276/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     277/* Determine turning lanes                                                                                                                         */
     278/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     279/***************************************************************************************************************************************************/
     280/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     281/* Forward lanes                                                                                                                                   */
     282/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     283way|z17-[is_prop_set(ok)]
     284{
     285        /* Pixel matrix 9x24; numbers are off/on/off/on/off; 0.01 is - more or less - ignored */
     286        turn_matrix:
     287                list(
     288                        "",
     289                        list(list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(15,1,8,0.01,0.01),list(15,2,7,0.01,0.01),list(6,12,6,0.01,0.01),list(15,2,7,0.01,0.01),list(15,1,8,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01)),
     290                        list(list(11,1,12,0.01,0.01),list(10,3,11,0.01,0.01),list(9,5,10,0.01,0.01),list(11,1,12,0.01,0.01),list(6,6,12,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01)),
     291                        list(list(11,1,12,0.01,0.01),list(10,3,11,0.01,0.01),list(9,5,1,1,8),list(11,1,3,2,7),list(6,12,6,0.01,0.01),list(15,2,7,0.01,0.01),list(15,1,8,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01)),
     292                        list(list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(6,6,12,0.01,0.01),list(11,1,12,0.01,0.01),list(9,5,10,0.01,0.01),list(10,3,11,0.01,0.01),list(11,1,12,0.01,0.01)),
     293                        list(list(24,0.01,0.01,0.01,0.01),list(24,0.01,0.01,0.01,0.01),list(15,1,8,0.01,0.01),list(15,2,7,0.01,0.01),list(6,12,6,0.01,0.01),list(11,1,3,2,7),list(9,5,1,1,8),list(10,3,11,0.01,0.01),list(11,1,12,0.01,0.01)),
     294                        list(list(11,1,12,0.01,0.01),list(10,3,11,0.01,0.01),list(9,5,10,0.01,0.01),list(11,1,12,0.01,0.01),list(6,6,12,0.01,0.01),list(11,1,12,0.01,0.01),list(9,5,10,0.01,0.01),list(10,3,11,0.01,0.01),list(11,1,12,0.01,0.01)),
     295                        list(list(11,1,12,0.01,0.01),list(10,3,11,0.01,0.01),list(9,5,1,1,8),list(11,1,3,2,7),list(6,12,6,0.01,0.01),list(11,1,3,2,7),list(9,5,1,1,8),list(10,3,11,0.01,0.01),list(11,1,12,0.01,0.01))
     296                    );
     297}
     298
     299
     300way|z17-[is_prop_set(ok)]["turn:lanes:forward"],
     301way|z17-[is_prop_set(ok)]["turn:forward"],
     302way|z17-[is_prop_set(ok)]["turn:lanes"][oneway?],
     303way|z17-[is_prop_set(ok)]["turn"][oneway?]
     304{
     305    temp: eval(cond(has_tag_key("turn:lanes"),tag("turn:lanes"),
     306                                cond(has_tag_key("turn"),tag("turn"),
     307                                cond(has_tag_key("turn:lanes:forward"),tag("turn:lanes:forward"),
     308                                     tag("turn:forward")
     309                                    ))));
     310    /* Work aorund for issue with the lenght() function temp: eval(regexp_test(".*([|])$",prop(temp))?concat(prop(temp),"none"):prop(temp)); */
     311    data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|right|slight_right|sharp_right|merge_to_left|merge_to_right|;|\\|)*$",prop(temp))?prop(data_error):"invalid forward turn lanes");
     312    temp_list: eval(split("|",prop(temp)));
     313    temp_length: eval(length(prop(temp_list)));
     314
     315    /* Binary coded: through=1, left=2, right=4 => result is index in the turn_matrix list*/
     316    turn_forward_1: eval(length((prop(temp_length)>0)?(concat(regexp_test(".*left.*",get(prop(temp_list),0))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),0))?"t":"",regexp_test(".*right.*",get(prop(temp_list),0))?"rrrr":"")):""));
     317    turn_forward_2: eval(length((prop(temp_length)>1)?(concat(regexp_test(".*left.*",get(prop(temp_list),1))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),1))?"t":"",regexp_test(".*right.*",get(prop(temp_list),1))?"rrrr":"")):""));
     318    turn_forward_3: eval(length((prop(temp_length)>2)?(concat(regexp_test(".*left.*",get(prop(temp_list),2))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),2))?"t":"",regexp_test(".*right.*",get(prop(temp_list),2))?"rrrr":"")):""));
     319    turn_forward_4: eval(length((prop(temp_length)>3)?(concat(regexp_test(".*left.*",get(prop(temp_list),3))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),3))?"t":"",regexp_test(".*right.*",get(prop(temp_list),3))?"rrrr":"")):""));
     320    turn_forward_5: eval(length((prop(temp_length)>4)?(concat(regexp_test(".*left.*",get(prop(temp_list),4))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),4))?"t":"",regexp_test(".*right.*",get(prop(temp_list),4))?"rrrr":"")):""));
     321    turn_forward_6: eval(length((prop(temp_length)>5)?(concat(regexp_test(".*left.*",get(prop(temp_list),5))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),5))?"t":"",regexp_test(".*right.*",get(prop(temp_list),5))?"rrrr":"")):""));
     322    turn_forward_7: eval(length((prop(temp_length)>6)?(concat(regexp_test(".*left.*",get(prop(temp_list),6))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),6))?"t":"",regexp_test(".*right.*",get(prop(temp_list),6))?"rrrr":"")):""));
     323    turn_forward_8: eval(length((prop(temp_length)>7)?(concat(regexp_test(".*left.*",get(prop(temp_list),7))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),7))?"t":"",regexp_test(".*right.*",get(prop(temp_list),7))?"rrrr":"")):""));
     324
     325    /* Get the relevant code from the list or unset the property*/
     326    turn_forward_1: eval((prop(turn_forward_1)>0)?get(prop(turn_matrix),prop(turn_forward_1)):prop(unset_property));
     327    turn_forward_2: eval((prop(turn_forward_2)>0)?get(prop(turn_matrix),prop(turn_forward_2)):prop(unset_property));
     328    turn_forward_3: eval((prop(turn_forward_3)>0)?get(prop(turn_matrix),prop(turn_forward_3)):prop(unset_property));
     329    turn_forward_4: eval((prop(turn_forward_4)>0)?get(prop(turn_matrix),prop(turn_forward_4)):prop(unset_property));
     330    turn_forward_5: eval((prop(turn_forward_5)>0)?get(prop(turn_matrix),prop(turn_forward_5)):prop(unset_property));
     331    turn_forward_6: eval((prop(turn_forward_6)>0)?get(prop(turn_matrix),prop(turn_forward_6)):prop(unset_property));
     332    turn_forward_7: eval((prop(turn_forward_7)>0)?get(prop(turn_matrix),prop(turn_forward_7)):prop(unset_property));
     333    turn_forward_8: eval((prop(turn_forward_8)>0)?get(prop(turn_matrix),prop(turn_forward_8)):prop(unset_property));
     334
     335    /* Lane count based on :lanes values */
     336    tag_lanes_all_min: eval(has_tag_key("turn:lanes")?min(prop(tag_lanes_all_min),prop(temp_length)):prop(tag_lanes_all_min));
     337    tag_lanes_all_max: eval(has_tag_key("turn:lanes")?max(prop(tag_lanes_all_max),prop(temp_length)):prop(tag_lanes_all_max));
     338    tag_lanes_fwd_min: eval(has_tag_key("turn:lanes:forward")?min(prop(tag_lanes_fwd_min),prop(temp_length)):prop(tag_lanes_fwd_min));
     339    tag_lanes_fwd_max: eval(has_tag_key("turn:lanes:forward")?max(prop(tag_lanes_fwd_max),prop(temp_length)):prop(tag_lanes_fwd_max));
     340}
     341
     342
     343
     344/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     345/* Backward lanes                                                                                                                                   */
     346/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     347way|z17-[is_prop_set(ok)]["turn:lanes:backward"],
     348way|z17-[is_prop_set(ok)]["turn:backward"],
     349way|z17-[is_prop_set(ok)]["turn:lanes"][oneway=-1],
     350way|z17-[is_prop_set(ok)]["turn"][oneway=-1]
     351{
     352    temp: eval(cond(has_tag_key("turn:lanes"),tag("turn:lanes"),
     353                                cond(has_tag_key("turn"),tag("turn"),
     354                                cond(has_tag_key("turn:lanes:backward"),tag("turn:lanes:backward"),
     355                                     tag("turn:backward")
     356                                    ))));
     357    /* Work aorund for issue with the lenght() function temp: eval(regexp_test(".*([|])$",prop(temp))?concat(prop(temp),"none"):prop(temp)); */
     358    data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|right|slight_right|sharp_right|merge_to_left|merge_to_right|;|\\|)*$",prop(temp))?prop(data_error):"invalid backward turn lanes");
     359    temp_list: eval(split("|",prop(temp)));
     360    temp_length: eval(length(prop(temp_list)));
     361
     362    /* Binary coded: through=1, left=2, right=4 => result is index in the turn_matrix list*/
     363    turn_backward_1: eval(length((prop(temp_length)>0)?(concat(regexp_test(".*left.*",get(prop(temp_list),0))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),0))?"t":"",regexp_test(".*right.*",get(prop(temp_list),0))?"rrrr":"")):""));
     364    turn_backward_2: eval(length((prop(temp_length)>1)?(concat(regexp_test(".*left.*",get(prop(temp_list),1))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),1))?"t":"",regexp_test(".*right.*",get(prop(temp_list),1))?"rrrr":"")):""));
     365    turn_backward_3: eval(length((prop(temp_length)>2)?(concat(regexp_test(".*left.*",get(prop(temp_list),2))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),2))?"t":"",regexp_test(".*right.*",get(prop(temp_list),2))?"rrrr":"")):""));
     366    turn_backward_4: eval(length((prop(temp_length)>3)?(concat(regexp_test(".*left.*",get(prop(temp_list),3))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),3))?"t":"",regexp_test(".*right.*",get(prop(temp_list),3))?"rrrr":"")):""));
     367    turn_backward_5: eval(length((prop(temp_length)>4)?(concat(regexp_test(".*left.*",get(prop(temp_list),4))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),4))?"t":"",regexp_test(".*right.*",get(prop(temp_list),4))?"rrrr":"")):""));
     368    turn_backward_6: eval(length((prop(temp_length)>5)?(concat(regexp_test(".*left.*",get(prop(temp_list),5))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),5))?"t":"",regexp_test(".*right.*",get(prop(temp_list),5))?"rrrr":"")):""));
     369    turn_backward_7: eval(length((prop(temp_length)>6)?(concat(regexp_test(".*left.*",get(prop(temp_list),6))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),6))?"t":"",regexp_test(".*right.*",get(prop(temp_list),6))?"rrrr":"")):""));
     370    turn_backward_8: eval(length((prop(temp_length)>7)?(concat(regexp_test(".*left.*",get(prop(temp_list),7))?"ll":"",regexp_test(".*through.*",get(prop(temp_list),7))?"t":"",regexp_test(".*right.*",get(prop(temp_list),7))?"rrrr":"")):""));
     371
     372    /* Get the relevant code from the list or unset the property*/
     373    turn_backward_1: eval((prop(turn_backward_1)>0)?get(prop(turn_matrix),prop(turn_backward_1)):prop(unset_property));
     374    turn_backward_2: eval((prop(turn_backward_2)>0)?get(prop(turn_matrix),prop(turn_backward_2)):prop(unset_property));
     375    turn_backward_3: eval((prop(turn_backward_3)>0)?get(prop(turn_matrix),prop(turn_backward_3)):prop(unset_property));
     376    turn_backward_4: eval((prop(turn_backward_4)>0)?get(prop(turn_matrix),prop(turn_backward_4)):prop(unset_property));
     377    turn_backward_5: eval((prop(turn_backward_5)>0)?get(prop(turn_matrix),prop(turn_backward_5)):prop(unset_property));
     378    turn_backward_6: eval((prop(turn_backward_6)>0)?get(prop(turn_matrix),prop(turn_backward_6)):prop(unset_property));
     379    turn_backward_7: eval((prop(turn_backward_7)>0)?get(prop(turn_matrix),prop(turn_backward_7)):prop(unset_property));
     380    turn_backward_8: eval((prop(turn_backward_8)>0)?get(prop(turn_matrix),prop(turn_backward_8)):prop(unset_property));
     381
     382    /* Lane count based on :lanes values */
     383    tag_lanes_bwd_min: eval(has_tag_key("turn:lanes:backward")?min(prop(tag_lanes_bwd_min),prop(temp_length)):prop(tag_lanes_bwd_min));
     384    tag_lanes_bwd_max: eval(has_tag_key("turn:lanes:backward")?max(prop(tag_lanes_bwd_max),prop(temp_length)):prop(tag_lanes_bwd_max));
     385}
     386
     387/***************************************************************************************************************************************************/
     388/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     389/* Designated lanes                                                                                                                                */
     390/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     391/***************************************************************************************************************************************************/
     392/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     393/* Bus forward lanes                                                                                                                               */
     394/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     395way|z17-[is_prop_set(ok)]["bus:lanes:forward"],
     396way|z17-[is_prop_set(ok)]["bus:forward"],
     397way|z17-[is_prop_set(ok)]["bus:lanes"][oneway?],
     398way|z17-[is_prop_set(ok)]["bus"][oneway?]
     399{
     400    temp: eval(cond(has_tag_key("bus:lanes"),tag("bus:lanes"),
     401                                cond(has_tag_key("bus"),tag("bus"),
     402                                cond(has_tag_key("bus:lanes:forward"),tag("bus:lanes:forward"),
     403                                     tag("bus:forward")
     404                                    ))));
     405    temp_list: eval(split("|",prop(temp)));
     406    temp_length: eval(length(prop(temp_list)));
     407    tempa: eval(cond(has_tag_key("access:lanes"),tag("access:lanes"),
     408                                cond(has_tag_key("access"),tag("access"),
     409                                cond(has_tag_key("access:lanes:forward"),tag("access:lanes:forward"),
     410                                     tag("access:forward")
     411                                    ))));
     412    tempa_list: eval(split("|",prop(tempa)));
     413    tempa_length: eval(length(prop(tempa_list)));
     414    designated_color_forward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_bus_color):prop(designated_color_forward_1));
     415    designated_color_forward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_bus_color):prop(designated_color_forward_2));
     416    designated_color_forward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_bus_color):prop(designated_color_forward_3));
     417    designated_color_forward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_bus_color):prop(designated_color_forward_4));
     418    designated_color_forward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_bus_color):prop(designated_color_forward_5));
     419    designated_color_forward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_bus_color):prop(designated_color_forward_6));
     420    designated_color_forward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_bus_color):prop(designated_color_forward_7));
     421    designated_color_forward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_bus_color):prop(designated_color_forward_8));
     422
     423    /* Lane count based on :lanes values */
     424    tag_lanes_all_min: eval(has_tag_key("bus:lanes")?min(prop(tag_lanes_all_min),prop(temp_length)):prop(tag_lanes_all_min));
     425    tag_lanes_all_max: eval(has_tag_key("bus:lanes")?max(prop(tag_lanes_all_max),prop(temp_length)):prop(tag_lanes_all_max));
     426    tag_lanes_fwd_min: eval(has_tag_key("bus:lanes:forward")?min(prop(tag_lanes_fwd_min),prop(temp_length)):prop(tag_lanes_fwd_min));
     427    tag_lanes_fwd_max: eval(has_tag_key("bus:lanes:forward")?max(prop(tag_lanes_fwd_max),prop(temp_length)):prop(tag_lanes_fwd_max));
     428}
     429
     430/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     431/* Bus backward lanes                                                                                                                              */
     432/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     433way|z17-[is_prop_set(ok)]["bus:lanes:backward"],
     434way|z17-[is_prop_set(ok)]["bus:backward"],
     435way|z17-[is_prop_set(ok)]["bus:lanes"][oneway=-1],
     436way|z17-[is_prop_set(ok)]["bus"][oneway=-1]
     437{
     438    temp: eval(cond(has_tag_key("bus:lanes"),tag("bus:lanes"),
     439                                cond(has_tag_key("bus"),tag("bus"),
     440                                cond(has_tag_key("bus:lanes:backward"),tag("bus:lanes:backward"),
     441                                     tag("bus:backward")
     442                                    ))));
     443    temp_list: eval(split("|",prop(temp)));
     444    temp_length: eval(length(prop(temp_list)));
     445    /* TODO: oneway=-1*/
     446    tempa: eval(cond(has_tag_key("access:lanes:backward"),tag("access:lanes:backward"),tag("access:backward")));
     447    tempa_list: eval(split("|",prop(tempa)));
     448    tempa_length: eval(length(prop(tempa_list)));
     449    designated_color_backward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_bus_color):prop(designated_color_forward_1));
     450    designated_color_backward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_bus_color):prop(designated_color_forward_2));
     451    designated_color_backward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_bus_color):prop(designated_color_forward_3));
     452    designated_color_backward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_bus_color):prop(designated_color_forward_4));
     453    designated_color_backward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_bus_color):prop(designated_color_forward_5));
     454    designated_color_backward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_bus_color):prop(designated_color_forward_6));
     455    designated_color_backward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_bus_color):prop(designated_color_forward_7));
     456    designated_color_backward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_bus_color):prop(designated_color_forward_8));
     457
     458    /* Lane count based on :lanes values */
     459    tag_lanes_bwd_min: eval(has_tag_key("bicycle:lanes:backward")?min(prop(tag_lanes_bwd_min),prop(temp_length)):prop(tag_lanes_bwd_min));
     460    tag_lanes_bwd_max: eval(has_tag_key("bicycle:lanes:backward")?max(prop(tag_lanes_bwd_max),prop(temp_length)):prop(tag_lanes_bwd_max));
     461}
     462
     463/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     464/* PSV forward lanes                                                                                                                               */
     465/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     466way|z17-[is_prop_set(ok)]["psv:lanes:forward"],
     467way|z17-[is_prop_set(ok)]["psv:forward"],
     468way|z17-[is_prop_set(ok)]["psv:lanes"][oneway?],
     469way|z17-[is_prop_set(ok)]["psv"][oneway?]
     470{
     471    temp: eval(cond(has_tag_key("psv:lanes"),tag("psv:lanes"),
     472                                cond(has_tag_key("psv"),tag("psv"),
     473                                cond(has_tag_key("psv:lanes:forward"),tag("psv:lanes:forward"),
     474                                     tag("psv:forward")
     475                                    ))));
     476    temp_list: eval(split("|",prop(temp)));
     477    temp_length: eval(length(prop(temp_list)));
     478    tempa: eval(cond(has_tag_key("access:lanes"),tag("access:lanes"),
     479                                cond(has_tag_key("access"),tag("access"),
     480                                cond(has_tag_key("access:lanes:forward"),tag("access:lanes:forward"),
     481                                     tag("access:forward")
     482                                    ))));
     483    tempa_list: eval(split("|",prop(tempa)));
     484    tempa_length: eval(length(prop(tempa_list)));
     485
     486
     487    designated_color_forward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_psv_color):prop(designated_color_forward_1));
     488    designated_color_forward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_psv_color):prop(designated_color_forward_2));
     489    designated_color_forward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_psv_color):prop(designated_color_forward_3));
     490    designated_color_forward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_psv_color):prop(designated_color_forward_4));
     491    designated_color_forward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_psv_color):prop(designated_color_forward_5));
     492    designated_color_forward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_psv_color):prop(designated_color_forward_6));
     493    designated_color_forward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_psv_color):prop(designated_color_forward_7));
     494    designated_color_forward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_psv_color):prop(designated_color_forward_8));
     495
     496    /* Lane count based on :lanes values */
     497    tag_lanes_all_min: eval(has_tag_key("psv:lanes")?min(prop(tag_lanes_all_min),prop(temp_length)):prop(tag_lanes_all_min));
     498    tag_lanes_all_max: eval(has_tag_key("psv:lanes")?max(prop(tag_lanes_all_max),prop(temp_length)):prop(tag_lanes_all_max));
     499    tag_lanes_fwd_min: eval(has_tag_key("psv:lanes:forward")?min(prop(tag_lanes_fwd_min),prop(temp_length)):prop(tag_lanes_fwd_min));
     500    tag_lanes_fwd_max: eval(has_tag_key("psv:lanes:forward")?max(prop(tag_lanes_fwd_max),prop(temp_length)):prop(tag_lanes_fwd_max));
     501}
     502
     503/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     504/* PSV backward lanes                                                                                                                              */
     505/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     506way|z17-[is_prop_set(ok)]["psv:lanes:backward"],
     507way|z17-[is_prop_set(ok)]["psv:backward"],
     508way|z17-[is_prop_set(ok)]["psv:lanes"][oneway=-1],
     509way|z17-[is_prop_set(ok)]["psv"][oneway=-1]
     510{
     511    temp: eval(cond(has_tag_key("psv:lanes"),tag("psv:lanes"),
     512                                cond(has_tag_key("psv"),tag("psv"),
     513                                cond(has_tag_key("psv:lanes:backward"),tag("psv:lanes:backward"),
     514                                     tag("psv:backward")
     515                                    ))));
     516    temp_list: eval(split("|",prop(temp)));
     517    temp_length: eval(length(prop(temp_list)));
     518    /* TODO: oneway=-1*/
     519    tempa: eval(cond(has_tag_key("access:lanes:backward"),tag("access:lanes:backward"),tag("access:backward")));
     520    tempa_list: eval(split("|",prop(tempa)));
     521    tempa_length: eval(length(prop(tempa_list)));
     522    designated_color_backward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_psv_color):prop(designated_color_backward_1));
     523    designated_color_backward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_psv_color):prop(designated_color_backward_2));
     524    designated_color_backward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_psv_color):prop(designated_color_backward_3));
     525    designated_color_backward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_psv_color):prop(designated_color_backward_4));
     526    designated_color_backward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_psv_color):prop(designated_color_backward_5));
     527    designated_color_backward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_psv_color):prop(designated_color_backward_6));
     528    designated_color_backward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_psv_color):prop(designated_color_backward_7));
     529    designated_color_backward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_psv_color):prop(designated_color_backward_8));
     530
     531    /* Lane count based on :lanes values */
     532    tag_lanes_bwd_min: eval(has_tag_key("bicycle:lanes:backward")?min(prop(tag_lanes_bwd_min),prop(temp_length)):prop(tag_lanes_bwd_min));
     533    tag_lanes_bwd_max: eval(has_tag_key("bicycle:lanes:backward")?max(prop(tag_lanes_bwd_max),prop(temp_length)):prop(tag_lanes_bwd_max));
     534}
     535
     536/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     537/* Bicycle forward lanes                                                                                                                           */
     538/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     539way|z17-[is_prop_set(ok)]["bicycle:lanes:forward"],
     540way|z17-[is_prop_set(ok)]["bicycle:forward"],
     541way|z17-[is_prop_set(ok)]["bicycle:lanes"][oneway?],
     542way|z17-[is_prop_set(ok)]["bicycle"][oneway?]
     543{
     544    temp: eval(cond(has_tag_key("bicycle:lanes"),tag("bicycle:lanes"),
     545                                cond(has_tag_key("bicycle"),tag("bicycle"),
     546                                cond(has_tag_key("bicycle:lanes:forward"),tag("bicycle:lanes:forward"),
     547                                     tag("bicycle:forward")
     548                                    ))));
     549    temp_list: eval(split("|",prop(temp)));
     550    temp_length: eval(length(prop(temp_list)));
     551    tempa: eval(cond(has_tag_key("access:lanes"),tag("access:lanes"),
     552                                cond(has_tag_key("access"),tag("access"),
     553                                cond(has_tag_key("access:lanes:forward"),tag("access:lanes:forward"),
     554                                     tag("access:forward")
     555                                    ))));
     556    tempa_list: eval(split("|",prop(tempa)));
     557    tempa_length: eval(length(prop(tempa_list)));
     558    color_forward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_bicycle_color):prop(color_forward_1));
     559    color_forward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_bicycle_color):prop(color_forward_2));
     560    color_forward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_bicycle_color):prop(color_forward_3));
     561    color_forward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_bicycle_color):prop(color_forward_4));
     562    color_forward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_bicycle_color):prop(color_forward_5));
     563    color_forward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_bicycle_color):prop(color_forward_6));
     564    color_forward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_bicycle_color):prop(color_forward_7));
     565    color_forward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_bicycle_color):prop(color_forward_8));
     566
     567    /* Lane count based on :lanes values */
     568    tag_lanes_all_min: eval(has_tag_key("bicycle:lanes")?min(prop(tag_lanes_all_min),prop(temp_length)):prop(tag_lanes_all_min));
     569    tag_lanes_all_max: eval(has_tag_key("bicycle:lanes")?max(prop(tag_lanes_all_max),prop(temp_length)):prop(tag_lanes_all_max));
     570    tag_lanes_fwd_min: eval(has_tag_key("bicycle:lanes:forward")?min(prop(tag_lanes_fwd_min),prop(temp_length)):prop(tag_lanes_fwd_min));
     571    tag_lanes_fwd_max: eval(has_tag_key("bicycle:lanes:forward")?max(prop(tag_lanes_fwd_max),prop(temp_length)):prop(tag_lanes_fwd_max));
     572}
     573
     574/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     575/* Bicycle backward lanes                                                                                                                          */
     576/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     577way|z17-[is_prop_set(ok)]["bicycle:lanes:backward"],
     578way|z17-[is_prop_set(ok)]["bicycle:backward"],
     579way|z17-[is_prop_set(ok)]["bicycle:lanes"][oneway=-1],
     580way|z17-[is_prop_set(ok)]["bicycle"][oneway=-1]
     581{
     582    temp: eval(cond(has_tag_key("bicycle:lanes"),tag("bicycle:lanes"),
     583                                cond(has_tag_key("bicycle"),tag("bicycle"),
     584                                cond(has_tag_key("bicycle:lanes:forward"),tag("bicycle:lanes:backward"),
     585                                     tag("bicycle:backward")
     586                                    ))));
     587    temp_list: eval(split("|",prop(temp)));
     588    temp_length: eval(length(prop(temp_list)));
     589    /* TODO: oneway=-1*/
     590    tempa: eval(cond(has_tag_key("access:lanes:backward"),tag("access:lanes:backward"),tag("access:backward")));
     591    tempa_list: eval(split("|",prop(tempa)));
     592    tempa_length: eval(length(prop(tempa_list)));
     593    color_backward_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_bicycle_color):prop(color_backward_1));
     594    color_backward_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_bicycle_color):prop(color_backward_2));
     595    color_backward_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_bicycle_color):prop(color_backward_3));
     596    color_backward_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_bicycle_color):prop(color_backward_4));
     597    color_backward_5: eval(((prop(temp_length)>4) && ((get(prop(temp_list),4)="designated") || ((get(prop(temp_list),4)="yes") && (get(prop(tempa_list),4)="no"))))?prop(style_bicycle_color):prop(color_backward_5));
     598    color_backward_6: eval(((prop(temp_length)>5) && ((get(prop(temp_list),5)="designated") || ((get(prop(temp_list),5)="yes") && (get(prop(tempa_list),5)="no"))))?prop(style_bicycle_color):prop(color_backward_6));
     599    color_backward_7: eval(((prop(temp_length)>6) && ((get(prop(temp_list),6)="designated") || ((get(prop(temp_list),6)="yes") && (get(prop(tempa_list),6)="no"))))?prop(style_bicycle_color):prop(color_backward_7));
     600    color_backward_8: eval(((prop(temp_length)>7) && ((get(prop(temp_list),7)="designated") || ((get(prop(temp_list),7)="yes") && (get(prop(tempa_list),7)="no"))))?prop(style_bicycle_color):prop(color_backward_8));
     601
     602    /* Lane count based on :lanes values */
     603    tag_lanes_bwd_min: eval(has_tag_key("bicycle:lanes:backward")?min(prop(tag_lanes_bwd_min),prop(temp_length)):prop(tag_lanes_bwd_min));
     604    tag_lanes_bwd_max: eval(has_tag_key("bicycle:lanes:backward")?max(prop(tag_lanes_bwd_max),prop(temp_length)):prop(tag_lanes_bwd_max));
     605}
     606
     607/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     608/* Bicycle both_ways lanes                                                                                                                          */
     609/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     610way|z17-[is_prop_set(ok)]["bicycle:lanes:both_ways"],
     611way|z17-[is_prop_set(ok)]["bicycle:both_ways"]
     612{
     613    temp: eval(cond(has_tag_key("bicycle:lanes:both_ways"),tag("bicycle:lanes:both_ways"),tag("bicycle:both_ways")));
     614    temp_list: eval(split("|",prop(temp)));
     615    temp_length: eval(length(prop(temp_list)));
     616    tempa: eval(cond(has_tag_key("access:lanes:both_ways"),tag("access:lanes:both_ways"),tag("access:both_ways")));
     617    tempa_list: eval(split("|",prop(tempa)));
     618    tempa_length: eval(length(prop(tempa_list)));
     619    color_bothways_1: eval(((prop(temp_length)>0) && ((get(prop(temp_list),0)="designated") || ((get(prop(temp_list),0)="yes") && (get(prop(tempa_list),0)="no"))))?prop(style_bicycle_color):prop(color_bothways_1));
     620    color_bothways_2: eval(((prop(temp_length)>1) && ((get(prop(temp_list),1)="designated") || ((get(prop(temp_list),1)="yes") && (get(prop(tempa_list),1)="no"))))?prop(style_bicycle_color):prop(color_bothways_2));
     621    color_bothways_3: eval(((prop(temp_length)>2) && ((get(prop(temp_list),2)="designated") || ((get(prop(temp_list),2)="yes") && (get(prop(tempa_list),2)="no"))))?prop(style_bicycle_color):prop(color_bothways_3));
     622    color_bothways_4: eval(((prop(temp_length)>3) && ((get(prop(temp_list),3)="designated") || ((get(prop(temp_list),3)="yes") && (get(prop(tempa_list),3)="no"))))?prop(style_bicycle_color):prop(color_bothways_4));
     623
     624    /* Lane count based on :lanes values */
     625    tag_lanes_both_min: eval(has_tag_key("bicycle:lanes:both_ways")?min(prop(tag_lanes_both_min),prop(temp_length)):prop(tag_lanes_both_min));
     626    tag_lanes_both_max: eval(has_tag_key("bicycle:lanes:both_ways")?max(prop(tag_lanes_both_max),prop(temp_length)):prop(tag_lanes_both_max));
     627}
     628
     629/***************************************************************************************************************************************************/
     630/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     631/* Retrieve the lane count from the lanes key, its subkeys and the :lanes-tags                                                                     */
     632/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     633/***************************************************************************************************************************************************/
     634way[is_prop_set(ok)][lanes]             { lanes_all:  tag(lanes);}
     635way[is_prop_set(ok)]["lanes:forward"]   { lanes_fwd:  tag("lanes:forward");}
     636way[is_prop_set(ok)]["lanes:backward"]  { lanes_bwd:  tag("lanes:backward");}
     637way[is_prop_set(ok)]["lanes:both_ways"] { lanes_both: tag("lanes:both_ways");}
     638
     639/* Nothing specified */
     640way[is_prop_set(ok)][prop(oneway_type)=0][!lanes][!"lanes:backward"][!"lanes:both_ways"][!"lanes:forward"]
     641        { lanes_all: 2; lanes_fwd: 1; lanes_bwd: 1; lanes_both: 0; }
     642way[is_prop_set(ok)][oneway?][!lanes][!"lanes:backward"][!"lanes:both_ways"][!"lanes:forward"]
     643        { lanes_all: 1; lanes_fwd: 1; lanes_bwd: 0; lanes_both: 0; }
     644way[is_prop_set(ok)][oneway=-1][!lanes][!"lanes:backward"][!"lanes:both_ways"][!"lanes:forward"]
     645        { lanes_all: 1; lanes_fwd: 0; lanes_bwd: 1; lanes_both: 0; }
     646
     647/* One-ways */
     648way[is_prop_set(ok)][lanes][!"lanes:forward"][!"lanes:backward"][!"lanes:both_ways"][oneway?]
     649        { lanes_fwd: prop(lanes_all); lanes_bwd: 0; lanes_both: 0; }
     650way[is_prop_set(ok)][lanes][!"lanes:forward"][!"lanes:backward"][!"lanes:both_ways"][oneway=-1]
     651        { lanes_bwd: prop(lanes_all); lanes_fwd: 0; lanes_both: 0; }
     652
     653way[is_prop_set(ok)][!lanes]["lanes:forward"][!"lanes:backward"][!"lanes:both_ways"][oneway?] 
     654        { lanes_all: prop(lanes_fwd); lanes_bwd: 0; lanes_both: 0; }
     655way[is_prop_set(ok)][!lanes][!"lanes:forward"]["lanes:backward"][!"lanes:both_ways"][oneway=-1]
     656        { lanes_all: prop(lanes_bwd); lanes_fwd: 0; lanes_both: 0; }
     657
     658/* One count besides both_ways is missing  */
     659way[is_prop_set(ok)][lanes][!"lanes:forward"]["lanes:backward"][!"lanes:both_ways"]
     660        { lanes_fwd: eval((prop(lanes_all))-(prop(lanes_bwd))); lanes_both: 0; }
     661way[is_prop_set(ok)][lanes]["lanes:forward"][!"lanes:backward"][!"lanes:both_ways"]
     662        { lanes_bwd: eval((prop(lanes_all))-(prop(lanes_fwd))); lanes_both: 0;}
     663way[is_prop_set(ok)][!lanes]["lanes:forward"]["lanes:backward"][!"lanes:both_ways"]
     664        { lanes_all: eval((prop(lanes_fwd))+(prop(lanes_bwd))); lanes_both: 0; }
     665
     666/* One count is missing  */
     667way[is_prop_set(ok)][lanes]["lanes:forward"]["lanes:backward"][!"lanes:both_ways"]
     668        { lanes_both: eval((prop(lanes_all))-((prop(lanes_fwd))+(prop(lanes_bwd)))); }
     669way[is_prop_set(ok)][lanes]["lanes:forward"][!"lanes:backward"]["lanes:both_ways"]
     670        { lanes_bwd: eval((prop(lanes_all))-((prop(lanes_fwd))+(prop(lanes_both)))); }
     671way[is_prop_set(ok)][lanes][!"lanes:forward"]["lanes:backward"]["lanes:both_ways"]
     672        { lanes_fwd: eval((prop(lanes_all))-((prop(lanes_bwd))+(prop(lanes_both)))); }
     673way[is_prop_set(ok)][!lanes]["lanes:forward"]["lanes:backward"]["lanes:both_ways"]
     674        { lanes_all: eval((prop(lanes_fwd))+((prop(lanes_bwd))+(prop(lanes_both)))); }
     675
     676/* Only the lanes tag is set */
     677way[is_prop_set(ok)][prop(oneway_type)=0][lanes][!"lanes:backward"][!"lanes:both_ways"][!"lanes:forward"]
     678{
     679
     680    lanes_fwd:  eval(max(1,floor(tag(lanes)/2)));
     681    lanes_bwd:  eval(floor(tag(lanes)/2));
     682    lanes_both: eval((prop(lanes_all))-(prop(lanes_fwd))-(prop(lanes_bwd)));
     683}
     684
     685/* Safety check and adding lanes for "non-motorized or non-general traffic" */
     686way[is_prop_set(ok)]
     687{
     688    /* Check for errors */
     689    data_error: eval(((prop(tag_lanes_all_max)>0) && (prop(tag_lanes_all_min)<prop(tag_lanes_all_max)))?"Inconsistent <tag>:lanes":prop(data_error));
     690    data_error: eval(((prop(tag_lanes_fwd_max)>0) && (prop(tag_lanes_fwd_min)<prop(tag_lanes_fwd_max)))?"Inconsistent <tag>:lanes:forward":prop(data_error));
     691    data_error: eval(((prop(tag_lanes_bwd_max)>0) && (prop(tag_lanes_bwd_min)<prop(tag_lanes_bwd_max)))?"Inconsistent <tag>:lanes:backward":prop(data_error));
     692    data_error: eval(((prop(tag_lanes_both_max)>0) && (prop(tag_lanes_both_min)<prop(tag_lanes_both_max)))?"Inconsistent <tag>:lanes:both_ways":prop(data_error));
     693
     694    /* Safety check */
     695    lanes_fwd: eval(cond((prop(lanes_fwd)<0),0,prop(lanes_fwd)));
     696    lanes_bwd: eval(cond((prop(lanes_bwd)<0),0,prop(lanes_bwd)));
     697    lanes_both: eval(cond((prop(lanes_both)<0),0,prop(lanes_both)));
     698
     699    /* Difference to the lane count specified by :lanes-tags */
     700    temp_add_fwd:  eval(max(0,prop(tag_lanes_fwd_max)-prop(lanes_fwd)));
     701    temp_add_bwd:  eval(max(0,prop(tag_lanes_bwd_max)-prop(lanes_bwd)));
     702    temp_add_both: eval(max(0,prop(tag_lanes_both_max)-prop(lanes_both)));
     703
     704    /* Add the difference */
     705    lanes_fwd: eval(prop(lanes_fwd)+prop(temp_add_fwd));
     706    lanes_bwd: eval(prop(lanes_bwd)+prop(temp_add_bwd));
     707    lanes_both: eval(prop(lanes_both)+prop(temp_add_both));
     708
     709    /* Number of all lanes */
     710    lanes_all: eval(max(1,((prop(lanes_fwd)+prop(lanes_bwd))+prop(lanes_both))));
     711
     712    /* Check for some more errors */
     713    data_error: eval(((prop(tag_lanes_all_max)>0) && (prop(tag_lanes_all_min)<prop(lanes_all)))?"Missing <tag>:lanes values values":prop(data_error));
     714    data_error: eval(((prop(tag_lanes_fwd_max)>0) && (prop(tag_lanes_fwd_min)<prop(lanes_fwd)))?"Missing <tag>:lanes:forward values":prop(data_error));
     715    data_error: eval(((prop(tag_lanes_bwd_max)>0) && (prop(tag_lanes_bwd_min)<prop(lanes_bwd)))?"Missing <tag>:lanes:backward values":prop(data_error));
     716    data_error: eval(((prop(tag_lanes_both_max)>0) && (prop(tag_lanes_both_min)<prop(lanes_both)))?"Missing <tag>:lanes:both_ways values":prop(data_error));
     717}
     718
     719
     720/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     721/* Determine the width of the lanes, road markings and the inner lane width                                                                        */
     722/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     723way|z1-16[is_prop_set(ok)]
     724{
     725    lane_width: 1;
     726}
     727
     728way|z17[is_prop_set(ok)]
     729{
     730    lane_default_width: 4;
     731    lane_min_width: 4;
     732
     733    lane_width: eval(max(4,(has_tag_key(width)?((1.25*tag(width))/prop(lanes_all)):4)));
     734    change_allowed: 6,9;
     735    change_forbidden: 0;
     736    road_marking_width: 1;
     737    road_marking_space: 0;
     738}
     739
     740way|z18[is_prop_set(ok)]
     741{
     742    lane_default_width: 8;
     743    lane_min_width: 8;
     744
     745    lane_width: eval(max(8,(has_tag_key(width)?((2.5*tag(width))/prop(lanes_all)):8)));
     746    change_allowed: 12,18;
     747    change_forbidden: 0;
     748    road_marking_width: 2;
     749    road_marking_space: 1;
     750}
     751
     752way|z19[is_prop_set(ok)]
     753{
     754    lane_default_width: 16;
     755    lane_min_width: 8;
     756
     757    lane_width: eval(max(8,(has_tag_key(width)?((5*tag(width))/prop(lanes_all)):16)));
     758    change_allowed: 24,36;
     759    change_forbidden: 0;
     760    road_marking_width: 2;
     761    road_marking_space: 1;
     762}
     763
     764way|z20[is_prop_set(ok)]
     765{
     766    lane_default_width: 32;
     767    lane_min_width: 8;
     768
     769    lane_width: eval(max(8,(has_tag_key(width)?((10*tag(width))/prop(lanes_all)):32)));
     770    change_allowed: 48,72;
     771    change_forbidden: 0;
     772    road_marking_width: 2;
     773    road_marking_space: 1;
     774}
     775
     776way|z21-[is_prop_set(ok)]
     777{
     778    lane_default_width: 64;
     779    lane_min_width: 12;
     780
     781    lane_width: eval(max(12,(has_tag_key(width)?((20*tag(width))/prop(lanes_all)):64)));
     782    change_allowed: 96,144;
     783    change_forbidden: 0;
     784    road_marking_width: 3;
     785    road_marking_space: 2;
     786}
     787
     788way|z22-[is_prop_set(ok)]
     789{
     790    lane_default_width: 128;
     791    lane_min_width: 20;
     792
     793    lane_width: eval(max(20,(has_tag_key(width)?((40*tag(width))/prop(lanes_all)):128)));
     794    change_allowed: 192,288;
     795    change_forbidden: 0;
     796    road_marking_width: 6;
     797    road_marking_space: 4;
     798}
     799
     800/* Some helper variables */
     801way|z17-[is_prop_set(ok)]
     802{
     803    lane_casing:  eval((2*prop(road_marking_width))+prop(road_marking_space));
     804}
     805
     806/***************************************************************************************************************************************************/
     807/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     808/* Cleanup of allowed lane changes                                                                                                                 */
     809/* This must be done AFTER the determination of the lanes count                                                                                    */
     810/* TODO: cleanup for bothway lanes is missing                                                                                                 */
     811/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     812/***************************************************************************************************************************************************/
     813way|z17-[is_prop_set(ok)]
     814{
     815    change_forward_1_right:  eval(prop(change_forward_1_right)?prop(change_allowed):prop(change_forbidden));
     816    change_forward_1_left:   eval(prop(change_forward_1_left)?prop(change_allowed):prop(change_forbidden));
     817    change_forward_2_right:  eval(prop(change_forward_2_right)?prop(change_allowed):prop(change_forbidden));
     818    change_forward_2_left:   eval(prop(change_forward_2_left)?prop(change_allowed):prop(change_forbidden));
     819    change_forward_3_right:  eval(prop(change_forward_3_right)?prop(change_allowed):prop(change_forbidden));
     820    change_forward_3_left:   eval(prop(change_forward_3_left)?prop(change_allowed):prop(change_forbidden));
     821    change_forward_4_right:  eval(prop(change_forward_4_right)?prop(change_allowed):prop(change_forbidden));
     822    change_forward_4_left:   eval(prop(change_forward_4_left)?prop(change_allowed):prop(change_forbidden));
     823    change_forward_5_right:  eval(prop(change_forward_5_right)?prop(change_allowed):prop(change_forbidden));
     824    change_forward_5_left:   eval(prop(change_forward_5_left)?prop(change_allowed):prop(change_forbidden));
     825    change_forward_6_right:  eval(prop(change_forward_6_right)?prop(change_allowed):prop(change_forbidden));
     826    change_forward_6_left:   eval(prop(change_forward_6_left)?prop(change_allowed):prop(change_forbidden));
     827    change_forward_7_right:  eval(prop(change_forward_7_right)?prop(change_allowed):prop(change_forbidden));
     828    change_forward_7_left:   eval(prop(change_forward_7_left)?prop(change_allowed):prop(change_forbidden));
     829    change_forward_8_right:  eval(prop(change_forward_8_right)?prop(change_allowed):prop(change_forbidden));
     830    change_forward_8_left:   eval(prop(change_forward_8_left)?prop(change_allowed):prop(change_forbidden));
     831
     832    change_backward_1_right:  eval(prop(change_backward_1_right)?prop(change_allowed):prop(change_forbidden));
     833    change_backward_1_left:   eval(prop(change_backward_1_left)?prop(change_allowed):prop(change_forbidden));
     834    change_backward_2_right:  eval(prop(change_backward_2_right)?prop(change_allowed):prop(change_forbidden));
     835    change_backward_2_left:   eval(prop(change_backward_2_left)?prop(change_allowed):prop(change_forbidden));
     836    change_backward_3_right:  eval(prop(change_backward_3_right)?prop(change_allowed):prop(change_forbidden));
     837    change_backward_3_left:   eval(prop(change_backward_3_left)?prop(change_allowed):prop(change_forbidden));
     838    change_backward_4_right:  eval(prop(change_backward_4_right)?prop(change_allowed):prop(change_forbidden));
     839    change_backward_4_left:   eval(prop(change_backward_4_left)?prop(change_allowed):prop(change_forbidden));
     840    change_backward_5_right:  eval(prop(change_backward_5_right)?prop(change_allowed):prop(change_forbidden));
     841    change_backward_5_left:   eval(prop(change_backward_5_left)?prop(change_allowed):prop(change_forbidden));
     842    change_backward_6_right:  eval(prop(change_backward_6_right)?prop(change_allowed):prop(change_forbidden));
     843    change_backward_6_left:   eval(prop(change_backward_6_left)?prop(change_allowed):prop(change_forbidden));
     844    change_backward_7_right:  eval(prop(change_backward_7_right)?prop(change_allowed):prop(change_forbidden));
     845    change_backward_7_left:   eval(prop(change_backward_7_left)?prop(change_allowed):prop(change_forbidden));
     846    change_backward_8_right:  eval(prop(change_backward_8_right)?prop(change_allowed):prop(change_forbidden));
     847    change_backward_8_left:   eval(prop(change_backward_8_left)?prop(change_allowed):prop(change_forbidden));
     848
     849    change_bothways_1_right:  eval(prop(change_bothways_1_right)?prop(change_allowed):prop(change_forbidden));
     850    change_bothways_1_left:   eval(prop(change_bothways_1_left)?prop(change_allowed):prop(change_forbidden));
     851    change_bothways_2_right:  eval(prop(change_bothways_2_right)?prop(change_allowed):prop(change_forbidden));
     852    change_bothways_2_left:   eval(prop(change_bothways_2_left)?prop(change_allowed):prop(change_forbidden));
     853    change_bothways_3_right:  eval(prop(change_bothways_3_right)?prop(change_allowed):prop(change_forbidden));
     854    change_bothways_3_left:   eval(prop(change_bothways_3_left)?prop(change_allowed):prop(change_forbidden));
     855    change_bothways_4_right:  eval(prop(change_bothways_4_right)?prop(change_allowed):prop(change_forbidden));
     856    change_bothways_4_left:   eval(prop(change_bothways_4_left)?prop(change_allowed):prop(change_forbidden));
     857
     858    /* If two adjacent road markings would look the same, remove one  */
     859    change_forward_1_right:  eval(cond((prop(lanes_fwd)>1) && (prop(change_forward_2_left)=prop(change_forward_1_right)),list(0.1,999999),prop(change_forward_1_right)));
     860    change_forward_2_right:  eval(cond((prop(lanes_fwd)>2) && (prop(change_forward_3_left)=prop(change_forward_2_right)),list(0.1,999999),prop(change_forward_2_right)));
     861    change_forward_3_right:  eval(cond((prop(lanes_fwd)>3) && (prop(change_forward_4_left)=prop(change_forward_3_right)),list(0.1,999999),prop(change_forward_3_right)));
     862    change_forward_4_right:  eval(cond((prop(lanes_fwd)>4) && (prop(change_forward_5_left)=prop(change_forward_4_right)),list(0.1,999999),prop(change_forward_4_right)));
     863    change_forward_5_right:  eval(cond((prop(lanes_fwd)>5) && (prop(change_forward_6_left)=prop(change_forward_5_right)),list(0.1,999999),prop(change_forward_5_right)));
     864    change_forward_6_right:  eval(cond((prop(lanes_fwd)>6) && (prop(change_forward_7_left)=prop(change_forward_6_right)),list(0.1,999999),prop(change_forward_6_right)));
     865    change_forward_7_right:  eval(cond((prop(lanes_fwd)>7) && (prop(change_forward_8_left)=prop(change_forward_7_right)),list(0.1,999999),prop(change_forward_7_right)));
     866
     867    change_backward_2_left:  eval(cond((prop(lanes_bwd)>1) && (prop(change_backward_1_right)=prop(change_backward_2_left)),list(0.1,999999),prop(change_backward_2_left)));
     868    change_backward_3_left:  eval(cond((prop(lanes_bwd)>2) && (prop(change_backward_2_right)=prop(change_backward_3_left)),list(0.1,999999),prop(change_backward_3_left)));
     869    change_backward_4_left:  eval(cond((prop(lanes_bwd)>3) && (prop(change_backward_3_right)=prop(change_backward_4_left)),list(0.1,999999),prop(change_backward_4_left)));
     870    change_backward_5_left:  eval(cond((prop(lanes_bwd)>4) && (prop(change_backward_4_right)=prop(change_backward_5_left)),list(0.1,999999),prop(change_backward_5_left)));
     871    change_backward_6_left:  eval(cond((prop(lanes_bwd)>5) && (prop(change_backward_5_right)=prop(change_backward_6_left)),list(0.1,999999),prop(change_backward_6_left)));
     872    change_backward_7_left:  eval(cond((prop(lanes_bwd)>6) && (prop(change_backward_6_right)=prop(change_backward_7_left)),list(0.1,999999),prop(change_backward_7_left)));
     873    change_backward_8_left:  eval(cond((prop(lanes_bwd)>7) && (prop(change_backward_7_right)=prop(change_backward_8_left)),list(0.1,999999),prop(change_backward_8_left)));
     874}
     875
     876/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     877/* Make the borders always solid                                                                                                                   */
     878/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     879way|z17-[is_prop_set(ok)][prop(style_right_hand_traffic)]
     880{
     881    change_forward_1_left:  eval(prop(oneway_type)=1)?prop(change_forbidden):prop(change_forward_1_left));
     882    change_backward_1_left: eval((prop(oneway_type)=(-1))?prop(change_forbidden):prop(change_backward_1_left));
     883}
     884
     885way|z17-[is_prop_set(ok)][!prop(style_right_hand_traffic)]
     886{
     887    change_forward_1_left:  prop(change_forbidden);
     888    change_backward_1_left: prop(change_forbidden);
     889}
     890way|z17-[is_prop_set(ok)][prop(style_right_hand_traffic)],
     891way|z17-[is_prop_set(ok)][!prop(style_right_hand_traffic)][oneway?]
     892{
     893    change_forward_1_right: eval((prop(lanes_fwd)=1)?prop(change_forbidden):prop(change_forward_1_right)); 
     894    change_forward_2_right: eval((prop(lanes_fwd)=2)?prop(change_forbidden):prop(change_forward_2_right)); 
     895    change_forward_3_right: eval((prop(lanes_fwd)=3)?prop(change_forbidden):prop(change_forward_3_right)); 
     896    change_forward_4_right: eval((prop(lanes_fwd)=4)?prop(change_forbidden):prop(change_forward_4_right)); 
     897    change_forward_5_right: eval((prop(lanes_fwd)=5)?prop(change_forbidden):prop(change_forward_5_right)); 
     898    change_forward_6_right: eval((prop(lanes_fwd)=6)?prop(change_forbidden):prop(change_forward_6_right)); 
     899    change_forward_7_right: eval((prop(lanes_fwd)=7)?prop(change_forbidden):prop(change_forward_7_right)); 
     900    change_forward_8_right: eval((prop(lanes_fwd)=8)?prop(change_forbidden):prop(change_forward_8_right)); 
     901}
     902way|z17-[is_prop_set(ok)][prop(style_right_hand_traffic)],
     903way|z17-[is_prop_set(ok)][!prop(style_right_hand_traffic)][oneway=-1]
     904{
     905    change_backward_1_right: eval((prop(lanes_bwd)=1)?prop(change_forbidden):prop(change_backward_1_right)); 
     906    change_backward_2_right: eval((prop(lanes_bwd)=2)?prop(change_forbidden):prop(change_backward_2_right)); 
     907    change_backward_3_right: eval((prop(lanes_bwd)=3)?prop(change_forbidden):prop(change_backward_3_right)); 
     908    change_backward_4_right: eval((prop(lanes_bwd)=4)?prop(change_forbidden):prop(change_backward_4_right)); 
     909    change_backward_5_right: eval((prop(lanes_bwd)=5)?prop(change_forbidden):prop(change_backward_5_right)); 
     910    change_backward_6_right: eval((prop(lanes_bwd)=6)?prop(change_forbidden):prop(change_backward_6_right)); 
     911    change_backward_7_right: eval((prop(lanes_bwd)=7)?prop(change_forbidden):prop(change_backward_7_right)); 
     912    change_backward_8_right: eval((prop(lanes_bwd)=8)?prop(change_forbidden):prop(change_backward_8_right)); 
     913}
     914
     915
     916/***************************************************************************************************************************************************/
     917/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     918/* Lane-dependent width                                                                                                                            */
     919/* This must be done AFTER the determination of the lanes count                                                                                    */
     920/* TODO: the number of values should also be checked and considered for the lanes count, but this must be done BEFORE the determination of the l.c.*/
     921/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     922/***************************************************************************************************************************************************/
     923way|z17-[is_prop_set(ok)]
     924{
     925    lane_width_forward_1: eval(prop(lane_default_width));    lane_width_forward_2: eval(prop(lane_default_width));
     926    lane_width_forward_3: eval(prop(lane_default_width));    lane_width_forward_4: eval(prop(lane_default_width));
     927    lane_width_forward_5: eval(prop(lane_default_width));    lane_width_forward_6: eval(prop(lane_default_width));
     928    lane_width_forward_7: eval(prop(lane_default_width));    lane_width_forward_8: eval(prop(lane_default_width));
     929
     930    lane_width_backward_1: eval(prop(lane_default_width));    lane_width_backward_2: eval(prop(lane_default_width));
     931    lane_width_backward_3: eval(prop(lane_default_width));    lane_width_backward_4: eval(prop(lane_default_width));
     932    lane_width_backward_5: eval(prop(lane_default_width));    lane_width_backward_6: eval(prop(lane_default_width));
     933    lane_width_backward_7: eval(prop(lane_default_width));    lane_width_backward_8: eval(prop(lane_default_width));
     934
     935    lane_width_bothways_1: eval(prop(lane_default_width));    lane_width_bothways_2: eval(prop(lane_default_width));
     936    lane_width_bothways_3: eval(prop(lane_default_width));    lane_width_bothways_4: eval(prop(lane_default_width));
     937}
     938
     939/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     940/* Forward lanes                                                                                                                                   */
     941/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     942way|z17-[is_prop_set(ok)]["width:lanes:forward"],
     943way|z17-[is_prop_set(ok)]["width:lanes"][oneway?]
     944{
     945    temp: eval(cond(has_tag_key("width:lanes:forward"),tag("width:lanes:forward"),tag("width:lanes")));
     946    temp_list: eval(split("|",prop(temp)));
     947    temp_length: eval(length(prop(temp_list)));
     948
     949    lane_width_forward_1: eval(((prop(temp_length)>0) && (get(prop(temp_list),0)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),0)))):prop(lane_default_width));
     950    lane_width_forward_2: eval(((prop(temp_length)>1) && (get(prop(temp_list),1)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),1)))):prop(lane_default_width));
     951    lane_width_forward_3: eval(((prop(temp_length)>2) && (get(prop(temp_list),2)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),2)))):prop(lane_default_width));
     952    lane_width_forward_4: eval(((prop(temp_length)>3) && (get(prop(temp_list),3)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),3)))):prop(lane_default_width));
     953    lane_width_forward_5: eval(((prop(temp_length)>4) && (get(prop(temp_list),4)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),4)))):prop(lane_default_width));
     954    lane_width_forward_6: eval(((prop(temp_length)>5) && (get(prop(temp_list),5)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),5)))):prop(lane_default_width));
     955    lane_width_forward_7: eval(((prop(temp_length)>6) && (get(prop(temp_list),6)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),6)))):prop(lane_default_width));
     956    lane_width_forward_8: eval(((prop(temp_length)>7) && (get(prop(temp_list),7)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),7)))):prop(lane_default_width));
     957}
     958
     959/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     960/* Backward lanes                                                                                                                                  */
     961/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     962way|z17-[is_prop_set(ok)]["width:lanes:backward"],
     963way|z17-[is_prop_set(ok)]["width:lanes"][oneway=-1]
     964{
     965    temp: eval(cond(has_tag_key("width:lanes:backward"),tag("width:lanes:backward"),tag("width:lanes")));
     966    temp_list: eval(split("|",prop(temp)));
     967    temp_length: eval(length(prop(temp_list)));
     968
     969    lane_width_backward_1: eval(((prop(temp_length)>0) && (get(prop(temp_list),0)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),0)))):prop(lane_default_width));
     970    lane_width_backward_2: eval(((prop(temp_length)>1) && (get(prop(temp_list),1)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),1)))):prop(lane_default_width));
     971    lane_width_backward_3: eval(((prop(temp_length)>2) && (get(prop(temp_list),2)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),2)))):prop(lane_default_width));
     972    lane_width_backward_4: eval(((prop(temp_length)>3) && (get(prop(temp_list),3)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),3)))):prop(lane_default_width));
     973    lane_width_backward_5: eval(((prop(temp_length)>4) && (get(prop(temp_list),4)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),4)))):prop(lane_default_width));
     974    lane_width_backward_6: eval(((prop(temp_length)>5) && (get(prop(temp_list),5)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),5)))):prop(lane_default_width));
     975    lane_width_backward_7: eval(((prop(temp_length)>6) && (get(prop(temp_list),6)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),6)))):prop(lane_default_width));
     976    lane_width_backward_8: eval(((prop(temp_length)>7) && (get(prop(temp_list),7)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),7)))):prop(lane_default_width));
     977}
     978
     979/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     980/* Bothways lanes                                                                                                                                  */
     981/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     982way|z17-[is_prop_set(ok)]["width:lanes:both_ways"]
     983{
     984    temp: eval(tag("width:lanes:both_ways"));
     985    temp_list: eval(split("|",prop(temp)));
     986    temp_length: eval(length(prop(temp_list)));
     987
     988    lane_width_bothways_1: eval(((prop(temp_length)>0) && (get(prop(temp_list),0)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),0)))):prop(lane_default_width));
     989    lane_width_bothways_2: eval(((prop(temp_length)>1) && (get(prop(temp_list),1)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),1)))):prop(lane_default_width));
     990    lane_width_bothways_3: eval(((prop(temp_length)>2) && (get(prop(temp_list),2)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),2)))):prop(lane_default_width));
     991    lane_width_bothways_4: eval(((prop(temp_length)>3) && (get(prop(temp_list),3)>0))?(max(prop(lane_min_width),(prop(pixel_per_metre)*get(prop(temp_list),3)))):prop(lane_default_width));
     992}
     993
     994way|z17-[is_prop_set(ok)]
     995{
     996    lane_width_all_forward: eval(
     997                                    ((prop(lanes_fwd)>0)?prop(lane_width_forward_1):0)+
     998                                    ((prop(lanes_fwd)>1)?prop(lane_width_forward_2):0)+
     999                                    ((prop(lanes_fwd)>2)?prop(lane_width_forward_3):0)+
     1000                                    ((prop(lanes_fwd)>3)?prop(lane_width_forward_4):0)+
     1001                                    ((prop(lanes_fwd)>4)?prop(lane_width_forward_5):0)+
     1002                                    ((prop(lanes_fwd)>5)?prop(lane_width_forward_6):0)+
     1003                                    ((prop(lanes_fwd)>6)?prop(lane_width_forward_7):0)+
     1004                                    ((prop(lanes_fwd)>7)?prop(lane_width_forward_8):0)
     1005                                );
     1006
     1007    lane_width_all_backward: eval(
     1008                                    ((prop(lanes_bwd)>0)?prop(lane_width_backward_1):0)+
     1009                                    ((prop(lanes_bwd)>1)?prop(lane_width_backward_2):0)+
     1010                                    ((prop(lanes_bwd)>2)?prop(lane_width_backward_3):0)+
     1011                                    ((prop(lanes_bwd)>3)?prop(lane_width_backward_4):0)+
     1012                                    ((prop(lanes_bwd)>4)?prop(lane_width_backward_5):0)+
     1013                                    ((prop(lanes_bwd)>5)?prop(lane_width_backward_6):0)+
     1014                                    ((prop(lanes_bwd)>6)?prop(lane_width_backward_7):0)+
     1015                                    ((prop(lanes_bwd)>7)?prop(lane_width_backward_8):0)
     1016                                );
     1017
     1018    lane_width_all_bothways: eval(
     1019                                    ((prop(lanes_both)>0)?prop(lane_width_bothways_1):0)+
     1020                                    ((prop(lanes_both)>1)?prop(lane_width_bothways_2):0)+
     1021                                    ((prop(lanes_both)>2)?prop(lane_width_bothways_3):0)+
     1022                                    ((prop(lanes_both)>3)?prop(lane_width_bothways_4):0)
     1023                                );
     1024
     1025    lane_width_all: eval((prop(lane_width_all_forward)+prop(lane_width_all_backward))+prop(lane_width_all_bothways));
     1026}
     1027
     1028/***************************************************************************************************************************************************/
     1029/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1030/* Offset of the road given by the placement tag                                                                                                   */
     1031/* It is assumed that only one of the placement tags is set, otherwise the result will most certainly be incorrect                                 */
     1032/* TODO: placement:both_ways is currently not supported, verify support for left-hand-traffic                                                      */
     1033/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1034/***************************************************************************************************************************************************/
     1035/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1036/* 1. Calculate the borders without consideration of placement                                                                                     */
     1037/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1038way[is_prop_set(ok)]
     1039{
     1040    /* Determine the borders of the parts of the carriageway assuming no placement was specified */
     1041    placement_offset: 0;
     1042    placement_transition: eval(has_tag_key("placement") && (tag("placement")="transition"));
     1043    left_carriageway_border: eval(prop(lane_width_all)/2.0);
     1044    left_forward_border: eval(cond(prop(style_right_hand_traffic),
     1045                                   (prop(left_carriageway_border) - (prop(lane_width_all_backward)+prop(lane_width_all_bothways))),
     1046                                   prop(left_carriageway_border)
     1047                                  )
     1048                             );
     1049    right_backward_border: eval(cond(prop(style_right_hand_traffic),
     1050                                     (prop(left_carriageway_border) - prop(lane_width_all_backward)),
     1051                                     (prop(left_carriageway_border) - prop(lane_width_all))
     1052                                    )
     1053                               );
     1054    left_bothways_border: eval(cond(prop(style_right_hand_traffic),
     1055                                    (prop(left_carriageway_border) - prop(lane_width_all_backward)),
     1056                                    (prop(left_carriageway_border) - prop(lane_width_all_forward))
     1057                                   )
     1058                              );
     1059}
     1060
     1061/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1062/* 2.a. Offset of the forward lanes                                                                                                                */
     1063/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1064way|z17-[is_prop_set(ok)]
     1065{
     1066    lane_offset_forward_1: eval(prop(left_forward_border)-
     1067                                (prop(lane_width_forward_1)/2));
     1068    lane_offset_forward_2: eval(prop(lane_offset_forward_1)-
     1069                               ((prop(lane_width_forward_1)+
     1070                                 prop(lane_width_forward_2))/2));
     1071    lane_offset_forward_3: eval(prop(lane_offset_forward_2)-
     1072                               ((prop(lane_width_forward_2)+
     1073                                 prop(lane_width_forward_3))/2));
     1074    lane_offset_forward_4: eval(prop(lane_offset_forward_3)-
     1075                               ((prop(lane_width_forward_3)+
     1076                                 prop(lane_width_forward_4))/2));
     1077    lane_offset_forward_5: eval(prop(lane_offset_forward_4)-
     1078                               ((prop(lane_width_forward_4)+
     1079                                 prop(lane_width_forward_5))/2));
     1080    lane_offset_forward_6: eval(prop(lane_offset_forward_5)-
     1081                               ((prop(lane_width_forward_5)+
     1082                                 prop(lane_width_forward_6))/2));
     1083    lane_offset_forward_7: eval(prop(lane_offset_forward_6)-
     1084                               ((prop(lane_width_forward_6)+
     1085                                 prop(lane_width_forward_7))/2));
     1086    lane_offset_forward_8: eval(prop(lane_offset_forward_7)-
     1087                               ((prop(lane_width_forward_7)+
     1088                                 prop(lane_width_forward_8))/2));
     1089}
     1090
     1091/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1092/* 2.b. Offset of the backward lanes                                                                                                               */
     1093/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1094way|z17-[is_prop_set(ok)]
     1095{
     1096    lane_offset_backward_1: eval(prop(right_backward_border)+
     1097                                 (prop(lane_width_backward_1)/2));
     1098    lane_offset_backward_2: eval(prop(lane_offset_backward_1)+
     1099                                ((prop(lane_width_backward_1)+
     1100                                  prop(lane_width_backward_2))/2));
     1101    lane_offset_backward_3: eval(prop(lane_offset_backward_2)+
     1102                                ((prop(lane_width_backward_2)+
     1103                                  prop(lane_width_backward_3))/2));
     1104    lane_offset_backward_4: eval(prop(lane_offset_backward_3)+
     1105                                ((prop(lane_width_backward_3)+
     1106                                  prop(lane_width_backward_4))/2));
     1107    lane_offset_backward_5: eval(prop(lane_offset_backward_4)+
     1108                                ((prop(lane_width_backward_4)+
     1109                                  prop(lane_width_backward_5))/2));
     1110    lane_offset_backward_6: eval(prop(lane_offset_backward_5)+
     1111                                ((prop(lane_width_backward_5)+
     1112                                  prop(lane_width_backward_6))/2));
     1113    lane_offset_backward_7: eval(prop(lane_offset_backward_6)+
     1114                                ((prop(lane_width_backward_6)+
     1115                                  prop(lane_width_backward_7))/2));
     1116    lane_offset_backward_8: eval(prop(lane_offset_backward_7)+
     1117                                ((prop(lane_width_backward_7)+
     1118                                  prop(lane_width_backward_8))/2));
     1119}
     1120
     1121/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1122/* 2.c. Offset of the both_ways lanes                                                                                                                */
     1123/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1124way|z17-[is_prop_set(ok)]
     1125{
     1126    lane_offset_bothways_1: eval(prop(left_bothways_border)-
     1127                                 (prop(lane_width_bothways_1)/2));
     1128    lane_offset_bothways_2: eval(prop(lane_offset_bothways_1)-
     1129                                ((prop(lane_width_bothways_1)+
     1130                                  prop(lane_width_bothways_2))/2));
     1131    lane_offset_bothways_3: eval(prop(lane_offset_bothways_2)-
     1132                                ((prop(lane_width_bothways_2)+
     1133                                  prop(lane_width_bothways_3))/2));
     1134    lane_offset_bothways_4: eval(prop(lane_offset_bothways_3)-
     1135                                ((prop(lane_width_bothways_3)+
     1136                                  prop(lane_width_bothways_4))/2));
     1137}
     1138
     1139/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1140/* 3. Now determine the offset given by the placement tag                                                                                          */
     1141/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1142way[is_prop_set(ok)]["placement:forward"]["placement:forward"!=transition],
     1143way[is_prop_set(ok)][oneway?][placement][placement!=transition]
     1144{
     1145    placement_value: eval(has_tag_key("placement")?tag("placement"):tag("placement:forward"));
     1146    placement_offset: eval(
     1147                cond(prop("placement_value")="right_of:1",eval((prop(lane_width_forward_1)/2)-prop(lane_offset_forward_1)),
     1148                cond(prop("placement_value")="right_of:2",eval((prop(lane_width_forward_2)/2)-prop(lane_offset_forward_2)),
     1149                cond(prop("placement_value")="right_of:3",eval((prop(lane_width_forward_3)/2)-prop(lane_offset_forward_3)),
     1150                cond(prop("placement_value")="right_of:4",eval((prop(lane_width_forward_4)/2)-prop(lane_offset_forward_4)),
     1151                cond(prop("placement_value")="right_of:5",eval((prop(lane_width_forward_5)/2)-prop(lane_offset_forward_5)),
     1152                cond(prop("placement_value")="right_of:6",eval((prop(lane_width_forward_6)/2)-prop(lane_offset_forward_6)),
     1153                cond(prop("placement_value")="right_of:7",eval((prop(lane_width_forward_7)/2)-prop(lane_offset_forward_7)),
     1154                cond(prop("placement_value")="right_of:8",eval((prop(lane_width_forward_8)/2)-prop(lane_offset_forward_8)),
     1155                cond(prop("placement_value")="left_of:1",eval(-(prop(lane_offset_forward_1)+(prop(lane_width_forward_1)/2))),
     1156                cond(prop("placement_value")="left_of:2",eval(-(prop(lane_offset_forward_2)+(prop(lane_width_forward_2)/2))),
     1157                cond(prop("placement_value")="left_of:3",eval(-(prop(lane_offset_forward_3)+(prop(lane_width_forward_3)/2))),
     1158                cond(prop("placement_value")="left_of:4",eval(-(prop(lane_offset_forward_4)+(prop(lane_width_forward_4)/2))),
     1159                cond(prop("placement_value")="left_of:5",eval(-(prop(lane_offset_forward_5)+(prop(lane_width_forward_5)/2))),
     1160                cond(prop("placement_value")="left_of:6",eval(-(prop(lane_offset_forward_6)+(prop(lane_width_forward_6)/2))),
     1161                cond(prop("placement_value")="left_of:7",eval(-(prop(lane_offset_forward_7)+(prop(lane_width_forward_7)/2))),
     1162                cond(prop("placement_value")="left_of:8",eval(-(prop(lane_offset_forward_8)+(prop(lane_width_forward_8)/2))),
     1163                cond(prop("placement_value")="middle_of:1",eval(-prop(lane_offset_forward_1)),
     1164                cond(prop("placement_value")="middle_of:2",eval(-prop(lane_offset_forward_2)),
     1165                cond(prop("placement_value")="middle_of:3",eval(-prop(lane_offset_forward_3)),
     1166                cond(prop("placement_value")="middle_of:4",eval(-prop(lane_offset_forward_4)),
     1167                cond(prop("placement_value")="middle_of:5",eval(-prop(lane_offset_forward_5)),
     1168                cond(prop("placement_value")="middle_of:6",eval(-prop(lane_offset_forward_6)),
     1169                cond(prop("placement_value")="middle_of:7",eval(-prop(lane_offset_forward_7)),
     1170                cond(prop("placement_value")="middle_of:8",eval(-prop(lane_offset_forward_8)),
     1171                0
     1172                ))))))))))))))))))))))))
     1173               );
     1174}
     1175way[is_prop_set(ok)]["placement:backward"]["placement:backward"!=transition],
     1176way[is_prop_set(ok)][oneway=-1][placement][placement!=transition]
     1177{
     1178    placement_value: eval(has_tag_key("placement")?tag("placement"):tag("placement:backward"));
     1179    placement_offset: eval(
     1180                cond(prop("placement_value")="right_of:1",eval(-(prop(lane_offset_backward_1)+(prop(lane_width_backward_1)/2))),
     1181                cond(prop("placement_value")="right_of:2",eval(-(prop(lane_offset_backward_2)+(prop(lane_width_backward_2)/2))),
     1182                cond(prop("placement_value")="right_of:3",eval(-(prop(lane_offset_backward_3)+(prop(lane_width_backward_3)/2))),
     1183                cond(prop("placement_value")="right_of:4",eval(-(prop(lane_offset_backward_4)+(prop(lane_width_backward_4)/2))),
     1184                cond(prop("placement_value")="right_of:5",eval(-(prop(lane_offset_backward_5)+(prop(lane_width_backward_5)/2))),
     1185                cond(prop("placement_value")="right_of:6",eval(-(prop(lane_offset_backward_6)+(prop(lane_width_backward_6)/2))),
     1186                cond(prop("placement_value")="right_of:7",eval(-(prop(lane_offset_backward_7)+(prop(lane_width_backward_7)/2))),
     1187                cond(prop("placement_value")="right_of:8",eval(-(prop(lane_offset_backward_8)+(prop(lane_width_backward_8)/2))),
     1188                cond(prop("placement_value")="left_of:1",eval((prop(lane_width_backward_1)/2)-prop(lane_offset_backward_1)),
     1189                cond(prop("placement_value")="left_of:2",eval((prop(lane_width_backward_2)/2)-prop(lane_offset_backward_2)),
     1190                cond(prop("placement_value")="left_of:3",eval((prop(lane_width_backward_3)/2)-prop(lane_offset_backward_3)),
     1191                cond(prop("placement_value")="left_of:4",eval((prop(lane_width_backward_4)/2)-prop(lane_offset_backward_4)),
     1192                cond(prop("placement_value")="left_of:5",eval((prop(lane_width_backward_5)/2)-prop(lane_offset_backward_5)),
     1193                cond(prop("placement_value")="left_of:6",eval((prop(lane_width_backward_6)/2)-prop(lane_offset_backward_6)),
     1194                cond(prop("placement_value")="left_of:7",eval((prop(lane_width_backward_7)/2)-prop(lane_offset_backward_7)),
     1195                cond(prop("placement_value")="left_of:8",eval((prop(lane_width_backward_8)/2)-prop(lane_offset_backward_8)),
     1196                cond(prop("placement_value")="middle_of:1",eval(-prop(lane_offset_backward_1)),
     1197                cond(prop("placement_value")="middle_of:2",eval(-prop(lane_offset_backward_2)),
     1198                cond(prop("placement_value")="middle_of:3",eval(-prop(lane_offset_backward_3)),
     1199                cond(prop("placement_value")="middle_of:4",eval(-prop(lane_offset_backward_4)),
     1200                cond(prop("placement_value")="middle_of:5",eval(-prop(lane_offset_backward_5)),
     1201                cond(prop("placement_value")="middle_of:6",eval(-prop(lane_offset_backward_6)),
     1202                cond(prop("placement_value")="middle_of:7",eval(-prop(lane_offset_backward_7)),
     1203                cond(prop("placement_value")="middle_of:8",eval(-prop(lane_offset_backward_8)),
     1204                0
     1205                ))))))))))))))))))))))))
     1206               );
     1207}
     1208way[is_prop_set(ok)]["placement:both_ways"]["placement:both_ways"!=transition]
     1209{
     1210    placement_value: eval(tag("placement:both_ways"));
     1211    placement_offset: eval(
     1212                cond(prop("placement_value")="right_of:1",eval((prop(lane_width_bothways_1)/2)-prop(lane_offset_bothways_1)),
     1213                cond(prop("placement_value")="right_of:2",eval((prop(lane_width_bothways_2)/2)-prop(lane_offset_bothways_2)),
     1214                cond(prop("placement_value")="right_of:3",eval((prop(lane_width_bothways_3)/2)-prop(lane_offset_bothways_3)),
     1215                cond(prop("placement_value")="right_of:4",eval((prop(lane_width_bothways_4)/2)-prop(lane_offset_bothways_4)),
     1216                cond(prop("placement_value")="left_of:1",eval(-(prop(lane_offset_bothways_1)+(prop(lane_width_bothways_1)/2))),
     1217                cond(prop("placement_value")="left_of:2",eval(-(prop(lane_offset_bothways_2)+(prop(lane_width_bothways_2)/2))),
     1218                cond(prop("placement_value")="left_of:3",eval(-(prop(lane_offset_bothways_3)+(prop(lane_width_bothways_3)/2))),
     1219                cond(prop("placement_value")="left_of:4",eval(-(prop(lane_offset_bothways_4)+(prop(lane_width_bothways_4)/2))),
     1220                cond(prop("placement_value")="middle_of:1",eval(-prop(lane_offset_bothways_1)),
     1221                cond(prop("placement_value")="middle_of:2",eval(-prop(lane_offset_bothways_2)),
     1222                cond(prop("placement_value")="middle_of:3",eval(-prop(lane_offset_bothways_3)),
     1223                cond(prop("placement_value")="middle_of:4",eval(-prop(lane_offset_bothways_4)),
     1224                0
     1225                ))))))))))))
     1226               );
     1227}
     1228
     1229/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1230/* 4. Move the carriageway and the lanes                                                                                                           */
     1231/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1232way[is_prop_set(ok)]
     1233{
     1234    /* Move the carriageway borders */
     1235    left_carriageway_border: eval((prop(left_carriageway_border) + prop(placement_offset)));
     1236    left_forward_border: eval((prop(left_forward_border) + prop(placement_offset)));
     1237    right_backward_border: eval((prop(right_backward_border) + prop(placement_offset)));
     1238    left_bothways_border: eval((prop(left_bothways_border) + prop(placement_offset))); 
     1239
     1240    /* Move the lanes */
     1241    lane_offset_forward_1: eval((prop(lane_offset_forward_1) + prop(placement_offset)));
     1242    lane_offset_forward_2: eval((prop(lane_offset_forward_2) + prop(placement_offset)));
     1243    lane_offset_forward_3: eval((prop(lane_offset_forward_3) + prop(placement_offset)));
     1244    lane_offset_forward_4: eval((prop(lane_offset_forward_4) + prop(placement_offset)));
     1245    lane_offset_forward_5: eval((prop(lane_offset_forward_5) + prop(placement_offset)));
     1246    lane_offset_forward_6: eval((prop(lane_offset_forward_6) + prop(placement_offset)));
     1247    lane_offset_forward_7: eval((prop(lane_offset_forward_7) + prop(placement_offset)));
     1248    lane_offset_forward_8: eval((prop(lane_offset_forward_8) + prop(placement_offset)));
     1249    lane_offset_backward_1: eval((prop(lane_offset_backward_1) + prop(placement_offset)));
     1250    lane_offset_backward_2: eval((prop(lane_offset_backward_2) + prop(placement_offset)));
     1251    lane_offset_backward_3: eval((prop(lane_offset_backward_3) + prop(placement_offset)));
     1252    lane_offset_backward_4: eval((prop(lane_offset_backward_4) + prop(placement_offset)));
     1253    lane_offset_backward_5: eval((prop(lane_offset_backward_5) + prop(placement_offset)));
     1254    lane_offset_backward_6: eval((prop(lane_offset_backward_6) + prop(placement_offset)));
     1255    lane_offset_backward_7: eval((prop(lane_offset_backward_7) + prop(placement_offset)));
     1256    lane_offset_backward_8: eval((prop(lane_offset_backward_8) + prop(placement_offset)));
     1257    lane_offset_bothways_1: eval((prop(lane_offset_bothways_1) + prop(placement_offset)));
     1258    lane_offset_bothways_2: eval((prop(lane_offset_bothways_2) + prop(placement_offset)));
     1259    lane_offset_bothways_3: eval((prop(lane_offset_bothways_3) + prop(placement_offset)));
     1260    lane_offset_bothways_4: eval((prop(lane_offset_bothways_4) + prop(placement_offset)));
     1261}
     1262
     1263/***************************************************************************************************************************************************/
     1264/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1265/* Render the carriageway                                                                                                                          */
     1266/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1267/***************************************************************************************************************************************************/
     1268way[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground
     1269{
     1270    linecap: none;
     1271    /* Not necessary: color:   prop(ground_color,"default"); */
     1272    opacity: 0.0; /*prop(style_ground_opacity,"default"); */
     1273    width:   eval(prop(lane_width_all,"default"));
     1274    offset:  prop(placement_offset,"default");
     1275    major-z-index: -1.0;
     1276}
     1277
     1278/* Sidewalk and cycletrack */
     1279way|z17- {} /* ATTENTION: For whatever reason this is needed, otherwise the following won't be interpreted correctly */
     1280way|z17-[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground
     1281{
     1282    templ:  eval((has_tag_key(sidewalk) && ((tag(sidewalk)="both") || (tag(sidewalk)="left")))?1:0);
     1283    templ:  eval(prop(templ)+((((has_tag_key(cycleway) && ((tag(cycleway)="track") && (!(has_tag_key("cycleway:left") && (tag("cycleway:left")="no"))))) ||
     1284                                (has_tag_key("cycleway:left") && (tag("cycleway:left")="track"))) ||
     1285                                (has_tag_key("cycleway:both") && (tag("cycleway:both")="track"))
     1286                              )?2:0));
     1287    tempr:  eval((has_tag_key(sidewalk) && ((tag(sidewalk)="both") || (tag(sidewalk)="right")))?1:0);
     1288    tempr:  eval(prop(tempr)+((((has_tag_key(cycleway) && ((tag(cycleway)="track") && (!(has_tag_key("cycleway:right") && (tag("cycleway:right")="no"))))) ||
     1289                                (has_tag_key("cycleway:right") && (tag("cycleway:right")="track"))) ||
     1290                                (has_tag_key("cycleway:both") && (tag("cycleway:both")="track"))
     1291                              )?2:0));
     1292
     1293    left-casing-linecap: none;
     1294    left-casing-width: eval((prop(templ)>0)?(prop(lane_width,"default")/2):0);
     1295    templ: eval(get(prop(style_sidewalk_color,"default"),prop(templ)));
     1296    left-casing-color:  eval((has_tag_key(lit)&&(tag(lit)=yes))?(rgb(red(prop(templ))+0.1,green(prop(templ))+0.1,blue(prop(templ))+0.1)):prop(templ));
     1297    left-casing-opacity: prop(style_ground_opacity,"default");
     1298
     1299    right-casing-linecap: none;
     1300    right-casing-width: eval((prop(tempr)>0)?(prop(lane_width,"default")/2):0);
     1301    tempr: eval(get(prop(style_sidewalk_color,"default"),prop(tempr)));
     1302    right-casing-color:  eval((has_tag_key(lit)&&(tag(lit)=yes))?(rgb(red(prop(tempr))+0.1,green(prop(tempr))+0.1,blue(prop(tempr))+0.1)):prop(tempr));
     1303    right-casing-opacity: prop(style_ground_opacity,"default");
     1304}
     1305
     1306/***************************************************************************************************************************************************/
     1307/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1308/* Render the lanes                                                                                                                                */
     1309/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1310/***************************************************************************************************************************************************/
     1311/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1312/* Forward lanes                                                                                                                                   */
     1313/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1314way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default") > 0]::Lane_Forward_1
     1315{
     1316    offset:                              eval(prop(lane_offset_forward_1,"default"));
     1317    width:                               eval((prop(lane_width_forward_1,"default")-prop(lane_casing,"default")));
     1318    right-casing-dashes:                      eval(prop(change_forward_1_right,"default"));
     1319    left-casing-dashes:                       eval(prop(change_forward_1_left,"default"));
     1320    color:                                          prop(color_forward_1,"default");
     1321    dashes:                  eval(is_prop_set(designated_color_forward_1,"default")?list(20,20):false);
     1322    dashes-background-color: eval(is_prop_set(designated_color_forward_1,"default")?
     1323                                         prop(designated_color_forward_1,"default"):false);
     1324    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_1,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1325
     1326    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1327    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1328    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1329    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1330}
     1331
     1332way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>1]::Lane_Forward_2
     1333{
     1334    offset:                              eval(prop(lane_offset_forward_2,"default"));
     1335    width:                               eval((prop(lane_width_forward_2,"default")-prop(lane_casing,"default")));
     1336    right-casing-dashes:                           prop(change_forward_2_right,"default");
     1337    left-casing-dashes:                            prop(change_forward_2_left,"default");
     1338    color:                                          prop(color_forward_2,"default");
     1339    dashes:                  eval(is_prop_set(designated_color_forward_2,"default")?list(20,20):false);
     1340    dashes-background-color: eval(is_prop_set(designated_color_forward_2,"default")?
     1341                                         prop(designated_color_forward_2,"default"):false);
     1342    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_2,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1343
     1344    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1345    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1346    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1347    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1348}
     1349
     1350way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>2]::Lane_Forward_3
     1351{
     1352    offset:                              eval(prop(lane_offset_forward_3,"default"));
     1353    width:                               eval((prop(lane_width_forward_3,"default")-prop(lane_casing,"default")));
     1354    right-casing-dashes:                           prop(change_forward_3_right,"default");
     1355    left-casing-dashes:                            prop(change_forward_3_left,"default");
     1356    color:                                          prop(color_forward_3,"default");
     1357    dashes:                  eval(is_prop_set(designated_color_forward_3,"default")?list(20,20):false);
     1358    dashes-background-color: eval(is_prop_set(designated_color_forward_3,"default")?
     1359                                         prop(designated_color_forward_3,"default"):false);
     1360    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_3,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1361
     1362    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1363    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1364    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1365    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1366}
     1367
     1368way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>3]::Lane_Forward_4
     1369{
     1370    offset:                              eval(prop(lane_offset_forward_4,"default"));
     1371    width:                               eval((prop(lane_width_forward_4,"default")-prop(lane_casing,"default")));
     1372    right-casing-dashes:                           prop(change_forward_4_right,"default");
     1373    left-casing-dashes:                            prop(change_forward_4_left,"default");
     1374    color:                                          prop(color_forward_4,"default");
     1375    dashes:                  eval(is_prop_set(designated_color_forward_4,"default")?list(20,20):false);
     1376    dashes-background-color: eval(is_prop_set(designated_color_forward_4,"default")?
     1377                                         prop(designated_color_forward_4,"default"):false);
     1378    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_4,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1379
     1380    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1381    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1382    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1383    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1384}
     1385
     1386way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>4]::Lane_Forward_5
     1387{
     1388    offset:                              eval(prop(lane_offset_forward_5,"default"));
     1389    width:                               eval((prop(lane_width_forward_5,"default")-prop(lane_casing,"default")));
     1390    right-casing-dashes:                           prop(change_forward_5_right,"default");
     1391    left-casing-dashes:                            prop(change_forward_5_left,"default");
     1392    color:                                          prop(color_forward_5,"default");
     1393    dashes:                  eval(is_prop_set(designated_color_forward_5,"default")?list(20,20):false);
     1394    dashes-background-color: eval(is_prop_set(designated_color_forward_5,"default")?
     1395                                         prop(designated_color_forward_5,"default"):false);
     1396    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_5,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1397
     1398    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1399    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1400    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1401    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1402}
     1403
     1404way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>5]::Lane_Forward_6
     1405{
     1406    offset:                              eval(prop(lane_offset_forward_6,"default"));
     1407    width:                               eval((prop(lane_width_forward_6,"default")-prop(lane_casing,"default")));
     1408    right-casing-dashes:                           prop(change_forward_6_right,"default");
     1409    left-casing-dashes:                            prop(change_forward_6_left,"default");
     1410    color:                                          prop(color_forward_6,"default");
     1411    dashes:                  eval(is_prop_set(designated_color_forward_6,"default")?list(20,20):false);
     1412    dashes-background-color: eval(is_prop_set(designated_color_forward_6,"default")?
     1413                                         prop(designated_color_forward_6,"default"):false);
     1414    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_6,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1415
     1416    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1417    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1418    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1419    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1420}
     1421
     1422way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>6]::Lane_Forward_7
     1423{
     1424    offset:                              eval(prop(lane_offset_forward_7,"default"));
     1425    width:                               eval((prop(lane_width_forward_7,"default")-prop(lane_casing,"default")));
     1426    right-casing-dashes:                           prop(change_forward_7_right,"default");
     1427    left-casing-dashes:                            prop(change_forward_7_left,"default");
     1428    color:                                          prop(color_forward_7,"default");
     1429    dashes:                  eval(is_prop_set(designated_color_forward_7,"default")?list(20,20):false);
     1430    dashes-background-color: eval(is_prop_set(designated_color_forward_7,"default")?
     1431                                         prop(designated_color_forward_7,"default"):false);
     1432    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_7,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1433
     1434    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1435    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1436    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1437    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1438}
     1439
     1440way|z17-[is_prop_set(ok, "default")][prop(lanes_fwd, "default")>7]::Lane_Forward_8
     1441{
     1442    offset:                              eval(prop(lane_offset_forward_8,"default"));
     1443    width:                               eval((prop(lane_width_forward_8,"default")-prop(lane_casing,"default")));
     1444    right-casing-dashes:                           prop(change_forward_8_right,"default");
     1445    left-casing-dashes:                            prop(change_forward_8_left,"default");
     1446    color:                                          prop(color_forward_8,"default");
     1447    dashes:                  eval(is_prop_set(designated_color_forward_8,"default")?list(20,20):false);
     1448    dashes-background-color: eval(is_prop_set(designated_color_forward_8,"default")?
     1449                                         prop(designated_color_forward_8,"default"):false);
     1450    turn_matrix_scaling:                 eval(is_prop_set(turn_forward_8,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1451
     1452    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1453    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1454    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1455    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1456}
     1457
     1458/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1459/* Backward lanes                                                                                                                                  */
     1460/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1461way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>0]::Lane_Backward_1
     1462{
     1463    offset:                              eval(prop(lane_offset_backward_1,"default"));
     1464    width:                               eval((prop(lane_width_backward_1,"default")-prop(lane_casing,"default")));
     1465    left-casing-dashes:                            prop(change_backward_1_right,"default");
     1466    right-casing-dashes:                           prop(change_backward_1_left,"default");
     1467    color:                                          prop(color_backward_1,"default");
     1468    dashes:                  eval(is_prop_set(designated_color_backward_1,"default")?list(20,20):false);
     1469    dashes-background-color: eval(is_prop_set(designated_color_backward_1,"default")?
     1470                                         prop(designated_color_backward_1,"default"):false);
     1471    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_1,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1472
     1473    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1474    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1475    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1476    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1477}
     1478
     1479way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>1]::Lane_Backward_2
     1480{
     1481    offset:                              eval(prop(lane_offset_backward_2,"default"));
     1482    width:                               eval((prop(lane_width_backward_2,"default")-prop(lane_casing,"default")));
     1483    left-casing-dashes:                            prop(change_backward_2_right,"default");
     1484    right-casing-dashes:                           prop(change_backward_2_left,"default");
     1485    color:                                          prop(color_backward_2,"default");
     1486    dashes:                  eval(is_prop_set(designated_color_backward_2,"default")?list(20,20):false);
     1487    dashes-background-color: eval(is_prop_set(designated_color_backward_2,"default")?
     1488                                         prop(designated_color_backward_2,"default"):false);
     1489    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_2,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1490
     1491    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1492    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1493    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1494    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1495}
     1496
     1497way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>2]::Lane_Backward_3
     1498{
     1499    offset:                              eval(prop(lane_offset_backward_3,"default"));
     1500    width:                               eval((prop(lane_width_backward_3,"default")-prop(lane_casing,"default")));
     1501    left-casing-dashes:                            prop(change_backward_3_right,"default");
     1502    right-casing-dashes:                           prop(change_backward_3_left,"default");
     1503    color:                                          prop(color_backward_3,"default");
     1504    dashes:                  eval(is_prop_set(designated_color_backward_3,"default")?list(20,20):false);
     1505    dashes-background-color: eval(is_prop_set(designated_color_backward_3,"default")?
     1506                                         prop(designated_color_backward_3,"default"):false);
     1507    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_3,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1508
     1509    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1510    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1511    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1512    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1513}
     1514
     1515way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>3]::Lane_Backward_4
     1516{
     1517    offset:                              eval(prop(lane_offset_backward_4,"default"));
     1518    width:                               eval((prop(lane_width_backward_4,"default")-prop(lane_casing,"default")));
     1519    left-casing-dashes:                            prop(change_backward_4_right,"default");
     1520    right-casing-dashes:                           prop(change_backward_4_left,"default");
     1521    color:                                          prop(color_backward_4,"default");
     1522    dashes:                  eval(is_prop_set(designated_color_backward_4,"default")?list(20,20):false);
     1523    dashes-background-color: eval(is_prop_set(designated_color_backward_4,"default")?
     1524                                         prop(designated_color_backward_4,"default"):false);
     1525    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_4,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1526
     1527    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1528    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1529    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1530    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1531}
     1532
     1533way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>4]::Lane_Backward_5
     1534{
     1535    offset:                              eval(prop(lane_offset_backward_5,"default"));
     1536    width:                               eval((prop(lane_width_backward_5,"default")-prop(lane_casing,"default")));
     1537    left-casing-dashes:                            prop(change_backward_5_right,"default");
     1538    right-casing-dashes:                           prop(change_backward_5_left,"default");
     1539    color:                                          prop(color_backward_5,"default");
     1540    dashes:                  eval(is_prop_set(designated_color_backward_5,"default")?list(20,20):false);
     1541    dashes-background-color: eval(is_prop_set(designated_color_backward_5,"default")?
     1542                                         prop(designated_color_backward_5,"default"):false);
     1543    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_5,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1544
     1545    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1546    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1547    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1548    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1549}
     1550
     1551way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>5]::Lane_Backward_6
     1552{
     1553    offset:                              eval(prop(lane_offset_backward_6,"default"));
     1554    width:                               eval((prop(lane_width_backward_6,"default")-prop(lane_casing,"default")));
     1555    left-casing-dashes:                            prop(change_backward_6_right,"default");
     1556    right-casing-dashes:                           prop(change_backward_6_left,"default");
     1557    color:                                          prop(color_backward_6,"default");
     1558    dashes:                  eval(is_prop_set(designated_color_backward_6,"default")?list(20,20):false);
     1559    dashes-background-color: eval(is_prop_set(designated_color_backward_6,"default")?
     1560                                         prop(designated_color_backward_6,"default"):false);
     1561    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_6,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1562
     1563    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1564    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1565    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1566    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1567}
     1568
     1569way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>6]::Lane_Backward_7
     1570{
     1571    offset:                              eval(prop(lane_offset_backward_7,"default"));
     1572    width:                               eval((prop(lane_width_backward_7,"default")-prop(lane_casing,"default")));
     1573    left-casing-dashes:                            prop(change_backward_7_right,"default");
     1574    right-casing-dashes:                           prop(change_backward_7_left,"default");
     1575    color:                                          prop(color_backward_7,"default");
     1576    dashes:                  eval(is_prop_set(designated_color_backward_7,"default")?list(20,20):false);
     1577    dashes-background-color: eval(is_prop_set(designated_color_backward_7,"default")?
     1578                                         prop(designated_color_backward_7,"default"):false);
     1579    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_7,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1580
     1581    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1582    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1583    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1584    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1585}
     1586
     1587way|z17-[is_prop_set(ok, "default")][prop(lanes_bwd, "default")>7]::Lane_Backward_8
     1588{
     1589    offset:                              eval(prop(lane_offset_backward_8,"default"));
     1590    width:                               eval((prop(lane_width_backward_8,"default")-prop(lane_casing,"default")));
     1591    left-casing-dashes:                            prop(change_backward_8_right,"default");
     1592    right-casing-dashes:                           prop(change_backward_8_left,"default");
     1593    color:                                          prop(color_backward_8,"default");
     1594    dashes:                  eval(is_prop_set(designated_color_backward_8,"default")?list(20,20):false);
     1595    dashes-background-color: eval(is_prop_set(designated_color_backward_8,"default")?
     1596                                         prop(designated_color_backward_8,"default"):false);
     1597    turn_matrix_scaling:                 eval(is_prop_set(turn_backward_8,"default")?floor(min(prop(lane_default_width,"default"),prop(width))/9):0);
     1598
     1599    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1600    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1601    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1602    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1603}
     1604
     1605/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1606/* Bothways lanes                                                                                                                                   */
     1607/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1608way|z17-[is_prop_set(ok, "default")][prop(lanes_both, "default")>0]::Lane_Bothways_1
     1609{
     1610    offset:                              eval(prop(lane_offset_bothways_1,"default"));
     1611    width:                               eval((prop(lane_width_bothways_1,"default")-prop(lane_casing,"default")));
     1612    right-casing-dashes:                      eval(prop(change_bothways_1_right,"default"));
     1613    left-casing-dashes:                       eval(prop(change_bothways_1_left,"default"));
     1614    color:                                          prop(color_bothways_1,"default");
     1615    dashes:                  eval(is_prop_set(designated_color_bothways_1,"default")?list(20,20):false);
     1616    dashes-background-color: eval(is_prop_set(designated_color_bothways_1,"default")?
     1617                                         prop(designated_color_bothways_1,"default"):false);
     1618
     1619    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1620    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1621    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1622    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1623}
     1624
     1625way|z17-[is_prop_set(ok, "default")][prop(lanes_both, "default")>1]::Lane_Bothways_2
     1626{
     1627    offset:                              eval(prop(lane_offset_bothways_2,"default"));
     1628    width:                               eval((prop(lane_width_bothways_2,"default")-prop(lane_casing,"default")));
     1629    right-casing-dashes:                           prop(change_bothways_2_right,"default");
     1630    left-casing-dashes:                            prop(change_bothways_2_left,"default");
     1631    color:                                          prop(color_bothways_2,"default");
     1632    dashes:                  eval(is_prop_set(designated_color_bothways_2,"default")?list(20,20):false);
     1633    dashes-background-color: eval(is_prop_set(designated_color_bothways_2,"default")?
     1634                                         prop(designated_color_bothways_2,"default"):false);
     1635
     1636    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1637    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1638    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1639    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1640}
     1641
     1642way|z17-[is_prop_set(ok, "default")][prop(lanes_both, "default")>2]::Lane_Bothways_3
     1643{
     1644    offset:                              eval(prop(lane_offset_bothways_3,"default"));
     1645    width:                               eval((prop(lane_width_bothways_3,"default")-prop(lane_casing,"default")));
     1646    right-casing-dashes:                           prop(change_bothways_3_right,"default");
     1647    left-casing-dashes:                            prop(change_bothways_3_left,"default");
     1648    color:                                          prop(color_bothways_3,"default");
     1649    dashes:                  eval(is_prop_set(designated_color_bothways_3,"default")?list(20,20):false);
     1650    dashes-background-color: eval(is_prop_set(designated_color_bothways_3,"default")?
     1651                                         prop(designated_color_bothways_3,"default"):false);
     1652
     1653    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1654    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1655    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1656    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1657}
     1658
     1659way|z17-[is_prop_set(ok, "default")][prop(lanes_both, "default")>3]::Lane_Bothways_4
     1660{
     1661    offset:                              eval(prop(lane_offset_bothways_4,"default"));
     1662    width:                               eval((prop(lane_width_bothways_4,"default")-prop(lane_casing,"default")));
     1663    right-casing-dashes:                           prop(change_bothways_4_right,"default");
     1664    left-casing-dashes:                            prop(change_bothways_4_left,"default");
     1665    color:                                          prop(color_bothways_4,"default");
     1666    dashes:                  eval(is_prop_set(designated_color_bothways_4,"default")?list(20,20):false);
     1667    dashes-background-color: eval(is_prop_set(designated_color_bothways_4,"default")?
     1668                                         prop(designated_color_bothways_4,"default"):false);
     1669
     1670    opacity: prop(style_lane_opacity,"default"); linecap: none;
     1671    right-casing-width: prop(road_marking_width,"default"); right-casing-color: white;
     1672    left-casing-width: prop(road_marking_width,"default"); left-casing-color: white;
     1673    major-z-index: eval(cond(prop(placement_transition,"default"),-0.1,0.0));
     1674}
     1675
     1676/***************************************************************************************************************************************************/
     1677/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1678/* Ugly hack for turn lanes                                                                                                                        */
     1679/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1680/***************************************************************************************************************************************************/
     1681/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1682/* Forward lanes                                                                                                                                   */
     1683/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1684way[prop(turn_matrix_scaling,"Lane_Forward_1")>0]::Lane_Turn_M1_Forward_1
     1685{
     1686        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_1");
     1687        offset:                          eval(prop(offset,"Lane_Forward_1")+(3*prop(t_m_s)));
     1688        temp:                                eval(get(prop(turn_forward_1,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1689        temp:                                eval(get(prop(turn_forward_1,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1690        temp:                                eval(get(prop(turn_forward_1,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1691        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1692}
     1693way[prop(turn_matrix_scaling,"Lane_Forward_1")>0]::Lane_Turn_M2_Forward_1
     1694{
     1695        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_1");
     1696        offset:                          eval(prop(offset,"Lane_Forward_1")+(0*prop(t_m_s)));
     1697        temp:                                eval(get(prop(turn_forward_1,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1698        temp:                                eval(get(prop(turn_forward_1,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1699        temp:                                eval(get(prop(turn_forward_1,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1700        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1701}
     1702way[prop(turn_matrix_scaling,"Lane_Forward_1")>0]::Lane_Turn_M3_Forward_1
     1703{
     1704        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_1");
     1705        offset:                          eval(prop(offset,"Lane_Forward_1")-(3*prop(t_m_s)));
     1706        temp:                                eval(get(prop(turn_forward_1,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1707        temp:                                eval(get(prop(turn_forward_1,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1708        temp:                                eval(get(prop(turn_forward_1,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1709        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1710}
     1711
     1712way[prop(turn_matrix_scaling,"Lane_Forward_2")>0]::Lane_Turn_M1_Forward_2
     1713{
     1714        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_2");
     1715        offset:                          eval(prop(offset,"Lane_Forward_2")+(3*prop(t_m_s)));
     1716        temp:                                eval(get(prop(turn_forward_2,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1717        temp:                                eval(get(prop(turn_forward_2,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1718        temp:                                eval(get(prop(turn_forward_2,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1719        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1720}
     1721way[prop(turn_matrix_scaling,"Lane_Forward_2")>0]::Lane_Turn_M2_Forward_2
     1722{
     1723        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_2");
     1724        offset:                          eval(prop(offset,"Lane_Forward_2")+(0*prop(t_m_s)));
     1725        temp:                                eval(get(prop(turn_forward_2,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1726        temp:                                eval(get(prop(turn_forward_2,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1727        temp:                                eval(get(prop(turn_forward_2,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1728        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1729}
     1730way[prop(turn_matrix_scaling,"Lane_Forward_2")>0]::Lane_Turn_M3_Forward_2
     1731{
     1732        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_2");
     1733        offset:                          eval(prop(offset,"Lane_Forward_2")-(3*prop(t_m_s)));
     1734        temp:                                eval(get(prop(turn_forward_2,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1735        temp:                                eval(get(prop(turn_forward_2,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1736        temp:                                eval(get(prop(turn_forward_2,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1737        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1738}
     1739
     1740way[prop(turn_matrix_scaling,"Lane_Forward_3")>0]::Lane_Turn_M1_Forward_3
     1741{
     1742        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_3");
     1743        offset:                          eval(prop(offset,"Lane_Forward_3")+(3*prop(t_m_s)));
     1744        temp:                                eval(get(prop(turn_forward_3,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1745        temp:                                eval(get(prop(turn_forward_3,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1746        temp:                                eval(get(prop(turn_forward_3,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1747        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1748}
     1749way[prop(turn_matrix_scaling,"Lane_Forward_3")>0]::Lane_Turn_M2_Forward_3
     1750{
     1751        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_3");
     1752        offset:                          eval(prop(offset,"Lane_Forward_3")+(0*prop(t_m_s)));
     1753        temp:                                eval(get(prop(turn_forward_3,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1754        temp:                                eval(get(prop(turn_forward_3,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1755        temp:                                eval(get(prop(turn_forward_3,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1756        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1757}
     1758way[prop(turn_matrix_scaling,"Lane_Forward_3")>0]::Lane_Turn_M3_Forward_3
     1759{
     1760        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_3");
     1761        offset:                          eval(prop(offset,"Lane_Forward_3")-(3*prop(t_m_s)));
     1762        temp:                                eval(get(prop(turn_forward_3,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1763        temp:                                eval(get(prop(turn_forward_3,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1764        temp:                                eval(get(prop(turn_forward_3,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1765        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1766}
     1767
     1768way[prop(turn_matrix_scaling,"Lane_Forward_4")>0]::Lane_Turn_M1_Forward_4
     1769{
     1770        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_4");
     1771        offset:                          eval(prop(offset,"Lane_Forward_4")+(3*prop(t_m_s)));
     1772        temp:                                eval(get(prop(turn_forward_4,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1773        temp:                                eval(get(prop(turn_forward_4,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1774        temp:                                eval(get(prop(turn_forward_4,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1775        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1776}
     1777way[prop(turn_matrix_scaling,"Lane_Forward_4")>0]::Lane_Turn_M2_Forward_4
     1778{
     1779        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_4");
     1780        offset:                          eval(prop(offset,"Lane_Forward_4")+(0*prop(t_m_s)));
     1781        temp:                                eval(get(prop(turn_forward_4,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1782        temp:                                eval(get(prop(turn_forward_4,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1783        temp:                                eval(get(prop(turn_forward_4,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1784        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1785}
     1786way[prop(turn_matrix_scaling,"Lane_Forward_4")>0]::Lane_Turn_M3_Forward_4
     1787{
     1788        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_4");
     1789        offset:                          eval(prop(offset,"Lane_Forward_4")-(3*prop(t_m_s)));
     1790        temp:                                eval(get(prop(turn_forward_4,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1791        temp:                                eval(get(prop(turn_forward_4,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1792        temp:                                eval(get(prop(turn_forward_4,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1793        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1794}
     1795
     1796way[prop(turn_matrix_scaling,"Lane_Forward_5")>0]::Lane_Turn_M1_Forward_5
     1797{
     1798        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_5");
     1799        offset:                          eval(prop(offset,"Lane_Forward_5")+(3*prop(t_m_s)));
     1800        temp:                                eval(get(prop(turn_forward_5,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1801        temp:                                eval(get(prop(turn_forward_5,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1802        temp:                                eval(get(prop(turn_forward_5,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1803        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1804}
     1805way[prop(turn_matrix_scaling,"Lane_Forward_5")>0]::Lane_Turn_M2_Forward_5
     1806{
     1807        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_5");
     1808        offset:                          eval(prop(offset,"Lane_Forward_5")+(0*prop(t_m_s)));
     1809        temp:                                eval(get(prop(turn_forward_5,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1810        temp:                                eval(get(prop(turn_forward_5,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1811        temp:                                eval(get(prop(turn_forward_5,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1812        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1813}
     1814way[prop(turn_matrix_scaling,"Lane_Forward_5")>0]::Lane_Turn_M3_Forward_5
     1815{
     1816        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_5");
     1817        offset:                          eval(prop(offset,"Lane_Forward_5")-(3*prop(t_m_s)));
     1818        temp:                                eval(get(prop(turn_forward_5,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1819        temp:                                eval(get(prop(turn_forward_5,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1820        temp:                                eval(get(prop(turn_forward_5,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1821        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1822}
     1823
     1824way[prop(turn_matrix_scaling,"Lane_Forward_6")>0]::Lane_Turn_M1_Forward_6
     1825{
     1826        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_6");
     1827        offset:                          eval(prop(offset,"Lane_Forward_6")+(3*prop(t_m_s)));
     1828        temp:                                eval(get(prop(turn_forward_6,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1829        temp:                                eval(get(prop(turn_forward_6,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1830        temp:                                eval(get(prop(turn_forward_6,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1831        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1832}
     1833way[prop(turn_matrix_scaling,"Lane_Forward_6")>0]::Lane_Turn_M2_Forward_6
     1834{
     1835        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_6");
     1836        offset:                          eval(prop(offset,"Lane_Forward_6")+(0*prop(t_m_s)));
     1837        temp:                                eval(get(prop(turn_forward_6,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1838        temp:                                eval(get(prop(turn_forward_6,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1839        temp:                                eval(get(prop(turn_forward_6,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1840        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1841}
     1842way[prop(turn_matrix_scaling,"Lane_Forward_6")>0]::Lane_Turn_M3_Forward_6
     1843{
     1844        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_6");
     1845        offset:                          eval(prop(offset,"Lane_Forward_6")-(3*prop(t_m_s)));
     1846        temp:                                eval(get(prop(turn_forward_6,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1847        temp:                                eval(get(prop(turn_forward_6,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1848        temp:                                eval(get(prop(turn_forward_6,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1849        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1850}
     1851
     1852way[prop(turn_matrix_scaling,"Lane_Forward_7")>0]::Lane_Turn_M1_Forward_7
     1853{
     1854        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_7");
     1855        offset:                          eval(prop(offset,"Lane_Forward_7")+(3*prop(t_m_s)));
     1856        temp:                                eval(get(prop(turn_forward_7,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1857        temp:                                eval(get(prop(turn_forward_7,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1858        temp:                                eval(get(prop(turn_forward_7,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1859        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1860}
     1861way[prop(turn_matrix_scaling,"Lane_Forward_7")>0]::Lane_Turn_M2_Forward_7
     1862{
     1863        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_7");
     1864        offset:                          eval(prop(offset,"Lane_Forward_7")+(0*prop(t_m_s)));
     1865        temp:                                eval(get(prop(turn_forward_7,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1866        temp:                                eval(get(prop(turn_forward_7,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1867        temp:                                eval(get(prop(turn_forward_7,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1868        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1869}
     1870way[prop(turn_matrix_scaling,"Lane_Forward_7")>0]::Lane_Turn_M3_Forward_7
     1871{
     1872        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_7");
     1873        offset:                          eval(prop(offset,"Lane_Forward_7")-(3*prop(t_m_s)));
     1874        temp:                                eval(get(prop(turn_forward_7,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1875        temp:                                eval(get(prop(turn_forward_7,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1876        temp:                                eval(get(prop(turn_forward_7,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1877        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1878}
     1879
     1880way[prop(turn_matrix_scaling,"Lane_Forward_8")>0]::Lane_Turn_M1_Forward_8
     1881{
     1882        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_8");
     1883        offset:                          eval(prop(offset,"Lane_Forward_8")+(3*prop(t_m_s)));
     1884        temp:                                eval(get(prop(turn_forward_8,"default"),0));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1885        temp:                                eval(get(prop(turn_forward_8,"default"),1));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1886        temp:                                eval(get(prop(turn_forward_8,"default"),2)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1887        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1888}
     1889way[prop(turn_matrix_scaling,"Lane_Forward_8")>0]::Lane_Turn_M2_Forward_8
     1890{
     1891        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_8");
     1892        offset:                          eval(prop(offset,"Lane_Forward_8")+(0*prop(t_m_s)));
     1893        temp:                                eval(get(prop(turn_forward_8,"default"),3));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1894        temp:                                eval(get(prop(turn_forward_8,"default"),4));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1895        temp:                                eval(get(prop(turn_forward_8,"default"),5)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1896        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1897}
     1898way[prop(turn_matrix_scaling,"Lane_Forward_8")>0]::Lane_Turn_M3_Forward_8
     1899{
     1900        t_m_s:                   prop(turn_matrix_scaling,"Lane_Forward_8");
     1901        offset:                          eval(prop(offset,"Lane_Forward_8")-(3*prop(t_m_s)));
     1902        temp:                                eval(get(prop(turn_forward_8,"default"),6));  left-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1903        temp:                                eval(get(prop(turn_forward_8,"default"),7));              dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1904        temp:                                eval(get(prop(turn_forward_8,"default"),8)); right-casing-dashes:   eval(list(0,get(prop(temp),0)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),4)*prop(t_m_s)));
     1905        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1906}
     1907
     1908/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1909/* Backward lanes                                                                                                                                  */
     1910/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     1911way[prop(turn_matrix_scaling,"Lane_Backward_1")>0]::Lane_Turn_M1_Backward_1
     1912{
     1913        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_1");
     1914        offset:                           eval(prop(offset,"Lane_Backward_1")+(3*prop(t_m_s)));
     1915        temp:                                 eval(get(prop(turn_backward_1,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1916        temp:                                 eval(get(prop(turn_backward_1,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1917        temp:                                 eval(get(prop(turn_backward_1,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1918        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1919}
     1920way[prop(turn_matrix_scaling,"Lane_Backward_1")>0]::Lane_Turn_M2_Backward_1
     1921{
     1922        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_1");
     1923        offset:                           eval(prop(offset,"Lane_Backward_1")+(0*prop(t_m_s)));
     1924        temp:                                 eval(get(prop(turn_backward_1,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1925        temp:                                 eval(get(prop(turn_backward_1,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1926        temp:                                 eval(get(prop(turn_backward_1,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1927        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1928}
     1929way[prop(turn_matrix_scaling,"Lane_Backward_1")>0]::Lane_Turn_M3_Backward_1
     1930{
     1931        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_1");
     1932        offset:                           eval(prop(offset,"Lane_Backward_1")-(3*prop(t_m_s)));
     1933        temp:                                 eval(get(prop(turn_backward_1,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1934        temp:                                 eval(get(prop(turn_backward_1,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1935        temp:                                 eval(get(prop(turn_backward_1,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1936        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1937}
     1938
     1939way[prop(turn_matrix_scaling,"Lane_Backward_2")>0]::Lane_Turn_M1_Backward_2
     1940{
     1941        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_2");
     1942        offset:                           eval(prop(offset,"Lane_Backward_2")+(3*prop(t_m_s)));
     1943        temp:                                 eval(get(prop(turn_backward_2,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1944        temp:                                 eval(get(prop(turn_backward_2,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1945        temp:                                 eval(get(prop(turn_backward_2,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1946        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1947}
     1948way[prop(turn_matrix_scaling,"Lane_Backward_2")>0]::Lane_Turn_M2_Backward_2
     1949{
     1950        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_2");
     1951        offset:                           eval(prop(offset,"Lane_Backward_2")+(0*prop(t_m_s)));
     1952        temp:                                 eval(get(prop(turn_backward_2,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1953        temp:                                 eval(get(prop(turn_backward_2,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1954        temp:                                 eval(get(prop(turn_backward_2,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1955        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1956}
     1957way[prop(turn_matrix_scaling,"Lane_Backward_2")>0]::Lane_Turn_M3_Backward_2
     1958{
     1959        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_2");
     1960        offset:                           eval(prop(offset,"Lane_Backward_2")-(3*prop(t_m_s)));
     1961        temp:                                 eval(get(prop(turn_backward_2,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1962        temp:                                 eval(get(prop(turn_backward_2,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1963        temp:                                 eval(get(prop(turn_backward_2,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1964        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1965}
     1966
     1967way[prop(turn_matrix_scaling,"Lane_Backward_3")>0]::Lane_Turn_M1_Backward_3
     1968{
     1969        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_3");
     1970        offset:                           eval(prop(offset,"Lane_Backward_3")+(3*prop(t_m_s)));
     1971        temp:                                 eval(get(prop(turn_backward_3,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1972        temp:                                 eval(get(prop(turn_backward_3,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1973        temp:                                 eval(get(prop(turn_backward_3,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1974        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1975}
     1976way[prop(turn_matrix_scaling,"Lane_Backward_3")>0]::Lane_Turn_M2_Backward_3
     1977{
     1978        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_3");
     1979        offset:                           eval(prop(offset,"Lane_Backward_3")+(0*prop(t_m_s)));
     1980        temp:                                 eval(get(prop(turn_backward_3,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1981        temp:                                 eval(get(prop(turn_backward_3,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1982        temp:                                 eval(get(prop(turn_backward_3,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1983        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1984}
     1985way[prop(turn_matrix_scaling,"Lane_Backward_3")>0]::Lane_Turn_M3_Backward_3
     1986{
     1987        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_3");
     1988        offset:                           eval(prop(offset,"Lane_Backward_3")-(3*prop(t_m_s)));
     1989        temp:                                 eval(get(prop(turn_backward_3,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1990        temp:                                 eval(get(prop(turn_backward_3,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1991        temp:                                 eval(get(prop(turn_backward_3,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     1992        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     1993}
     1994
     1995way[prop(turn_matrix_scaling,"Lane_Backward_4")>0]::Lane_Turn_M1_Backward_4
     1996{
     1997        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_4");
     1998        offset:                           eval(prop(offset,"Lane_Backward_4")+(3*prop(t_m_s)));
     1999        temp:                                 eval(get(prop(turn_backward_4,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2000        temp:                                 eval(get(prop(turn_backward_4,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2001        temp:                                 eval(get(prop(turn_backward_4,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2002        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2003}
     2004way[prop(turn_matrix_scaling,"Lane_Backward_4")>0]::Lane_Turn_M2_Backward_4
     2005{
     2006        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_4");
     2007        offset:                           eval(prop(offset,"Lane_Backward_4")+(0*prop(t_m_s)));
     2008        temp:                                 eval(get(prop(turn_backward_4,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2009        temp:                                 eval(get(prop(turn_backward_4,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2010        temp:                                 eval(get(prop(turn_backward_4,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2011        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2012}
     2013way[prop(turn_matrix_scaling,"Lane_Backward_4")>0]::Lane_Turn_M3_Backward_4
     2014{
     2015        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_4");
     2016        offset:                           eval(prop(offset,"Lane_Backward_4")-(3*prop(t_m_s)));
     2017        temp:                                 eval(get(prop(turn_backward_4,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2018        temp:                                 eval(get(prop(turn_backward_4,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2019        temp:                                 eval(get(prop(turn_backward_4,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2020        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2021}
     2022
     2023way[prop(turn_matrix_scaling,"Lane_Backward_5")>0]::Lane_Turn_M1_Backward_5
     2024{
     2025        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_5");
     2026        offset:                           eval(prop(offset,"Lane_Backward_5")+(3*prop(t_m_s)));
     2027        temp:                                 eval(get(prop(turn_backward_5,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2028        temp:                                 eval(get(prop(turn_backward_5,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2029        temp:                                 eval(get(prop(turn_backward_5,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2030        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2031}
     2032way[prop(turn_matrix_scaling,"Lane_Backward_5")>0]::Lane_Turn_M2_Backward_5
     2033{
     2034        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_5");
     2035        offset:                           eval(prop(offset,"Lane_Backward_5")+(0*prop(t_m_s)));
     2036        temp:                                 eval(get(prop(turn_backward_5,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2037        temp:                                 eval(get(prop(turn_backward_5,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2038        temp:                                 eval(get(prop(turn_backward_5,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2039        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2040}
     2041way[prop(turn_matrix_scaling,"Lane_Backward_5")>0]::Lane_Turn_M3_Backward_5
     2042{
     2043        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_5");
     2044        offset:                           eval(prop(offset,"Lane_Backward_5")-(3*prop(t_m_s)));
     2045        temp:                                 eval(get(prop(turn_backward_5,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2046        temp:                                 eval(get(prop(turn_backward_5,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2047        temp:                                 eval(get(prop(turn_backward_5,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2048        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2049}
     2050
     2051way[prop(turn_matrix_scaling,"Lane_Backward_6")>0]::Lane_Turn_M1_Backward_6
     2052{
     2053        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_6");
     2054        offset:                           eval(prop(offset,"Lane_Backward_6")+(3*prop(t_m_s)));
     2055        temp:                                 eval(get(prop(turn_backward_6,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2056        temp:                                 eval(get(prop(turn_backward_6,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2057        temp:                                 eval(get(prop(turn_backward_6,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2058        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2059}
     2060way[prop(turn_matrix_scaling,"Lane_Backward_6")>0]::Lane_Turn_M2_Backward_6
     2061{
     2062        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_6");
     2063        offset:                           eval(prop(offset,"Lane_Backward_6")+(0*prop(t_m_s)));
     2064        temp:                                 eval(get(prop(turn_backward_6,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2065        temp:                                 eval(get(prop(turn_backward_6,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2066        temp:                                 eval(get(prop(turn_backward_6,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2067        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2068}
     2069way[prop(turn_matrix_scaling,"Lane_Backward_6")>0]::Lane_Turn_M3_Backward_6
     2070{
     2071        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_6");
     2072        offset:                           eval(prop(offset,"Lane_Backward_6")-(3*prop(t_m_s)));
     2073        temp:                                 eval(get(prop(turn_backward_6,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2074        temp:                                 eval(get(prop(turn_backward_6,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2075        temp:                                 eval(get(prop(turn_backward_6,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2076        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2077}
     2078
     2079way[prop(turn_matrix_scaling,"Lane_Backward_7")>0]::Lane_Turn_M1_Backward_7
     2080{
     2081        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_7");
     2082        offset:                           eval(prop(offset,"Lane_Backward_7")+(3*prop(t_m_s)));
     2083        temp:                                 eval(get(prop(turn_backward_7,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2084        temp:                                 eval(get(prop(turn_backward_7,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2085        temp:                                 eval(get(prop(turn_backward_7,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2086        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2087}
     2088way[prop(turn_matrix_scaling,"Lane_Backward_7")>0]::Lane_Turn_M2_Backward_7
     2089{
     2090        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_7");
     2091        offset:                           eval(prop(offset,"Lane_Backward_7")+(0*prop(t_m_s)));
     2092        temp:                                 eval(get(prop(turn_backward_7,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2093        temp:                                 eval(get(prop(turn_backward_7,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2094        temp:                                 eval(get(prop(turn_backward_7,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2095        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2096}
     2097way[prop(turn_matrix_scaling,"Lane_Backward_7")>0]::Lane_Turn_M3_Backward_7
     2098{
     2099        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_7");
     2100        offset:                           eval(prop(offset,"Lane_Backward_7")-(3*prop(t_m_s)));
     2101        temp:                                 eval(get(prop(turn_backward_7,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2102        temp:                                 eval(get(prop(turn_backward_7,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2103        temp:                                 eval(get(prop(turn_backward_7,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2104        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2105}
     2106
     2107way[prop(turn_matrix_scaling,"Lane_Backward_8")>0]::Lane_Turn_M1_Backward_8
     2108{
     2109        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_8");
     2110        offset:                           eval(prop(offset,"Lane_Backward_8")+(3*prop(t_m_s)));
     2111        temp:                                 eval(get(prop(turn_backward_8,"default"),8));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2112        temp:                                 eval(get(prop(turn_backward_8,"default"),7));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2113        temp:                                 eval(get(prop(turn_backward_8,"default"),6)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2114        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2115}
     2116way[prop(turn_matrix_scaling,"Lane_Backward_8")>0]::Lane_Turn_M2_Backward_8
     2117{
     2118        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_8");
     2119        offset:                           eval(prop(offset,"Lane_Backward_8")+(0*prop(t_m_s)));
     2120        temp:                                 eval(get(prop(turn_backward_8,"default"),5));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2121        temp:                                 eval(get(prop(turn_backward_8,"default"),4));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2122        temp:                                 eval(get(prop(turn_backward_8,"default"),3)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2123        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2124}
     2125way[prop(turn_matrix_scaling,"Lane_Backward_8")>0]::Lane_Turn_M3_Backward_8
     2126{
     2127        t_m_s:                    prop(turn_matrix_scaling,"Lane_Backward_8");
     2128        offset:                           eval(prop(offset,"Lane_Backward_8")-(3*prop(t_m_s)));
     2129        temp:                                 eval(get(prop(turn_backward_8,"default"),2));  left-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2130        temp:                                 eval(get(prop(turn_backward_8,"default"),1));              dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2131        temp:                                 eval(get(prop(turn_backward_8,"default"),0)); right-casing-dashes:   eval(list(0,get(prop(temp),4)*prop(t_m_s),get(prop(temp),3)*prop(t_m_s),get(prop(temp),2)*prop(t_m_s),get(prop(temp),1)*prop(t_m_s),get(prop(temp),0)*prop(t_m_s)));
     2132        color: white; left-casing-color: white; right-casing-color: white; width: prop(t_m_s); left-casing-width: eval(prop(t_m_s)); right-casing-width: eval(prop(t_m_s));
     2133}
     2134
     2135/***************************************************************************************************************************************************/
     2136/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2137/* Additional attributes/features                                                                                                                  */
     2138/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2139/***************************************************************************************************************************************************/
     2140/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2141/* Proposed man_made=bridge                                                                                                                        */
     2142/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2143area[man_made=bridge]
     2144{
     2145    fill-color: #808080;
     2146    fill-opacity: 0.5;
     2147    color: #404DA0;
     2148    width: 5;
     2149}
     2150
     2151/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2152/* Street lamp                                                                                                                                     */
     2153/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2154node|z17-[highway="street_lamp"]::Street_lamp_1
     2155{
     2156    symbol-shape: circle;
     2157    symbol-size: eval(12 * prop(pixel_per_metre,"default"));
     2158    symbol-fill-color: white;
     2159    symbol-fill-opacity: 0.2;
     2160}
     2161node|z17-[highway="street_lamp"]::Street_lamp_2
     2162{
     2163    symbol-shape: circle;
     2164    symbol-size: eval(18 * prop(pixel_per_metre,"default"));
     2165    symbol-fill-color: white;
     2166    symbol-fill-opacity: 0.15;
     2167}
     2168node|z17-[highway="street_lamp"]::Street_lamp_3
     2169{
     2170    symbol-shape: circle;
     2171    symbol-size: eval(25 * prop(pixel_per_metre,"default"));
     2172    symbol-fill-color: white;
     2173    symbol-fill-opacity: 0.1;
     2174}
     2175
     2176/***************************************************************************************************************************************************/
     2177/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2178/* Check for some common errors                                                                                                                    */
     2179/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     2180/***************************************************************************************************************************************************/
     2181way{} /* Why-oh-why do I need this.... */
     2182way[prop(style_show_disputed)][maxspeed][!"source:maxspeed"]            { data_warning: "source:maxspeed=?"; }
     2183way[oneway=true], way[oneway=1]                 { data_error:   "use oneway=yes"; }
     2184way["lanes:turnright"], way["lanes:turnleft"],
     2185way["lanes:through"], way["lanes:merge"],
     2186way["lanes:turnright:forward"], way["lanes:turnleft:forward"],
     2187way["lanes:through:forward"], way["lanes:merge:forward"],       
     2188way["lanes:turnright:backward"], way["lanes:turnleft:backward"],
     2189way["lanes:through:backward"], way["lanes:merge:backward"]     
     2190                                                { data_error:   "lanes:<turn> rejected"; }
     2191way[is_prop_set(data_warning)][prop(style_show_warnings)=yes]
     2192{
     2193    casing-width: 4;
     2194    casing-color: yellow;
     2195    text: eval(prop(data_warning));
     2196    font-size: 12;
     2197    text-halo-radius: 1;
     2198}
     2199way[is_prop_set(data_error)][prop(style_show_errors)=yes]
     2200{
     2201    casing-width: 5;
     2202    casing-color: red;
     2203    text: eval(prop(data_error));
     2204    font-size: 14;
     2205    text-halo-radius: 1;
     2206}
     2207
     2208
     2209
     2210}}}