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


Ignore:
Timestamp:
2021-11-07T18:52:06+01:00 (3 years ago)
Author:
leni
Comment:

created fr: translation

Legend:

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

    v1 v1  
     1[[TranslatedPages(revision=196)]]
     2[[PageOutline(2-10,Table des Matières)]]
     3= Mise en œuvre de MapCSS =
     4La mise en œuvre de [osmwiki:MapCSS/0.2 MapCSS (en)] de JOSM est utilisée pour les fonctionnalités :
     5
     6* [wikitr:/Styles Modèles de rendu de cartes]
     7* [wikitr:/Rules Règles de Validation], voir le [wikitr:/Help/Validator/MapCSSTagChecker vérificateur d'attributs MapCSS] pour la partie spéciale réservée aux règles.
     8* [wikitr:/Help/Action/Search Fenêtre Rechercher]
     9
     10
     11== Structure générale ==
     12Une feuille de style MapCSS comporte des règles de la forme suivante
     13{{{
     14#!mapcss
     15selector {
     16    prop: value;
     17    /* ... */
     18    prop: value;
     19    /* and/or */
     20    set: class;
     21    set: .class;
     22}
     23}}}
     24L'algorithme pour trouver des styles (modèles) pour un objet donné est le suivant :
     25{{{
     26 - pour chaque règle :
     27     Si le sélecteur s'applique, définir les propriétés du bloc { }
     28 - analyser la liste finale des propriétés et générer des styles à partir d'elle
     29}}}
     30
     31MapCSS utilise le format '''commentaire''' de CSS (`/* ... */`). Notez que lorsque vous commentez de grandes parties d'un fichier MapCSS, certaines constructions peuvent provoquer une fin inattendue du commentaire, par exemple :
     32{{{
     33#!mapcss
     34/*
     35*[highway][name =~ /^R(\.|:)? .*/] { /* la fin de l'expression régulière définit la fin inattendue du commentaire */
     36        throwWarning: tr("foo");
     37}
     38*/
     39}}}
     40
     41
     42== Sélecteurs ==
     43Les ''sélecteurs'' désignent les expressions de filtre d'une règle MapCSS. La règle n'est appliquée à un objet de la carte que si ses sélecteurs correspondent à l'objet.
     44
     45Les sélecteurs de MapCSS sont différents de ceux du CSS standard pour le Web. MapCSS ne prend en charge qu'un sous-ensemble des sélecteurs CSS standard, mais les étend avec des sélecteurs supplémentaires requis pour les données OSM.
     46
     47Quelques exemples simples :
     48{{{
     49#!mapcss
     50/* appliqué aux chemins avec un attribut highway=residential */
     51way[highway=residential] {  /* les modèles */}
     52
     53/* appliqués aux nouveaux chemins fermés sur le calque 1, à condition qu'ils aient les attributs amenity=parking et access=customers,
     54 * et que le niveau de zoom soit compris entre 11 et 14.
     55 */
     56way|z11-14[amenity=parking][access=customers]:closed:new::layer_1 {...}
     57
     58
     59area[amenity=parking][access=customers], area[amenity=parking][!access] {...}
     60relation[type=route][route=foot] > way::relation_underlay {..}
     61}}}
     62
     63Les différents éléments ('''type'''-, '''zoom'''- ,sélecteur '''condition''', '''pseudo classes''', '''layer identifier''', '''grouping''' et '''child combinator''') sont expliqués ci-dessous.
     64
     65=== Sélecteur de types===
     66{{{#!th valign=top
     67'''Selecteur'''
     68}}}
     69{{{#!th valign=top
     70'''Description'''
     71}}}
     72|-------------------------------------------------------------------------------
     73{{{#!td align=center  valign=top
     74*
     75}}}
     76{{{#!td align=left  valign=top   
     77Correspond à n'importe quel objet.
     78}}}
     79|-------------------------------------------------------------------------------
     80{{{#!td align=center  valign=top
     81`node`, `way`, `relation`
     82}}}
     83{{{#!td align=left  valign=top   
     84Correspond aux objets osm du type donné.
     85}}}
     86|-------------------------------------------------------------------------------
     87{{{#!td align=center  valign=top
     88`area`
     89}}}
     90{{{#!td align=left  valign=top   
     91Correspond à n'importe quelle zone, que le bord de la zone soit modélisé par un seul chemin ou par un ensemble de chemins reliés entre eux par une relation.
     92{{{
     93#!mapcss
     94area[natural=beach] {...}
     95/* ... est équivalent à ... */
     96way[natural=beach], relation[type=multipolygon][natural=beach] {...}
     97}}}
     98Notez que `area` sélectionne également les chemins non fermés, il peut donc être utile d'ajouter la pseudo-classe `:closed`. Le validateur JOSM émettra un avertissement pour les chemins non fermés qui ont un style de zone.
     99}}}
     100|-------------------------------------------------------------------------------
     101{{{#!td align=center  valign=top
     102`meta`
     103}}}
     104{{{#!td align=left  valign=top   
     105Le sélecteur `meta` démarre une règle spéciale qui doit se trouver au début du fichier. Elle donne quelques informations générales sur la feuille de style. Tous les logiciels qui prennent en charge MapCSS devraient être en mesure d'analyser ces sections sans erreur. N'utilisez donc pas d'extensions syntaxiques exotiques dans cette partie..
     106{{{
     107#!mapcss
     108meta {
     109    title: "Parking lanes";   /* titre affiché dans le menu */
     110    icon: "logo_16x16x8.png"; /* petite icône affichée dans le menu à côté du titre */
     111    version: "1.2";           /* la version du style */
     112    description: "...";       /* une ou deux phrases de description du style */
     113    author: "...";            /* le(s) auteur(s) du style */
     114    link: "https://...";      /* URL vers la page web du style */
     115    min-josm-version: 6789;   /* la version minimale de JOSM sur laquelle ce style fonctionne */
     116}
     117}}}
     118}}}
     119|-------------------------------------------------------------------------------
     120{{{#!td align=center  valign=top
     121`canvas`
     122}}}
     123{{{#!td align=left  valign=top   
     124Certaines informations de style non spécifiques aux nœuds, aux chemins ou aux relations.
     125{{{
     126#!mapcss
     127canvas {
     128    fill-color: #ffffea; /* l'ancienne couleur de fond est dépréciée depuis la r7110 */
     129    default-points: false;
     130    default-lines: false;
     131}
     132}}}
     133{{{#!th
     134'''Clé'''
     135}}}
     136{{{#!th
     137'''Description'''
     138}}}
     139{{{#!th
     140'''Format des valeurs'''
     141}}}
     142{{{#!th
     143'''Valeur par défaut'''
     144}}}
     145|-
     146{{{#!td align=center
     147`fill-color`
     148}}}
     149{{{#!td
     150Spécifie la couleur globale de remplissage/arrière-plan (`background-color` est déprécié depuis la r7110).
     151}}}
     152{{{#!td align=center
     153''Color'' (nom de couleur)
     154}}}
     155{{{#!td align=center
     156`black`
     157}}}
     158|-
     159{{{#!td align=center
     160`default-points`
     161}}}
     162{{{#!td
     163Si le style de point par défaut doit être ajouté aux nœuds auxquels aucun style ne s'applique.
     164}}}
     165{{{#!td align=center
     166''Boolean'' (Booléen)
     167}}}
     168{{{#!td align=center
     169`true`
     170}}}
     171|-
     172{{{#!td align=center
     173`default-lines`
     174}}}
     175{{{#!td
     176Si le style de ligne par défaut doit être ajouté aux chemins pour lesquels aucun style ne s'applique.
     177}}}
     178{{{#!td align=center
     179''Boolean'' (Booléen)
     180}}}
     181{{{#!td align=center
     182`true`
     183}}}
     184}}}
     185
     186=== Sélecteur enfant ===
     187Si un nœud fait partie d'un chemin, on dit qu'il est ''enfant'' de ce chemin. De même, si un nœud, un chemin, ou une relation est membre d'une relation, on dit qu'il est ''enfant'' de cette relation.
     188
     189Dans MapCSS, vous pouvez utiliser un '''sélecteur enfant''' qui ne correspond que si l'objet parent et l'objet enfant correspondent.
     190
     191Exemple:
     192{{{
     193#!mapcss
     194/*
     195 * ne correspond que pour un chemin qui est un enfant d'une relation avec les attributs
     196 * type=route et route=foot
     197 */
     198relation[type=route][route=foot] > way {...}
     199}}}
     200
     201Notes:
     202* Le sélecteur de zoom et l'identifiant de calque ne sont pertinents que pour la partie à droite du signe >.
     203* Les fonctions ''prop()'' et ''is_prop_set()'' ne sont supportées que sur la partie droite du signe >.
     204* Les fonctions ''parent_tag'' et ''parent_tags'' (voir ci-dessous) peuvent être utilisées pour accéder aux tags du ou des parents.
     205* Pour des raisons de compatibilité avec la norme MapCSS 0.2, la fonction `relation[type=route][route=foot] chemin {/*...*/}`, sans le signe supérieur `>` est également supportée. Toutefois, aucun [#Linkselector|Sélecteur de lien] ne peut être spécifié dans ce cas.
     206
     207=== Sélecteur parent ===
     208En plus des sélecteurs enfant, JOSM supporte la notion de '''sélecteur parent'''. Notez que les sélecteurs parent sont une extension de MapCSS spécifique à JOSM qui n'est pas présente dans les autres implémentations de MapCSS.
     209
     210Tout comme le sélecteur enfant, le sélecteur parent ne correspond que si l'objet parent et l'objet enfant correspondent. Contrairement au sélecteur enfant, le caractère < est utilisé.
     211
     212Contrairement au sélecteur enfant, l'objet parent sera "sélectionné". En d'autres termes, les propriétés du Bloc de Déclaration `{{{...}}}` s'appliquent à l'objet situé à droite du signe "<".
     213
     214Exemple:
     215{{{
     216#!mapcss
     217/*
     218 * correspond à un highway dont au moins un nœud est marqué comme traffic_calming=*
     219 */
     220node[traffic_calming] < way[highway] {...}
     221}}}
     222
     223=== Sélecteur de condition ===
     224Les sélecteurs peuvent inclure un ensemble de conditions. Si l'une de ces conditions est évaluée à false, le sélecteur ne correspond pas et la règle de style n'est pas appliquée.
     225
     226Une '''condition d'attribut''' spécifie une condition sur un des attributs d'un objet OSM.
     227
     228[=#condition_selector_operators]
     229{{{#!th valign=top
     230'''Opérateur'''
     231}}}
     232{{{#!th valign=top
     233'''Description'''
     234}}}
     235{{{#!th valign=top
     236'''Exemple'''
     237}}}
     238|-------------------------------------------------------------------------------
     239{{{#!td align=center  valign=top
     240`=`
     241}}}
     242{{{#!td align=left  valign=top   
     243Correspondance exacte de la valeur.
     244}}}
     245{{{#!td align=left  valign=top   
     246{{{
     247#!mapcss
     248way[highway=residential]                    /* est sensible à la casse, c'est-à-dire qu'il ne correspond PAS, par exemple, à highway=Residential ou à Highway=residential */
     249node[name="My name"]                        /* utiliser des guillemets si la clé ou la valeur comporte des espaces */
     250node["name:ru"="Калининград"]               /* utiliser des guillemets si la clé ou la valeur comprend des caractères spéciaux comme des deux-points ou des caractères unicodes */
     251}}}
     252}}}
     253|-------------------------------------------------------------------------------
     254{{{#!td align=center  valign=top
     255`!=`
     256}}}
     257{{{#!td align=left  valign=top   
     258Valeur non équivalente
     259}}}
     260{{{#!td align=left  valign=top   
     261{{{
     262#!mapcss
     263way[highway!=residential]
     264node[name!="My name"]
     265node["name:ru"!="Калининград"]
     266}}}
     267}}}
     268|-------------------------------------------------------------------------------
     269{{{#!td align=center  valign=top
     270`<`, `>`, `<=`, `>=`
     271}}}
     272{{{#!td align=left  valign=top   
     273Comparaison pour les valeurs numériques.
     274
     275}}}
     276{{{#!td align=left  valign=top   
     277{{{
     278#!mapcss
     279node[population >= 50000]                   /* population supérieure ou égale à 50000 */
     280node[ele = 3000]                            /* altitude avec exactement 3000 mètres */
     281}}}
     282}}}
     283|-------------------------------------------------------------------------------
     284{{{#!td align=center  valign=top
     285`^=`
     286}}}
     287{{{#!td align=left  valign=top   
     288Correspondance du préfixe
     289}}}
     290{{{#!td align=left  valign=top   
     291{{{
     292#!mapcss
     293node[name ^= "myprefix"]                    /* la valeur commence par 'myprefix' */
     294}}}
     295}}}
     296|-------------------------------------------------------------------------------
     297{{{#!td align=center  valign=top
     298`$=`
     299}}}
     300{{{#!td align=left  valign=top   
     301Correspondance du suffixe
     302}}}
     303{{{#!td align=left  valign=top   
     304{{{
     305#!mapcss
     306node[name $= "mypostfix"]                   /* la valeur se termine par 'mypostfix' */
     307}}}
     308}}}
     309|-----------------------------------------------
     310{{{#!td align=center  valign=top
     311`*=`
     312}}}
     313{{{#!td align=left  valign=top   
     314Correspondance de sous-chaîne
     315}}}
     316{{{#!td align=left  valign=top   
     317{{{
     318#!mapcss
     319node[name *= "my substring"]                 /* La valeur contient la sous-chaîne 'my substring' */
     320}}}
     321}}}
     322|-------------------------------------------------------------------------------
     323{{{#!td align=center  valign=top
     324`~=`
     325}}}
     326{{{#!td align=left  valign=top   
     327Membre de liste
     328}}}
     329{{{#!td align=left  valign=top   
     330{{{
     331#!mapcss
     332*[vending~=stamps]                          /* la valeur de l'attribut pour l'attribut 'vending' est une liste de valeurs séparées par des ;    */
     333                                            /* et l'une de ces valeurs est 'stamps'                                             */
     334}}}
     335}}}
     336|-------------------------------------------------------------------------------
     337{{{#!td align=center  valign=top
     338`=~`
     339}}}
     340{{{#!td align=left  valign=top   
     341Concordance avec une [https://download.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum Expression régulière]
     342
     343}}}
     344{{{#!td align=left  valign=top   
     345{{{
     346#!mapcss
     347*[name=~/^My_pattern.*/]                    /* la valeur de l'attribut 'name' correspond à l'expression régulière '^My_pattern.*' */
     348                                            /* Notez que les expressions régulières doivent être entourées de /.../                     */                 
     349}}}
     350La Concordance insensible à la casse peut être activée par l'expression drapeau intégrée `(?i)` (voir [https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#CASE_INSENSITIVE Pattern.CASE_INSENSITIVE]).
     351{{{
     352#!mapcss
     353*[name =~ /^(?i)(parking)$/]                 /* Concordance avec parking, Parking, PARKING, PaRkInG,... */ 
     354*[name =~ /^(?U)(\p{Lower})+$/]              /* le nom est composé uniquement de caractères unicode minuscules */                 
     355}}}
     356}}}
     357|-------------------------------------------------------------------------------
     358{{{#!td align=center  valign=top
     359`!~` (depuis la r6455)
     360}}}
     361{{{#!td align=left  valign=top   
     362Concordance négative de l'[https://download.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum expression régulière]
     363
     364}}}
     365{{{#!td align=left  valign=top   
     366{{{
     367#!mapcss
     368*[surface!~/paved|unpaved/]
     369}}}
     370}}}
     371|-------------------------------------------------------------------------------
     372{{{#!td align=center  valign=top
     373`∈` ([https://www.fileformat.info/info/unicode/char/2208/index.htm Caractère Unicode U+2208], depuis la r6609)
     374}}}
     375{{{#!td align=left  valign=top   
     376élément de
     377
     378Concordance quand un objet correspondant au(x) sélecteur(s) de droite contient au moins un élément qui correspond au(x) sélecteur(s) de gauche.
     379
     380}}}
     381{{{#!td align=left  valign=top   
     382{{{
     383#!mapcss
     384*[amenity=parking] ∈ area[amenity=parking] {
     385  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
     386}
     387}}}
     388Trouve les zones avec `amenity=parking` qui contiennent au moins un nœud ou une zone avec `amenity=parking`.
     389Depuis la r15064, cette règle produit un avertissement pour chaque élément à gauche lorsqu'il y a plusieurs correspondances.
     390}}}
     391|-------------------------------------------------------------------------------
     392{{{#!td align=center  valign=top
     393`⊆` ([https://www.fileformat.info/info/unicode/char/2286/index.htm Caractère Unicode U+2286], depuis la r15102)
     394}}}
     395{{{#!td align=left  valign=top   
     396Sous-ensemble de ou égal à
     397
     398Synonyme de `∈`.
     399}}}
     400{{{#!td align=left  valign=top   
     401{{{
     402#!mapcss
     403*[amenity=parking] ⊆ area[amenity=parking] {
     404  throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
     405}
     406}}}
     407
     408}}}
     409|-------------------------------------------------------------------------------
     410{{{#!td align=center  valign=top
     411`⊇` ([https://www.fileformat.info/info/unicode/char/2287/index.htm Caractère Unicode U+2287], depuis la r15102)
     412}}}
     413{{{#!td align=left  valign=top   
     414Combinaison supérieure ou égale à
     415
     416Concordance lorsqu'un objet correspond au(x) sélecteur(s) de droite et est contenu dans un ou plusieurs éléments qui correspondent aux sélecteurs de gauche.
     417
     418}}}
     419{{{#!td align=left  valign=top   
     420{{{
     421#!mapcss
     422area[amenity=parking] ⊇ *[amenity=parking]
     423}}}
     424trouve les nœuds ou les zones avec `amenity=parking` à l'intérieur des zones avec `amenity=parking`. Plus lent que `⊆` et donc pas utile dans les règles du validateur, mais peut être utile dans le dialogue de recherche.
     425
     426}}}
     427|-------------------------------------------------------------------------------
     428{{{#!td align=center  valign=top
     429`⊈` ([https://www.fileformat.info/info/unicode/char/2288/index.htm Caractère Unicode U+2288], depuis la r15102)
     430}}}
     431{{{#!td align=left  valign=top   
     432Ni un sous-ensemble de Ni égal à
     433
     434Concordance lorsqu'un objet correspond au(x) sélecteur(s) de droite et ne contient aucun élément correspondant aux sélecteurs de gauche.
     435
     436}}}
     437{{{#!td align=left  valign=top   
     438{{{
     439#!mapcss
     440*[highway=street_lamp] ⊈ area:closed2[amenity=parking][lit=yes]
     441}}}
     442trouve les zones amenity=parking qui ont lit=yes mais qui ne contiennent pas de lampe.
     443Ajoutez toujours `:closed2` pour éviter les faux positifs car les zones non fermées ne contiennent jamais quelque chose.
     444}}}
     445|-------------------------------------------------------------------------------
     446{{{#!td align=center  valign=top
     447`⊉` ([https://www.fileformat.info/info/unicode/char/2289/index.htm Caractère Unicode U+2289], depuis la r15102)
     448}}}
     449{{{#!td align=left  valign=top   
     450Ni un Sur-ensemble de ni égal à
     451
     452Concordances lorsqu'un objet correspond au(x) sélecteur(s) de droite et n'est pas contenu dans une zone correspondant aux sélecteurs de gauche.
     453
     454}}}
     455{{{#!td align=left  valign=top   
     456{{{
     457#!mapcss
     458area[landuse=residential] ⊉ *[building]
     459}}}
     460trouve les bâtiments qui ne se trouvent pas dans une zone landuse=residential. Notez que cet opérateur est susceptible de produire des faux positifs
     461lorsque vous avez des zones `landuse=residential`qui ne correspondent pas à `:closed2`.
     462}}}
     463|-------------------------------------------------------------------------------
     464{{{#!td align=center  valign=top
     465`⧉` ([https://www.fileformat.info/info/unicode/char/29c9/index.htm Caractère Unicode U+29c9], depuis la r6613)
     466}}}
     467{{{#!td align=left  valign=top   
     468croisement
     469
     470}}}
     471{{{#!td align=left  valign=top   
     472{{{
     473#!mapcss
     474area:closed:areaStyle ⧉ area:closed:areaStyle {
     475  throwOther: tr("Overlapping Areas");
     476}
     477}}}
     478prend en compte l'attribut `layer` si elle est définie (depuis r12986)
     479}}}
     480
     481Depuis la r6554, il est possible de préfixer "value" (c'est-à-dire l'expression après l'opérateur) avec un `*` afin de la "déréférencer" c'est-à-dire la considérer comme une autre clé et obtenir sa valeur). Ainsi, `[key1 = *key2]` ou `[key1=*key2]` compare la valeur de `key1` avec la valeur de `key2`, et `[key =~ */pattern/]` et `[key =~ */pattern/]` considère la valeur de la clé `pattern` comme une expression régulière et la compare avec la valeur de `key`.
     482
     483
     484En outre, vous pouvez tester si un attribut est présent ou non :
     485
     486{{{#!th valign=top
     487'''Condition'''
     488}}}
     489{{{#!th valign=top
     490'''Exemple'''
     491}}}
     492|-------------------------------------------------------------------------------
     493{{{#!td align=left  valign=top
     494Présence d'attribut
     495}}}
     496{{{#!td align=left  valign=top   
     497{{{
     498#!mapcss
     499way[highway]                     /* corresponds à n'importe quel chemin avec un attribut 'highway' (sensible à la casse)                                              */
     500way["name:fr"]                   /* utilisez des guillemets si le nom de l'attribut comprend des caractères spéciaux (espaces blancs, deux-points, caractères unicode, etc.) */
     501}}}
     502}}}
     503|-------------------------------------------------------------------------------
     504{{{#!td align=left  valign=top
     505Absence d'attribut
     506}}}
     507{{{#!td align=left  valign=top   
     508{{{
     509#!mapcss
     510way[!highway]                     /* correspond à tout chemin qui n'a pas d'attribut 'highway' (sensible à la casse).                               */
     511way[!"name:fr"]                   /* utilisez des guillemets si le nom de l'attribut comprend des caractères spéciaux (espaces blancs, deux-points, caractères unicode, etc.) */
     512}}}
     513}}}
     514|-------------------------------------------------------------------------------
     515{{{#!td align=left  valign=top
     516La présence d'un attribut par une [https://download.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#sum expression régulière] correspond (depuis r6547)
     517}}}
     518{{{#!td align=left  valign=top   
     519{{{
     520#!mapcss
     521way[/^addr:/]                     /* correspond à toute clé `addr:*` */
     522}}}
     523}}}
     524|-------------------------------------------------------------------------------
     525{{{#!td align=left  valign=top
     526Absence de balise par correspondance d'expression régulière
     527}}}
     528{{{#!td align=left  valign=top   
     529{{{
     530#!mapcss
     531way[!/^addr:/]                    /* correspond à tout chemin qui n'a pas de balise 'addr:*'. */
     532}}}
     533}}}
     534
     535Vous pouvez tester si la valeur d'une balise est une valeur de vérité logique. La valeur est évaluée à true, si elle est soit "oui", "vrai", ou "1". Toutes les autres valeurs sont interprétées comme étant fausses.
     536
     537{{{#!th valign=top
     538'''Condition'''
     539}}}
     540{{{#!th valign=top
     541'''Exemple'''
     542}}}
     543|-------------------------------------------------------------------------------
     544{{{#!td align=left  valign=top
     545Test de la valeur vraie
     546}}}
     547{{{#!td align=left  valign=top   
     548{{{
     549#!mapcss
     550way[oneway?]                  /* correspond à n'importe quel chemin avec une valeur vraie dans l'attribut 'oneway'.  */
     551}}}
     552}}}
     553|-------------------------------------------------------------------------------
     554{{{#!td align=left  valign=top
     555Test pour une valeur faux (depuis r6513)
     556}}}
     557{{{#!td align=left  valign=top   
     558{{{
     559#!mapcss
     560way[oneway?!]                  /* correspond à n'importe quel chemin avec une valeur faux dans l'attribut 'oneway'  */
     561}}}
     562}}}
     563
     564=== Sélecteur de territoire ===
     565Vous pouvez tester si un objet est situé à l'intérieur ou à l'extérieur d'un territoire spécifique. JOSM dispose d'une base de données interne pour cela. Le [source:/trunk/resources/data/boundaries.osm fichier des territoires] peut être téléchargé et il faut l'ouvrir dans JOSM pour l'examiner [attachment:wiki:Help/Styles/MapCSSImplementation:boundaries.png (aperçu de la capture d'écran)]. Il contient les frontières de tous les pays du monde. Pour des raisons de performance, les frontières sont simplifiées. Elles peuvent être affinées pour des cas particuliers sur demande. Les territoires ont pour "attribut" leurs [https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 codes ISO_3166-1_alpha-2]. Les États-Unis, le Canada, la Chine, l'Inde et l'Australie ont des frontières supplémentaires pour leurs subdivisions. Consultez les exemples suivants pour savoir comment utiliser les sélecteurs de territoires. Les sélecteurs de territoire sont moins utiles dans les modèles de coloriage et peuvent être très lourds en ressources. Cependant, ils sont beaucoup plus utiles pour les [wikitr:/Help/Validator/MapCSSTagChecker règles de validation basées sur mapcss]. Pour sélectionner les territoires dont la circulation est à gauche ou à droite, il existe un moyen plus simple, voir les [#PseudoClasses Pseudo Classes]. Voir #10387 pour l'implémentation principale de cette fonctionnalité.
     566
     567{{{
     568#!mapcss
     569                                      /* correspond à tout nœud situé …                             */
     570node[inside("FR")]                    /* … à l'intérieur de la France (y compris les territoires d'outre-mer) */
     571node[inside("FX")]                    /* … à l'intérieur de la France métropolitaine (c'est-à-dire seulement la   
     572                                         partie continentale avec ses îles proches incluant la Corse)   */
     573node[inside("EU")]                    /* … au sein de l'Union européenne                         */
     574node[inside("FR,DE")]                 /* … à l'intérieur de la France __OU__ à l'intérieur de l'Allemagne            */
     575node[inside("US-FL")]                 /* … à l'intérieur de l'État américain de la Floride                       */
     576
     577node[outside("FR")]                   /* … hors de France                                    */
     578node[outside("FR,DE")]                /* … hors de France __ET__ hors d'Allemagne         */
     579node[inside("US")][outside("US-FL")]  /* … à l'intérieur des États-Unis, à l'exception de l'État de Floride           */
     580}}}
     581
     582=== Sélecteur de lien === #Linkselector
     583Dans un sélecteur d'enfant, vous pouvez formuler des conditions sur le lien entre un objet parent et un objet enfant.
     584
     585Si le parent est une relation, vous pouvez formuler des conditions sur le ''role'' d'un objet membre dans cette relation.
     586{{{
     587#!mapcss
     588relation[type=route] >[role="link"] way {  /* correspond à tout chemin membre de la relation route avec le rôle 'link' */
     589   color: blue;
     590}
     591}}}
     592
     593{{{#!th valign=top
     594'''Opérateur'''
     595}}}
     596{{{#!th valign=top
     597'''Description'''
     598}}}
     599{{{#!th valign=top
     600'''Exemple'''
     601}}}
     602|-------------------------------------------------------------------------------
     603{{{#!td align=center  valign=top
     604`=`
     605}}}
     606{{{#!td align=left  valign=top   
     607Correspondance exacte du nom du rôle. Le nom `role` est obligatoire dans ce contexte.
     608}}}
     609{{{#!td align=left  valign=top   
     610{{{
     611#!mapcss
     612relation >[role=residential] way           
     613relation >[role="My name"]   way           /* utiliser des guillemets si la valeur du rôle comprend des espaces ou d'autres caractères spéciaux */
     614}}}
     615}}}
     616
     617Les opérateurs `!=`, `^=`, `$=`, `*=`, et `~=` sont également pris en charge. Veuillez vous référer aux [#condition_selector_operators conditions des opérateurs de sélection].
     618
     619Les noeuds dans les chemins et les membres dans les relations sont ordonnés. Vous pouvez formuler des conditions sur la position d'un nœud dans un chemin ou d'un objet membre dans une relation. Les nombres positifs comptent du premier au dernier élément, les nombres négatifs (depuis r8236) comptent du dernier au premier élément.
     620
     621{{{
     622#!mapcss
     623relation[type=route] >[index=1] way {  /* correspond au premier chemin membre de la relation route  */
     624   color: blue;
     625}
     626
     627way >[index=-1] node {  /* correspond au dernier nœud d'un chemin  */
     628   symbol-stroke-color: green;
     629}
     630
     631way!:closed >[index=1] node!:connection,
     632way!:closed >[index=-1] node!:connection {  /* correspond à tous les nœuds extrémité d'un chemin unique */
     633   symbol-stroke-color: green;
     634}
     635}}}
     636
     637=== Sélecteur de zoom ===
     638Vous pouvez agrémenter un sélecteur de type d'un '''sélecteur de zoom'''. Le sélecteur de zoom interdit l'utilisation de plusieurs niveaux de zoom auxquels la règle MapCSS correspondante est appliquée.
     639
     640{{{#!th align=center valign=top
     641'''Exemple'''
     642}}}
     643{{{#!th align=center valign=top
     644'''Description'''
     645}}}
     646|-------------------------------------------------------------------------------
     647|| `way|z12 {...}` || Au niveau 12 du zoom ||
     648|| `way|z13-15 {...}` || De 13 à 15 ||
     649|| `way|z16- {...}` || 16 et plus ||
     650|| `way|z-12 {...}` || 12 et moins ||
     651|| `way {...}` || n'importe quel niveau de zoom ||
     652
     653La définition précise des échelles pour chaque niveau de zoom peut changer à l'avenir. En règle générale, vous pouvez vous attendre à être approximativement au niveau de zoom ''n'' lorsque l'imagerie affiche des tuiles de carte glissante de niveau ''n''.
     654
     655=== Les pseudo-classes === #PseudoClasses
     656Consultez la [/doc/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.PseudoClasses.html doc Java] pour obtenir la liste actualisée des pseudo-classes prises en charge par l'implémentation MapCSS de JOSM.
     657
     658||= Class =||= Description =||
     659|| `:closed` || vrai pour les chemins dont le premier nœud est le même que le dernier et pour toute relation multipolygon (complètement téléchargée) ||
     660|| `:closed2` || même chose que ci-dessus, mais celle-ci ignore si un multipolygone est téléchargé complètement (depuis r9099) ||
     661|| `:completely_downloaded` || vrai pour une relation dont les membres sont tous téléchargés (depuis r9099) ||
     662|| `:new` || tous les nouveaux objets ||
     663|| `:connection` || vrai pour les nœuds utilisés par plus d'un chemin ||
     664|| `:unconnected` || vrai pour les nœuds qui ne sont utilisés par aucun chemin (depuis r6687) ||
     665|| `:tagged` || Ce que JOSM considère comme étiqueté, c'est-à-dire un objet qui a une clé d'attribut autre que les suivantes : `source*`, `source_ref`, `note`, `comment`, `converted_by`, `created_by`, `watch*`, `fixme`, `FIXME`, `description`, `attribution` (version r4008 ; dans cette liste `*` est global)
     666|| `:righthandtraffic` || vrai s'il y a une circulation à droite à l'emplacement actuel (depuis r7193) ; voir [wikitr:/left-right-hand-traffic circulation à gauche ou à droite] pour obtenir une capture d'écran des zones ||
     667|| `:clockwise` || Si le chemin est fermé et orienté dans le sens des aiguilles d'une montre, ou non fermé et que le 1er, le 2e et le dernier nœud sont dans l'ordre des aiguilles d'une montre. ||
     668|| `:anticlockwise` || Si le chemin est fermé et orienté dans le sens inverse des aiguilles d'une montre, ou non fermé et que le 1er, le 2e et le dernier nœud sont dans l'ordre inverse des aiguilles d'une montre. ||
     669|| `:unclosed_multipolygon` || vrai pour les relations multipolygonales non fermées entièrement chargées (depuis r8252) ||
     670|| `:open_end` || pour sélectionner les nœuds d'extrémité des relations multipolygone non fermées avec `relation:unclosed_multipolygon >:open_end node` (depuis r8252) ||
     671|| `:in-downloaded-area` || vrai si un objet est dans la zone source et faux s'il est dans la zone hachurée (depuis r8495). ||
     672|| `:selected` || vrai si un objet est sélectionné dans l'éditeur (depuis r9341). ||
     673|| `:modified` || objets modifiés et nouveaux (depuis r7193). ||
     674Vous pouvez aussi inverser les pseudo-classes. Par exemple, `!:new` pour tous les anciens objets.
     675
     676=== Identifiant de calque ===
     677Les calques peuvent être utilisés pour créer plusieurs modèles pour un même objet. Voici un exemple :
     678{{{
     679#!mapcss
     680way[highway=secondary] {
     681    width: 3;
     682    color: yellow;
     683}
     684
     685way[highway=tertiary] {
     686    width: 2;
     687    color: orange;
     688}
     689
     690way[access][access!=yes]::non_public_access_layer {
     691    width: +2;
     692    color:red;
     693    dashes: 2;
     694    object-z-index:-1.0;
     695}
     696
     697way[bridge]::bridge_layer {
     698    width: +3;
     699    color:#000080;
     700    opacity:0.5;
     701    object-z-index:1.0;
     702}
     703}}}
     704Cela dessine toutes les routes secondaires et tertiaires respectivement en jaune et en orange. Toutes les routes avec un tag d'accès autre que yes auront un modèle de ligne supplémentaire en dessous ('''`object-z-index:-1.0;`''') de la ligne principale. Si cette partie de la rue est un pont, elle sera également recouverte d'un bleu semi-transparent. La valeur de la largeur relative ('''`width: +2;`''') fait référence à la largeur sur le calque par défaut (2 ou 3 dans ce cas).
     705
     706Le nom du calque peut être n'importe quel identifiant.
     707
     708Si vous omettez le calque dans le sélecteur, c'est la même chose que d'utiliser `::default`.
     709
     710Un exemple de plus :
     711{{{
     712#!mapcss
     713node[amenity=parking] {
     714    icon-image: "presets/vehicle/parking/parking.svg";    /* affiche l'icône de parking (interne de josm) dans le calque par défaut */
     715    text: ref;                                            /* affiche la valeur de la clé ref sous forme de texte dans le calque par défaut */
     716}
     717
     718node[amenity=parking][fee=yes]::fee {
     719    icon-image: "presets/money/exchange.svg";             /* affiche l'icône (interne à josm) pour les bureaux de change dans le calque des tarifs */
     720    icon-offset-x: 14;                                    /* décaler l'icône */
     721    icon-offset-y: -12;                                   /* décaler l'icône */
     722    text: charge;                                         /* affiche la valeur de la clé du coût sous forme de texte dans le calque des tarifs. */
     723    text-offset-x: 16;                                    /* décaler le texte */
     724    text-offset-y: 17;                                    /* décaler le texte */
     725}
     726}}}
     727Le résultat ressemble à ceci
     728
     729[[Image(Help/Styles/MapCSSImplementation:multiple_icons_and_texts.png,link=)]]
     730
     731En outre, vous pouvez utiliser le calque * pour remplacer et initialiser tous les calques. \\
     732Il remplace toutes les sous-parties existantes, donc
     733
     734{{{
     735#!mapcss
     736way::A { a; }
     737way::B { b; }
     738way::* { c; }
     739}}}
     740est équivalent à
     741{{{
     742#!mapcss
     743way::A { a; }
     744way::B { b; }
     745way::A { c; }
     746way::B { c; }
     747}}}
     748Et il initialise de nouvelles sous-parties. En d'autres termes :
     749{{{
     750#!mapcss
     751way::* { a; }
     752way::A { b; }
     753}}}
     754est équivalent à
     755{{{
     756#!mapcss
     757way::A {}
     758way::* { a; }
     759way::A { b; }
     760}}}
     761qui à son tour est identique à
     762{{{
     763#!mapcss
     764way::A { a; }
     765way::A { b; }
     766}}}
     767ou à
     768{{{
     769#!mapcss
     770way::A { a; b; }
     771}}}
     772
     773=== Grouper ===
     774Les règles ayant un bloc de déclaration commun peuvent être regroupées en une seule :
     775{{{
     776#!mapcss
     777area[landuse=forest] { color: green;   width: 2; }
     778area[natural=wood] { color: green;   width: 2; }
     779}}}
     780est identique à
     781{{{
     782#!mapcss
     783area[landuse=forest], area[natural=wood] { color: green;   width: 2; }
     784}}}
     785
     786=== Classes ===
     787Vous pouvez attribuer des classes aux éléments correspondants et définir d'autres sélecteurs à l'aide de ces classes :
     788
     789{{{
     790#!mapcss
     791/* attribution des classes */
     792selector {
     793  set class;
     794  /* ou de manière équivalente */
     795  set .class;
     796}
     797
     798/* classes correspondantes */
     799way.class, node[foo=bar].class {
     800  /* ... */
     801}
     802}}}
     803
     804Exemple d'attribution/de correspondance d'une classe nommée `path` :
     805{{{
     806#!mapcss
     807way[highway=footway] { set path; color: #FF6644; width: 2; }
     808way[highway=path]    { set path; color: brown; width: 2; }
     809way.path { text:auto; text-color: green; text-position: line; text-offset: 5; }
     810}}}
     811Vous pouvez aussi utiliser la négation des classes. Par exemple, `way !.path` pour tous les chemins qui ne font pas partie de la classe ''.path''.
     812
     813=== Traitement Conditionnel @supports ===
     814Les règles @supports sont utilisées pour sauter une section du modèle dans certaines conditions. Typiquement, vous souhaitez utiliser une fonctionnalité introduite dans une version plus récente de JOSM, mais vous souhaitez avoir un modèle de repli pour les utilisateurs de clients JOSM plus anciens. Cette fonctionnalité est apparue avec la r8087. Exemple :
     815{{{
     816#!mapcss
     817@supports (min-josm-version: 9789) {
     818    way[highway] {
     819        width: 4;
     820        color: orange;
     821    }
     822    /* nouveaux trucs fantaisistes */
     823    /* ... */
     824}
     825
     826@supports (max-josm-version: 9788) {
     827    way[highway] {
     828        width: 4;
     829        color: blue;
     830    }
     831    /* mode de repli, en utilisant des fonctions plus simples */
     832    /* ... */
     833}
     834
     835@supports (icon-offset-x) {
     836    /* seulement si la propriété icon-offset-x property est supportée */
     837    node[amenity] {
     838        icon-offset-x: 5;
     839    }
     840}
     841}}}
     842
     843La syntaxe correspond étroitement à la [https://drafts.csswg.org/css-conditional/ syntaxe css (en)] officielle. Les conditions suivantes sont prises en charge :
     844
     845{{{#!th
     846'''Condition'''
     847}}}
     848{{{#!th
     849'''Description'''
     850}}}
     851|-
     852{{{#!td
     853(''<mapcsskey>'')
     854}}}
     855{{{#!td
     856Vérifie si une certaine clé mapcss est supportée, par exemple `repeat-image` ou `icon-offset-x`.
     857}}}
     858|-
     859{{{#!td
     860(min-josm-version: ''<nombre>'')
     861}}}
     862{{{#!td
     863N'inclue la section `@supports` que lorsque la version actuelle de JOSM est supérieure ou égale au nombre spécifié.
     864}}}
     865|-
     866{{{#!td
     867(max-josm-version: ''<nombre>'')
     868}}}
     869{{{#!td
     870N'inclue la section `@supports` que lorsque la version actuelle de JOSM est inférieure ou égale au nombre spécifié.
     871}}}
     872|-
     873{{{#!td
     874(user-agent: ''<chaîne de caractères>'')
     875}}}
     876{{{#!td
     877N'inclue la section `@supports` que lorsque le nom de l'éditeur / restituteur correspond à la chaîne donnée. Dans JOSM, la seule valeur acceptée est `josm`.
     878}}}
     879
     880Les conditions peuvent être combinées avec `and` :
     881
     882{{{
     883#!mapcss
     884@supports (min-josm-version: 8087) and (max-josm-version: 8200) {
     885 /* uniquement pour les versions 8087 à 8200 de JOSM */
     886}
     887}}}
     888
     889D'autres opérateurs logiques comme `or` et `not` peuvent également être utilisés. Les parenthèses sont nécessaires si vous voulez combiner différents opérateurs logiques :
     890
     891{{{
     892#!mapcss
     893@supports ((min-josm-version: 8087) and (max-josm-version: 8200)) or (user-agent: myEditor) {
     894  /* pour les versions 8087 à 8200 de JOSM et pour l'éditeur appelé "myEditor" */
     895}
     896}}}
     897
     898Étant donné que les règles @supports ne sont prises en charge qu'à partir de la version r8087 de JOSM, vous devez également spécifier cette version minimale de JOSM dans le méta-sélecteur :
     899{{{
     900#!mapcss
     901meta {
     902    min-josm-version: "8087"; /* Ce modèle utilise les règles @supports */
     903    /* ... */
     904}
     905}}}
     906
     907
     908== Modèles de rendu ==
     909Les [wikitr:/Help/Dialog/MapPaint/StyleSettings paramètres des modèles] sont utilisés pour fournir à l'utilisateur des paramètres pour personnaliser un modèle de coloriage. L'utilisateur peut les utiliser dans la [wikitr:/Help/Dialog/MapPaint fenêtre Coloriage]. Les `type` de paramètres suivants sont disponibles :
     910* `boolean` (voir r7450)
     911* `double` ''(double)'' (depuis r15731, voir #10435)
     912* `string` ''(chaîne de caractères)'' (depuis r15731, voir #10435)
     913* `color` ''(couleur)'' (depuis r16843, voir #10435)
     914
     915=== Paramètres de type `boolean` ===
     916Créez un paramètre de type `boolean` ''(booléen)'' :
     917{{{
     918#!mapcss
     919setting::highway_casing {
     920  type: boolean;
     921  label: tr("Dessiner l'habillage du chemin");
     922  default: true;
     923}
     924}}}
     925
     926Utilisez un paramètre de type `boolean`:
     927{{{
     928#!mapcss
     929way[highway][setting("highway_casing")] {
     930  casing-width: 2;
     931  casing-color: white;
     932}
     933}}}
     934
     935=== Paramètres de type `double` ===
     936Créez un paramètre de type `double` :
     937{{{
     938#!mapcss
     939setting::place_font_size {
     940  type: double;
     941  label: tr("Définir la taille de la police du nom du lieu...");
     942  default: 11;
     943}
     944}}}
     945
     946Utilisez un paramètre de type `double`:
     947{{{
     948#!mapcss
     949node.place, way.place, area.place {
     950  font-size: setting("place_font_size");
     951}
     952}}}
     953
     954=== Paramètres de type `string` ===
     955Créez un paramètre de type `string` ''(chaîne de caractères)'' :
     956{{{
     957#!mapcss
     958setting::textdisplay {
     959  type: string;
     960  label: tr("clé utilisée pour l'affichage");
     961  default: "name"; /* examples for usage: alt_name, old_name, addr:housename, ref, operator, ... */
     962}
     963}}}
     964
     965Utilisez un paramètre de type `string`:
     966{{{
     967#!mapcss
     968way {
     969  text: tag(setting("textdisplay"));
     970}
     971}}}
     972
     973=== Paramètres de type `color` ===
     974Créez un paramètre de type `color`. La couleur par défaut `default` peut être n'importe quelle couleur, comme indiqué dans les [wikitr:/Help/Styles/MapCSSImplementation#Propertyvaluesexplanations explications sur les valeurs des Propriétés] :
     975{{{
     976#!mapcss
     977setting::colordisplay {
     978  type: color;
     979  label: tr("kclé utilisée pour l'affichage");
     980  default: colorDisplayCustomPref#FF00FF;
     981}
     982}}}
     983
     984Utilisez un paramètre de type `color`:
     985{{{
     986#!mapcss
     987way {
     988  color: setting("colordisplay");
     989}
     990}}}
     991
     992=== Paramètres de regroupement ===
     993Des paramètres similaires peuvent être regroupés en définissant des ''settings groups'' ''(groupes de paramètres)'' (depuis la r15289) :
     994
     995{{{
     996#!mapcss
     997settings::my_group {
     998  label: tr("mon merveilleux groupe");
     999  icon: "my_beautiful_icon";
     1000}
     1001}}}
     1002
     1003L'étiquette est obligatoire, l'icône est facultative.
     1004
     1005Une fois qu'un groupe de paramètres est défini, il peut être référencé à partir de tous les paramètres qui lui appartiennent :
     1006
     1007{{{
     1008#!mapcss
     1009setting::hide_icons {
     1010  type: boolean;
     1011  label: tr("Masquer les icônes en cas de faible zoom");
     1012  default: true;
     1013  group: "my_group";
     1014}
     1015}}}
     1016
     1017Les groupes de paramètres sont affichés sous forme de sous-menus dans le menu des paramètres de style. Si au moins deux paramètres appartiennent à un groupe, un élément de menu spécial "Toggle all settings" ''(Permuter tous les paramètres)'' permet d'activer/désactiver rapidement tous les paramètres de ce groupe en une seule fois. Exemple d'utilisation :  [wiki:/Styles/MapWithAI Modèle Cartographie avec IA (en)].
     1018
     1019
     1020== Caractéristiques ==#Properties
     1021=== Caractéristiques générales ===
     1022||=  '''Clé''' =||= '''Description''' =||= '''Format des Valeurs''' =||= '''Valeur par Défaut''' =||
     1023|| `z-index` || Précise l'ordre dans lequel les objets sont dessinés : Les objets avec un z-index plus élevé sont dessinés au-dessus des objets avec un z-index plus faible || ''Nombre'' (peut être négatif) ||  0  ||
     1024|| `major-z-index` || Similaire à `z-index`, mais il a une priorité plus élevée que `z-index`. Donc si un objet a un `major-z-index` plus élevé que l'autre, il est dessiné en haut. Si le `major-z-index` est le même, `z-index` décide. || ''Nombre'' (peut être négatif) || Dépend de l'élément du modèle : \\area (zone) : 1, \\casing (enveloppe) : 2, \\left-/right-casing (enveloppe gauche/droite) : 2.1, \\line-pattern (modèle de ligne) : 2.9, \\line (ligne) : 3, \\point : 4, \\default-point (point par défaut) : 4.1, line-text (texte de la ligne) : 4.9, \\point-text (texte du point) : 5 ||
     1025|| `object-z-index` || Similaire à `z-index`, mais avec une priorité inférieure. Contrôle l'ordre de coloriage pour les objets qui se chevauchent. Par exemple, pour deux chemins qui se croisent avec du texte : Utilisez `z-index` ou `major-z-index` si vous voulez d'abord dessiner les deux lignes et ensuite les deux légendes. Utilisez `object-z-index` si l'un des chemins doit être complètement au-dessus de l'autre. || ''Nombre'' (peut être négatif) ||  0  ||
     1026|| `modifier` || Meilleur contrôle, si un symbole de ligne/nœud par défaut est généré par JOSM. Cela se produit lorsqu'il n'y a pas de style approprié (`modifier=false`) trouvé sur une couche. || `false` ou `true` || `false` pour le calque par défaut et `true` pour tout autre calque ||
     1027
     1028Notez que pour des raisons de performance, les valeurs des trois z-indexes sont limitées à des valeurs flottantes de 24 bits avec un maximum de 5 chiffres décimaux. Actuellement, le modèle de coloriage interne utilise des valeurs avec max. 2 chiffres avant et après le séparateur décimal. Pour éviter les problèmes, utilisez des valeurs z-indexes entre  -99.999 et +99.999. (Voir aussi #14485)
     1029
     1030=== Modèles d'icônes et de symboles ===
     1031||=  '''Clé''' =||= '''Description''' =||= '''Format des Valeurs''' =||= '''Valeur par Défaut''' =||
     1032|| `icon-image` || L'icône à la position du nœud. Voir également [wikitr:/Help/Styles/Images Images]. || ''Image'' ||  -  ||
     1033|| `icon-opacity` || Opacité de l'image de l'icône || ''Opacité'' ||  1.0  ||
     1034|| `icon-width` || Largeur de l'icône. Si une seule des propriétés `icon-width` et `icon-height` est donnée, l'image sera mise à l'échelle proportionnellement. Si ni la propriété `icon-width` ni la propriété `icon-height` ne sont définies, l'icône gardera sa taille originale. || ''Nombre'' ||  -  ||
     1035|| `icon-height` || Hauteur de l'icône. (Voir `icon-width`) || ''Nombre'' ||  -  ||
     1036|| `icon-offset-x` || Décale l'icône dans le sens horizontal (valeurs positives vers la droite) (depuis r8085) || ''Nombre'' ||  0  ||
     1037|| `icon-offset-y` || Décale l'icône dans la direction verticale (valeurs positives vers le bas) (depuis r8085) || ''Nombre'' ||  0  ||
     1038|| `icon-rotation` || Fait tourner l'icône dans le sens des aiguilles d'une montre ou dans le sens inverse (valeur négative)(depuis r8260) || `[rad]`, `[rad]rad`, `[deg]°`, `[deg]deg`, `[grad]grad`, `[turn]turn` ([https://developer.mozilla.org/en/docs/Web/CSS/angle definition angles (en)]) ou une direction cardinale (par exemple `northeast` ''(nord-est)'' ou `sw` ''(sud-ouest)''); Voir aussi les fonctions `degree_to_radians` et `cardinal_to_radians`. ||  -  ||
     1039|| `icon-position` || Définit la position de l'icône pour les zones. Identique à `text-position` (depuis r11730). || `center` ''(centre)'', `inside` ''(à l'intérieur)'', `line` ''(ligne)'' ||  `center`  ||
     1040|| `symbol-shape` || Affiche un symbole à la position du nœud || `square` ''(carré)'', `circle` ''(cercle)'', `triangle` ''(triangle)'', `pentagon` ''(pentagone)'', `hexagon` ''(hexagone)'', `heptagon` ''(heptagone)'', `octagon` ''(octogone)'', `nonagon` ''(nonagone)'', `decagon` ''(décagone)'' ||  -  ||
     1041|| `symbol-size` || Taille du symbole || ''Nombre'', peut être relative ("+4") ||  10  ||
     1042|| `symbol-stroke-width` || largeur du trait du contour || ''Width'' ''(contour)'' || 1.0 si `symbol-stroke-color` est défini ||
     1043|| `symbol-stroke-color` || couleur de la ligne || ''(Couleur)'' || `#FFC800` si `symbol-stroke-width` est défini ||
     1044|| `symbol-stroke-opacity` || opacité de la ligne || ''Opacité'' ||  1.0  ||
     1045|| `symbol-fill-color` || couleur de remplissage de la forme || ''Couleur'' || `blue`, à moins que `symbol-stroke-width` ou `symbol-stroke-color` ne soit défini ||
     1046|| `symbol-fill-opacity` || opacité du remplissage || ''Opacité'' ||  1.0  ||
     1047|| `text-...`, `font-...` ||||||  propriétés générales du texte & de la police  ||
     1048|| `text-anchor-horizontal` || positionnement horizontal des étiquettes de texte || `left`, `center`, `right` ||  `right`  ||
     1049|| `text-anchor-vertical` || positionnement vertical des étiquettes de texte || `above`, `top`, `center`, `bottom`, `below` ||  `bottom`  ||
     1050|| `text-rotation` || Fait pivoter le texte dans le sens des aiguilles d'une montre ou dans le sens inverse (valeur négative)(depuis r16253) || `[rad]`, `[rad]rad`, `[deg]°`, `[deg]deg`, `[grad]grad`, `[turn]turn` ([https://developer.mozilla.org/en/docs/Web/CSS/angle definition des angles (en)]) ou une direction cardinale (par exemple `northeast` ''(nord-est)'' ou `sw` ''(sud-ouest)''); Voir aussi les fonctions `degree_to_radians` et `cardinal_to_radians`. (Notez que la direction signifie l'orientation du bord supérieur du texte. Cela signifie qu'avec la direction par défaut du nord, le texte se dirige vers l'est (avec une langue allant de gauche à droite). Donc, si vous voulez le par exemple le faire se diriger vers le sud, vous devez définir l'est.) ||  -  ||
     1051
     1052Ne vous fiez pas aux valeurs par défaut des propriétés `symbol-...` (sauf pour `opacity`). Elles sont destinées aux feuilles de style "rapides & grossières" et doivent être définies par une valeur explicite.
     1053
     1054=== Modèles de lignes ===
     1055||=  '''Clé''' =||= '''Description''' =||= '''Format des Valeurs''' =||= '''Valeur par Défaut''' =||
     1056|| `width` || Largeur de la ligne || ''Width'' ''(Largeur)'' ||  -  ||
     1057|| `color` || Couleur de la ligne || ''Color'' ''(Couleur)'' ||  valeur de `fill-color` ou (si elle n'est pas définie) la couleur non marquée par défaut de JOSM (`#808080`) ||
     1058|| `opacity` || Transparence de la ligne. || ''Opacity'' ''(Opacité)'' ||  1.0  ||
     1059|| `dashes` ''(tirets)'' || Un tableau de longueurs alternées marche/arrêt || liste de nombres, par exemple : \\> 15, 5 \\ \\peut s'écrire comme une expression : \\ > `list(3, 4, 5, 6)` \\ \\ou le mot clé `none` \\pour désactiver les tirets ||  -  ||
     1060|| `dashes-offset` || décaler le motif du tableau de tirets d'une certaine quantité || ''Nombre'' (>= 0) ||  0  ||
     1061|| `dashes-background-color` || La couleur à utiliser entre les tirets (facultatif) || ''Color'' ||  -  ||
     1062|| `dashes-background-opacity` || Valeur d'opacité pour le fond des tirets || ''Opacity'' ||  valeur de `opacity`  ||
     1063|| `linecap` || Forme au bout de ligne (voir [https://www.w3.org/TR/SVG/painting.html#StrokeLinecapProperty ici]) || `none`, `round`, `square` ||  `none`  ||
     1064|| `linejoin` || Forme aux angles de la ligne || `round`, `miter`, `bevel` ||  `round`  ||
     1065|| `miterlimit`                                   || S'applique à `linejoin: miter`. Définit le dépassement maximum lorsque les segments de ligne se rencontrent avec un très petit angle || ''Nombre'' (>= 1.0) ||  10.0  ||
     1066|| `offset` || Déplace la ligne vers la gauche ou la droite (en regardant dans la direction du chemin). Cela peut servir à dessiner plusieurs voies pour un seul chemin ou à marquer différemment les côtés gauche et droit d'un chemin. || ''Nombre'' (Une valeur positive déplace la ligne vers la gauche, une valeur négative vers la droite) ||  0  ||
     1067|| `text-position` || défini comme `line`, si le texte doit être dessiné le long de la ligne || `line`, `center` ||  -  ||
     1068|| `text-...`, `font-...` ||||||  propriétés générales du texte & de la police  ||
     1069|| `repeat-image` || image répétée le long d'une ligne ''(depuis r5801)'' || ''Image'' ||  -  ||
     1070|| `repeat-image-width` || Largeur de l'image (facultatif, voir `icon-width`) ''(depuis r5811)'' || ''Nombre'' ||  -  ||
     1071|| `repeat-image-height` || Hauteur de l'image (facultatif) ''(depuis  r5811)'' || ''Nombre'' ||  -  ||
     1072|| `repeat-image-align` || Alignement de l'image. Le bord supérieur ''Top'', inférieur ''bottom'' ou la ligne centrale ''center'' (horizontale) de l'image sera le long de la ligne ''(depuis r5801)'' || `top`, `center`, `bottom` ||  `center`  ||
     1073|| `repeat-image-offset` || Décalage par rapport à la ligne ''(depuis r5801)'' || ''Number'' ||  0  ||
     1074|| `repeat-image-spacing` || Espacement entre les images répétées ''(depuis r5801)'' || ''Number'' ||  0  ||
     1075|| `repeat-image-phase` || Espacement initial en début de ligne ''(depuis r5812)'' || ''Number'' ||  0  ||
     1076|| `repeat-image-opacity` || Opacité de l'image répétée ''(depuis  r16700)'' || ''Number'' ||  1.0  ||
     1077
     1078Toutes ces propriétés (sauf `text-...` et `font-...`) existent aussi avec le préfixe `casing-` Le cadre est un deuxième élément de ligne indépendant, qui est dessiné sous la ligne normale et peut être utilisé pour dessiner un cadre fin autour de la ligne dans une autre couleur.
     1079||=  '''Clé''' =||= '''Description''' =||= '''Format des Valeurs''' =||= '''Valeur par Défaut''' =||
     1080|| `casing-width`               || Largeur de la bordure de part et d'autre de la ligne principale. Dans JOSM < 5214 : largeur totale du cadre || ''Width'' (inverse de `width` si la largeur relative est spécifiée) ||  -  ||
     1081|| `casing-color` || Couleur du cadre || ''Couleur'' ||  valeur de `fill-color` ou (si elle n'est pas définie) la couleur non marquée par défaut de JOSM (`#808080`) ||
     1082|| `casing-opacity` || Transparence du cadre. || ''Opacité'' ||  1.0  ||
     1083|| `casing-`... || ... || ... ||  ...  ||
     1084Comme pour `casing-`, il existe aussi le préfixe `left-casing-` et `right-casing-` Il dessine des lignes supplémentaires à gauche et à droite de la ligne principale.
     1085
     1086=== Modèles des zones ===
     1087||=  '''Clé''' =||= '''Description''' =||= '''Format des Valeurs''' =||= '''Valeur par Défaut''' =||
     1088|| `fill-color` || Couleur avec laquelle remplir la zone. Jusqu'à 11700, la composante alpha était fixée à 50 pour créer un effet de transparence. || ''Couleur'' ||  -  ||
     1089|| `fill-image` || Motif de l'image || ''Image'' ||  -  ||
     1090|| `fill-extent` || Définissez cette propriété pour dessiner uniquement le contour de la zone. Le nombre indique la distance à parcourir depuis le bord de la zone vers le centre. (Si elle n'est pas définie, la zone sera remplie complètement) (depuis r9008) || ''Nombre'' ||  -  ||
     1091|| `fill-extent-threshold` || Définissez cette propriété, pour dessiner la zone entière lorsque le pourcentage de couverture donné est atteint. Il peut être supérieur à 100 %, car la zone couverte est estimée comme **perimeter * extent** ''(étendue du périmètre)''. || ''Nombre'' ||  -  ||
     1092|| `fill-opacity` || Degré de transparence du remplissage ; s'applique à la fois à la couleur et à l'image. || ''Opacité'' || 0.2 ''(depuis r11700, 1.0 avant cela)'' (peut être modifié avec les préférences `mappaint.fillalpha` et `mappaint.fill-image-alpha`)  ||
     1093|| `text-position` || Définissez-le à `center` ''(centre)'', si le texte doit être dessiné au centre de la zone. Définissez-le à `inside` ''(intérieur)'' pour placer le texte complètement à l'intérieur de la zone. ''(depuis la  r11722)'' || `line`, `center`, `inside` ||  -  ||
     1094|| `text-...`, `font-...` ||||||  propriétés générales du texte & de la police  ||
     1095Propriétés requises pour créer un modèle de zone : `fill-color` ou `fill-image`
     1096
     1097=== Propriétés du Texte & de la Police ===
     1098{{{#!th valign=top
     1099'''Clé'''
     1100}}}
     1101{{{#!th valign=top
     1102'''Description'''
     1103}}}
     1104{{{#!th valign=top
     1105'''Format de la Valeur'''
     1106}}}
     1107{{{#!th valign=top
     1108'''Valeur par Défaut'''
     1109}}}
     1110|-------------------------------------------------------------------------------
     1111{{{#!td align=left  valign=top
     1112`text` 
     1113}}}
     1114{{{#!td align=left  valign=top
     1115Comment trouver le texte de l'étiquette. Aucune étiquette n'est affichée, sauf si cette instruction est présente.
     1116}}}
     1117{{{#!td align=left  valign=top
     1118`auto`
     1119   Dérivez le texte automatiquement. Les attributs de nom par défaut sont : "`name:`"+''<LANG>'', "`name`", "`int_name`", "`ref`", "`operator`", "`brand`" et "`addr:housenumber`".
     1120
     1121   Configurez une liste de noms d'attributs dans la préférence "`mappaint.nameOrder`" afin de modifier cette liste. (Après avoir modifié la liste, un redémarrage de JOSM est nécessaire.)
     1122
     1123''String'' : Chaîne de caractères
     1124   Indique la clé de l'attribut dont la valeur est utilisée comme texte.
     1125
     1126''Expressions''
     1127  Vous pouvez saisir une expression pour obtenir le texte à afficher. Exemples :
     1128  * `eval("ceci est un texte statique")` - restitue un texte statique
     1129  * `eval(concat(tag("premier"), "-", tag("second")))` - daffiche les attributs concaténés "premier" et "second"
     1130
     1131`""`
     1132   Pour supprimer le texte d'un ensemble précédent.
     1133}}}
     1134{{{#!td align=center  valign=top
     1135-
     1136}}}
     1137|-------------------------------------------------------------------------------
     1138|| `text-color` || la couleur du texte || ''Couleur'' ||  `white` ''(blanc)'' pour les lignes et les nœuds, `#c0c0c0` pour les zones (préférences des couleurs de "`text`" et de "`areatext`" de JOSM) ||
     1139|| `text-opacity` || transparence du texte || ''Opacité'' ||  1.0  ||
     1140|| `text-offset-x` || décaler le texte horizontalement, (non supporté pour le texte le long de la ligne) || ''Nombre'' ||  0  ||
     1141|| `text-offset-y` (peut aussi s'écrire `text-offset`)  || déplace le texte verticalement, les valeurs positives déplacent le texte vers le haut.  || ''Nombre'' ||  0  ||
     1142|| `text-halo-radius` || taille de la bordure de l'arrière-plan du texte (pour rendre le texte visible sur un fond de couleur similaire) || ''Nombre'' ||  -  ||
     1143|| `text-halo-color` || couleur du halo du texte || ''Couleur'' ||  complément de la couleur du texte  ||
     1144|| `text-halo-opacity` || transparence pour le halo du texte. || ''Opacité'' ||  1.0  ||
     1145|| `font-family` || famille de police || ''String'' Chaîne de caractères ||  "Droid Sans" \\("mappaint.font" préférence JOSM)  ||
     1146|| `font-size` || taille de la police || ''Nombre'' ||  8 \\("mappaint.fontsize" préférence JOSM)  ||
     1147|| `font-weight` || en gras ou non || `bold`, `normal` ||  `normal`  ||
     1148|| `font-style` || en italique ou non || `italic`, `normal` ||  `normal`  ||
     1149
     1150=== Propriétés définies par l'utilisateur ===
     1151* Dans les [wikitr:/Styles Modèles de rendu de cartes] vous pouvez définir n'importe quelle propriété personnalisée, par ex : `crc: CRC32_checksum(tag(name))/429496.7296;`
     1152* Dans les [wikitr:/Rules Règles de Validation] ils doivent être préfixés par un `-`, par ex : `-osmoseItemClassLevel: "1210/1/1";`
     1153
     1154=== Explications sur les valeurs des propriétés ===
     1155'' '''Width''' '' (Largeur)
     1156 - 14.0 (un nombre positif quelconque)
     1157 - `default` (utilise la largeur de ligne par défaut de JOSM, qui est de 2, mais qui peut être modifiée)
     1158 - `thinnest` (le plus fin : dessine la ligne la plus fine possible))
     1159 - +3 ((avec le signe plus devant) ajoute le nombre à la largeur sur le calque par défaut. Cela ne s'applique qu'aux modèles qui ne se trouvent pas sur le calque par défaut, par exemple les surbrillances. Une autre façon d'écrire ceci serait `prop("width","default")+3`. Pour `casing-width`, cela fait référence à la valeur `width` sur le même calque.
     1160
     1161'' '''Image''' ''
     1162 Voir [wikitr:/Help/Styles/Images Images].
     1163
     1164'' '''Color''' '' (Couleur)
     1165 * la couleur est nommée comme dans [https://www.w3.org/TR/css3-color/#svg-color cette liste (en)]
     1166 * style html : '''`#RRGGBB`''', '''`#RGB`''', '''`#RRGGBBAA`'''
     1167 * '''`rgb(/*r*/, /*g*/, /*b*/)`''' - valeur rgb avec des arguments de 0.0 à 1.0
     1168 * '''`rgba(/*r*/, /*g*/, /*b*/, /*alpha*/)`''' - valeur rgb avec alpha
     1169 * '''`hsb_color(/*hue*/, /*saturation*/, /*brightness*/)`''' - couleur de l'espace couleur HSB
     1170
     1171'' '''Opacity''' '' (Opacité)
     1172 * de 0.0 (transparent) à 1.0 (opaque)
     1173
     1174'' '''String''' '' (Chaîne de caractères)
     1175 * toute séquence de caractères, entre guillemets, par exemple `"images/fill.png"`. Si la chaîne est un identifiant, les guillemets sont facultatifs. (Les guillemets et le signe backslash peuvent être échappés.)
     1176
     1177'' '''Number''' '' (Nombre)
     1178 * nombre entier ou à virgule flottante (sous forme simple, par exemple 0.3). En général, il peut être négatif, mais la plupart des propriétés ne prennent pas en charge les nombres négatifs.
     1179 * il a une signification particulière si vous mettez un signe "+" devant (largeur relative)
     1180
     1181
     1182== Expressions d'évaluation ==
     1183Voir la [/doc/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.html#method_summary doc de fonctions Java] pour la liste actualisée des fonctions prises en charge par l'implémentation MapCSS de JOSM.
     1184
     1185 +, -, *, /::
     1186  les opérations arithmétiques
     1187 ||, &&, !::
     1188  les opérations booléennes
     1189 <, >, <=, >=, ==, !=::
     1190  les opérateurs de comparaison
     1191 asin, atan, atan2, ceil, cos, cosh, exp, floor, log, max, min, mod (since r17759), random, round, signum, sin, sinh, sqrt, tan, tanh::
     1192  la signification habituelle, [https://download.oracle.com/javase/8/docs/api/java/lang/Math.html details (en)]
     1193 cond(b, fst, snd)::
     1194 b ? fst : snd::
     1195  si ('''b''') alors '''fst''' sinon '''snd'''
     1196 list(a, b, ...)::
     1197  créer une liste de valeurs, par exemple pour la propriété `dashes`
     1198 get(lst, n)::
     1199  récupérer le ''n''ième élément de la liste ''lst'' (le décompte commence à 0) (''depuis r5699'')
     1200 split(sep, str)::
     1201  divise la chaîne ''str'' aux occurrences de la chaîne séparatrice  ''sep'', renvoie une liste (''depuis r5699'')
     1202 prop(''p_name'')::
     1203  valeur de la propriété ''p_name'' du calque courant, par exemple prop(`"width"`)
     1204 prop(''p_name'', ''layer_name'')::
     1205  propriété du calque ''layer_name''
     1206 is_prop_set(''p_name'')::
     1207  vrai, si la propriété ''p_name'' est définie pour le calque courant
     1208 is_prop_set(''p_name'', ''layer_name'')::
     1209  vrai, si la propriété ''p_name'' est définie pour le calque ''layer_name''
     1210 tag(''key_name'')::
     1211  récupérer la valeur de la clé ''key_name'' de l'objet en question
     1212 parent_tag(''key_name'')::
     1213  récupérer la valeur de la clé ''key_name'' du parent de l'objet
     1214 parent_tags(''key_name'')::
     1215  renvoie toutes les valeurs des parents pour la clé ''key_name'' sous forme de liste ordonnée par un ordre naturel (''depuis r8775'')
     1216 has_tag_key(''key_name'')::
     1217  vrai, si l'objet a un attribut avec la clé donnée
     1218 rgb(''r'', ''g'', ''b'')::
     1219  créer une valeur de couleur (arguments de 0.0 à 1.0)
     1220 hsb_color(''h'', ''s'', ''b'')::
     1221  créer une couleur à partir de la teinte, de la saturation et de la luminosité (arguments de 0.0 à 1.0) (''depuis r6899'')
     1222 red(''clr''), green(''clr''), blue(''clr'')::
     1223  obtenir la valeur des canaux de couleur dans le modèle de couleur rgb
     1224 alpha(''clr'')::
     1225  obtenir la valeur alpha de la couleur donnée (''depuis r6749'')
     1226 length(''str'')::
     1227  longueur d'une chaîne de caractères
     1228 count(''lst'')::
     1229  longueur d'une liste, c'est-à-dire qu'elle compte le nombre de ses éléments (''depuis r7162'')
     1230 length(''lst'')::
     1231  longueur d'une liste (''depuis r5699'') – dépréciée ''depuis r7162''
     1232 any(obj1, obj2, ...)::
     1233  renvoie le premier objet qui n'est pas nul (anciennement coalescence, (''depuis r7164''))
     1234 concat(''str1'', ''str2'', ...)::
     1235  assembler les chaînes de caractères en une seule
     1236 join(''sep'', ''str1'', ''str2'', ...)::
     1237  joindre des chaînes de caractères, avec ''sep'' comme séparateur (''depuis r6737'')
     1238 join_list(''sep'', ''list_name'')::
     1239   joint les éléments de la liste ''list_name'' à une chaîne de caractères séparée par le séparateur ''sep'' (''depuis r8775'')
     1240 upper(''str'')::
     1241   convertit la chaîne de caractères en majuscules (''depuis r11756'')
     1242 lower(''str'')::
     1243   convertit la chaîne de caractères en minuscules (''depuis r11756'')
     1244 title(''str'')::
     1245   convertit la chaîne de caractères en casse-titre (''depuis r17613''] (`"i am FINE"` → `"I Am Fine"`)
     1246 trim(''str'')::
     1247   supprime les espaces en tête et en queue de chaîne de caractères (''depuis r11756'')
     1248 trim_list(''list_name'')::
     1249   supprime les espaces en tête et en queue d'une liste de chaînes de caractères, supprime ensuite les entrées qui sont vides (''depuis r15591'')
     1250 JOSM_search("...")::
     1251  vrai, si la recherche JOSM s'applique à l'objet.
     1252 tr(str, arg0, arg1, ...)::
     1253  traduire de l'anglais vers la langue courante (uniquement pour les chaînes de l'interface utilisateur de JOSM) (''depuis r6506'')
     1254 regexp_test(regexp, string)::
     1255  test si la ''string'' correspond au modèle ''regexp'' (''depuis r5699'')
     1256 regexp_test(regexp, string, flags)::
     1257  tester si ''string'' correspond au schéma ''regexp''; flags est une chaîne qui peut contenir "i" (insensible à la casse), "m" (multiligne) et "s" ("dot all" tout point) (''depuis r5699'')
     1258 regexp_match(regexp, string)::
     1259  Tente de faire correspondre ''string'' au schéma ''regexp''. Renvoie une liste de groupes de capture en cas de succès. Le premier élément (index 0) est la correspondance complète (c'est-à-dire ''string''). Les éléments suivants correspondent aux parties entre crochets de l'expression régulière. (''depuis r5701'')
     1260 regexp_match(regexp, string, flags)::
     1261  Tente de faire correspondre ''string'' au schéma ''regexp''. Renvoie une liste de groupes de capture en cas de succès. Le premier élément (index 0) est la correspondance complète (c'est-à-dire ''string''). Les éléments suivants correspondent aux parties entre crochets de l'expression régulière. Flags est une chaîne qui peut contenir "i" (insensible à la casse), "m" (multiligne) et "s" ("dot all" tout point) (''depuis r5701'')
     1262 substring(str, idx)::
     1263  retourne la sous-chaîne de ''str'', à partir de l'index ''idx'' (0-indexed '''indexation 0''') (''depuis r6534'')
     1264 substring(str, start, end)::
     1265  retourne la sous-chaîne de ''str'', à partir de l'index ''start'' (inclus) jusqu'à ''end'' (exclus) (0-indexed) (''depuis r6534'')
     1266 replace(string, old, new)::
     1267   Remplace toute occurrence de la sous-chaîne ''old'' dans la chaîne ''string'' par le texte ''new''
     1268 osm_id()::
     1269  renvoie l'identifiant OSM de l'objet actuel (''depuis r5699'')
     1270 osm_user_name()::
     1271  renvoie le nom de l'utilisateur OSM qui a touché l'objet en question en dernier. (''depuis r15246'')
     1272 osm_user_id()::
     1273  renvoie l'identifiant de l'utilisateur OSM qui a touché l'objet en question en dernier (''depuis r15246'')
     1274 osm_version()::
     1275  renvoie le numéro de version OSM de l'objet courant (''depuis r15246'')
     1276 osm_changeset_id()::
     1277  renvoie l'identifiant du groupe de modifications dans lequel l'objet actuel a été envoyé en dernier (''depuis r15246'')
     1278 osm_timestamp()::
     1279  renvoie l'heure de la dernière modification de l'objet courant, sous forme d'horodatage (''depuis r15246'')
     1280 parent_osm_id()::
     1281  renvoie l'identifiant OSM du parent de l'objet (correspondant au sélecteur enfant) (''depuis r13094'')
     1282 URL_encode(str)::
     1283  [https://fr.wikipedia.org/wiki/Percent-encoding encodage-pourcent] une chaîne de caractères. Peut être utile pour les URL de données (''depuis r6805'')
     1284 URL_decode(str)::
     1285  [https://fr.wikipedia.org/wiki/Percent-encoding  encodage-pourcent] une chaîne de caractères. (''depuis r11756'')
     1286 XML_encode(str)::
     1287  caractères spéciaux d'échappement dans le xml. Par exemple `<` devient `&lt;`, autres caractères speciaux : `>`, `"`, `'`, `&`, `\n`, `\t` et `\r` (''depuis r6809'')
     1288 CRC32_checksum(''str'')::
     1289  calcule la somme de contrôle CRC32 d'une chaîne de caractères (le résultat est un entier de 0 à 2^32^-1) (''depuis r6908'')
     1290 is_right_hand_traffic()::
     1291  Vérifie si la circulation se fait à gauche ou à droite à l'endroit où vous vous trouvez. (''depuis r7193'')
     1292 number_of_tags()::
     1293  renvoie le nombre d'attributs pour l'objet OSM actuel (''depuis r7237'')
     1294 print(o)::
     1295  imprime une représentation en chaîne de `o` sur la ligne de commande (pour le débogage) (''depuis r7237'')
     1296 println(o)::
     1297  imprime une représentation en chaîne de `o` sur la ligne de commande, suivie d'une nouvelle ligne (pour le débogage) (''depuis r7237'')
     1298 JOSM_pref(''key'', ''default'')::
     1299  Tirez parti des paramètres avancés de JOSM. Cette manière vous permet d'offrir certaines options à l'utilisateur et de rendre le modèle personnalisable. \\(Elle fonctionne avec les chaînes de caractères, les nombres, les couleurs et les valeurs booléennes. (Cette fonction existe depuis la version r3856, mais avec quelques interdictions. `JOSM_pref` renvoie toujours une chaîne, mais dans les versions r7237 et antérieures, la conversion automatique de la chaîne en booléen et en couleur ne fonctionnait pas. Vous pouvez utiliser les solutions de contournement suivantes pour les valeurs booléennes et les couleurs dans les versions r7237 et antérieures : `cond(JOSM_pref("myprefkey", "true")="true", "X", "O")` et `html2color(JOSM_pref("mycolor", "#FF345611"))`. Ces conversions explicites ne devraient plus être nécessaires à partir de la version r7238. La conversion automatique en nombre fonctionne dans toutes les versions. En outre, dans la version r16590, peut être utilisé pour définir les propriétés de couleur. Ainsi `* { set_color: JOSM_pref("pref", #000000); }` créera maintenant une propriété de couleur.)
     1300 setting()::
     1301  pour utiliser un [wikitr:/Help/Styles/MapCSSImplementation#Stylesettings paramètre de modèle] (''depuis r7450'')
     1302 degree_to_radians()::
     1303  renvoie en radians, une direction donnée en degrés (''depuis r8260'')
     1304 cardinal_to_radians()::
     1305  renvoie une direction cardinale en radians (''depuis r8260'')
     1306 waylength()::
     1307  renvoie la longueur du chemin en mètres (''depuis r8253'')
     1308 areasize()::
     1309  renvoie la surface d'un chemin fermé en mètres carrés. (''depuis r8253'')
     1310 at(lat,lon)::
     1311  retourne vrai si le centroïde de l'objet se trouve aux coordonnées ''lat''/''lon'' données, par exemple pour vérifier les nœuds à "null island" `node[at(0.0,0.0)]` (''depuis r12514'')
     1312 is_similar(''str1'', ''str2'')::
     1313  renvoie vrai si les deux chaînes de caractères sont similaires, mais pas identiques, c'est-à-dire si elles ont une distance de Levenshtein de 1 ou 2. Exemple : `chemin[autoroute][nom][is_similar(tag(name), "Main Street")]` : `way[highway][name][is_similar(tag(name), "Main Street")]` vérifie les rues avec une éventuelle faute de frappe dans le nom (par exemple Main Streeg). (''depuis r14371'')
     1314 gpx_distance()::
     1315  renvoie la distance la plus faible entre l'objet OSM et un point GPX (''depuis r14802'')
     1316 count_roles()::
     1317  renvoie le nombre de primitives dans une relation avec les rôles spécifiés (''depuis r15275'']
     1318 sort(''str1'', ''str2'', ''str3'', ''...'')::
     1319  trie un tableau de chaînes de caractères (''depuis r15279'')
     1320 sort_list()::
     1321  trie une liste de chaînes de caractères (''depuis r15279'')
     1322 tag_regex(''regex'')::
     1323  renvoie une liste de valeurs qui correspondent à regex '''(expression rationnelle)''' (''depuis r15317'')
     1324 to_boolean(''str'')::
     1325  renvoie l'argument chaîne de caractères comme un booléen (''depuis r16110'')
     1326 to_byte(''str'')::
     1327  renvoie l'argument chaîne de caractères sous forme d'octet (''depuis r16110'')
     1328 to_short(''str'')::
     1329  retourne l'argument chaîne de caractères comme un short '''(entier court)''' (''depuis r16110'')
     1330 to_int(''str'')::
     1331  retourne l'argument chaîne de caractères comme un int '''(entier)''' (''depuis r16110'')
     1332 to_long(''str'')::
     1333  retourne l'argument chaîne de caractères comme un long '''(entier long )''' (''depuis r16110'')
     1334 to_float(''str'')::
     1335  renvoie l'argument de la chaîne de caractères sous la forme d'un float  '''(nombre a virgule flottante)''' (''depuis r16110'')
     1336 to_double(''str'')::
     1337  retourne l'argument chaîne de caractères comme un double (''depuis r16110'')
     1338 uniq(''str1'', ''str2'', ''str3'', ''...'')::
     1339  renvoie une liste de chaînes de caractères qui n'ont que des valeurs uniques à partir d'un tableau de chaînes de caractères (''depuis r15323'')
     1340 uniq_list()::
     1341  renvoie une liste de chaînes de caractères qui n'ont que des valeurs uniques à partir d'une liste de chaînes de caractères (''depuis r15353'')
     1342
     1343=== Exemples ===
     1344* symbole en forme de cercle pour le numéro de maison dont la taille dépend du nombre de chiffres
     1345{{{
     1346#!mapcss
     1347node[addr:housenumber] {
     1348    symbol-shape: circle;
     1349    symbol-size: eval((min(length(tag("addr:housenumber")), 3) * 5) + 3);
     1350    symbol-fill-color: #B0E0E6;
     1351
     1352    text: "addr:housenumber";
     1353    text-anchor-horizontal: center;
     1354    text-anchor-vertical: center;
     1355    text-offset-x: -1;
     1356    text-offset-y: -1; }
     1357   
     1358node[addr:housenumber]::hn_casing {
     1359    z-index: -100;
     1360    symbol-shape: circle;
     1361    symbol-size: +2;
     1362    symbol-fill-color: blue;
     1363}
     1364}}}
     1365* inversion des couleurs
     1366{{{
     1367#!mapcss
     1368*::* {
     1369    color: eval(rgb(1 - red(prop(color)), 1 - green(prop(color)), 1 - blue(prop(color))));
     1370    fill-color: eval(rgb(1 - red(prop(fill-color)), 1 - green(prop(fill-color)), 1 - blue(prop(fill-color))));
     1371}
     1372}}}
     1373* trucs aléatoires
     1374{{{
     1375#!mapcss
     1376way {
     1377    width: eval(random() * 20);
     1378    color: eval(rgb(random(), random(), random()));
     1379}
     1380}}}
     1381
     1382* Exemple de correspondance regexp : remplacer "nameXXXsubname" par "name::subname"
     1383{{{
     1384#!mapcss
     1385*[name=~/.+XXX.+/]
     1386{
     1387    _match: regexp_match("(.+?)XXX(.+)", tag("name"));
     1388    text: concat(get(prop("_match"),1), "::", get(prop("_match"),2));
     1389}
     1390}}}
     1391
     1392* colorier différemment les bâtiments en fonction de la rue dans les atributs d'adresse
     1393{{{
     1394#!mapcss
     1395area[building][addr:street] {
     1396    fill-color: hsb_color(CRC32_checksum(tag("addr:street"))/4294967296.0, 0.9, 0.7);
     1397    fill-opacity: 0.8;
     1398}
     1399}}}
     1400
     1401
     1402== Remarques sur la compatibilité ==
     1403=== MapCSS 0.2 ===
     1404==== Grammaire ====
     1405 * `way[oneway=yes]` ne fait pas de magie, vous pouvez utiliser `way[oneway?]` instead
     1406 * pas de  `@import`
     1407 * JOSM n'exige pas que `eval(...)` soit entouré d'expressions, mais pour des raisons de compatibilité avec d'autres implémentations de MapCSS, vous devriez l'écrire.
     1408
     1409==== Propriétés ====
     1410Pour le moment, JOSM ''ne'' prend ''pas'' en charge les propriétés suivantes :
     1411 line: ::
     1412  `image`
     1413 label: ::
     1414  `font-variant, text-decoration, text-transform, max-width`
     1415 shield: ::
     1416  non pris en charge
     1417
     1418=== Halcyon (Potlatch 2) ===
     1419 * L'étiquette de texte est placée au centre de l'icône. Pour la compatibilité avec Halcyon, mettez
     1420{{{
     1421#!mapcss
     1422node { text-anchor-vertical: center; text-anchor-horizontal: center; }
     1423}}}
     1424 au début de votre feuille de style.
     1425 * le standard de z-index dans Halcyon est 5, mais 0 dans JOSM
     1426 * '''`image: circle;`''' correspond à '''`symbol-shape: circle;`'''
     1427
     1428=== Kothic ===
     1429 * Kothic supporte l'eval, qui diffère probablement de l'eval de JOSM.
     1430 * Kothic connaît les unités, alors que JOSM calcule toujours en pixel.
     1431 * Les fonctions d'extrusion ne sont pas disponibles dans JOSM.
     1432
     1433=== Ceyx ===
     1434 * semble avoir `[tunnel=1]` au lieu de `[tunnel=yes]` (Halcyon) ou `[tunnel?]` (JOSM)
     1435
     1436
     1437== Requêtes Media (obsolètes) ==
     1438
     1439{{{#!td style="background-color: #faa"
     1440Note : Les requêtes media sont dépréciées. Vous devez utiliser les règles @supports à la place (voir ci-dessus).
     1441}}}
     1442Les requêtes media sont utilisées pour sauter une section du modèle dans certaines conditions. En général, vous souhaitez utiliser une fonctionnalité introduite dans une version plus récente de JOSM, mais vous souhaitez disposer d'un style de repli pour les utilisateurs de clients JOSM plus anciens. Cette fonctionnalité est apparue avec la r6970. Exemple :
     1443{{{
     1444#!mapcss
     1445@media (min-josm-version: 9789) {
     1446    way[highway] {
     1447        width: 4;
     1448        color: orange;
     1449    }
     1450    /* nouveaux trucs fantaisistes */
     1451    /* ... */
     1452}
     1453
     1454@media (max-josm-version: 9788) {
     1455    way[highway] {
     1456        width: 4;
     1457        color: blue;
     1458    }
     1459    /* mode de repli, en utilisant des fonctions plus simples */
     1460    /* ... */
     1461}
     1462}}}
     1463
     1464La syntaxe correspond étroitement à la [https://www.w3.org/TR/css3-mediaqueries/#syntax syntaxe css (en)] officielle. Les conditions suivantes sont prises en charge :
     1465
     1466{{{#!th
     1467'''Condition Media'''
     1468}}}
     1469{{{#!th
     1470'''Description'''
     1471}}}
     1472|-
     1473{{{#!td
     1474(min-josm-version: ''<nombre>'')
     1475}}}
     1476{{{#!td
     1477N'inclure la section `@media` que lorsque la version actuelle de JOSM est supérieure ou égale au nombre spécifié.
     1478}}}
     1479|-
     1480{{{#!td
     1481(max-josm-version: ''<nombre>'')
     1482}}}
     1483{{{#!td
     1484N'inclure la section `@media` que lorsque la version actuelle de JOSM est inférieure ou égale au nombre spécifié.
     1485}}}
     1486|-
     1487{{{#!td
     1488(user-agent: ''<chaîne de caractères>'')
     1489}}}
     1490{{{#!td
     1491N'incluez la section `@media` que lorsque le nom de l'éditeur/du moteur de rendu correspond à la chaîne donnée. Dans JOSM, la seule valeur acceptée est  `josm`.
     1492}}}
     1493
     1494Les conditions peuvent être combinées avec `and` :
     1495
     1496{{{
     1497#!mapcss
     1498@media (min-josm-version: 6970) and (max-josm-version: 7014) {
     1499 /* uniquement pour les versions 6970 à 7014 de JOSM */
     1500}
     1501}}}
     1502
     1503Plusieurs conditions combinées peuvent être enchaînées avec une virgule (''ou'' logique) :
     1504
     1505{{{
     1506#!mapcss
     1507@media (min-josm-version: 6970) and (max-josm-version: 7014), (user-agent: myEditor) {
     1508  /* pour les versions 6970 à 7014 de JOSM et pour l'éditeur appelé "myEditor" */
     1509}
     1510}}}
     1511
     1512Les requêtes media n'étant prises en charge qu'à partir de la version 6970 de JOSM, vous devez également indiquer cette version minimale de JOSM dans le sélecteur meta :
     1513
     1514{{{
     1515#!mapcss
     1516meta {
     1517    min-josm-version: "6970"; /* Ce modèle utilise les requêtes media */
     1518    /* ... */
     1519}
     1520}}}
     1521
     1522
     1523{{{#!comment
     1524Il y a aussi le mot-clé `not` (voir la doc css liée pour plus de détails).
     1525Ceci est implémenté, mais probablement pas très utile. N'hésitez pas à ajouter de la documentation.
     1526}}}