Changes between Initial Version and Version 1 of Eo:Help/Styles/MapCSSImplementation


Ignore:
Timestamp:
2025-03-10T10:47:25+01:00 (9 months ago)
Author:
paleid
Comment:

Eo added

Legend:

Unmodified
Added
Removed
Modified
  • Eo:Help/Styles/MapCSSImplementation

    v1 v1  
     1[[TranslatedPages(revision=268)]]
     2[[PageOutline(2-10,Enhavtabelo)]]
     3= MapCSS-Implementado =
     4La implementado de JOSM de [osmwiki:MapCSS/0.2 MapCSS] estas uzata por la sekvaj trajtoj:
     5
     6* [wikitr:/Styles Mapaj stiloj]
     7* [wikitr:/Rules Validator reguloj], vidu [wikitr:/Help/Validator/MapCSSTagChecker MapCSS-etikedokontrolilo] por la speciala parto nur por reguloj.
     8* [wikitr:/Help/Action/Search Serĉa dialogo]
     9
     10Konsideru instali la [https://marketplace.visualstudio.com/items?itemName=whammo.mapcss-syntax MapCSS-Sintaksa Kolorigilo] en VS Code por aldoni videblan kolorigon por MapCSS-pentrado kaj validatora sintakso.
     11
     12== Ĝenerala Strukturo ==
     13MapCSS-stilfolio havas regulojn de la formo
     14{{{
     15#!mapcss
     16elektilo {
     17    prop: valoro;
     18    /* ... */
     19    prop: valoro;
     20    /* kaj/aŭ */
     21    set: klaso;
     22    set: .klaso;
     23    /* notu ke validatoraj reguloj ne uzas la dupunkton post set */
     24}
     25}}}
     26La algoritmo por trovi la stilojn por donita objekto estas jena:
     27{{{
     28 - por ĉiu regulo:
     29     se la elektilo aplikeblas, agordu la propraĵojn el la { } bloko
     30 - analizu la finan liston de propraĵoj kaj generu stilojn el ĝi
     31}}}
     32
     33MapCSS uzas la '''komentan''' formaton de CSS (`/* ... */`). Notu ke kiam vi komentas grandajn partojn de MapCSS-dosiero, iuj konstruoj povas kaŭzi neatenditan finon de la komento, ekzemple:
     34{{{
     35#!mapcss
     36/*
     37*[highway][name =~ /^R(\.|:)? .*/] { /* la fino de la regula esprimo difinas la neatenditan finon de la komento */
     38        throwWarning: tr("foo");
     39}
     40*/
     41}}}
     42
     43== Elektiloj == #Elektiloj
     44''Elektiloj'' indikas la filtrajn esprimojn de MapCSS-regulo. La regulo estas aplikata nur al mapobjekto, se ĝiaj elektiloj kongruas kun la objekto.
     45
     46Elektiloj en MapCSS estas malsamaj de la norma CSS por la reto. MapCSS nur subtenas subaron de la normaj CSS-elektiloj, sed etendas ilin per aldonaĵoj necesaj por OSM-datumoj.
     47
     48Iuj bazaj ekzemploj:
     49{{{
     50#!mapcss
     51/* aplikata al vojoj kun etikedo highway=residential */
     52way[highway=residential] {  /*  la stiloj */}
     53
     54/* aplikata al novaj, fermitaj vojoj sur tavolo 1, kondiĉe ke ili havas la etikedojn amenity=parking kaj access=customers, kaj kondiĉe
     55 * ke la zoma nivelo estas inter 11 kaj 14
     56 */
     57way|z11-14[amenity=parking][access=customers]:closed:new::layer_1 {...}
     58
     59
     60area[amenity=parking][access=customers], area[amenity=parking][!access] {...}
     61relation[type=route][route=foot] > way::relation_underlay {..}
     62}}}
     63
     64
     65La malsamaj elementoj ('''tipo'''-, '''zomo'''- , '''kondiĉo''' elektilo, '''pseŭdoklasoj''', '''tavolo-identigilo''', '''grupiĝo''' kaj '''infana kombinatoro''') estas klarigitaj sube.
     66
     67
     68=== Tipo-elektilo ===
     69{{{#!th valign=top
     70'''Elektilo'''
     71}}}
     72{{{#!th valign=top
     73'''Priskribo'''
     74}}}
     75|-------------------------------------------------------------------------------
     76{{{#!td align=center  valign=top
     77*
     78}}}
     79{{{#!td align=left  valign=top   
     80Kongruas kun iu ajn objekto
     81}}}
     82|-------------------------------------------------------------------------------
     83{{{#!td align=center  valign=top
     84`node`, `way`, `relation`
     85}}}
     86{{{#!td align=left  valign=top   
     87Kongruas kun la OSM-objektoj de la donita tipo.
     88}}}
     89|-------------------------------------------------------------------------------
     90{{{#!td align=center  valign=top
     91`area`
     92}}}
     93{{{#!td align=left  valign=top   
     94Kongruas kun iu ajn areo sendepende de tio, ĉu la areo-rando estas modelita nur per unu vojo aŭ per aro de vojoj kunigitaj per rilato.
     95{{{
     96#!mapcss
     97area[natural=beach] {...}
     98/* ... egalas al ... */
     99way[natural=beach], relation[type=multipolygon][natural=beach] {...}
     100}}}
     101Notu ke `area` elektas ankaŭ nefermitajn vojojn, do povas esti utile aldoni la `:closed` pseŭdoklason. La JOSM-Validilo donos averton por nefermitaj vojoj, kiuj havas arean stilon.
     102}}}
     103|-------------------------------------------------------------------------------
     104{{{#!td align=center  valign=top
     105`meta`
     106}}}
     107{{{#!td align=left  valign=top   
     108La `meta` elektilo komencas specialan regulon, kiu devus stari ĉe la komenco de la dosiero. Ĝi donas iujn ĝeneralajn informojn pri la stila folio. Ĉiu programaro, kiu subtenas MapCSS, devus povi analizi ĉi tiujn sekciojn sen eraroj, do ne uzu ekzotajn sintaksajn etendaĵojn en ĉi tiu parto.
     109{{{
     110#!mapcss
     111meta {
     112    title: "Parking lanes";   /* titolo montrata en la menuo */
     113    icon: "logo_16x16x8.png"; /* malgranda ikono montrata en la menuo apud la titolo */
     114    version: "1.2";           /* la versio de la stilo */
     115    description: "...";       /* unu aŭ du frazoj priskribantaj la stilon */
     116    author: "...";            /* la aŭtoro(j) de la stilo */
     117    link: "https://...";      /* URL al la retpaĝo de la stilo */
     118    min-josm-version: 6789;   /* la minimuma JOSM-versio, kie ĉi tiu stilo funkcias */
     119}
     120}}}
     121}}}
     122|-------------------------------------------------------------------------------
     123{{{#!td align=center  valign=top
     124`canvas`
     125}}}
     126{{{#!td align=left  valign=top   
     127Iuj stilaj informoj ne specifaj al nodoj, vojoj aŭ rilatoj.
     128{{{
     129#!mapcss
     130canvas {
     131    fill-color: #ffffea; /* la antaŭa background-color estas malrekomendita ekde r7110 */
     132    default-points: false;
     133    default-lines: false;
     134}
     135}}}
     136{{{#!th
     137'''Ŝlosilo'''
     138}}}
     139{{{#!th
     140'''Priskribo'''
     141}}}
     142{{{#!th
     143'''Valora Formato'''
     144}}}
     145{{{#!th
     146'''Defaŭlta Valoro'''
     147}}}
     148|-
     149{{{#!td align=center
     150`fill-color`
     151}}}
     152{{{#!td
     153Specifas la ĝeneralan plenigan/fonan koloron (`background-color` estas malrekomendita ekde r7110).
     154}}}
     155{{{#!td align=center
     156''Koloro''
     157}}}
     158{{{#!td align=center
     159`black`
     160}}}
     161|-
     162{{{#!td align=center
     163`default-points`
     164}}}
     165{{{#!td
     166Ĉu defaŭlta punkta stilo devus esti aldonita al nodoj, kie neniu stilo aplikeblas.
     167}}}
     168{{{#!td align=center
     169''Bulea''
     170}}}
     171{{{#!td align=center
     172`true`
     173}}}
     174|-
     175{{{#!td align=center
     176`default-lines`
     177}}}
     178{{{#!td
     179Ĉu defaŭlta linia stilo devus esti aldonita al vojoj, kie neniu stilo aplikeblas.
     180}}}
     181{{{#!td align=center
     182''Bulea''
     183}}}
     184{{{#!td align=center
     185`true`
     186}}}
     187}}}
     188
     189=== Infana Elektilo ===
     190Se nodo estas parto de vojo, ni diras, ke ĝi estas ''infano'' de ĉi tiu vojo. Simile, se nodo, vojo aŭ rilato estas membro de rilato, ni diras, ke ĝi estas ''infano'' de ĉi tiu rilato.
     191
     192En MapCSS vi povas uzi '''infanan elektilon''', kiu kongruas nur se ambaŭ la patro kaj la infana objekto kongruas.
     193
     194Ekzemplo:
     195{{{
     196#!mapcss
     197/*
     198 * nur kongruas por vojo, kiu estas infano de rilato kun etikedoj
     199 * type=route kaj route=foot
     200 */
     201relation[type=route][route=foot] > way {...}
     202}}}
     203
     204Notoj:
     205* Zomo-elektilo kaj Tavolo-identigilo estas nur gravaj por la parto dekstre de la > signo.
     206* La funkcioj ''prop()'' kaj ''is_prop_set()'' estas nur subtenataj dekstre de la > signo.
     207* La funkcioj ''parent_tag'' kaj ''parent_tags'' (vidu sube) povas esti uzataj por aliri etikedojn de la patro(j).
     208* Por kongrueco kun la MapCSS 0.2-standardo, `relation[type=route][route=foot] way {/*...*/}`, sen la pli-granda-ol-signo `>` estas subtenata ankaŭ. Tamen, neniu [#LinkSelector Ligila Elektilo] povas esti specifita en ĉi tiu kazo.
     209
     210=== Patra Elektilo ===
     211Krom infanaj elektiloj, JOSM subtenas la nocion de '''patra elektilo'''. Notu, ke patraj elektiloj estas JOSM-specifa etendaĵo de MapCSS, kiu ne ekzistas en aliaj MapCSS-implementoj.
     212
     213Simile al infana elektilo, patra elektilo kongruas nur se ambaŭ la patro kaj la infana objekto kongruas. Kontraste al la infana elektilo, la karaktero < estas uzata.
     214
     215Kontraste al la infana elektilo, la patra objekto estos "elektita". Alivorte, la propraĵoj en la `{{{...}}}`-Deklara Bloko aplikiĝas al la objekto dekstre de la "<" signo.
     216
     217Ekzemplo:
     218{{{
     219#!mapcss
     220/*
     221 * kongruas por vojo kun etikedo highway, kiu havas almenaŭ unu nodon kun etikedo traffic_calming=*
     222 */
     223node[traffic_calming] < way[highway] {...}
     224}}}
     225
     226=== Kondiĉa Elektilo ===
     227Elektiloj povas inkluzivi aron de kondiĉoj. Se iu el ĉi tiuj kondiĉoj taksas al malvera, la elektilo ne kongruas kaj la stila regulo ne estas aplikata.
     228
     229'''Atributa kondiĉo''' specifas kondiĉon sur etikedo de OSM-objekto.
     230
     231[=#condition_selector_operators]
     232{{{#!th valign=top
     233'''Operacilo'''
     234}}}
     235{{{#!th valign=top
     236'''Priskribo'''
     237}}}
     238{{{#!th valign=top
     239'''Ekzemplo'''
     240}}}
     241|-------------------------------------------------------------------------------
     242{{{#!td align=center valign=top
     243`=`
     244}}}
     245{{{#!td align=left valign=top
     246Ekzakta kongruo de la valoro.
     247}}}
     248{{{#!td align=left valign=top
     249{{{
     250#!mapcss
     251way[highway=residential]                    /* estas usklecodistinga, t.e. NE kongruas ekz. kun highway=Residential aŭ Highway=residential   */
     252node[name="My name"]                        /* uzu citilojn, se la ŝlosilo aŭ valoro inkluzivas spacojn                                               */
     253node["name:pl"="Królewiec"]                 /* uzu citilojn, se la ŝlosilo aŭ valoro inkluzivas specialajn signojn kiel dupunktoj aŭ unikodaj signoj */
     254}}}
     255}}}
     256|-------------------------------------------------------------------------------
     257{{{#!td align=center valign=top
     258`!=`
     259}}}
     260{{{#!td align=left valign=top
     261Valoro ne egalas
     262}}}
     263{{{#!td align=left valign=top
     264{{{
     265#!mapcss
     266way[highway!=residential]
     267node[name!="My name"]
     268node["name:pl"!="Królewiec"]
     269}}}
     270}}}
     271|-------------------------------------------------------------------------------
     272{{{#!td align=center valign=top
     273`<`, `>`, `<=`, `>=`
     274}}}
     275{{{#!td align=left valign=top
     276Komparo por nombraj valoroj.
     277
     278}}}
     279{{{#!td align=left valign=top
     280{{{
     281#!mapcss
     282node[population >= 50000]                   /* loĝantaro pli granda ol aŭ egala al 50000 */
     283node[ele = 3000]                            /* alteco kun ekzakte 3000 metroj        */
     284}}}
     285}}}
     286|-------------------------------------------------------------------------------
     287{{{#!td align=center valign=top
     288`^=`
     289}}}
     290{{{#!td align=left valign=top
     291Prefiksa kongruo
     292}}}
     293{{{#!td align=left valign=top
     294{{{
     295#!mapcss
     296node[name ^= "myprefix"]                    /* valoro komenciĝas per 'myprefix' */
     297}}}
     298}}}
     299|-------------------------------------------------------------------------------
     300{{{#!td align=center valign=top
     301`$=`
     302}}}
     303{{{#!td align=left valign=top
     304Sufiksa kongruo
     305}}}
     306{{{#!td align=left valign=top
     307{{{
     308#!mapcss
     309node[name $= "mypostfix"]                   /* valoro finiĝas per 'mypostfix' */
     310}}}
     311}}}
     312|-----------------------------------------------
     313{{{#!td align=center valign=top
     314`*=`
     315}}}
     316{{{#!td align=left valign=top
     317Subĉena kongruo
     318}}}
     319{{{#!td align=left valign=top
     320{{{
     321#!mapcss
     322node[name *= "my substring"]                 /* valoro enhavas la subĉenon 'my substring' */
     323}}}
     324}}}
     325|-------------------------------------------------------------------------------
     326{{{#!td align=center valign=top
     327`~=`
     328}}}
     329{{{#!td align=left valign=top
     330Lista membreco
     331}}}
     332{{{#!td align=left valign=top
     333{{{
     334#!mapcss
     335*[vending~=stamps]                          /* la etikeda valoro por la etikedo 'vending' konsistas el listo de ;-apartigitaj valoroj */
     336                                            /* kaj unu el ĉi tiuj valoroj estas 'stamps'                                          */
     337}}}
     338}}}
     339|-------------------------------------------------------------------------------
     340{{{#!td align=center valign=top
     341`=~`
     342}}}
     343{{{#!td align=left valign=top
     344[https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html#sum Regula esprimo] kongruo
     345
     346}}}
     347{{{#!td align=left valign=top
     348{{{
     349#!mapcss
     350*[name=~/^My_pattern.*/]                    /* la valoro de la etikedo 'name' kongruas kun la regula esprimo '^My_pattern.*' */
     351                                            /* Notu, ke regulaj esprimoj devas esti ĉirkaŭitaj per /.../                     */
     352}}}
     353Uskleco-sentiva kongruo povas esti ebligita per la enigita flago-esprimo `(?i)` (vidu [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html#CASE_INSENSITIVE Pattern.CASE_INSENSITIVE]).
     354{{{
     355#!mapcss
     356*[name =~ /^(?i)(parking)$/]                 /* kongruas kun parking, Parking, PARKING, PaRkInG,...      */
     357*[name =~ /^(?U)(\p{Lower})+$/]              /* nomo konsistas nur el minusklaj unikodaj signoj */
     358}}}
     359}}}
     360|-------------------------------------------------------------------------------
     361{{{#!td align=center valign=top
     362`!~` (ekde r6455)
     363}}}
     364{{{#!td align=left valign=top
     365negita [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html#sum Regula esprimo] kongruo
     366
     367}}}
     368{{{#!td align=left valign=top
     369{{{
     370#!mapcss
     371*[surface!~/paved|unpaved/]
     372}}}
     373}}}
     374|-------------------------------------------------------------------------------
     375{{{#!td align=center valign=top
     376`∈` ([https://www.fileformat.info/info/unicode/char/2208/index.htm U+2208], ekde r6609)
     377}}}
     378{{{#!td align=left valign=top
     379elemento de
     380
     381Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) enhavas almenaŭ unu elementon, kiu kongruas kun la maldekstra(j) elektilo(j).
     382}}}
     383{{{#!td align=left valign=top
     384{{{
     385#!mapcss
     386*[amenity=parking] ∈ area[amenity=parking] {
     387  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
     388}
     389}}}
     390Trovas areojn kun `amenity=parking`, kiuj enhavas almenaŭ unu nodon aŭ areon kun `amenity=parking`. Ekde r15064 ĉi tiu regulo produktas unu averton por ĉiu elemento maldekstre, kiam estas multaj kongruoj.
     391}}}
     392|-------------------------------------------------------------------------------
     393{{{#!td align=center valign=top
     394`⊆` ([https://www.fileformat.info/info/unicode/char/2286/index.htm U+2286], ekde r15102)
     395}}}
     396{{{#!td align=left valign=top
     397Subaro de aŭ Egala Al
     398
     399Sinonimo por `∈`.
     400}}}
     401{{{#!td align=left valign=top
     402{{{
     403#!mapcss
     404*[amenity=parking] ⊆ area[amenity=parking] {
     405  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
     406}
     407}}}
     408
     409}}}
     410|-------------------------------------------------------------------------------
     411{{{#!td align=center valign=top
     412`⊇` ([https://www.fileformat.info/info/unicode/char/2287/index.htm U+2287], ekde r15102)
     413}}}
     414{{{#!td align=left valign=top
     415Superaro de aŭ Egala Al
     416
     417Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj estas enhavata en unu aŭ pli da elementoj, kiuj kongruas kun la maldekstra(j) elektilo(j).
     418}}}
     419{{{#!td align=left valign=top
     420{{{
     421#!mapcss
     422area[amenity=parking] ⊇ *[amenity=parking]
     423}}}
     424trovas nodojn aŭ areojn kun `amenity=parking` ene de areoj kun `amenity=parking`. Malpli rapida ol `⊆` kaj tial ne utila en validatoraj reguloj, sed povas esti utila en la serĉa dialogo.
     425}}}
     426|-------------------------------------------------------------------------------
     427{{{#!td align=center valign=top
     428`⊈` ([https://www.fileformat.info/info/unicode/char/2288/index.htm U+2288], ekde r15102)
     429}}}
     430{{{#!td align=left valign=top
     431Nek Subaro de nek Egala Al
     432
     433Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj ne enhavas iun ajn elementon, kiu kongruas kun la maldekstra(j) elektilo(j).
     434}}}
     435{{{#!td align=left valign=top
     436{{{
     437#!mapcss
     438*[highway=street_lamp] ⊈ area:closed2[amenity=parking][lit=yes]
     439}}}
     440trovas areojn amenity=parking, kiuj havas lit=yes sed ne enhavas lampon. Ĉiam aldonu `:closed2` por eviti falsajn pozitivojn, ĉar nefermitaj areoj neniam enhavas ion.
     441}}}
     442|-------------------------------------------------------------------------------
     443{{{#!td align=center valign=top
     444`⊉` ([https://www.fileformat.info/info/unicode/char/2289/index.htm U+2289], ekde r15102)
     445}}}
     446{{{#!td align=left valign=top
     447Nek Superaro de nek Egala Al
     448
     449Kongruas kiam objekto kongruas kun la dekstra(j) elektilo(j) kaj ne estas enhavata en iu ajn areo, kiu kongruas kun la maldekstra(j) elektilo(j).
     450}}}
     451{{{#!td align=left valign=top
     452{{{
     453#!mapcss
     454area[landuse=residential] ⊉ *[building]
     455}}}
     456trovas konstruaĵojn, kiuj ne estas ene de iu ajn landuse=residential areo. Notu, ke ĉi tiu operacilo verŝajne produktos falsajn pozitivojn, kiam vi havas `landuse=residential`areojn, kiuj ne kongruas kun `:closed2`.
     457}}}
     458|-------------------------------------------------------------------------------
     459{{{#!td align=center valign=top
     460`⧉` ([https://www.fileformat.info/info/unicode/char/29c9/index.htm U+29C9], ekde r6613)
     461}}}
     462{{{#!td align=left valign=top
     463kruciĝo
     464}}}
     465{{{#!td align=left valign=top
     466{{{
     467#!mapcss
     468area:closed:areaStyle ⧉ area:closed:areaStyle {
     469  throwOther: tr("Overlapping Areas");
     470}
     471}}}
     472prenas `layer` etikedon en konsidero, se ĝi estas agordita (ekde r12986)
     473}}}
     474
     475Ekde r6554, eblas prefiksi la "valoron" (t.e., esprimon post la operacilo) per `*` por "malreferenci" ĝin (t.e., konsideri ĝin kiel alian ŝlosilon kaj akiri ĝian valoron). Tiel, `[key1 = *key2]` aŭ `[key1=*key2]` komparas la valoron de `key1` kun la valoro de `key2`, kaj `[key =~ */pattern/]` konsideras la valoron de la ŝlosilo `pattern` kiel regulan esprimon kaj kongruas ĝin kun la valoro de `key`.
     476
     477Krome, vi povas testi, ĉu etikedo estas ĉeesta aŭ ne:
     478
     479{{{#!th valign=top
     480'''Kondiĉo'''
     481}}}
     482{{{#!th valign=top
     483'''Ekzemplo'''
     484}}}
     485|-------------------------------------------------------------------------------
     486{{{#!td align=left  valign=top
     487Ĉeesto de etikedo
     488}}}
     489{{{#!td align=left  valign=top   
     490{{{
     491#!mapcss
     492way[highway]                     /* kongruas kun iu ajn vojo kun etikedo 'highway' (estas usklecodistinga)                                              */
     493way["name:fr"]                   /* uzu citilojn, se la etikednomo inkluzivas specialajn signojn (spacoj, dupunktoj, unikodaj signoj, ktp.) */
     494}}}
     495}}}
     496|-------------------------------------------------------------------------------
     497{{{#!td align=left  valign=top
     498Manke de etikedo
     499}}}
     500{{{#!td align=left  valign=top   
     501{{{
     502#!mapcss
     503way[!highway]                     /* kongruas kun iu ajn vojo, kiu ne havas etikedon 'highway' (estas usklecodistinga)                               */
     504way[!"name:fr"]                   /* uzu citilojn, se la etikednomo inkluzivas specialajn signojn (spacoj, dupunktoj, unikodaj signoj, ktp.) */
     505}}}
     506}}}
     507|-------------------------------------------------------------------------------
     508{{{#!td align=left  valign=top
     509Ĉeesto de etikedo per [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html#sum Regula esprimo] kongruo (ekde r6547)
     510}}}
     511{{{#!td align=left  valign=top   
     512{{{
     513#!mapcss
     514way[/^addr:/]                     /* kongruas kun iu ajn `addr:*` ŝlosilo */
     515}}}
     516}}}
     517|-------------------------------------------------------------------------------
     518{{{#!td align=left  valign=top
     519Manke de etikedo per Regula esprimo kongruo
     520}}}
     521{{{#!td align=left  valign=top   
     522{{{
     523#!mapcss
     524way[!/^addr:/]                    /* kongruas kun iu ajn vojo, kiu ne havas etikedon 'addr:*' */
     525}}}
     526}}}
     527
     528Vi povas testi, ĉu la valoro de etikedo estas logika vera valoro. La valoro estas taksata al vera, se ĝi estas aŭ
     529"jes", "vera", aŭ "1". Ĉiuj aliaj valoroj estas taksataj al malvera.
     530
     531{{{#!th valign=top
     532'''Kondiĉo'''
     533}}}
     534{{{#!th valign=top
     535'''Ekzemplo'''
     536}}}
     537|-------------------------------------------------------------------------------
     538{{{#!td align=left  valign=top
     539Testado por vera valoro
     540}}}
     541{{{#!td align=left  valign=top   
     542{{{
     543#!mapcss
     544way[oneway?]                   /* kongruas kun iu ajn vojo kun vera valoro en la etikedo 'oneway' */
     545}}}
     546}}}
     547|-------------------------------------------------------------------------------
     548{{{#!td align=left  valign=top
     549Testado por malvera valoro (ekde r6513)
     550}}}
     551{{{#!td align=left  valign=top   
     552{{{
     553#!mapcss
     554way[oneway?!]                  /* kongruas kun iu ajn vojo kun malvera valoro en la etikedo 'oneway' */
     555}}}
     556}}}
     557
     558=== Teritoria Elektilo === #TeritoriaElektilo
     559Vi povas testi, ĉu objekto situas ene aŭ ekster specifa teritorio. JOSM havas internan datumbazon por ĉi tio. La [source:/trunk/resources/data/boundaries.osm teritoria dosiero] povas esti elŝutita kaj malfermita en JOSM por esplori ĝin [attachment:boundaries.png (ekrankopio antaŭrigardo)]. Ĝi enhavas limojn de ĉiuj landoj de la mondo. Pro performaj kialoj la limoj estas simpligitaj. Ili povas esti rafinitaj por specialaj kazoj laŭ peto. La teritorioj estas "etikeditaj" per siaj [https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ISO_3166-1_alpha-2 kodoj]. Usono, Kanado, Ĉinio, Barato kaj Aŭstralio havas aldonaĵajn limojn por siaj subdividoj. Vidu la sekvajn ekzemplojn pri kiel uzi la teritoriajn elektilojn. Teritoriaj elektiloj estas malpli utilaj en mapaj stiloj kaj povas esti tre resurso-pezaj tie. Tamen ili estas multe pli utilaj por [wikitr:/Help/Validator/MapCSSTagChecker mapcss-bazitaj validatoraj reguloj]. Por elekti teritoriojn kun maldekstra-traflanko aŭ dekstra-traflanko, ekzistas pli simpla maniero, vidu [#PseudoClasses Pseŭdoklasoj]. Vidu #10387 por ĉefa implementado de ĉi tiu trajto.
     560
     561{{{
     562#!mapcss
     563                                      /* kongruas kun iu ajn nodo situanta …                             */
     564node[inside("FR")]                    /* … ene de Francio (inkluzivas la transmarajn teritoriojn) */
     565node[inside("FX")]                    /* … ene de Metropola Francio (t.e. nur la
     566                                         ĉeftera parto kun ĝiaj proksimaj insuloj inkluzive de Korsiko)   */
     567node[inside("EU")]                    /* … ene de la Eŭropa Unio                         */
     568node[inside("FR,DE")]                 /* … ene de Francio __AŬ__ ene de Germanio            */
     569node[inside("US-FL")]                 /* … ene de la usona ŝtato Florido                       */
     570
     571node[outside("FR")]                   /* … ekster Francio                                    */
     572node[outside("FR,DE")]                /* … ekster Francio __KAJ__ ekster Germanio         */
     573node[inside("US")][outside("US-FL")]  /* … ene de Usono krom la ŝtato Florido           */
     574}}}
     575
     576=== Ligila Elektilo ===#LigilaElektilo
     577En infana elektilo, vi povas formuli kondiĉojn pri la ligo inter patra kaj infana objekto.
     578
     579Se la patro estas rilato, vi povas formuli kondiĉojn por la ''rolo'', kiun membro-objekto havas en ĉi tiu rilato.
     580{{{
     581#!mapcss
     582relation[type=route] >[role="link"] way {  /* kongruas kun iu ajn vojo, kiu estas membro de voja rilato kun rolo 'link' */
     583   color: blue;
     584}
     585}}}
     586
     587{{{#!th valign=top
     588'''Operacilo'''
     589}}}
     590{{{#!th valign=top
     591'''Priskribo'''
     592}}}
     593{{{#!th valign=top
     594'''Ekzemplo'''
     595}}}
     596|-------------------------------------------------------------------------------
     597{{{#!td align=center  valign=top
     598`=`
     599}}}
     600{{{#!td align=left  valign=top   
     601Ekzakta kongruo de la rola nomo. La nomo `role` estas deviga en ĉi tiu kunteksto.
     602}}}
     603{{{#!td align=left  valign=top   
     604{{{
     605#!mapcss
     606relation >[role=residential] way           
     607relation >[role="My name"]   way           /* uzu citilojn, se la rola valoro inkluzivas spacojn aŭ aliajn specialajn signojn */
     608}}}
     609}}}
     610
     611La operaciloj `!=`, `^=`, `$=`, `*=` kaj `~=` estas subtenataj ankaŭ. Bonvolu referenci al [#condition_selector_operators kondiĉa elektilo-operaciloj].
     612
     613Nodoj en vojoj kaj membroj en rilatoj estas ordigitaj. Vi povas formuli kondiĉojn pri la pozicio de nodo en vojo aŭ membro-objekto en rilato. Pozitivaj nombroj kalkulas de la unua ĝis la lasta elemento, negativaj nombroj (ekde r8236) kalkulas de la lasta ĝis la unua elemento.
     614
     615{{{
     616#!mapcss
     617relation[type=route] >[index=1] way {  /* kongruas kun la unua vojo, kiu estas membro de voja rilato  */
     618   color: blue;
     619}
     620
     621way >[index=-1] node {  /* kongruas kun la lasta nodo de vojo  */
     622   symbol-stroke-color: green;
     623}
     624
     625way!:closed >[index=1] node!:connection,
     626way!:closed >[index=-1] node!:connection {  /* kongruas kun ĉiuj unuopaj finaj nodoj de vojo */
     627   symbol-stroke-color: green;
     628}
     629}}}
     630
     631=== Zomo-elektilo ===
     632Vi povas ornami tipan elektilon per '''zomo-elektilo'''. La zomo-elektilo limigas la gamon de zomaj niveloj, ĉe kiuj la respektiva MapCSS-regulo estas aplikata.
     633||= '''Ekzemplo 1''' =||= '''Ekzemplo 2''' =||= '''Ekzemplo 3''' =||= '''Priskribo''' =||
     634|| `way|z12 {...}` || `node|z12 {...}` || `node|z12[...] {...}` || Ĉe zoma nivelo 12 ||
     635|| `way|z13-15 {...}` || `node|z13-15 {...}` || `way|z13-15[...] {...}` ||De 13 ĝis 15 ||
     636|| `way|z16- {...}` || `node|z16- {...}` || `node|z16-[...] {...}` || 16 kaj pli ||
     637|| `way|z-12 {...}` || `node|z-12 {...}` || `node|z-12[...] {...}` || 12 kaj malpli ||
     638|| `way {...}` || `node{...}` || `way[...] {...}` || iu ajn zoma nivelo ||
     639
     640La preciza difino de skala gamo por ĉiu zoma nivelo povas ŝanĝiĝi en la estonteco. Laŭ regulo de dikfingro vi povas atendi esti proksimume ĉe zoma nivelo ''n'', kiam bildaro montras glitmapajn kahelojn de nivelo ''n''.
     641
     642=== Pseŭdoklasoj ===#Pseŭdoklasoj
     643Vidu [/doc/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.PseudoClasses.html Javadoc] por la ĝisdatigita listo de pseŭdoklasoj subtenataj de JOSM-a MapCSS-implementado.
     644
     645||= '''Klaso''' =||= '''Priskribo''' =||
     646|| `:closed` || vera por vojoj, kie la unua nodo estas la sama kiel la lasta kaj por iu ajn (tute elŝutita) multpoligona rilato ||
     647|| `:closed2` || sama kiel supre, sed ĉi tiu ignoras, ĉu multpoligono estas tute elŝutita (ekde r9099) ||
     648|| `:completely_downloaded` || vera por rilato, kies membroj estas ĉiuj elŝutitaj (ekde r9099) ||
     649|| `:new` || ĉiuj novaj objektoj ||
     650|| `:connection` || vera por nodoj, kiuj estas uzataj de pli ol unu vojo ||
     651|| `:unconnected` || vera por nodoj, kiuj ne estas uzataj de iu ajn vojo (ekde r6687) ||
     652|| `:tagged` || Kion JOSM konsideras etikedita, t.e. objekto kun etikeda ŝlosilo alia ol la sekvaj: `source*`, `source_ref`, `note`, `comment`, `converted_by`, `created_by`, `watch*`, `fixme`, `FIXME`, `description`, `attribution` (versio r4008; en ĉi tiu listo, `*` estas globo)
     653|| `:area-style` || vera se la objekto havas arean stilon ||
     654|| `:righthandtraffic` || vera se estas dekstra-traflanko ĉe la aktuala loko (ekde r7193); vidu [wikitr:/left-right-hand-traffic maldekstra-dekstra-traflanko] por ekrankopio de areoj ||
     655|| `:clockwise` || Ĉu la vojo estas fermita kaj orientita laŭhorloĝe, aŭ nefermita kaj la 1a, 2a kaj lasta nodo estas en laŭhorloĝa ordo. ||
     656|| `:anticlockwise` || Ĉu la vojo estas fermita kaj orientita kontraŭhorloĝe, aŭ nefermita kaj la 1a, 2a kaj lasta nodo estas en kontraŭhorloĝa ordo. ||
     657|| `:unclosed_multipolygon` || vera por tute ŝutitaj nefermitaj multpoligonaj rilatoj (ekde r8252) ||
     658|| `:open_end` || por elekti finajn nodojn de nefermitaj multpoligonaj rilatoj kun `relation:unclosed_multipolygon >:open_end node` (ekde r8252) ||
     659|| `:in-downloaded-area` || vera se objekto estas ene de fonta areo kaj malvera se en la strekita areo (ekde r8495). ||
     660|| `:selected` || vera se objekto estas elektita en la redaktilo (ekde r9341). ||
     661|| `:highlighted` || vera se la objekto estas emfazita ||
     662|| `:modified` || ŝanĝitaj kaj novaj objektoj (ekde r7193). ||
     663Vi povas ankaŭ nei pseŭdoklasojn. Ekz. `!:new` por ĉiuj malnovaj objektoj.
     664
     665=== Tavolo-Identigilo ===
     666Tavoloj povas esti uzataj por krei pli ol unu stilon por unuopa objekto. Jen ekzemplo:
     667{{{
     668#!mapcss
     669way[highway=secondary] {
     670    width: 3;
     671    color: yellow;
     672}
     673
     674way[highway=tertiary] {
     675    width: 2;
     676    color: orange;
     677}
     678
     679way[access][access!=yes]::non_public_access_layer {
     680    width: +2;
     681    color:red;
     682    dashes: 2;
     683    object-z-index:-1.0;
     684}
     685
     686way[bridge]::bridge_layer {
     687    width: +3;
     688    color:#000080;
     689    opacity:0.5;
     690    object-z-index:1.0;
     691}
     692}}}
     693Ĉi tiu desegnas ĉiujn sekundarajn kaj terciarajn vojojn en flava kaj oranĝa respektive. Iu ajn vojo kun aliro-etikedo alia ol jes ricevos ekstran linian stilon sube ('''`object-z-index:-1.0;`''') la ĉefa linio. Se tiu parto de la strato hazarde estas ponto, ĝi ankaŭ ricevos duontravideblan bluan supermeton. La relativa larĝa valoro ('''`width: +2;`''') referencas al la larĝo sur la defaŭlta tavolo (2 aŭ 3 en ĉi tiu kazo).
     694
     695La nomo por la tavolo povas esti iu ajn identigilo.
     696
     697Se vi preterlasas la tavolon en la elektilo, ĉi tio estas la sama kiel uzi `::default`.
     698
     699Plia ekzemplo:
     700{{{
     701#!mapcss
     702node[amenity=parking] {
     703    icon-image: "presets/vehicle/parking/parking.svg";    /* montras la internan parkadan ikonon de JOSM en la defaŭlta tavolo */
     704    text: ref;                                            /* montras la valoron de la ŝlosilo ref kiel tekston en la defaŭlta tavolo */
     705}
     706
     707node[amenity=parking][fee=yes]::fee {
     708    icon-image: "presets/money/exchange.svg";             /* montras la internan interŝanĝan ikonon de JOSM en la paga tavolo */
     709    icon-offset-x: 14;                                    /* ŝovas la ikonon */
     710    icon-offset-y: -12;                                   /* ŝovas la ikonon */
     711    text: charge;                                         /* montras la valoron de la ŝlosilo charge kiel tekston en la paga tavolo */
     712    text-offset-x: 16;                                    /* ŝovas la tekston */
     713    text-offset-y: 17;                                    /* ŝovas la tekston */
     714}
     715}}}
     716La rezulto aspektas jene:
     717
     718[[Image(multiple_icons_and_texts.png,ligilo=)]]
     719
     720Krome, vi povas uzi la * tavolon por anstataŭigi kaj pravalorizi ĉiujn tavolojn. \\
     721Ĝi anstataŭigas ĉiujn ekzistantajn subpartojn, do
     722
     723{{{
     724#!mapcss
     725way::A { a; }
     726way::B { b; }
     727way::* { c; }  /* anstataŭigas ĉiujn ekzistantajn subpartojn */
     728}}}
     729egalas al
     730{{{
     731#!mapcss
     732way::A { a; }
     733way::B { b; }
     734way::A { c; } /* anstataŭigas a per c ĉiujn ekzistantajn subpartojn */
     735way::B { c; } /* anstataŭigas b per c ĉiujn ekzistantajn subpartojn */
     736}}}
     737Kaj ĝi pravalorizas novajn subpartojn. Alivorte:
     738{{{
     739#!mapcss
     740way::* { a; }
     741way::A { b; }
     742}}}
     743egalas al
     744{{{
     745#!mapcss
     746way::A {}
     747way::* { a; }
     748way::A { b; }
     749}}}
     750kio siavice estas la sama kiel
     751{{{
     752#!mapcss
     753way::A { a; }
     754way::A { b; }
     755}}}
     756
     757{{{
     758#!mapcss
     759way::A { a; b; }
     760}}}
     761
     762=== Grupiĝo ===
     763Reguloj kun komuna deklara bloko povas esti grupigitaj en unu:
     764{{{
     765#!mapcss
     766area[landuse=forest] { color: green;   width: 2; }
     767area[natural=wood] { color: green;   width: 2; }
     768}}}
     769estas la sama kiel
     770{{{
     771#!mapcss
     772area[landuse=forest], area[natural=wood] { color: green;   width: 2; }
     773}}}
     774
     775=== Klasoj ===
     776Vi povas asigni klasojn al kongruaj elementoj, kaj difini aliajn elektilojn uzante tiujn klasojn:
     777
     778{{{
     779#!mapcss
     780/* asigni klasojn */
     781elektilo {
     782  set klaso;
     783  /* aŭ ekvivalente */
     784  set .klaso;
     785}
     786
     787/* kongrui klasojn */
     788way.klaso, node[foo=bar].klaso {
     789  /* ... */
     790}
     791}}}
     792
     793
     794Ekzemplo por asigni/kongrui klason nomatan `path`:
     795{{{
     796#!mapcss
     797way[highway=footway] { set path; color: #FF6644; width: 2; }
     798way[highway=path]    { set path; color: brown; width: 2; }
     799way.path { text:auto; text-color: green; text-position: line; text-offset: 5; }
     800}}}
     801Vi povas ankaŭ nei klasojn. Ekz. `way!.path` por ĉiuj vojoj, kiuj ne estas parto de la klaso ''.path''.
     802
     803=== Klasoj kaj Tavolo kune ===
     804Se vi volas uzi tavolon kaj klasojn kune, bonvolu noti, ke vi devas identigi la klason per is_prop_set.
     805
     806{{{#!mapcss
     807node[railway=signal] { set sgnl; }
     808
     809/* ĝi ne funkcias */
     810node.sgnl::layer_signal_icon  { z-index: 1000; ... icon: icon/signal-icon.svg; ... }
     811node.sgnl::layer_signal_text  { z-index: 1010; ... text: concat("Name of signal: ", tag("ref")); ..... )
     812
     813/* uzu anstataŭe: is_prop_set("...", "default") */
     814node[is_prop_set("sgnl", "default")]::layer_signal_icon  { z-index: 1000; ... icon: icon/signal-icon.svg; ... }
     815node[is_prop_set("sgnl", "default")]::layer_signal_text  { z-index: 1010; ... text: concat("Name of signal: ", tag("ref")); ..... )
     816}}}
     817
     818=== @supports Kondiĉa Procezo  ===
     819@supports reguloj estas uzataj por preterlasi sekcion de la stilo sub certaj kondiĉoj. Kutime vi volas uzi trajton, kiu estas enkondukita en pli nova versio de JOSM, sed havi rezervan stilon por uzantoj de malnovaj JOSM-klientoj. Ĉi tiu trajto venis kun r8087. Ekzemplo:
     820{{{
     821#!mapcss
     822@supports (min-josm-version: 9789) {
     823    way[highway] {
     824        width: 4;
     825        color: orange;
     826    }
     827    /* fancy new stuff */
     828    /* ... */
     829}
     830
     831@supports (max-josm-version: 9788) {
     832    way[highway] {
     833        width: 4;
     834        color: blue;
     835    }
     836    /* fall back mode, using more simple features */
     837    /* ... */
     838}
     839
     840@supports (icon-offset-x) {
     841    /* only if icon-offset-x property is supported */
     842    node[amenity] {
     843        icon-offset-x: 5;
     844    }
     845}
     846}}}
     847
     848La sintakso proksime kongruas kun la oficiala [https://drafts.csswg.org/css-conditional/ css sintakso]. La sekvaj kondiĉoj estas subtenataj:
     849
     850{{{#!th
     851'''Kondiĉo'''
     852}}}
     853{{{#!th
     854'''Priskribo'''
     855}}}
     856|-
     857{{{#!td
     858(''<mapcsskey>'')
     859}}}
     860{{{#!td
     861Kontrolu, ĉu certa mapcss-ŝlosilo estas subtenata, ekz. `repeat-image` aŭ `icon-offset-x`.
     862}}}
     863|-
     864{{{#!td
     865(min-josm-version: ''<number>'')
     866}}}
     867{{{#!td
     868Nur inkluzivi `@supports` sekcion, kiam la aktuala versio de JOSM estas pli granda ol aŭ egala al la specifita nombro.
     869}}}
     870|-
     871{{{#!td
     872(max-josm-version: ''<number>'')
     873}}}
     874{{{#!td
     875Nur inkluzivi `@supports` sekcion, kiam la aktuala versio de JOSM estas malpli granda ol aŭ egala al la specifita nombro.
     876}}}
     877|-
     878{{{#!td
     879(user-agent: ''<string>'')
     880}}}
     881{{{#!td
     882Nur inkluzivi `@supports` sekcion, kiam la nomo de la redaktilo / prezentilo kongruas kun la donita ĉeno. En JOSM, la sola akceptata valoro estas `josm`.
     883}}}
     884
     885Kondiĉoj povas esti kombinitaj kun `and`:
     886
     887{{{
     888#!mapcss
     889@supports (min-josm-version: 8087) and (max-josm-version: 8200) {
     890 /* nur por JOSM-versioj 8087 ĝis 8200 */
     891}
     892}}}
     893
     894Aliaj logikaj operaciloj kiel `or` kaj `not` povas ankaŭ esti uzataj. Krampoj estas necesaj, se vi volas kombini malsamajn logikajn operacilojn:
     895
     896{{{
     897#!mapcss
     898@supports ((min-josm-version: 8087) and (max-josm-version: 8200)) or (user-agent: myEditor) {
     899  /* por JOSM-versio 8087 ĝis 8200 kaj por la redaktilo nomata "myEditor" */
     900}
     901}}}
     902
     903Ĉar @supports reguloj estas nur subtenataj en JOSM r8087 kaj poste, vi devus ankaŭ specifi ĉi tion kiel minimuman JOSM-version en la meta-elektilo:
     904
     905{{{
     906#!mapcss
     907meta {
     908    min-josm-version: "8087"; /* Ĉi tiu stilo uzas @supports regulojn */
     909    /* ... */
     910}
     911}}}
     912
     913
     914== Stilaj Agordoj ==
     915[wikitr:/Help/Dialog/MapPaint/StyleSettings Stilaj agordoj] estas uzataj por provizi al la uzanto agordojn por adapti mapan stilon. La uzanto povas uzi ilin en la [wikitr:/Help/Dialog/MapPaint MapPaint dialogo]. La sekvaj `type` de agordoj estas haveblaj:
     916* `boolean` (ekde r7450)
     917* `double` (ekde r15731, vidu #10435)
     918* `string` (ekde r15731, vidu #10435)
     919* `color` (ekde r16843, vidu #10435)
     920
     921=== Agordoj de tipo `boolean` ===
     922Krei agordon de tipo `boolean`:
     923{{{
     924#!mapcss
     925setting::highway_casing {
     926  type: boolean;
     927  label: tr("Draw highway casing");
     928  default: true;
     929}
     930}}}
     931
     932Uzi agordon de tipo `boolean`:
     933{{{
     934#!mapcss
     935way[highway][setting("highway_casing")] {
     936  casing-width: 2;
     937  casing-color: white;
     938}
     939}}}
     940
     941=== Agordoj de tipo `double` ===
     942Krei agordon de tipo `double`:
     943{{{
     944#!mapcss
     945setting::place_font_size {
     946  type: double;
     947  label: tr("Set place name font size...");
     948  default: 11;
     949}
     950}}}
     951
     952Uzi agordon de tipo `double`:
     953{{{
     954#!mapcss
     955node.place, way.place, area.place {
     956  font-size: setting("place_font_size");
     957}
     958}}}
     959
     960=== Agordoj de tipo `string` ===
     961Krei agordon de tipo `string`:
     962{{{
     963#!mapcss
     964setting::textdisplay {
     965  type: string;
     966  label: tr("key used for displaying");
     967  default: "name"; /* ekzemploj por uzo: alt_name, old_name, addr:housename, ref, operator, ... */
     968}
     969}}}
     970
     971Uzi agordon de tipo `string`:
     972{{{
     973#!mapcss
     974way {
     975  text: tag(setting("textdisplay"));
     976}
     977}}}
     978
     979=== Agordoj de tipo `color` ===
     980Krei agordon de tipo `color`. La `default` koloro povas esti iu ajn koloro kiel komprenata sub [wikitr:/Help/Styles/MapCSSImplementation#Propertyvaluesexplanations Priskribo de propraĵaj valoroj]:
     981{{{
     982#!mapcss
     983setting::colordisplay {
     984  type: color;
     985  label: tr("key used for displaying");
     986  default: colorDisplayCustomPref#FF00FF;
     987}
     988}}}
     989
     990Uzi agordon de tipo `color`:
     991{{{
     992#!mapcss
     993way {
     994  color: setting("colordisplay");
     995}
     996}}}
     997
     998=== Grupiĝo de agordoj ===
     999Similaj agordoj povas esti grupigitaj kune per difini ''agordajn grupojn'' (ekde r15289):
     1000
     1001{{{
     1002#!mapcss
     1003settings::my_group {
     1004  label: tr("my wonderful group");
     1005  icon: "my_beautiful_icon";
     1006}
     1007}}}
     1008
     1009Etikedo estas deviga, ikono estas nedeviga.
     1010
     1011Iam agorda grupo estas difinita, ĝi povas esti referencata de ĉiuj agordoj apartenantaj al ĝi:
     1012
     1013{{{
     1014#!mapcss
     1015setting::hide_icons {
     1016  type: boolean;
     1017  label: tr("Hide icons at low zoom");
     1018  default: true;
     1019  group: "my_group";
     1020}
     1021}}}
     1022
     1023Agordaj grupoj estas montrataj kiel submenuoj de la stila agorda menuo. Se almenaŭ du agordoj apartenas al grupo, speciala "Ŝalti ĉiujn agordojn" menuero permesas rapide ŝalti/malŝalti ĉiujn agordojn de ĉi tiu grupo samtempe. Uzada ekzemplo: [wikitr:/Styles/MapWithAI MapWithAI].
     1024
     1025
     1026== Propraĵoj ==#Propraĵoj
     1027=== Ĝeneralaj propraĵoj ===
     1028
     1029||=  '''Ŝlosilo''' =||= '''Priskribo''' =||= '''Valora Formato''' =||= '''Defaŭlta Valoro''' =||
     1030|| `z-index` || Specifu la ordon, en kiu la objektoj estas desegnitaj: La objektoj kun pli alta z-index estas desegnitaj supre de objektoj kun pli malalta z-index || ''Nombro'' (povas esti negativa) ||  0  ||
     1031|| `major-z-index` || Simila al `z-index`, sed ĝi havas pli altan prioritaton ol `z-index`. Do se unu objekto havas pli altan `major-z-index` ol la alia, ĝi estas desegnita supre. Se la `major-z-index` estas la sama, `z-index` decidas. || ''Nombro'' (povas esti negativa) || Dependas de stila elemento: area: 1, casing: 2, left-/right-casing: 2.1, line-pattern: 2.9, line: 3, point: 4, default-point: 4.1, line-text: 4.9, point-text: 5 ||
     1032|| `object-z-index` || Simila al `z-index`, sed havas pli malaltan prioritaton. Kontrolas la desegnan ordon por supermetitaj objektoj. Ekz. por du kruciĝantaj vojoj kun teksto: Uzu `z-index` aŭ `major-z-index` se vi unue volas desegni la du liniojn kaj poste la du surskribojn. Uzu `object-z-index` se unu el la vojoj devus esti tute supre de la alia. || ''Nombro'' (povas esti negativa) ||  0  ||
     1033|| `modifier` || Pli bona kontrolo, ĉu defaŭlta linio / noda simbolo estas generita de JOSM. Ĉi tio okazas, kiam ne estas taŭga stilo (`modifier=false`) trovita sur iu ajn tavolo. || `false` aŭ `true` || `false` por la defaŭlta tavolo kaj `true` por iu ajn alia tavolo ||
     1034
     1035Notu, ke pro performaj kialoj la valoroj por la tri z-indeksoj estas limigitaj al 24 bitaj glitkomaj valoroj kun maks. 5 decimalaj ciferoj. Nuntempe la interna mapstila stilo uzas valorojn kun maks. 2 ciferoj antaŭ kaj post la dekuma apartigilo. Por eviti problemojn uzu valorojn de z-indeksoj inter -99.999 kaj +99.999. (Vidu ankaŭ #14485)
     1036
     1037=== Ikonaj kaj simbolaj stiloj ===
     1038
     1039||=  '''Ŝlosilo''' =||= '''Priskribo''' =||= '''Valora Formato''' =||= '''Defaŭlta Valoro''' =||
     1040|| `icon-image` || La ikono ĉe noda pozicio. Vidu ankaŭ [wikitr:/Help/Styles/Images Bildoj]. || ''Bildo'' ||  -  ||
     1041|| `icon-opacity` || Travidebleco de la ikona bildo || ''Travidebleco'' ||  1.0  ||
     1042|| `icon-width` || Larĝo de la ikono. Se nur unu el la propraĵoj `icon-width` kaj `icon-height` estas donita, la bildo estos skalita proporcie. La ikono konservos la originan grandecon, se nek `icon-width` nek `icon-height` estas agordita. || ''Nombro'' ||  -  ||
     1043|| `icon-height` || Alto de la ikono. (Vidu `icon-width`) || ''Nombro'' ||  -  ||
     1044|| `icon-offset-x` || Ŝovu la ikonon en horizontala direkto (pozitivaj valoroj dekstren) (ekde r8085) || ''Nombro'' ||  0  ||
     1045|| `icon-offset-y` || Ŝovu la ikonon en vertikala direkto (pozitivaj valoroj malsupren) (ekde r8085) || ''Nombro'' ||  0  ||
     1046|| `icon-rotation` || Rotaciu la ikonon laŭhorloĝe aŭ kontraŭhorloĝe (negativa valoro)(ekde r8260) || `[rad]`, `[rad]rad`, `[deg]°`, `[deg]deg`, `[grad]grad`, `[turn]turn` ([https://developer.mozilla.org/en/docs/Web/CSS/angle difino]) \\ aŭ kardinala direkto (ekz. `northeast` aŭ `sw`); \\ aŭ `way` por rotacii la ikonon en la direkto de la patra vojo. \\ Vidu ankaŭ la funkciojn `degree_to_radians`, `cardinal_to_radians`. \\Ekde versio 18678 funkcio parent_way_angle() estas alternativo al way: ekz. {{{ way > node[...]::layer_x { ... icon-rotation: parent_way_angle(); ... } }}}  ||  -  ||
     1047|| `icon-position` || Difinu la pozicion de la ikono por areoj. Samkiel `text-position` (ekde r11730). || `center`, `inside`, `line` ||  `center`  ||
     1048|| `symbol-shape` || Montru simbolon ĉe la pozicio de la nodo || `square`, `circle`, `triangle`, `pentagon`, `hexagon`, `heptagon`, `octagon`, `nonagon`, `decagon` ||  -  ||
     1049|| `symbol-size` || Grandeco de la simbolo || ''Nombro'', povas esti relativa ("+4") ||  10  ||
     1050|| `symbol-stroke-width` || kontura larĝo || ''Larĝo'' || 1.0 se `symbol-stroke-color` estas agordita ||
     1051|| `symbol-stroke-color` || linia koloro || ''Koloro'' || `#FFC800` se `symbol-stroke-width` estas agordita ||
     1052|| `symbol-stroke-opacity` || linia travidebleco || ''Travidebleco'' ||  1.0  ||
     1053|| `symbol-fill-color` || pleniga koloro por la formo || ''Koloro'' || `blue`, krom se aŭ `symbol-stroke-width` aŭ `symbol-stroke-color` estas agordita ||
     1054|| `symbol-fill-opacity` || pleniga travidebleco || ''Travidebleco'' ||  1.0  ||
     1055|| `text-...`, `font-...` ||||||  vidu ĝeneralajn '''Tekstajn & Tiparajn propraĵojn''' ||
     1056
     1057Ne fidu je la defaŭltaj valoroj por `symbol-...` propraĵoj (krom por `opacity`). Ili estas intencitaj por "rapida & malpura" stilaj folioj kaj devus esti agorditaj al eksplicita valoro.
     1058
     1059=== Liniaj stiloj ===#LiniajStiloj
     1060||=  '''Ŝlosilo''' =||= '''Priskribo''' =||= '''Valora Formato''' =||= '''Defaŭlta Valoro''' =||
     1061|| `width` || Linia larĝo || ''Larĝo'' ||  -  ||
     1062|| `color` || Linia koloro || ''Koloro'' ||  valoro de `fill-color` aŭ\\(se ne agordita) JOSM-a defaŭlta \\sennoma koloro (`#808080`) ||
     1063|| `opacity` || Kiel travidebla la linio estas. || ''Travidebleco'' ||  1.0  ||
     1064|| `dashes` || Tabelo de alternaj ŝaltitaj/malŝaltitaj longoj || listo de nombroj, ekz. \\> 15, 5 \\ \\povas esti skribita kiel esprimo: \\ > `list(3, 4, 5, 6)` \\ \\aŭ la ŝlosilvorto `none` \\por malŝalti strekojn ||  -  ||
     1065|| `dashes-offset` || ŝovu la strekan modelon per certa kvanto || ''Nombro'' (>= 0) ||  0  ||
     1066|| `dashes-background-color` || La koloro uzata inter la strekoj (nedeviga) || ''Koloro'' ||  -  ||
     1067|| `dashes-background-opacity` || Travidebleca valoro por la streka fono || ''Travidebleco'' ||  valoro de `opacity`  ||
     1068|| `linecap` || Formo ĉe la fino de la linio (vidu [https://www.w3.org/TR/SVG/painting.html#StrokeLinecapProperty ĉi tie]) || `none`, `round`, `square` ||  `none`  ||
     1069|| `linejoin` || Formo ĉe la liniaj anguloj || `round`, `miter`, `bevel` ||  `round`  ||
     1070|| `miterlimit` || Aplikebla por `linejoin: miter`. \\Agordas la maksimuman transpaŝon, kiam liniaj segmentoj renkontiĝas ĉe tre malgranda angulo || ''Nombro'' (>= 1.0) ||  10.0  ||
     1071|| `offset` || Movu linion maldekstren aŭ dekstren (kiam rigardante en voja direkto). \\Ĉi tio povus esti uzata por desegni multajn liniojn por unu vojo aŭ marki la maldekstran kaj dekstran flankojn de vojo malsame. || ''Nombro'' (pozitiva valoro movas linion maldekstren,\\negativa dekstren) ||  0  ||
     1072|| `text-position` || agordu al `line`, se teksto devus esti desegnita laŭ la linio || `line`, `center` ||  -  ||
     1073|| `text-...`,\\`font-...` |||||| vidu ĝeneralajn '''Tekstajn & Tiparajn propraĵojn  ||
     1074|| `repeat-image` || ripetata bildo laŭ linio ''(ekde r5801)'' || ''Bildo'' ||  -  ||
     1075|| `repeat-image-width` || Larĝo de la bildo (nedeviga, vidu `icon-width`) ''(ekde r5811)'' || ''Nombro'' ||  -  ||
     1076|| `repeat-image-height` || Alto de la bildo (nedeviga) ''(ekde r5811)'' || ''Nombro'' ||  -  ||
     1077|| `repeat-image-align` || Vicigo de la bildo.\\Supra-, malsupra rando aŭ la (horizontala) centra linio de la bildo estos laŭ la linio ''(ekde r5801)'' || `top`, `center`, `bottom` ||  `center`  ||
     1078|| `repeat-image-offset` || Deŝovo de la linio ''(ekde r5801)'' || ''Nombro'' ||  0  ||
     1079|| `repeat-image-spacing` || Spaco inter ripetataj bildoj ''(ekde r5801)'' || ''Nombro'' ||  0  ||
     1080|| `repeat-image-phase` || Komenca spaco ĉe la komenco de la linio ''(ekde r5812)'' || ''Nombro'' ||  0  ||
     1081|| `repeat-image-opacity` || Travidebleco de la ripetata bildo ''(ekde r16700)'' || ''Nombro'' ||  1.0  ||
     1082
     1083Ĉiuj ĉi tiuj propraĵoj (krom por `text-...` kaj `font-...`) ekzistas ankaŭ kun la `casing-` prefikso. La kovraĵo estas dua sendependa linia elemento, kiu estas desegnita sub la normala linio kaj povas esti uzata por desegni maldikan kadron ĉirkaŭ la linio en alia koloro.
     1084||=  '''Ŝlosilo''' =||= '''Priskribo''' =||= '''Valora Formato''' =||= '''Defaŭlta Valoro''' =||
     1085|| `casing-width` || Larĝo de la kadro ambaŭflanke de la ĉefa linio. \\En JOSM < 5214: Tuta larĝo de la kovraĵo || ''Larĝo'' (inversas al `width` se relativa larĝo estas specifita) ||  -  ||
     1086|| `casing-color` || Kovraĵa koloro || ''Koloro'' ||  valoro de `fill-color` aŭ (se ne agordita) \\JOSM-a defaŭlta sennoma koloro (`#808080`) ||
     1087|| `casing-opacity` || Kiel travidebla la kovraĵo estas. || ''Travidebleco'' ||  1.0  ||
     1088|| `casing-`... || ... || ... ||  ...  ||
     1089Simile al `casing-`, ekzistas ankaŭ la `left-casing-` kaj `right-casing-` prefikso. Ĝi desegnas aldonaĵajn liniojn maldekstren kaj dekstren de la ĉefa linio.
     1090
     1091=== Areaj stiloj ===#AreajStiloj
     1092||= '''Ŝlosilo''' =||= '''Priskribo''' =||= '''Valora Formato''' =||= '''Defaŭlta Valoro''' =||
     1093|| `fill-color` || Koloro, per kiu plenigi la areon. Ĝis 11700, la alfa komponanto estis agordita al 50 por krei travideblecan efekton. || ''Koloro'' ||  -  ||
     1094|| `fill-image` || Bilda modelo || ''Bildo'' ||  -  ||
     1095|| `fill-extent` || Agordu ĉi tiun propraĵon, por desegni nur la konturon de la areo. La nombro specifas, kiom for plenigi de la rando de la areo al la centro. (Se ne agordita, la areo estos tute plenigita) ''(ekde r9008)'' || ''Nombro'' ||  -  ||
     1096|| `fill-extent-threshold` || Agordu ĉi tiun propraĵon, por desegni plenan areon, kiam la donita procento de kovro estas atingita. Povas esti pli granda ol 100%, ĉar la kovrita areo estas taksata kiel **perimetro * extent**. || ''Nombro'' ||  -  ||
     1097|| `fill-opacity` || Kiel travidebla la plenigo estas; aplikebla al ambaŭ koloro kaj bildo || ''Travidebleco'' || 0.2 ''(ekde r11700, 1.0 antaŭ tio)'' \\(povas esti ŝanĝita per la preferoj `mappaint.fillalpha` kaj \\`mappaint.fill-image-alpha`)  ||
     1098|| `text-position` || agordu al `center`, se teksto devus esti desegnita en la centro de la areo. Agordu al `inside` por meti la tekston tute ene de la areo. ''(ekde r11722)'' || `line`, `center`, `inside` ||  -  ||
     1099|| `text-...`, `font-...` ||||||  vidu ĝeneralajn tekstajn & tiparajn propraĵojn  ||
     1100Devigaj propraĵoj por krei Arean stilon: `fill-color` aŭ `fill-image`
     1101
     1102=== Tekstaj & Tiparaj propraĵoj ===
     1103{{{#!th valign=top
     1104'''Ŝlosilo'''
     1105}}}
     1106{{{#!th valign=top
     1107'''Priskribo'''
     1108}}}
     1109{{{#!th valign=top
     1110'''Valora Formato'''
     1111}}}
     1112{{{#!th valign=top
     1113'''Defaŭlta Valoro'''
     1114}}}
     1115|-------------------------------------------------------------------------------
     1116{{{#!td align=left  valign=top
     1117`text` 
     1118}}}
     1119{{{#!td align=left  valign=top
     1120Kiel trovi la etikedan tekston.\\Neniu etikedo estas montrata, krom se ĉi tiu instrukcio estas ĉeesta.
     1121}}}
     1122{{{#!td align=left  valign=top
     1123`auto`
     1124  Derivu la tekston aŭtomate. La defaŭltaj nomaj etikedoj estas: "`name:`"+''<LANG>'', \\"`name`", "`int_name`", "`ref`", "`operator`", "`brand`" kaj "`addr:housenumber`".
     1125
     1126  Agordu liston de etikedaj nomoj en la prefero "`mappaint.nameOrder`" por \\ ŝanĝi ĉi tiun liston. (Post ŝanĝi la liston, restartigo de JOSM estas necesa.)
     1127
     1128''Ĉeno''
     1129  Indikas la ŝlosilon de la etikedo, kies valoro estas uzata kiel teksto.
     1130
     1131''Esprimoj''
     1132  Vi povas enigi esprimon por kalkuli la tekston, kiu estos montrata. Ekzemploj:
     1133  * `eval("this is a static text")` - montras statikan tekston
     1134  * `eval(concat(tag("first"), "-", tag("second")))` - montras \\ la kunmetitajn etikedojn "first" kaj "second"
     1135
     1136`""`
     1137   Por forigi antaŭe agorditan tekston.
     1138}}}
     1139{{{#!td align=center  valign=top
     1140-
     1141}}}
     1142|-------------------------------------------------------------------------------
     1143|| `text-color` || la teksta koloro || ''Koloro'' ||  `white` por linioj kaj nodoj,\\`#c0c0c0` por areoj \\(JOSM "`text`" kaj "`areatext`"\\koloraj preferoj) ||
     1144|| `text-opacity` || kiel travidebla la teksto estas || ''Travidebleco'' ||  1.0  ||
     1145|| `text-offset-x` || ŝovu la tekston horizontale, \\(ne subtenata por teksto laŭ linio) || ''Nombro'' ||  0  ||
     1146|| `text-offset-y`\\(povas ankaŭ esti skribita kiel\\`text-offset`)  || ŝovu la tekston vertikale, pozitivaj valoroj ŝovas la tekston supren  || ''Nombro'' ||  0  ||
     1147|| `text-halo-radius` || grandeco de teksta fona kadro \\(por fari tekston videbla sur fono \\kun simila koloro) || ''Nombro'' ||  -  ||
     1148|| `text-halo-color` || koloro de la teksta halo || ''Koloro'' ||  komplemento de la teksta koloro  ||
     1149|| `text-halo-opacity` || travidebleco por la teksta halo || ''Travidebleco'' ||  1.0  ||
     1150|| `text-anchor-horizontal` || horizontala teksta etikedado || `left`, `center`, `right` ||  `right`  ||
     1151|| `text-anchor-vertical` || vertikala teksta etikedado || `above`, `top`, `center`, `bottom`, `below` ||  `bottom`  ||
     1152|| `text-rotation` || Rotaciu la tekston laŭhorloĝe aŭ kontraŭhorloĝe (negativa valoro)\\(ekde r16253) || `[rad]`, `[rad]rad`, `[deg]°`, `[deg]deg`, `[grad]grad`, `[turn]turn` \\([https://developer.mozilla.org/en/docs/Web/CSS/angle difino]) aŭ kardinala direkto (ekz. `northeast` aŭ `sw`); \\ aŭ `way` por rotacii la tekston en la direkto de la patra vojo. \\Vidu ankaŭ la funkciojn `degree_to_radians`, `cardinal_to_radians`. \\Ekde versio 18678 funkcio parent_way_angle() estas alternativo al way: ekz. {{{ way > node[...]::layer_x { ... text-rotation: parent_way_angle(); ... } }}} \\(Notu, ke la direkto signifas, kie la supra rando de la teksto frontas.\\Tio signifas, ke kun la defaŭlta direkto de nordo la teksto fluas orienten\\(kun maldekstre-al-dekstre lingvo). \\Do se vi volas fluigi ĝin al ekz. sudo, vi devas agordi orienten.) ||  -  ||
     1153|| `text-position` |||||| vidu [#AreajStiloj Areaj stiloj] kaj [#LiniajStiloj Liniaj stiloj] ||
     1154|| `font-family` || tipara familio || ''Ĉeno'' ||  "Droid Sans" \\(JOSM prefero "`mappaint.font`")  ||
     1155|| `font-size` || tipara grandeco || ''Nombro'' ||  8 \\(JOSM prefero "`mappaint.fontsize`")  ||
     1156|| `font-weight` || grasa aŭ ne || `bold`, `normal` ||  `normal`  ||
     1157|| `font-style` || kursiva aŭ ne || `italic`, `normal` ||  `normal`  ||
     1158
     1159=== Uzant-difinitaj propraĵoj ===
     1160* En [wikitr:/Styles Mapaj stiloj] vi povas difini iun ajn propran propraĵon, ekz.: `crc: CRC32_checksum(tag(name))/429496.7296;`
     1161* En [wikitr:/Rules Validatoraj reguloj] ili devas esti prefiksitaj per `-`, ekz.: `-osmoseItemClassLevel: "1210/1/1";`
     1162
     1163=== Priskribo de propraĵaj valoroj === #PriskriboDePropraĵajValoroj
     1164'' '''Larĝo''' ''
     1165 - 14.0 (iu ajn pozitiva nombro)
     1166 - `default` (uzu JOSM-an defaŭltan linian larĝon, kiu estas 2, sed povas esti agordita)
     1167 - `thinnest` (desegnas la linion kiel eble plej maldika)
     1168 - +3 (kun pluso antaŭe) aldonas la kvanton al la larĝo sur la defaŭlta tavolo. Ĉi tio aplikiĝas nur por stiloj, kiuj ne estas sur la defaŭlta tavolo, ekz. emfazoj. Alia maniero skribi ĉi tion estus `prop("width","default")+3`. Por `casing-width`, ĉi tio referencas al la `width` valoro sur la sama tavolo.
     1169
     1170'' '''Bildo''' ''
     1171 Vidu [wikitr:/Help/Styles/Images].
     1172
     1173'' '''Koloro''' ''
     1174 * nomita koloro kiel trovita en [https://www.w3.org/TR/css3-color/#svg-color ĉi tiu] listo
     1175 * html-stilo: '''`#RRGGBB`''', '''`#RGB`''', '''`#RRGGBBAA`'''
     1176 * '''`rgb(/*r*/, /*g*/, /*b*/)`''' - rgb valoro kun argumentoj de 0.0 ĝis 1.0
     1177 * '''`rgba(/*r*/, /*g*/, /*b*/, /*alpha*/)`''' - rgb valoro kun alfa
     1178 * '''`hsb_color(/*hue*/, /*saturation*/, /*brightness*/)`''' - koloro el HSB kolorospaco
     1179 * se la koloro estas prefiksita per nomo kaj #, ekz. `color: highway_track#6e541c;` ĝi aperos en la [wikitr:/Help/Preferences/ColorPreference Kolorprefero] kaj finaj uzantoj povas adapti la koloron tie mem
     1180
     1181'' '''Travidebleco''' ''
     1182 * de 0.0 (travidebla) ĝis 1.0 (opaka)
     1183
     1184'' '''Ĉeno''' ''
     1185 * iu ajn signoĉeno, en citiloj, ekz. `"images/fill.png"`. Se la ĉeno estas identigilo, citiloj estas nedevigaj. (Citilo kaj retroklina signo povas esti eskapitaj.)
     1186
     1187'' '''Nombro''' ''
     1188 * entjero aŭ glitkomo (en simpla formo ekz. 0.3). Ĝenerale povas esti negativa, sed plejmultaj propraĵoj ne subtenas negativajn nombrojn
     1189 * havas specialan signifon, se vi metas "+" signon antaŭe (relativa larĝo)
     1190
     1191
     1192== Eval-esprimoj ==#EvalEsprimoj
     1193Vidu [/doc/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.html#method_summary Javadoc de Funkcioj] por la ĝisdatigita listo de funkcioj subtenataj de JOSM-a MapCSS-implementado.
     1194
     1195 +, -, *, /::
     1196  aritmetikaj operacioj
     1197 ||, &&, !::
     1198  buleaj operacioj
     1199 <, >, <=, >=, ==, !=::
     1200  komparaj operaciloj
     1201 asin, atan, atan2, ceil, cos, cosh, exp, floor, log, max, min, mod (ekde r17759), random, round, signum, sin, sinh, sqrt, tan, tanh::
     1202  la kutima signifo, [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html detaloj]
     1203 cond(b, fst, snd)::
     1204 b ? fst : snd::
     1205  se ('''b''') tiam '''fst''' alie '''snd'''
     1206 list(a, b, ...)::
     1207  krei liston de valoroj, ekz. por la `dashes` propraĵo
     1208 get(lst, n)::
     1209  akiri la ''n''-an elementon de la listo ''lst'' (kalkulado komenciĝas je 0) [''ekde r5699'']
     1210 split(sep, str)::
     1211  dividas ĉenon ''str'' ĉe okazoj de la apartigilo ''sep'', redonas liston [''ekde r5699'']
     1212 prop(''p_name'')::
     1213  valoro de la propraĵo ''p_name'' de la aktuala tavolo, ekz. prop(`"width"`)
     1214 prop(''p_name'', ''layer_name'')::
     1215  propraĵo de la tavolo ''layer_name''
     1216 is_prop_set(''p_name'')::
     1217  vera, se propraĵo ''p_name'' estas agordita por la aktuala tavolo
     1218 is_prop_set(''p_name'', ''layer_name'')::
     1219  vera, se propraĵo ''p_name'' estas agordita por la tavolo ''layer_name''
     1220 tag(''key_name'')::
     1221  akiri la valoron de la ŝlosilo ''key_name'' de la objekto en demando
     1222 parent_tag(''key_name'')::
     1223  akiri la valoron de la ŝlosilo ''key_name'' de la patra objekto
     1224 parent_tags(''key_name'')::
     1225  redonas ĉiujn patrajn valorojn por la ŝlosilo ''key_name'' kiel liston ordigitan laŭ natura ordo [''ekde r8775'']
     1226 has_tag_key(''key_name'')::
     1227  vera, se la objekto havas etikedon kun la donita ŝlosilo
     1228 rgb(''r'', ''g'', ''b'')::
     1229  krei koloran valoron (argumentoj de 0.0 ĝis 1.0)
     1230 hsb_color(''h'', ''s'', ''b'')::
     1231  krei koloron el hue, saturation kaj brightness (argumentoj de 0.0 ĝis 1.0) [''ekde r6899'']
     1232 red(''clr''), green(''clr''), blue(''clr'')::
     1233  akiri valoron de koloraj kanaloj en rgb koloromodelo
     1234 alpha(''clr'')::
     1235  akiri la alfan valoron de la donita koloro [''ekde r6749'']
     1236 length(''str'')::
     1237  longo de ĉeno
     1238 count(''lst'')::
     1239  longo de listo, t.e., kalkulas ĝiajn elementojn [''ekde r7162'']
     1240 length(''lst'')::
     1241  longo de listo ([''ekde r5699''] – malrekomendita ''ekde r7162''
     1242 any(obj1, obj2, ...)::
     1243  redonas la unuan objekton, kiu ne estas nula (antaŭe coalesce, [''ekde r7164''])
     1244 concat(''str1'', ''str2'', ...)::
     1245  kunmeti la ĉenojn al unu
     1246 join(''sep'', ''str1'', ''str2'', ...)::
     1247  kunigi ĉenojn, kun ''sep'' kiel apartigilo [''ekde r6737'']
     1248 join_list(''sep'', ''list_name'')::
     1249   kunigas la elementojn de la listo ''list_name'' al unu ĉeno apartigita per la apartigilo ''sep'' [''ekde r8775'']
     1250 upper(''str'')::
     1251   konverti ĉenon al majusklo [''ekde r11756'']
     1252 lower(''str'')::
     1253   konverti ĉenon al minusklo [''ekde r11756'']
     1254 title(''str'')::
     1255   konverti ĉenon al titola kazo [''ekde r17613''] (`"i am FINE"` → `"I Am Fine"`)
     1256 trim(''str'')::
     1257   forigi komencajn kaj finajn blankajn spacojn de ĉeno [''ekde r11756'']
     1258 trim_list(''list_name'')::
     1259   forigi komencajn kaj finajn blankajn spacojn de listo de ĉenoj, forigos erojn, kiuj estas malplenaj poste [''ekde r15591'']
     1260 JOSM_search("...")::
     1261  vera, se JOSM-serĉo aplikiĝas al la objekto
     1262 tr(str, arg0, arg1, ...)::
     1263  traduki de la angla al la aktuala lingvo (nur por ĉenoj en la JOSM-uzantinterfaco) [''ekde r6506'']
     1264 regexp_test(regexp, string)::
     1265  testi, ĉu ''string'' kongruas kun modelo ''regexp'' [''ekde r5699'']
     1266 regexp_test(regexp, string, flags)::
     1267  testi, ĉu ''string'' kongruas kun modelo ''regexp''; flags estas ĉeno, kiu povas enhavi "i" (uskleco-sentiva), "m" (multlinia) kaj "s" ("dot all") [''ekde r5699'']
     1268 regexp_match(regexp, string)::
     1269  Provas kongrui ''string'' kun modelo ''regexp''. Redonas liston de kaptaj grupoj en kazo de sukceso. La unua elemento (indekso 0) estas la kompleta kongruo (t.e. ''string''). Pliaj elementoj respondas al la krampitaj partoj de la regula esprimo. [''ekde r5701'']
     1270 regexp_match(regexp, string, flags)::
     1271  Provas kongrui ''string'' kun modelo ''regexp''. Redonas liston de kaptaj grupoj en kazo de sukceso. La unua elemento (indekso 0) estas la kompleta kongruo (t.e. ''string''). Pliaj elementoj respondas al la krampitaj partoj de la regula esprimo. Flags estas ĉeno, kiu povas enhavi "i" (uskleco-sentiva), "m" (multlinia) kaj "s" ("dot all") [''ekde r5701'']
     1272 substring(str, idx)::
     1273  redoni la subĉenon de ''str'', komencante ĉe indekso ''idx'' (0-indeksita) [''ekde r6534'']
     1274 substring(str, start, end)::
     1275  redoni la subĉenon de ''str'', komencante ĉe indekso ''start'' (inkluziva) ĝis ''end'' (ekskluziva) (0-indeksita) [''ekde r6534''], negativa fina indekso kalkulas de la ĉena fino [''ekde r19259'']
     1276 replace(string, old, new)::
     1277   Anstataŭigi iun ajn okazon de la subĉeno ''old'' ene de la ĉeno ''string'' per la teksto ''new''
     1278 osm_id()::
     1279  redonas la OSM-idon de la aktuala objekto [''ekde r5699'']
     1280 osm_user_name()::
     1281  redonas la OSM-uzantnomon, kiu lastatempe tuŝis la aktualan objekton [''ekde r15246'']
     1282 osm_user_id()::
     1283  redonas la OSM-uzant-idon, kiu lastatempe tuŝis la aktualan objekton [''ekde r15246'']
     1284 osm_version()::
     1285  redonas la OSM-version numeron de la aktuala objekto [''ekde r15246'']
     1286 osm_changeset_id()::
     1287  redonas la idon de la ŝanĝaro, al kiu la aktuala objekto estis lastatempe alŝutita [''ekde r15246'']
     1288 osm_timestamp()::
     1289  redonas la tempon de lasta modifo al la aktuala objekto, kiel tempindiko [''ekde r15246'']
     1290 parent_osm_id()::
     1291  redonas la OSM-idon de la patra objekto (kongruita per infana elektilo) [''ekde r13094'']
     1292 URL_encode(str)::
     1293  [https://en.wikipedia.org/wiki/Percent-encoding procento-kodigi] ĉenon. Povas esti utila por datumaj URL-oj [''ekde r6805'']
     1294 URL_decode(str)::
     1295  [https://en.wikipedia.org/wiki/Percent-encoding procento-malkodigi] ĉenon. [''ekde r11756'']
     1296 XML_encode(str)::
     1297  eskapigi specialajn signojn en xml. Ekz. `<` iĝas `&lt;`, aliaj specialaj signoj: `>`, `"`, `'`, `&`, `\n`, `\t` kaj `\r` [''ekde r6809'']
     1298 CRC32_checksum(''str'')::
     1299  kalkuli la CRC32 kontrolsumon de ĉeno (rezulto estas entjero de 0 ĝis 2^32^-1) [''ekde r6908'']
     1300 siunit_length(''str'')::
     1301   konverti longecajn unuojn al metroj (tolerema, ignorante blankajn spacojn) [''ekde r19089'']
     1302 is_right_hand_traffic()::
     1303  Kontroli, ĉu estas maldekstra-traflanko aŭ dekstra-traflanko ĉe la aktuala loko. [''ekde r7193'']
     1304 number_of_tags()::
     1305  redonas la nombron de etikedoj por la aktuala OSM-objekto [''ekde r7237'']
     1306 print(o)::
     1307  presi ĉenan reprezenton de `o` al la komandlinio (por sencimigo) [''ekde r7237'']
     1308 println(o)::
     1309  presi ĉenan reprezenton de `o` al la komandlinio, sekvitan de nova linio (por sencimigo) [''ekde r7237'']
     1310 JOSM_pref(''key'', ''default'')::
     1311  Akiri valoron de la JOSM-advanced preferoj. Tiel vi povas oferti certajn opciojn al la uzanto kaj fari la stilon adaptebla. Ĝi funkcias kun ĉenoj, nombroj, koloroj kaj buleaj valoroj. \\[Ĉi tiu funkcio ekzistas ekde versio r3856, sed kun iuj limigoj. `JOSM_pref` ĉiam redonas ĉenon, sed en versio r7237 kaj antaŭe, la aŭtomata konverto de ĉeno al bulea kaj koloro ne funkciis. Vi povas uzi la sekvajn solvojn por buleaj valoroj kaj koloro en versio r7237 kaj antaŭe: `cond(JOSM_pref("myprefkey", "true")="true", "X", "O")` kaj `html2color(JOSM_pref("mycolor", "#FF345611"))`. Ĉi tiuj eksplicitaj konvertoj ne plu estu necesaj en versio r7238 kaj poste. Aŭtomata konverto al nombro funkcias en iu ajn versio. Krome, en versio r16590, povas esti uzata por agordi kolorajn propraĵojn. Do `* { set_color: JOSM_pref("pref", #000000); }` kreas koloran propraĵon nun.]
     1312 setting()::
     1313  por uzi [wikitr:/Help/Styles/MapCSSImplementation#StilajAgordoj stilan agordon] [''ekde r7450'']
     1314 degree_to_radians()::
     1315  redonas en gradoj donitan direkton en radianoj [''ekde r8260'']
     1316 cardinal_to_radians()::
     1317  redonas kardinalan direkton en radianoj [''ekde r8260'']
     1318 waylength()::
     1319  redonas la longon de la vojo en metroj [''ekde r8253'']
     1320 areasize()::
     1321  redonas la areon de fermita vojo en kvadratmetroj [''ekde r8253'']
     1322 at(lat,lon)::
     1323  redonas veran, se la objekta centroido situas ĉe donitaj ''lat''/''lon'' koordinatoj, ekz. por kontroli nodojn ĉe "nula insulo" `node[at(0.0,0.0)]` [''ekde r12514'']
     1324 is_similar(''str1'', ''str2'')::
     1325  redonas veran, se la du ĉenoj estas similaj, sed ne identaj, t.e., havas Levenshtein-distancon de 1 aŭ 2. Ekzemplo: `way[highway][name][is_similar(tag(name), "Main Street")]` kontrolas stratojn kun ebla tajperaro en la nomo (ekz. Main Streeg). [''ekde r14371'']
     1326 gpx_distance()::
     1327  redonas la plej malaltan distancon inter la OSM-objekto kaj GPX-punkto [''ekde r14802'']
     1328 count_roles()::
     1329  redonas la nombron de primitivoj en rilato kun la specifitaj roloj [''ekde r15275'']
     1330 sort(''str1'', ''str2'', ''str3'', ''...'')::
     1331  ordigas tabelon de ĉenoj [''ekde r15279'']
     1332 sort_list(''list_name'')::
     1333  ordigas liston de ĉenoj [''ekde r15279'']
     1334 tag_regex(''regex'')::
     1335  redonas liston enhavantan la valorojn de ŝlosiloj, kiuj kongruas kun la regex [''ekde r15317'']
     1336 to_boolean(''str'')::
     1337  redonas la ĉenan argumenton kiel bulean [''ekde r16110'']
     1338 to_byte(''str'')::
     1339  redonas la ĉenan argumenton kiel bajton [''ekde r16110'']
     1340 to_short(''str'')::
     1341  redonas la ĉenan argumenton kiel mallongan [''ekde r16110'']
     1342 to_int(''str'')::
     1343  redonas la ĉenan argumenton kiel int [''ekde r16110'']
     1344 to_long(''str'')::
     1345  redonas la ĉenan argumenton kiel longan [''ekde r16110'']
     1346 to_float(''str'')::
     1347  redonas la ĉenan argumenton kiel flosantan [''ekde r16110'']
     1348 to_double(''str'')::
     1349  redonas la ĉenan argumenton kiel duoblan [''ekde r16110'']
     1350 uniq(''str1'', ''str2'', ''str3'', ''...'')::
     1351  redonas liston de ĉenoj, kiuj nur havas unikajn valorojn de tabelo de ĉenoj [''ekde r15323'']
     1352 uniq_list(''list_name'')::
     1353  redonas liston de ĉenoj, kiuj nur havas unikajn valorojn de listo de ĉenoj [''ekde r15323'']
     1354 parent_way_angle()::
     1355  redonas la angulon de la patra vojo kiel duoblan en rad [''ekde r18664''] (vidu: text-rotation aŭ icon-rotation)
     1356 convert_primitive_to_string(''PrimitiveId'')::
     1357  redonas la primitivan idon kiel ĉenon [''ekde r18829'']
     1358 convert_primitives_to_string(''PrimitiveId'', ''PrimitiveId'', ''...'')::
     1359  redonas liston de primitivaj idoj konvertitaj al ĉenoj [''ekde r18829'']
     1360 parent_osm_primitives(''optional key'', ''optional value'')::
     1361  redonas liston de primitivaj idoj, kiuj kongruas kun la ŝlosilo kaj valoro (se ĉeestas) [''ekde r18829'']
     1362
     1363=== Ekzemploj ===
     1364* cirkla simbolo por domnumero kun grandeco dependanta de la nombro de ciferoj
     1365{{{
     1366#!mapcss
     1367node[addr:housenumber] {
     1368    symbol-shape: circle;
     1369    symbol-size: eval((min(length(tag("addr:housenumber")), 3) * 5) + 3);
     1370    symbol-fill-color: #B0E0E6;
     1371
     1372    text: "addr:housenumber";
     1373    text-anchor-horizontal: center;
     1374    text-anchor-vertical: center;
     1375    text-offset-x: -1;
     1376    text-offset-y: -1; }
     1377   
     1378node[addr:housenumber]::hn_casing {
     1379    z-index: -100;
     1380    symbol-shape: circle;
     1381    symbol-size: +2;
     1382    symbol-fill-color: blue;
     1383}
     1384}}}
     1385* inversigi kolorojn
     1386{{{
     1387#!mapcss
     1388*::* {
     1389    color: eval(rgb(1 - red(prop(color)), 1 - green(prop(color)), 1 - blue(prop(color))));
     1390    fill-color: eval(rgb(1 - red(prop(fill-color)), 1 - green(prop(fill-color)), 1 - blue(prop(fill-color))));
     1391}
     1392}}}
     1393* hazardaj aferoj
     1394{{{
     1395#!mapcss
     1396way {
     1397    width: eval(random() * 20);
     1398    color: eval(rgb(random(), random(), random()));
     1399}
     1400}}}
     1401
     1402* regexp-kongrua ekzemplo: ŝanĝi "nameXXXsubname" al "name::subname"
     1403{{{
     1404#!mapcss
     1405*[name=~/.+XXX.+/]
     1406{
     1407    _match: regexp_match("(.+?)XXX(.+)", tag("name"));
     1408    text: concat(get(prop("_match"),1), "::", get(prop("_match"),2));
     1409}
     1410}}}
     1411
     1412* pentri konstruaĵojn en malsamaj koloroj laŭ strato en la adresaj etikedoj
     1413{{{
     1414#!mapcss
     1415area[building][addr:street] {
     1416    fill-color: hsb_color(CRC32_checksum(tag("addr:street"))/4294967296.0, 0.9, 0.7);
     1417    fill-opacity: 0.8;
     1418}
     1419}}}
     1420
     1421* kovraĵo ene de areo
     1422{{{
     1423#!mapcss
     1424area[building]:clockwise {
     1425    right-casing-width: 10;
     1426}
     1427area[building]:anticlockwise {
     1428    left-casing-width: 10;
     1429}
     1430/* aŭ */
     1431area[building][is_clockwise()] {
     1432    right-casing-width: 10;
     1433}
     1434area[building][is_anticlockwise()] {
     1435    left-casing-width: 10;
     1436}
     1437}}}
     1438
     1439* uskleco-sentiva elektilo. Ĉi tio kongruas: `Name=Main Street`, sed ankaŭ `naMe=MAIN STREET`
     1440{{{
     1441#!mapcss
     1442way[/(?i)^name$/ =~ /(?i)^Main Street$/] {
     1443}
     1444}}}
     1445
     1446
     1447== Kongruecaj notoj ==
     1448=== MapCSS 0.2 ===
     1449==== Gramatiko ====
     1450 * `way[oneway=yes]` ne havas iun ajn magion, vi povas uzi `way[oneway?]` anstataŭe
     1451 * neniu `@import`
     1452 * JOSM ne postulas `eval(...)` esti ĉirkaŭita ĉirkaŭ esprimoj, sed por kongrueco kun aliaj MapCSS-implementoj vi devus skribi ĝin.
     1453
     1454==== Propraĵoj ====
     1455Nuntempe, JOSM ne subtenas la sekvajn propraĵojn:
     1456 line: ::
     1457  `image`
     1458 label: ::
     1459  `font-variant, text-decoration, text-transform, max-width`
     1460 shield: ::
     1461  ne subtenata
     1462
     1463=== Halcyon (Potlatch 2) ===
     1464 * Teksta etikedo estas metita en la centro de la ikono. Por kongrueco kun Halcyon metu
     1465{{{
     1466#!mapcss
     1467node { text-anchor-vertical: center; text-anchor-horizontal: center; }
     1468}}}
     1469 ĉe la komenco de via stila folio.
     1470 * norma z-indekso en Halcyon estas 5, sed ĝi estas 0 en JOSM
     1471 * '''`image: circle;`''' respondas al '''`symbol-shape: circle;`'''
     1472
     1473=== Kothic ===
     1474 * Kothic havas subtenon por eval, kiu verŝajne diferencas de JOSM-a eval.
     1475 * Kothic komprenas unuojn, dum JOSM ĉiam kalkulas en rastrumeroj.
     1476 * La elstaraĵaj trajtoj ne estas haveblaj en JOSM.
     1477
     1478=== Ceyx ===
     1479 * ŝajne havas `[tunnel=1]` anstataŭ `[tunnel=yes]` (Halcyon) aŭ `[tunnel?]` (JOSM)
     1480
     1481
     1482== Mediaj pridemandadoj (malrekomenditaj) ==
     1483
     1484{{{#!td style="background-color: #faa"
     1485Noto: mediaj pridemandadoj estas malrekomenditaj. Vi devus uzi @supports regulojn anstataŭe (vidu supre).
     1486}}}
     1487Mediaj pridemandadoj estas uzataj por preterlasi sekcion de la stilo sub certaj kondiĉoj. Kutime vi volas uzi trajton, kiu estas enkondukita en pli nova versio de JOSM, sed havi rezervan stilon por uzantoj de malnovaj JOSM-klientoj. Ĉi tiu trajto venis kun r6970. Ekzemplo:
     1488{{{
     1489#!mapcss
     1490@media (min-josm-version: 9789) {
     1491    way[highway] {
     1492        width: 4;
     1493        color: orange;
     1494    }
     1495    /* fancy new stuff */
     1496    /* ... */
     1497}
     1498
     1499@media (max-josm-version: 9788) {
     1500    way[highway] {
     1501        width: 4;
     1502        color: blue;
     1503    }
     1504    /* fall back mode, using more simple features */
     1505    /* ... */
     1506}
     1507}}}
     1508
     1509La sintakso proksime kongruas kun la oficiala [https://www.w3.org/TR/css3-mediaqueries/#syntax css sintakso]. La sekvaj kondiĉoj estas subtenataj:
     1510
     1511{{{#!th
     1512'''Media kondiĉo'''
     1513}}}
     1514{{{#!th
     1515'''Priskribo'''
     1516}}}
     1517|-
     1518{{{#!td
     1519(min-josm-version: ''<number>'')
     1520}}}
     1521{{{#!td
     1522Nur inkluzivi `@media` sekcion, kiam la aktuala versio de JOSM estas pli granda ol aŭ egala al la specifita nombro.
     1523}}}
     1524|-
     1525{{{#!td
     1526(max-josm-version: ''<number>'')
     1527}}}
     1528{{{#!td
     1529Nur inkluzivi `@media` sekcion, kiam la aktuala versio de JOSM estas malpli granda ol aŭ egala al la specifita nombro.
     1530}}}
     1531|-
     1532{{{#!td
     1533(user-agent: ''<string>'')
     1534}}}
     1535{{{#!td
     1536Nur inkluzivi `@media` sekcion, kiam la nomo de la redaktilo / prezentilo kongruas kun la donita ĉeno. En JOSM, la sola akceptata valoro estas `josm`.
     1537}}}
     1538
     1539Kondiĉoj povas esti kombinitaj kun `and`:
     1540
     1541{{{
     1542#!mapcss
     1543@media (min-josm-version: 6970) and (max-josm-version: 7014) {
     1544 /* nur por JOSM-versioj 6970 ĝis 7014 */
     1545}
     1546}}}
     1547
     1548Multoblaj kombinitaj kondiĉoj povas esti ĉenitaj per komo (logika ''aŭ''):
     1549
     1550{{{
     1551#!mapcss
     1552@media (min-josm-version: 6970) and (max-josm-version: 7014), (user-agent: myEditor) {
     1553  /* por JOSM-versio 6970 ĝis 7014 kaj por la redaktilo nomata "myEditor" */
     1554}
     1555}}}
     1556
     1557Ĉar mediaj pridemandadoj estas nur subtenataj en JOSM 6970 kaj poste, vi devus ankaŭ specifi ĉi tion kiel minimuman JOSM-version en la meta-elektilo:
     1558
     1559{{{
     1560#!mapcss
     1561meta {
     1562    min-josm-version: "6970"; /* Ĉi tiu stilo uzas mediajn pridemandadojn */
     1563    /* ... */
     1564}
     1565}}}
     1566
     1567
     1568{{{#!comment
     1569Ekzistas ankaŭ la `not` ŝlosilvorto (vidu la ligitan css-dokumenton por detaloj).
     1570Ĉi tio estas implementita, sed verŝajne ne tre utila. Bonvolu aldoni dokumentadon.
     1571}}}