this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

combine log and biblio into main, with proper template

+2215 -63
+6 -6
.github/workflows/typst.yml
··· 18 18 - name: Checkout repository 19 19 uses: actions/checkout@v3 20 20 21 - - name: Compile log 22 - uses: lvignoli/typst-action@main 23 - with: { source_file: log.typ } 24 - 25 - - name: Compile biblio 21 + - name: Compile files 26 22 uses: lvignoli/typst-action@main 27 - with: { source_file: biblio.typ } 23 + with: 24 + source_file: | 25 + log.typ 26 + biblio.typ 27 + main.typ 28 28 29 29 - name: Commit and push changes 30 30 uses: EndBug/add-and-commit@v9
MartianMono-VariableFont_wdth,wght.ttf

This is a binary file and will not be displayed.

+18 -38
biblio.typ
··· 1 - #import "@preview/arkheion:0.1.0": arkheion, arkheion-appendices 2 1 #import "@preview/fletcher:0.5.8": diagram, edge, node 3 2 4 - #show: arkheion.with( 5 - title: "Étude bibliographique I", 6 - authors: ( 7 - (name: "Gwenn Le Bihan", email: "gwenn.lebihan@etu.inp-n7.fr", affiliation: "ENSEEIHT"), 8 - ), 9 - date: "2 Septembre 2025", 10 - abstract: [ 11 - Ce stage porte sur l'intégration de Nix et NixOS dans les processus de développement et de déploiement logiciel dans le domaine robotique au sein du LAAS. Nix, le _package manager_, et NixOS, l'OS, sont des technologies permettant une reproductibilité, une qualité importante dans le monde de la recherche. 12 - 13 - J'ai été aussi amenée à travailler sur la création d'un _plugin_ pour Gazebo, un logiciel de simulation robotique, pour l'utiliser avec le _SDK_ d'un robot de Unitree. 14 - ], 15 - ) 16 - 17 - #outline( 18 - title: [Table des matières], 19 - ) 3 + = Étude bibliographique Ⅰ 20 4 21 - = Reproductibilité 5 + == Reproductibilité 22 6 23 - == État dans le domaine de la programmation 7 + === État dans le domaine de la programmation 24 8 25 9 La différence entre une fonction au sens mathématique et une fonction au sens programmatique consiste en le fait que, par des raisons de practicité, on permet aux `function`s des langages de programmation d'avoir des _effets de bords_. Ces effets affectent, modifient ou font dépendre la fonction d'un environnement global qui n'est pas explicitement déclaré comme une entrée (un argument) de la fonction en question @purefunctions. 26 10 ··· 45 29 46 30 De manière donc très concrète, si cette fonction `f` fait partie du protocole expérimental d'une expérience, cette expérience n'est plus reproductible, et ses résultats sont donc potentiellement non vérifiables, si le papier est soumis le 15 décembre 2025 et la _peer review_ effectuée le 2 janvier 2026. 47 31 48 - == Contenir les effets de bords 32 + === Contenir les effets de bords 49 33 50 34 En dehors du besoin de vérifiabilité du monde de la recherche, la reproductibilité est une qualité recherchée dans certains domaines de programmation @reproducibility 51 35 52 36 Il existe donc depuis longtemps des langages de programmation dits _fonctionnels_, qui, de manière plus ou moins stricte, limite les effets de bords. Certains langages font également la distinction entre une fonction _pure_#footnote[sans effets de bord] et une fonction classique @fortran-pure. Certaines fonctions, plutôt appelées _procédures_, sont uniquement composées d'effet de bord puisqu'elle ne renvoie pas de valeur @ibm-function-procedure-routine 53 37 54 38 55 - == État dans le domaine de la robotique 39 + === État dans le domaine de la robotique 56 40 57 41 En robotique, pour donner des ordres au matériel, on intéragit beaucoup avec le monde extérieur (ordres et lecture d'état de servo-moteurs, flux vidéo d'une caméra, etc), souvent dans un langage plutôt bas-niveau, pour des questions de performance et de proximité abstractionnelle au matériel 58 42 ··· 61 45 L'idée de s'affranchir d'effets de bords pour rendre les programmes dans la recherche en robotique reproductibles est donc plus utopique que réaliste. 62 46 63 47 64 - == Environnements de développement 48 + === Environnements de développement 65 49 66 50 Cependant, ce qui fait un programme n'est pas seulement son code: surtout dans des langages plus anciens sans gestion de dépendance simple, les dépendances (bibliothèques) du programme, ainsi que l'environnement et les étapes de compilation de ce dernier, représentent également une partie considérable de la complexité du programme (par exemple, en C++, on utilise un outil générant des fichiers de configuration pour un autre outil qui à son tour configure le compilateur de C++ @cmake) 67 51 ··· 77 61 78 62 Nix ne peut pas garantir que le programme sera sans effets de bords au _runtime_, mais vise à le garantir au _build-time_. 79 63 80 - = Nix, le gestionnaire de paquets pur 64 + == Nix, le gestionnaire de paquets pur 81 65 82 - == Un _DSL_#footnote[Domain-Specific Language] fonctionnel 66 + === Un _DSL_#footnote[Domain-Specific Language] fonctionnel 83 67 84 68 Une autre caractéristique que l'on trouve souvent dans la famille de langages fonctionnels est l'omniprésence des _expressions_: quasi toute les constructions syntaxiques forment des expressions valides, et peuvent donc servir de valeur 85 69 ··· 165 149 166 150 La dérivation ici prend en entrée le code source (`src-odri-masterboard-sdk`), ainsi que des dépendances, que ce soit des fonctions relatives à Nix même (comme `stdenv.mkDerivation`) pour simplifier la définition de dérivation, ou des dépendances au programmes, que ce soit pour sa compilation ou pour son exécution (dans ce dernier cas de figures, les dépendances sont inclues ou reliées au binaire final) 167 151 168 - == Un ecosystème de dépendances 152 + === Un ecosystème de dépendances 169 153 170 154 Afin de conserver la reproductibilité même lorsque l'on dépend de libraries tierces, ces dépendances doivent également avoir une compilation reproductible: on déclare donc des dépendances à des _packages_ Nix, disponibles sur _Nixpkgs_ @nixpkgs. 171 155 ··· 173 157 174 158 Pour ne pas avoir à compiler toutes les dépendances soit-même quand on dépend de `.nix` de _nixpkgs_, il existe un serveur de cache, qui propose des binaires des dépendances, Cachix @cachix 175 159 176 - == Une compilation dans un environnement fixé 160 + === Une compilation dans un environnement fixé 177 161 178 162 Certains aspects de l'environnement dans lequel l'on compile un programme peuvent faire varier le résultat final. Pour éviter cela, Nix limite au maximum les variations d'environnement. Par exemple, la date du système est fixée au 0 UNIX (1er janvier 1990): le programme compilé ne peut pas dépendre de la date à laquelle il a été compilé. 179 163 180 164 Quand le _sandboxing_ est activé, Nix isole également le code source de tout accès au réseau, aux autres fichiers du système (ainsi que d'autres mesures) pour améliorer la reproductibilité @nix-sandboxing 181 165 182 - === Un complément utile: compiler en CI 166 + ==== Un complément utile: compiler en CI 183 167 184 168 Pour aller plus loin, on peut lancer la compilation du paquet Nix en _CI_#footnote[Continuous Integration, lit. intégration continue], c'est-à-dire sur un serveur distant au lieu de sur sa propre machine. On s'assure donc que l'état de notre machine de développement personnelle n'influe pas sur la compilation, puisque chaque compilation est lancée dans une machine virtuelle vierge @github-runners. 185 169 186 - = NixOS, un système d'exploitation à configuration déclarative 170 + == NixOS, un système d'exploitation à configuration déclarative 187 171 188 172 Une fois le programme compilé avec ses dépendances, il est prêt à être transféré sur l'ordinateur ou la carte de contrôle embarquée au robot. 189 173 ··· 199 183 200 184 Ici encore, cela apporte un gain en terme de reproductibilité: l'état de configuration de l'OS sur lequel est déployé le programme du robot est, lui aussi, rendu reproductible. 201 185 202 - = Gazebo & Unitree 186 + == Gazebo & Unitree 203 187 204 - == Contexte 188 + === Contexte 205 189 206 190 J'ai également été approchée pour travailler sur la création d'un _plugin_ pour Gazebo, un logiciel de simulation robotique @gazebo. 207 191 208 192 Le but était de pouvoir utiliser ce logiciel de simulation open source avec un robot de la companie Unitree, le H1v2 @h1v2, un robot humanoïde tout-usage. 209 193 210 - == Une base de code partiellement open-source 194 + === Une base de code partiellement open-source 211 195 212 196 Une partie du code source de ce SDK n'est pas disponible, et n'est que distribué sous forme de binaires @sdk2-in-source-binaries. J'ai donc chercher à comprendre cette partie du code par ingénierie inverse, ce qui ne s'est pas avéré nécéssaire. 213 197 214 198 Au final, en explorant le code source du plugin pour un autre logiciel de simulation, Mujoco @mujoco @unitree-mujoco, j'ai pu comprendre comment interfacer le SDK avec Gazebo. 215 199 216 - == `rt/lowstate`, `rt/lowcmd` 200 + === `rt/lowstate`, `rt/lowcmd` 217 201 218 202 Le SDK de Unitree fonctionne via des canaux DDS, une technologie de communication temps-réel bas niveau @dds. 219 203 ··· 234 218 node((2, 0))[Modèle SDF du robot] 235 219 )) 236 220 237 - == Des tests end-to-end automatisés 221 + === Des tests end-to-end automatisés 238 222 239 223 Je souhaitais permettre de tester le code sur simulateur de manière automatique: on push un commit modifiant une politique de contrôle du robot, et, automatiquement, en CI, un test sous simulateur est lancé. On reçoit un artéfact avec une vidéo filmant le test. 240 224 ··· 242 226 243 227 Il y a aussi un challenge lié au fait que, en CI, il n'y a pas d'interface graphique, ce qui rend le lancement de l'interface graphique de Gazebo impossible. Il faut donc simuler une interface graphique avec _XVFB_, un serveur X virtuel @xvfb. 244 228 245 - == Packaging sous Nix 229 + === Packaging sous Nix 246 230 247 231 Le packaging sous Nix de _gz-unitree_ est en cours, mais se heurte à quelques problèmes liés à l'état du packaging Nix de Gazebo lui-même: gazebo est packagé dans un _overlay_ tierce, _gazebo-sim-overlay_ @gazebo-sim-overlay, qui n'a pas mis à jour une des bibliothèques de Gaazebo depuis plus d'un an @gz-sim-overlay-update-msgs-issue 248 - 249 - 250 - 251 - #bibliography("bib.yaml")
enseeiht.jpeg

This is a binary file and will not be displayed.

+1 -5
log.typ
··· 1 - = Stage au LAAS 2 - 3 - == Journal de bord 1 + = Journal de bord 4 2 5 3 #for month in ("may", "june", "july", "august", "september", "november") { 6 4 include("log/" + month + ".typ") 7 5 } 8 - 9 - #bibliography("bib.yaml")
+5 -5
log/july.typ
··· 1 - === 30 Juin - 4 Juillet 1 + == 30 Juin - 4 Juillet 2 2 3 3 - Continuation du travail: essais pour rajouter un capteur IMU sur le robot, essais pour faire fonctionner l'auto-collision 4 4 5 - === 7-11 Juillet 5 + == 7-11 Juillet 6 6 7 7 - Capteur IMU rajouté 8 8 - Ajout du tick (temps) de simulation 9 9 - Essais d'utilisation de gz-unitree avec les politiques RL#footnote[Reinforcement Learning] de Gepetto 10 10 11 - === 14-18 Juillet 11 + == 14-18 Juillet 12 12 13 13 - Tentatives d'amélioration des performances pour améliorer le RTF: passage de 10% à 15% 14 14 - Parallélisation de l'envoi des messages des DDS dans un thread différent du principal ··· 17 17 - Ecriture d'une recette _Just_ @justfile pour configurer l'environnement de développement, sur Arch Linux ou Ubuntu 18 18 - Reproduction des résultats sur un OS et une machine différente 19 19 20 - === 21-25 Juillet 20 + == 21-25 Juillet 21 21 22 22 - Évaluation de `gazebo-sim-overlay` @gazebo-sim-overlay comme solution pour un packaging Nix 23 23 - Recherche sur un mode headless de gazebo suite à des erreurs de QT sous devshell Nix 24 24 25 - === 28 Juillet - 1 août 25 + == 28 Juillet - 1 août 26 26 27 27 - Recherche autour de l'utilisation de Gazebo dans des environnements CI/CD @msr2022-cps, en particulier pour capturer une simulation en vidéo
+4 -4
log/june.typ
··· 1 - === 2-6 Juin 1 + == 2-6 Juin 2 2 3 3 - Début de recherches sur l'installation de NixOS sur Raspberry Pi @raspi 400 et 5 4 4 - Flash du firmware master-board sur un testbench 5 5 - Test du packaging de odri_control_interface @odri-controls avec les scripts de démos à l'aide d'un testbench 6 6 - Début de recherches sur la création d'un plugin Gazebo @gazebo communiquant avec la couche bas niveau du SDK2 @unitree_sdk2 d'Unitree afin de simuler du code pour le robot H1 @h1 dans Gazebo 7 7 8 - === 9-13 Juin 8 + == 9-13 Juin 9 9 10 10 - Progrès sur l'accès à la couche bas niveau du SDK2 @unitree_sdk2 11 11 - Analyse via Wireshark des paquets 12 12 - Analyse du code source du plugin Mujoco @mujoco fourni par Unitree 13 13 14 - === 16-20 Juin 14 + == 16-20 Juin 15 15 16 16 - Réussite de l'accès à la couche bas niveau du SDK2 via les définitions IDL @omgidl fournies par Unitree 17 17 - Documentation sur le système de plugins de Gazebo @gazebo 18 18 - Début de travail sur le bridge Gazebo/unitree: `gz-unitree` 19 19 - Implémentation de la communication DDS @dds entre un binaire d'exemple d'utilisation du SDK2 et le plugin Gazebo 20 20 21 - === 23-27 Juin 21 + == 23-27 Juin 22 22 23 23 - Construction du _lowstate_ à envoyer au SDK2 depuis _gz-unitree_: 24 24 - Utilisation du modèle SDF @sdf du robot H1-2 @h1v2 au lieu de H1 @h1, ajout d'un sol au monde du SDF
+2 -5
log/may.typ
··· 1 - === 19-23 Mai 1 + == 19-23 Mai 2 2 3 3 - Mise en place de l'environnement de développement 4 4 - Documentation sur Nix le langage @nix-language ··· 12 12 - Recherche autour d'une potentielle validation au runtime en C++ des fichiers de config par le JSON Schema 13 13 - Découverte des overlays Nix 14 14 15 - === 26-28 Mai 15 + == 26-28 Mai 16 16 17 17 - Continuation du travail précédent 18 - 19 - 20 -
+28
main.typ
··· 1 + #import "template.typ": arkheion, arkheion-appendices 2 + #show: arkheion.with( 3 + title: "Stage au LAAS", 4 + authors: ( 5 + (name: "Gwenn Le Bihan", email: "gwenn.lebihan@etu.inp-n7.fr", affiliation: "ENSEEIHT"), 6 + ), 7 + date: "2 Septembre 2025", 8 + logo: "enseeiht.jpeg", 9 + abstract: [ 10 + Ce stage porte sur l'intégration de Nix et NixOS dans les processus de développement et de déploiement logiciel dans le domaine robotique au sein du LAAS. Nix, le _package manager_, et NixOS, l'OS, sont des technologies permettant une reproductibilité, une qualité importante dans le monde de la recherche. 11 + 12 + J'ai été aussi amenée à travailler sur la création d'un _plugin_ pour Gazebo, un logiciel de simulation robotique, pour l'utiliser avec le _SDK_ d'un robot de Unitree. 13 + ], 14 + ) 15 + 16 + #outline( 17 + title: [Table des matières], 18 + ) 19 + 20 + #pagebreak() 21 + 22 + 23 + #include("biblio.typ") 24 + 25 + #include("log.typ") 26 + 27 + 28 + #bibliography("bib.yaml")
+1915
snazzylight.tmTheme
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 + <plist version="1.0"> 4 + <dict> 5 + <key>name</key> 6 + <string>Snazzy Light</string> 7 + <key>settings</key> 8 + <array> 9 + <dict> 10 + <key>settings</key> 11 + <dict> 12 + <key>accent</key> 13 + <string/> 14 + <key>background</key> 15 + <string>#FAFBFC</string> 16 + <key>caret</key> 17 + <string>#565869</string> 18 + <key>foreground</key> 19 + <string>#565869</string> 20 + <key>lineHighlight</key> 21 + <string/> 22 + <key>selection</key> 23 + <string>#2DAE5822</string> 24 + <key>activeGuide</key> 25 + <string/> 26 + <key>findHighlight</key> 27 + <string>#00E6E02A</string> 28 + <key>misspelling</key> 29 + <string>#FF5C56</string> 30 + </dict> 31 + </dict> 32 + <dict> 33 + <key>name</key> 34 + <string>GitGutter deleted</string> 35 + <key>scope</key> 36 + <string>markup.deleted.git_gutter</string> 37 + <key>settings</key> 38 + <dict> 39 + <key>foreground</key> 40 + <string/> 41 + </dict> 42 + </dict> 43 + <dict> 44 + <key>name</key> 45 + <string>GitGutter inserted</string> 46 + <key>scope</key> 47 + <string>markup.inserted.git_gutter</string> 48 + <key>settings</key> 49 + <dict> 50 + <key>foreground</key> 51 + <string/> 52 + </dict> 53 + </dict> 54 + <dict> 55 + <key>name</key> 56 + <string>GitGutter changed</string> 57 + <key>scope</key> 58 + <string>markup.changed.git_gutter</string> 59 + <key>settings</key> 60 + <dict> 61 + <key>foreground</key> 62 + <string>#00A39F</string> 63 + </dict> 64 + </dict> 65 + <dict> 66 + <key>name</key> 67 + <string>GitGutter untracked</string> 68 + <key>scope</key> 69 + <string>markup.untracked.git_gutter</string> 70 + <key>settings</key> 71 + <dict> 72 + <key>foreground</key> 73 + <string>#2DAE58</string> 74 + </dict> 75 + </dict> 76 + <dict> 77 + <key>name</key> 78 + <string>GitGutter ignored</string> 79 + <key>scope</key> 80 + <string>markup.ignored.git_gutter</string> 81 + <key>settings</key> 82 + <dict> 83 + <key>foreground</key> 84 + <string/> 85 + </dict> 86 + </dict> 87 + <dict> 88 + <key>name</key> 89 + <string>Invalid - Illegal</string> 90 + <key>scope</key> 91 + <string>invalid.illegal</string> 92 + <key>settings</key> 93 + <dict> 94 + <key>foreground</key> 95 + <string>#FF5C56</string> 96 + </dict> 97 + </dict> 98 + <dict> 99 + <key>name</key> 100 + <string>Property names</string> 101 + <key>scope</key> 102 + <string>meta.object-literal.key, meta.object-literal.key constant.character.escape, meta.object-literal string, meta.object-literal string constant.character.escape, support.type.property-name, support.type.property-name constant.character.escape</string> 103 + <key>settings</key> 104 + <dict> 105 + <key>foreground</key> 106 + <string>#11658F</string> 107 + </dict> 108 + </dict> 109 + <dict> 110 + <key>name</key> 111 + <string>Keywords</string> 112 + <key>scope</key> 113 + <string>keyword, storage, meta.class storage.type, keyword.operator.expression.import, keyword.operator.new, keyword.operator.expression.delete</string> 114 + <key>settings</key> 115 + <dict> 116 + <key>foreground</key> 117 + <string>#eb369f</string> 118 + </dict> 119 + </dict> 120 + <dict> 121 + <key>name</key> 122 + <string>Types</string> 123 + <key>scope</key> 124 + <string>support.type, meta.type.annotation entity.name.type, new.expr meta.type.parameters entity.name.type, storage.type.primitive, storage.type.built-in.primitive, meta.function.parameter storage.type</string> 125 + <key>settings</key> 126 + <dict> 127 + <key>foreground</key> 128 + <string>#2DAE58</string> 129 + </dict> 130 + </dict> 131 + <dict> 132 + <key>name</key> 133 + <string>Annotations</string> 134 + <key>scope</key> 135 + <string>storage.type.annotation</string> 136 + <key>settings</key> 137 + <dict> 138 + <key>foreground</key> 139 + <string>#c914ae</string> 140 + </dict> 141 + </dict> 142 + <dict> 143 + <key>name</key> 144 + <string>Units</string> 145 + <key>scope</key> 146 + <string>keyword.other.unit</string> 147 + <key>settings</key> 148 + <dict> 149 + <key>foreground</key> 150 + <string>#FF5C57CC</string> 151 + </dict> 152 + </dict> 153 + <dict> 154 + <key>name</key> 155 + <string>Language Constants</string> 156 + <key>scope</key> 157 + <string>constant.language, support.constant, variable.language</string> 158 + <key>settings</key> 159 + <dict> 160 + <key>foreground</key> 161 + <string>#2DAE58</string> 162 + </dict> 163 + </dict> 164 + <dict> 165 + <key>name</key> 166 + <string>Variables</string> 167 + <key>scope</key> 168 + <string>variable, support.variable</string> 169 + <key>settings</key> 170 + <dict> 171 + <key>foreground</key> 172 + <string>#565869</string> 173 + </dict> 174 + </dict> 175 + <dict> 176 + <key>name</key> 177 + <string>this Variables</string> 178 + <key>scope</key> 179 + <string>variable.language.this</string> 180 + <key>settings</key> 181 + <dict> 182 + <key>foreground</key> 183 + <string>#13BBB7</string> 184 + </dict> 185 + </dict> 186 + <dict> 187 + <key>name</key> 188 + <string>Functions</string> 189 + <key>scope</key> 190 + <string>entity.name.function, support.function</string> 191 + <key>settings</key> 192 + <dict> 193 + <key>foreground</key> 194 + <string>#09A1ED</string> 195 + </dict> 196 + </dict> 197 + <dict> 198 + <key>name</key> 199 + <string>Decorators</string> 200 + <key>scope</key> 201 + <string>entity.name.function.decorator</string> 202 + <key>settings</key> 203 + <dict> 204 + <key>foreground</key> 205 + <string>#11658F</string> 206 + </dict> 207 + </dict> 208 + <dict> 209 + <key>name</key> 210 + <string>Classes</string> 211 + <key>scope</key> 212 + <string>meta.class entity.name.type, new.expr entity.name.type, entity.other.inherited-class, support.class</string> 213 + <key>settings</key> 214 + <dict> 215 + <key>foreground</key> 216 + <string>#13BBB7</string> 217 + </dict> 218 + </dict> 219 + <dict> 220 + <key>name</key> 221 + <string>Preprocessors</string> 222 + <key>scope</key> 223 + <string>keyword.preprocessor.pragma, keyword.control.directive.include, keyword.other.preprocessor</string> 224 + <key>settings</key> 225 + <dict> 226 + <key>foreground</key> 227 + <string>#11658F</string> 228 + </dict> 229 + </dict> 230 + <dict> 231 + <key>name</key> 232 + <string>Exceptions</string> 233 + <key>scope</key> 234 + <string>entity.name.exception</string> 235 + <key>settings</key> 236 + <dict> 237 + <key>foreground</key> 238 + <string>#FF5C56</string> 239 + </dict> 240 + </dict> 241 + <dict> 242 + <key>name</key> 243 + <string>Sections</string> 244 + <key>scope</key> 245 + <string>entity.name.section</string> 246 + <key>settings</key> 247 + <dict/> 248 + </dict> 249 + <dict> 250 + <key>name</key> 251 + <string>Numbers, Characters</string> 252 + <key>scope</key> 253 + <string>constant.numeric</string> 254 + <key>settings</key> 255 + <dict> 256 + <key>foreground</key> 257 + <string>#FF5C57</string> 258 + </dict> 259 + </dict> 260 + <dict> 261 + <key>name</key> 262 + <string>Constants</string> 263 + <key>scope</key> 264 + <string>constant, constant.character</string> 265 + <key>settings</key> 266 + <dict> 267 + <key>foreground</key> 268 + <string>#2DAE58</string> 269 + </dict> 270 + </dict> 271 + <dict> 272 + <key>name</key> 273 + <string>Strings</string> 274 + <key>scope</key> 275 + <string>string</string> 276 + <key>settings</key> 277 + <dict> 278 + <key>foreground</key> 279 + <string>#CF9C00</string> 280 + </dict> 281 + </dict> 282 + <dict> 283 + <key>name</key> 284 + <string>Strings</string> 285 + <key>scope</key> 286 + <string>string</string> 287 + <key>settings</key> 288 + <dict> 289 + <key>foreground</key> 290 + <string>#CF9C00</string> 291 + </dict> 292 + </dict> 293 + <dict> 294 + <key>name</key> 295 + <string>Strings: Escape Sequences</string> 296 + <key>scope</key> 297 + <string>constant.character.escape</string> 298 + <key>settings</key> 299 + <dict> 300 + <key>foreground</key> 301 + <string>#F5B900</string> 302 + </dict> 303 + </dict> 304 + <dict> 305 + <key>name</key> 306 + <string>Strings: Regular Expressions</string> 307 + <key>scope</key> 308 + <string>string.regexp, string.regexp constant.character.escape</string> 309 + <key>settings</key> 310 + <dict> 311 + <key>foreground</key> 312 + <string>#13BBB7</string> 313 + </dict> 314 + </dict> 315 + <dict> 316 + <key>name</key> 317 + <string>Strings: Regular Expressions Punctuation</string> 318 + <key>scope</key> 319 + <string>keyword.operator.quantifier.regexp, keyword.operator.negation.regexp, keyword.operator.or.regexp, string.regexp punctuation, string.regexp keyword, string.regexp keyword.control, string.regexp constant, variable.other.regexp</string> 320 + <key>settings</key> 321 + <dict> 322 + <key>foreground</key> 323 + <string>#00A39F</string> 324 + </dict> 325 + </dict> 326 + <dict> 327 + <key>name</key> 328 + <string>Strings: Regular Expressions Modifier Flags</string> 329 + <key>scope</key> 330 + <string>string.regexp keyword.other</string> 331 + <key>settings</key> 332 + <dict> 333 + <key>foreground</key> 334 + <string>#00A39F88</string> 335 + </dict> 336 + </dict> 337 + <dict> 338 + <key>name</key> 339 + <string>Strings: Symbols</string> 340 + <key>scope</key> 341 + <string>constant.other.symbol</string> 342 + <key>settings</key> 343 + <dict> 344 + <key>foreground</key> 345 + <string>#CF9C00</string> 346 + </dict> 347 + </dict> 348 + <dict> 349 + <key>name</key> 350 + <string>Comments</string> 351 + <key>scope</key> 352 + <string>comment, punctuation.definition.comment</string> 353 + <key>settings</key> 354 + <dict> 355 + <key>foreground</key> 356 + <string>#676e8a</string> 357 + </dict> 358 + </dict> 359 + <dict> 360 + <key>name</key> 361 + <string>Comments: Preprocessor</string> 362 + <key>scope</key> 363 + <string>comment.block.preprocessor</string> 364 + <key>settings</key> 365 + <dict> 366 + <key>fontStyle</key> 367 + <string/> 368 + <key>foreground</key> 369 + <string>#9194A2</string> 370 + </dict> 371 + </dict> 372 + <dict> 373 + <key>name</key> 374 + <string>DocBlock: Type</string> 375 + <key>scope</key> 376 + <string>comment.block.documentation entity.name.type</string> 377 + <key>settings</key> 378 + <dict> 379 + <key>foreground</key> 380 + <string>#2DAE58</string> 381 + </dict> 382 + </dict> 383 + <dict> 384 + <key>name</key> 385 + <string>DocBlock: Keyword</string> 386 + <key>scope</key> 387 + <string>comment.block.documentation storage, comment.block.documentation keyword.other, meta.class comment.block.documentation storage.type</string> 388 + <key>settings</key> 389 + <dict> 390 + <key>foreground</key> 391 + <string>#9194A2</string> 392 + </dict> 393 + </dict> 394 + <dict> 395 + <key>name</key> 396 + <string>DocBlock: Variable</string> 397 + <key>scope</key> 398 + <string>comment.block.documentation variable</string> 399 + <key>settings</key> 400 + <dict> 401 + <key>foreground</key> 402 + <string>#c914ae</string> 403 + </dict> 404 + </dict> 405 + <dict> 406 + <key>name</key> 407 + <string>Punctuation</string> 408 + <key>scope</key> 409 + <string>punctuation</string> 410 + <key>settings</key> 411 + <dict> 412 + <key>foreground</key> 413 + <string>#676e8a</string> 414 + </dict> 415 + </dict> 416 + <dict> 417 + <key>name</key> 418 + <string>Operators</string> 419 + <key>scope</key> 420 + <string>keyword.operator, keyword.other.arrow, keyword.control.@</string> 421 + <key>settings</key> 422 + <dict> 423 + <key>foreground</key> 424 + <string>#676e8a</string> 425 + </dict> 426 + </dict> 427 + <dict> 428 + <key>name</key> 429 + <string>HTML: Doctype Declaration</string> 430 + <key>scope</key> 431 + <string>meta.tag.metadata.doctype.html entity.name.tag, meta.tag.metadata.doctype.html entity.other.attribute-name.html, meta.tag.sgml.doctype, meta.tag.sgml.doctype string, meta.tag.sgml.doctype entity.name.tag, meta.tag.sgml punctuation.definition.tag.html</string> 432 + <key>settings</key> 433 + <dict> 434 + <key>foreground</key> 435 + <string>#9194A2</string> 436 + </dict> 437 + </dict> 438 + <dict> 439 + <key>name</key> 440 + <string>HTML: Tags</string> 441 + <key>scope</key> 442 + <string>meta.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html</string> 443 + <key>settings</key> 444 + <dict> 445 + <key>foreground</key> 446 + <string>#676e8a</string> 447 + </dict> 448 + </dict> 449 + <dict> 450 + <key>name</key> 451 + <string>HTML: Tag Names</string> 452 + <key>scope</key> 453 + <string>entity.name.tag</string> 454 + <key>settings</key> 455 + <dict> 456 + <key>foreground</key> 457 + <string>#13BBB7</string> 458 + </dict> 459 + </dict> 460 + <dict> 461 + <key>name</key> 462 + <string>HTML: Attribute Names</string> 463 + <key>scope</key> 464 + <string>meta.tag entity.other.attribute-name, entity.other.attribute-name.html</string> 465 + <key>settings</key> 466 + <dict> 467 + <key>foreground</key> 468 + <string>#FF8380</string> 469 + </dict> 470 + </dict> 471 + <dict> 472 + <key>name</key> 473 + <string>HTML: Entities</string> 474 + <key>scope</key> 475 + <string>constant.character.entity, punctuation.definition.entity</string> 476 + <key>settings</key> 477 + <dict> 478 + <key>foreground</key> 479 + <string>#CF9C00</string> 480 + </dict> 481 + </dict> 482 + <dict> 483 + <key>name</key> 484 + <string>CSS: Base font color (just to colorize multi-selector commas correctly)</string> 485 + <key>scope</key> 486 + <string>source.css</string> 487 + <key>settings</key> 488 + <dict> 489 + <key>foreground</key> 490 + <string>#676e8a</string> 491 + </dict> 492 + </dict> 493 + <dict> 494 + <key>name</key> 495 + <string>CSS: Selectors</string> 496 + <key>scope</key> 497 + <string>meta.selector, meta.selector entity, meta.selector entity punctuation, source.css entity.name.tag</string> 498 + <key>settings</key> 499 + <dict> 500 + <key>foreground</key> 501 + <string>#eb369f</string> 502 + </dict> 503 + </dict> 504 + <dict> 505 + <key>name</key> 506 + <string>CSS: At-rules</string> 507 + <key>scope</key> 508 + <string>keyword.control.at-rule, keyword.control.at-rule punctuation.definition.keyword</string> 509 + <key>settings</key> 510 + <dict> 511 + <key>foreground</key> 512 + <string>#c914ae</string> 513 + </dict> 514 + </dict> 515 + <dict> 516 + <key>name</key> 517 + <string>CSS: Variables</string> 518 + <key>scope</key> 519 + <string>source.css variable</string> 520 + <key>settings</key> 521 + <dict> 522 + <key>foreground</key> 523 + <string>#11658F</string> 524 + </dict> 525 + </dict> 526 + <dict> 527 + <key>name</key> 528 + <string>CSS: Property Names</string> 529 + <key>scope</key> 530 + <string>source.css meta.property-name, source.css support.type.property-name</string> 531 + <key>settings</key> 532 + <dict> 533 + <key>foreground</key> 534 + <string>#565869</string> 535 + </dict> 536 + </dict> 537 + <dict> 538 + <key>name</key> 539 + <string>CSS: Vendored Property Names</string> 540 + <key>scope</key> 541 + <string>source.css support.type.vendored.property-name</string> 542 + <key>settings</key> 543 + <dict> 544 + <key>foreground</key> 545 + <string>#565869AA</string> 546 + </dict> 547 + </dict> 548 + <dict> 549 + <key>name</key> 550 + <string>CSS: Property Values</string> 551 + <key>scope</key> 552 + <string>meta.property-value, support.constant.property-value</string> 553 + <key>settings</key> 554 + <dict> 555 + <key>foreground</key> 556 + <string>#13BBB7</string> 557 + </dict> 558 + </dict> 559 + <dict> 560 + <key>name</key> 561 + <string>CSS: Constant</string> 562 + <key>scope</key> 563 + <string>source.css support.constant</string> 564 + <key>settings</key> 565 + <dict> 566 + <key>foreground</key> 567 + <string>#2DAE58</string> 568 + </dict> 569 + </dict> 570 + <dict> 571 + <key>name</key> 572 + <string>CSS: Selector punctuation</string> 573 + <key>scope</key> 574 + <string>punctuation.definition.entity.css, keyword.operator.combinator.css</string> 575 + <key>settings</key> 576 + <dict> 577 + <key>foreground</key> 578 + <string>#FF82CBBB</string> 579 + </dict> 580 + </dict> 581 + <dict> 582 + <key>name</key> 583 + <string>CSS: Functions</string> 584 + <key>scope</key> 585 + <string>source.css support.function</string> 586 + <key>settings</key> 587 + <dict> 588 + <key>foreground</key> 589 + <string>#09A1ED</string> 590 + </dict> 591 + </dict> 592 + <dict> 593 + <key>name</key> 594 + <string>CSS: Important Keyword</string> 595 + <key>scope</key> 596 + <string>keyword.other.important</string> 597 + <key>settings</key> 598 + <dict> 599 + <key>foreground</key> 600 + <string>#238744</string> 601 + </dict> 602 + </dict> 603 + <dict> 604 + <key>name</key> 605 + <string>SCSS: Base font color</string> 606 + <key>scope</key> 607 + <string>source.css.scss</string> 608 + <key>settings</key> 609 + <dict> 610 + <key>foreground</key> 611 + <string>#eb369f</string> 612 + </dict> 613 + </dict> 614 + <dict> 615 + <key>name</key> 616 + <string>SCSS: Class names &amp; IDs</string> 617 + <key>scope</key> 618 + <string>source.css.scss entity.other.attribute-name.class.css, source.css.scss entity.other.attribute-name.id.css</string> 619 + <key>settings</key> 620 + <dict> 621 + <key>foreground</key> 622 + <string>#eb369f</string> 623 + </dict> 624 + </dict> 625 + <dict> 626 + <key>name</key> 627 + <string>SCSS: Ampersand</string> 628 + <key>scope</key> 629 + <string>entity.name.tag.reference.scss</string> 630 + <key>settings</key> 631 + <dict> 632 + <key>foreground</key> 633 + <string>#c914ae</string> 634 + </dict> 635 + </dict> 636 + <dict> 637 + <key>name</key> 638 + <string>SCSS: Additional at-rules</string> 639 + <key>scope</key> 640 + <string>source.css.scss meta.at-rule keyword, source.css.scss meta.at-rule keyword punctuation, source.css.scss meta.at-rule operator.logical, keyword.control.content.scss, keyword.control.return.scss, keyword.control.return.scss punctuation.definition.keyword</string> 641 + <key>settings</key> 642 + <dict> 643 + <key>foreground</key> 644 + <string>#c914ae</string> 645 + </dict> 646 + </dict> 647 + <dict> 648 + <key>name</key> 649 + <string>SCSS: Punctuation</string> 650 + <key>scope</key> 651 + <string>meta.at-rule.mixin.scss, meta.at-rule.include.scss, source.css.scss meta.at-rule.if, source.css.scss meta.at-rule.else, source.css.scss meta.at-rule.each, source.css.scss meta.at-rule variable.parameter</string> 652 + <key>settings</key> 653 + <dict> 654 + <key>foreground</key> 655 + <string>#676e8a</string> 656 + </dict> 657 + </dict> 658 + <dict> 659 + <key>name</key> 660 + <string>Less: Class names</string> 661 + <key>scope</key> 662 + <string>source.css.less entity.other.attribute-name.class.css</string> 663 + <key>settings</key> 664 + <dict> 665 + <key>foreground</key> 666 + <string>#eb369f</string> 667 + </dict> 668 + </dict> 669 + <dict> 670 + <key>name</key> 671 + <string>Stylus: Curly Braces</string> 672 + <key>scope</key> 673 + <string>source.stylus meta.brace.curly.css</string> 674 + <key>settings</key> 675 + <dict> 676 + <key>foreground</key> 677 + <string>#676e8a</string> 678 + </dict> 679 + </dict> 680 + <dict> 681 + <key>name</key> 682 + <string>Stylus: Selectors</string> 683 + <key>scope</key> 684 + <string>source.stylus entity.other.attribute-name.class, source.stylus entity.other.attribute-name.id, source.stylus entity.name.tag</string> 685 + <key>settings</key> 686 + <dict> 687 + <key>foreground</key> 688 + <string>#eb369f</string> 689 + </dict> 690 + </dict> 691 + <dict> 692 + <key>name</key> 693 + <string>Stylus: Properties</string> 694 + <key>scope</key> 695 + <string>source.stylus support.type.property-name</string> 696 + <key>settings</key> 697 + <dict> 698 + <key>foreground</key> 699 + <string>#565869</string> 700 + </dict> 701 + </dict> 702 + <dict> 703 + <key>name</key> 704 + <string>Stylus: Variables</string> 705 + <key>scope</key> 706 + <string>source.stylus variable</string> 707 + <key>settings</key> 708 + <dict> 709 + <key>foreground</key> 710 + <string>#11658F</string> 711 + </dict> 712 + </dict> 713 + <dict> 714 + <key>name</key> 715 + <string>Markup: Changed</string> 716 + <key>scope</key> 717 + <string>markup.changed</string> 718 + <key>settings</key> 719 + <dict> 720 + <key>foreground</key> 721 + <string>#888888</string> 722 + </dict> 723 + </dict> 724 + <dict> 725 + <key>name</key> 726 + <string>Markup: Deletion</string> 727 + <key>scope</key> 728 + <string>markup.deleted</string> 729 + <key>settings</key> 730 + <dict> 731 + <key>foreground</key> 732 + <string>#888888</string> 733 + </dict> 734 + </dict> 735 + <dict> 736 + <key>name</key> 737 + <string>Markup: Emphasis</string> 738 + <key>scope</key> 739 + <string>markup.italic</string> 740 + <key>settings</key> 741 + <dict> 742 + <key>fontStyle</key> 743 + <string>italic</string> 744 + </dict> 745 + </dict> 746 + <dict> 747 + <key>name</key> 748 + <string>Markup: Error</string> 749 + <key>scope</key> 750 + <string>markup.error</string> 751 + <key>settings</key> 752 + <dict> 753 + <key>foreground</key> 754 + <string>#FF5C56</string> 755 + </dict> 756 + </dict> 757 + <dict> 758 + <key>name</key> 759 + <string>Markup: Insertion</string> 760 + <key>scope</key> 761 + <string>markup.inserted</string> 762 + <key>settings</key> 763 + <dict> 764 + <key>foreground</key> 765 + <string>#888888</string> 766 + </dict> 767 + </dict> 768 + <dict> 769 + <key>name</key> 770 + <string>Markup: Link</string> 771 + <key>scope</key> 772 + <string>meta.link</string> 773 + <key>settings</key> 774 + <dict> 775 + <key>foreground</key> 776 + <string>#CF9C00</string> 777 + </dict> 778 + </dict> 779 + <dict> 780 + <key>name</key> 781 + <string>Markup: Link Title</string> 782 + <key>scope</key> 783 + <string>string.other.link.title.markdown</string> 784 + <key>settings</key> 785 + <dict> 786 + <key>foreground</key> 787 + <string>#09A1ED</string> 788 + </dict> 789 + </dict> 790 + <dict> 791 + <key>name</key> 792 + <string>Markup: Output</string> 793 + <key>scope</key> 794 + <string>markup.output, markup.raw</string> 795 + <key>settings</key> 796 + <dict> 797 + <key>foreground</key> 798 + <string>#999999</string> 799 + </dict> 800 + </dict> 801 + <dict> 802 + <key>name</key> 803 + <string>Markup: Prompt</string> 804 + <key>scope</key> 805 + <string>markup.prompt</string> 806 + <key>settings</key> 807 + <dict> 808 + <key>foreground</key> 809 + <string>#999999</string> 810 + </dict> 811 + </dict> 812 + <dict> 813 + <key>name</key> 814 + <string>Markup: Heading</string> 815 + <key>scope</key> 816 + <string>markup.heading</string> 817 + <key>settings</key> 818 + <dict> 819 + <key>foreground</key> 820 + <string>#2DAE58</string> 821 + </dict> 822 + </dict> 823 + <dict> 824 + <key>name</key> 825 + <string>Markup: Strong</string> 826 + <key>scope</key> 827 + <string>markup.bold</string> 828 + <key>settings</key> 829 + <dict> 830 + <key>fontStyle</key> 831 + <string>bold</string> 832 + </dict> 833 + </dict> 834 + <dict> 835 + <key>name</key> 836 + <string>Markup: Traceback</string> 837 + <key>scope</key> 838 + <string>markup.traceback</string> 839 + <key>settings</key> 840 + <dict> 841 + <key>foreground</key> 842 + <string>#FF5C56</string> 843 + </dict> 844 + </dict> 845 + <dict> 846 + <key>name</key> 847 + <string>Markup: Underline</string> 848 + <key>scope</key> 849 + <string>markup.underline</string> 850 + <key>settings</key> 851 + <dict> 852 + <key>fontStyle</key> 853 + <string>underline</string> 854 + </dict> 855 + </dict> 856 + <dict> 857 + <key>name</key> 858 + <string>Markup Quote</string> 859 + <key>scope</key> 860 + <string>markup.quote</string> 861 + <key>settings</key> 862 + <dict> 863 + <key>foreground</key> 864 + <string>#777985</string> 865 + </dict> 866 + </dict> 867 + <dict> 868 + <key>name</key> 869 + <string>Markup Styling</string> 870 + <key>scope</key> 871 + <string>markup.bold, markup.italic</string> 872 + <key>settings</key> 873 + <dict> 874 + <key>foreground</key> 875 + <string>#13BBB7</string> 876 + </dict> 877 + </dict> 878 + <dict> 879 + <key>name</key> 880 + <string>Markup Inline</string> 881 + <key>scope</key> 882 + <string>markup.inline.raw</string> 883 + <key>settings</key> 884 + <dict> 885 + <key>fontStyle</key> 886 + <string/> 887 + <key>foreground</key> 888 + <string>#eb369f</string> 889 + </dict> 890 + </dict> 891 + <dict> 892 + <key>name</key> 893 + <string>JavaScript: Braces and fat arrow</string> 894 + <key>scope</key> 895 + <string>meta.brace.round, meta.brace.square, storage.type.function.arrow</string> 896 + <key>settings</key> 897 + <dict> 898 + <key>foreground</key> 899 + <string>#676e8a</string> 900 + </dict> 901 + </dict> 902 + <dict> 903 + <key>name</key> 904 + <string>JavaScript: Special import/export entities</string> 905 + <key>scope</key> 906 + <string>constant.language.import-export-all, meta.import keyword.control.default</string> 907 + <key>settings</key> 908 + <dict> 909 + <key>foreground</key> 910 + <string>#c914ae</string> 911 + </dict> 912 + </dict> 913 + <dict> 914 + <key>name</key> 915 + <string>JavaScript: Built-in functions</string> 916 + <key>scope</key> 917 + <string>support.function.js</string> 918 + <key>settings</key> 919 + <dict> 920 + <key>foreground</key> 921 + <string>#11658F</string> 922 + </dict> 923 + </dict> 924 + <dict> 925 + <key>name</key> 926 + <string>JavaScript: RegExp</string> 927 + <key>scope</key> 928 + <string>string.regexp.js</string> 929 + <key>settings</key> 930 + <dict> 931 + <key>foreground</key> 932 + <string>#13BBB7</string> 933 + </dict> 934 + </dict> 935 + <dict> 936 + <key>name</key> 937 + <string>JavaScript: super() call and Node.js 'module'</string> 938 + <key>scope</key> 939 + <string>variable.language.super, support.type.object.module.js</string> 940 + <key>settings</key> 941 + <dict> 942 + <key>foreground</key> 943 + <string>#eb369f</string> 944 + </dict> 945 + </dict> 946 + <dict> 947 + <key>name</key> 948 + <string>JSX: Plain text</string> 949 + <key>scope</key> 950 + <string>meta.jsx.children</string> 951 + <key>settings</key> 952 + <dict> 953 + <key>foreground</key> 954 + <string>#686968</string> 955 + </dict> 956 + </dict> 957 + <dict> 958 + <key>name</key> 959 + <string>YAML: Keys</string> 960 + <key>scope</key> 961 + <string>entity.name.tag.yaml</string> 962 + <key>settings</key> 963 + <dict> 964 + <key>foreground</key> 965 + <string>#11658F</string> 966 + </dict> 967 + </dict> 968 + <dict> 969 + <key>name</key> 970 + <string>YAML: Keys</string> 971 + <key>scope</key> 972 + <string>variable.other.alias.yaml</string> 973 + <key>settings</key> 974 + <dict> 975 + <key>foreground</key> 976 + <string>#2DAE58</string> 977 + </dict> 978 + </dict> 979 + <dict> 980 + <key>name</key> 981 + <string>PHP: Start / End Tags</string> 982 + <key>scope</key> 983 + <string>punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php</string> 984 + <key>settings</key> 985 + <dict> 986 + <key>foreground</key> 987 + <string>#75798F</string> 988 + </dict> 989 + </dict> 990 + <dict> 991 + <key>name</key> 992 + <string>PHP: Use Aliases</string> 993 + <key>scope</key> 994 + <string>meta.use.php entity.other.alias.php</string> 995 + <key>settings</key> 996 + <dict> 997 + <key>foreground</key> 998 + <string>#13BBB7</string> 999 + </dict> 1000 + </dict> 1001 + <dict> 1002 + <key>name</key> 1003 + <string>PHP: Constructs</string> 1004 + <key>scope</key> 1005 + <string>source.php support.function.construct, source.php support.function.var</string> 1006 + <key>settings</key> 1007 + <dict> 1008 + <key>foreground</key> 1009 + <string>#11658F</string> 1010 + </dict> 1011 + </dict> 1012 + <dict> 1013 + <key>name</key> 1014 + <string>PHP: Class Syntax</string> 1015 + <key>scope</key> 1016 + <string>storage.modifier.extends.php, source.php keyword.other, storage.modifier.php</string> 1017 + <key>settings</key> 1018 + <dict> 1019 + <key>foreground</key> 1020 + <string>#eb369f</string> 1021 + </dict> 1022 + </dict> 1023 + <dict> 1024 + <key>name</key> 1025 + <string>PHP: 'function' keyword before reference-returning method</string> 1026 + <key>scope</key> 1027 + <string>meta.class.body.php storage.type.php</string> 1028 + <key>settings</key> 1029 + <dict> 1030 + <key>foreground</key> 1031 + <string>#eb369f</string> 1032 + </dict> 1033 + </dict> 1034 + <dict> 1035 + <key>name</key> 1036 + <string>PHP: Types turned pink by previous rule</string> 1037 + <key>scope</key> 1038 + <string>storage.type.php, meta.class.body.php meta.function-call.php storage.type.php, meta.class.body.php meta.function.php storage.type.php</string> 1039 + <key>settings</key> 1040 + <dict> 1041 + <key>foreground</key> 1042 + <string>#2DAE58</string> 1043 + </dict> 1044 + </dict> 1045 + <dict> 1046 + <key>name</key> 1047 + <string>PHP: SQL</string> 1048 + <key>scope</key> 1049 + <string>source.php keyword.other.DML</string> 1050 + <key>settings</key> 1051 + <dict> 1052 + <key>foreground</key> 1053 + <string>#D94E4A</string> 1054 + </dict> 1055 + </dict> 1056 + <dict> 1057 + <key>name</key> 1058 + <string>PHP: SQL</string> 1059 + <key>scope</key> 1060 + <string>source.sql.embedded.php keyword.operator</string> 1061 + <key>settings</key> 1062 + <dict> 1063 + <key>foreground</key> 1064 + <string>#2DAE58</string> 1065 + </dict> 1066 + </dict> 1067 + <dict> 1068 + <key>name</key> 1069 + <string>TOML/INI: Keywords</string> 1070 + <key>scope</key> 1071 + <string>source.ini keyword, source.toml keyword, source.env variable</string> 1072 + <key>settings</key> 1073 + <dict> 1074 + <key>foreground</key> 1075 + <string>#11658F</string> 1076 + </dict> 1077 + </dict> 1078 + <dict> 1079 + <key>name</key> 1080 + <string>TOML/INI: Headlines</string> 1081 + <key>scope</key> 1082 + <string>source.ini entity.name.section, source.toml entity.other.attribute-name</string> 1083 + <key>settings</key> 1084 + <dict> 1085 + <key>foreground</key> 1086 + <string>#eb369f</string> 1087 + </dict> 1088 + </dict> 1089 + <dict> 1090 + <key>name</key> 1091 + <string>Go: Types</string> 1092 + <key>scope</key> 1093 + <string>source.go storage.type</string> 1094 + <key>settings</key> 1095 + <dict> 1096 + <key>foreground</key> 1097 + <string>#2DAE58</string> 1098 + </dict> 1099 + </dict> 1100 + <dict> 1101 + <key>name</key> 1102 + <string>Go: Imports</string> 1103 + <key>scope</key> 1104 + <string>keyword.import.go, keyword.package.go</string> 1105 + <key>settings</key> 1106 + <dict> 1107 + <key>foreground</key> 1108 + <string>#FF5C56</string> 1109 + </dict> 1110 + </dict> 1111 + <dict> 1112 + <key>name</key> 1113 + <string>Reason: Variables</string> 1114 + <key>scope</key> 1115 + <string>source.reason variable.language string</string> 1116 + <key>settings</key> 1117 + <dict> 1118 + <key>foreground</key> 1119 + <string>#565869</string> 1120 + </dict> 1121 + </dict> 1122 + <dict> 1123 + <key>name</key> 1124 + <string>Reason: Types</string> 1125 + <key>scope</key> 1126 + <string>source.reason support.type, source.reason constant.language, source.reason constant.language constant.numeric, source.reason support.type string.regexp</string> 1127 + <key>settings</key> 1128 + <dict> 1129 + <key>foreground</key> 1130 + <string>#2DAE58</string> 1131 + </dict> 1132 + </dict> 1133 + <dict> 1134 + <key>name</key> 1135 + <string>Reason: Operators</string> 1136 + <key>scope</key> 1137 + <string>source.reason keyword.operator keyword.control, source.reason keyword.control.less, source.reason keyword.control.flow</string> 1138 + <key>settings</key> 1139 + <dict> 1140 + <key>foreground</key> 1141 + <string>#676e8a</string> 1142 + </dict> 1143 + </dict> 1144 + <dict> 1145 + <key>name</key> 1146 + <string>Reason: Regex strings</string> 1147 + <key>scope</key> 1148 + <string>source.reason string.regexp</string> 1149 + <key>settings</key> 1150 + <dict> 1151 + <key>foreground</key> 1152 + <string>#CF9C00</string> 1153 + </dict> 1154 + </dict> 1155 + <dict> 1156 + <key>name</key> 1157 + <string>Reason: Properties</string> 1158 + <key>scope</key> 1159 + <string>source.reason support.property-value</string> 1160 + <key>settings</key> 1161 + <dict> 1162 + <key>foreground</key> 1163 + <string>#11658F</string> 1164 + </dict> 1165 + </dict> 1166 + <dict> 1167 + <key>name</key> 1168 + <string>Rust: Core functions</string> 1169 + <key>scope</key> 1170 + <string>source.rust support.function.core.rust</string> 1171 + <key>settings</key> 1172 + <dict> 1173 + <key>foreground</key> 1174 + <string>#11658F</string> 1175 + </dict> 1176 + </dict> 1177 + <dict> 1178 + <key>name</key> 1179 + <string>Rust: Types</string> 1180 + <key>scope</key> 1181 + <string>source.rust storage.type.core.rust, source.rust storage.class.std</string> 1182 + <key>settings</key> 1183 + <dict> 1184 + <key>foreground</key> 1185 + <string>#2DAE58</string> 1186 + </dict> 1187 + </dict> 1188 + <dict> 1189 + <key>name</key> 1190 + <string>Rust: Entities</string> 1191 + <key>scope</key> 1192 + <string>source.rust entity.name.type.rust</string> 1193 + <key>settings</key> 1194 + <dict> 1195 + <key>foreground</key> 1196 + <string>#13BBB7</string> 1197 + </dict> 1198 + </dict> 1199 + <dict> 1200 + <key>name</key> 1201 + <string>CoffeeScript: Function arrows</string> 1202 + <key>scope</key> 1203 + <string>storage.type.function.coffee</string> 1204 + <key>settings</key> 1205 + <dict> 1206 + <key>foreground</key> 1207 + <string>#676e8a</string> 1208 + </dict> 1209 + </dict> 1210 + <dict> 1211 + <key>name</key> 1212 + <string>C#: Types</string> 1213 + <key>scope</key> 1214 + <string>keyword.type.cs, storage.type.cs</string> 1215 + <key>settings</key> 1216 + <dict> 1217 + <key>foreground</key> 1218 + <string>#2DAE58</string> 1219 + </dict> 1220 + </dict> 1221 + <dict> 1222 + <key>name</key> 1223 + <string>C#: Classes</string> 1224 + <key>scope</key> 1225 + <string>entity.name.type.namespace.cs</string> 1226 + <key>settings</key> 1227 + <dict> 1228 + <key>foreground</key> 1229 + <string>#13BBB7</string> 1230 + </dict> 1231 + </dict> 1232 + <dict> 1233 + <key>name</key> 1234 + <string>Diff: Headers</string> 1235 + <key>scope</key> 1236 + <string>meta.diff.header</string> 1237 + <key>settings</key> 1238 + <dict> 1239 + <key>foreground</key> 1240 + <string>#11658F</string> 1241 + </dict> 1242 + </dict> 1243 + <dict> 1244 + <key>name</key> 1245 + <string>Diff: Inserted</string> 1246 + <key>scope</key> 1247 + <string>markup.inserted.diff</string> 1248 + <key>settings</key> 1249 + <dict> 1250 + <key>foreground</key> 1251 + <string>#2DAE58</string> 1252 + </dict> 1253 + </dict> 1254 + <dict> 1255 + <key>name</key> 1256 + <string>Diff: Deleted</string> 1257 + <key>scope</key> 1258 + <string>markup.deleted.diff</string> 1259 + <key>settings</key> 1260 + <dict> 1261 + <key>foreground</key> 1262 + <string>#FF5C56</string> 1263 + </dict> 1264 + </dict> 1265 + <dict> 1266 + <key>name</key> 1267 + <string>Diff: Range</string> 1268 + <key>scope</key> 1269 + <string>meta.diff.range, meta.diff.index, meta.separator</string> 1270 + <key>settings</key> 1271 + <dict> 1272 + <key>foreground</key> 1273 + <string>#09A1ED</string> 1274 + </dict> 1275 + </dict> 1276 + <dict> 1277 + <key>name</key> 1278 + <string>Make: Variables</string> 1279 + <key>scope</key> 1280 + <string>source.makefile variable</string> 1281 + <key>settings</key> 1282 + <dict> 1283 + <key>foreground</key> 1284 + <string>#11658F</string> 1285 + </dict> 1286 + </dict> 1287 + <dict> 1288 + <key>name</key> 1289 + <string>Objective-C: Keywords</string> 1290 + <key>scope</key> 1291 + <string>keyword.control.protocol-specification.objc</string> 1292 + <key>settings</key> 1293 + <dict> 1294 + <key>foreground</key> 1295 + <string>#eb369f</string> 1296 + </dict> 1297 + </dict> 1298 + <dict> 1299 + <key>name</key> 1300 + <string>Objective-C: Types</string> 1301 + <key>scope</key> 1302 + <string>meta.parens storage.type.objc, meta.return-type.objc support.class, meta.return-type.objc storage.type.objc</string> 1303 + <key>settings</key> 1304 + <dict> 1305 + <key>foreground</key> 1306 + <string>#2DAE58</string> 1307 + </dict> 1308 + </dict> 1309 + <dict> 1310 + <key>name</key> 1311 + <string>SQL: Keywords</string> 1312 + <key>scope</key> 1313 + <string>source.sql keyword</string> 1314 + <key>settings</key> 1315 + <dict> 1316 + <key>foreground</key> 1317 + <string>#11658F</string> 1318 + </dict> 1319 + </dict> 1320 + <dict> 1321 + <key>name</key> 1322 + <string>Docker: Keyword methods</string> 1323 + <key>scope</key> 1324 + <string>keyword.other.special-method.dockerfile</string> 1325 + <key>settings</key> 1326 + <dict> 1327 + <key>foreground</key> 1328 + <string>#09A1ED</string> 1329 + </dict> 1330 + </dict> 1331 + <dict> 1332 + <key>name</key> 1333 + <string>Elixir: Symbols</string> 1334 + <key>scope</key> 1335 + <string>constant.other.symbol.elixir</string> 1336 + <key>settings</key> 1337 + <dict> 1338 + <key>foreground</key> 1339 + <string>#11658F</string> 1340 + </dict> 1341 + </dict> 1342 + <dict> 1343 + <key>name</key> 1344 + <string>Elm: Symbols</string> 1345 + <key>scope</key> 1346 + <string>storage.type.elm, support.module.elm</string> 1347 + <key>settings</key> 1348 + <dict> 1349 + <key>foreground</key> 1350 + <string>#13BBB7</string> 1351 + </dict> 1352 + </dict> 1353 + <dict> 1354 + <key>name</key> 1355 + <string>Elm: Punctuation</string> 1356 + <key>scope</key> 1357 + <string>source.elm keyword.other</string> 1358 + <key>settings</key> 1359 + <dict> 1360 + <key>foreground</key> 1361 + <string>#676e8a</string> 1362 + </dict> 1363 + </dict> 1364 + <dict> 1365 + <key>name</key> 1366 + <string>Erlang: Classes</string> 1367 + <key>scope</key> 1368 + <string>source.erlang entity.name.type.class</string> 1369 + <key>settings</key> 1370 + <dict> 1371 + <key>foreground</key> 1372 + <string>#13BBB7</string> 1373 + </dict> 1374 + </dict> 1375 + <dict> 1376 + <key>name</key> 1377 + <string>Erlang: Properties</string> 1378 + <key>scope</key> 1379 + <string>variable.other.field.erlang</string> 1380 + <key>settings</key> 1381 + <dict> 1382 + <key>foreground</key> 1383 + <string>#11658F</string> 1384 + </dict> 1385 + </dict> 1386 + <dict> 1387 + <key>name</key> 1388 + <string>Erlang: Symbols</string> 1389 + <key>scope</key> 1390 + <string>source.erlang constant.other.symbol</string> 1391 + <key>settings</key> 1392 + <dict> 1393 + <key>foreground</key> 1394 + <string>#2DAE58</string> 1395 + </dict> 1396 + </dict> 1397 + <dict> 1398 + <key>name</key> 1399 + <string>Haskell: Types</string> 1400 + <key>scope</key> 1401 + <string>storage.type.haskell</string> 1402 + <key>settings</key> 1403 + <dict> 1404 + <key>foreground</key> 1405 + <string>#2DAE58</string> 1406 + </dict> 1407 + </dict> 1408 + <dict> 1409 + <key>name</key> 1410 + <string>Haskell: Classes</string> 1411 + <key>scope</key> 1412 + <string>meta.declaration.class.haskell storage.type.haskell, meta.declaration.instance.haskell storage.type.haskell</string> 1413 + <key>settings</key> 1414 + <dict> 1415 + <key>foreground</key> 1416 + <string>#13BBB7</string> 1417 + </dict> 1418 + </dict> 1419 + <dict> 1420 + <key>name</key> 1421 + <string>Haskell: Punctuation</string> 1422 + <key>scope</key> 1423 + <string>meta.preprocessor.haskell</string> 1424 + <key>settings</key> 1425 + <dict> 1426 + <key>foreground</key> 1427 + <string>#75798F</string> 1428 + </dict> 1429 + </dict> 1430 + <dict> 1431 + <key>name</key> 1432 + <string>Haskell: Control keywords</string> 1433 + <key>scope</key> 1434 + <string>source.haskell keyword.control</string> 1435 + <key>settings</key> 1436 + <dict> 1437 + <key>foreground</key> 1438 + <string>#eb369f</string> 1439 + </dict> 1440 + </dict> 1441 + <dict> 1442 + <key>name</key> 1443 + <string>Latte: Punctuation</string> 1444 + <key>scope</key> 1445 + <string>tag.end.latte, tag.begin.latte</string> 1446 + <key>settings</key> 1447 + <dict> 1448 + <key>foreground</key> 1449 + <string>#676e8a</string> 1450 + </dict> 1451 + </dict> 1452 + <dict> 1453 + <key>name</key> 1454 + <string>Gettext: Keyword</string> 1455 + <key>scope</key> 1456 + <string>source.po keyword.control</string> 1457 + <key>settings</key> 1458 + <dict> 1459 + <key>foreground</key> 1460 + <string>#11658F</string> 1461 + </dict> 1462 + </dict> 1463 + <dict> 1464 + <key>name</key> 1465 + <string>Gettext: Source file</string> 1466 + <key>scope</key> 1467 + <string>source.po storage.type</string> 1468 + <key>settings</key> 1469 + <dict> 1470 + <key>foreground</key> 1471 + <string>#9194A2</string> 1472 + </dict> 1473 + </dict> 1474 + <dict> 1475 + <key>name</key> 1476 + <string>Gettext: Constant</string> 1477 + <key>scope</key> 1478 + <string>constant.language.po</string> 1479 + <key>settings</key> 1480 + <dict> 1481 + <key>foreground</key> 1482 + <string>#13BBB7</string> 1483 + </dict> 1484 + </dict> 1485 + <dict> 1486 + <key>name</key> 1487 + <string>Gettext: Constant Value</string> 1488 + <key>scope</key> 1489 + <string>meta.header.po string</string> 1490 + <key>settings</key> 1491 + <dict> 1492 + <key>foreground</key> 1493 + <string>#FF8380</string> 1494 + </dict> 1495 + </dict> 1496 + <dict> 1497 + <key>name</key> 1498 + <string>Gettext: Base Color</string> 1499 + <key>scope</key> 1500 + <string>source.po meta.header.po</string> 1501 + <key>settings</key> 1502 + <dict> 1503 + <key>foreground</key> 1504 + <string>#676e8a</string> 1505 + </dict> 1506 + </dict> 1507 + <dict> 1508 + <key>name</key> 1509 + <string>OCaml: No underlines</string> 1510 + <key>scope</key> 1511 + <string>source.ocaml markup.underline</string> 1512 + <key>settings</key> 1513 + <dict> 1514 + <key>fontStyle</key> 1515 + <string/> 1516 + </dict> 1517 + </dict> 1518 + <dict> 1519 + <key>name</key> 1520 + <string>OCaml: Control keywords</string> 1521 + <key>scope</key> 1522 + <string>source.ocaml punctuation.definition.tag emphasis, source.ocaml entity.name.class constant.numeric, source.ocaml support.type</string> 1523 + <key>settings</key> 1524 + <dict> 1525 + <key>foreground</key> 1526 + <string>#eb369f</string> 1527 + </dict> 1528 + </dict> 1529 + <dict> 1530 + <key>name</key> 1531 + <string>OCaml: Punctuation</string> 1532 + <key>scope</key> 1533 + <string>source.ocaml constant.numeric entity.other.attribute-name</string> 1534 + <key>settings</key> 1535 + <dict> 1536 + <key>foreground</key> 1537 + <string>#13BBB7</string> 1538 + </dict> 1539 + </dict> 1540 + <dict> 1541 + <key>name</key> 1542 + <string>OCaml: Comments</string> 1543 + <key>scope</key> 1544 + <string>source.ocaml comment meta.separator</string> 1545 + <key>settings</key> 1546 + <dict> 1547 + <key>foreground</key> 1548 + <string>#676e8a</string> 1549 + </dict> 1550 + </dict> 1551 + <dict> 1552 + <key>name</key> 1553 + <string>OCaml: Punctuation</string> 1554 + <key>scope</key> 1555 + <string>source.ocaml support.type strong, source.ocaml keyword.control strong</string> 1556 + <key>settings</key> 1557 + <dict> 1558 + <key>foreground</key> 1559 + <string>#676e8a</string> 1560 + </dict> 1561 + </dict> 1562 + <dict> 1563 + <key>name</key> 1564 + <string>OCaml: Properties</string> 1565 + <key>scope</key> 1566 + <string>source.ocaml support.constant.property-value</string> 1567 + <key>settings</key> 1568 + <dict> 1569 + <key>foreground</key> 1570 + <string>#11658F</string> 1571 + </dict> 1572 + </dict> 1573 + <dict> 1574 + <key>name</key> 1575 + <string>Scala: Overrides</string> 1576 + <key>scope</key> 1577 + <string>source.scala entity.name.class</string> 1578 + <key>settings</key> 1579 + <dict> 1580 + <key>foreground</key> 1581 + <string>#13BBB7</string> 1582 + </dict> 1583 + </dict> 1584 + <dict> 1585 + <key>name</key> 1586 + <string>Scala: Types</string> 1587 + <key>scope</key> 1588 + <string>storage.type.scala</string> 1589 + <key>settings</key> 1590 + <dict> 1591 + <key>foreground</key> 1592 + <string>#2DAE58</string> 1593 + </dict> 1594 + </dict> 1595 + <dict> 1596 + <key>name</key> 1597 + <string>Scala: Properties</string> 1598 + <key>scope</key> 1599 + <string>variable.parameter.scala</string> 1600 + <key>settings</key> 1601 + <dict> 1602 + <key>foreground</key> 1603 + <string>#11658F</string> 1604 + </dict> 1605 + </dict> 1606 + <dict> 1607 + <key>name</key> 1608 + <string>Scala: Punctuation</string> 1609 + <key>scope</key> 1610 + <string>meta.bracket.scala, meta.colon.scala</string> 1611 + <key>settings</key> 1612 + <dict> 1613 + <key>foreground</key> 1614 + <string>#676e8a</string> 1615 + </dict> 1616 + </dict> 1617 + <dict> 1618 + <key>name</key> 1619 + <string>Clojure: Punctuation</string> 1620 + <key>scope</key> 1621 + <string>meta.metadata.simple.clojure</string> 1622 + <key>settings</key> 1623 + <dict> 1624 + <key>foreground</key> 1625 + <string>#676e8a</string> 1626 + </dict> 1627 + </dict> 1628 + <dict> 1629 + <key>name</key> 1630 + <string>Clojure: Symbols</string> 1631 + <key>scope</key> 1632 + <string>meta.metadata.simple.clojure meta.symbol</string> 1633 + <key>settings</key> 1634 + <dict> 1635 + <key>foreground</key> 1636 + <string>#13BBB7</string> 1637 + </dict> 1638 + </dict> 1639 + <dict> 1640 + <key>name</key> 1641 + <string>R: Punctuation</string> 1642 + <key>scope</key> 1643 + <string>source.r keyword.other</string> 1644 + <key>settings</key> 1645 + <dict> 1646 + <key>foreground</key> 1647 + <string>#676e8a</string> 1648 + </dict> 1649 + </dict> 1650 + <dict> 1651 + <key>name</key> 1652 + <string>Svelte: Control keywords</string> 1653 + <key>scope</key> 1654 + <string>source.svelte meta.block.ts entity.name.label</string> 1655 + <key>settings</key> 1656 + <dict> 1657 + <key>foreground</key> 1658 + <string>#11658F</string> 1659 + </dict> 1660 + </dict> 1661 + <dict> 1662 + <key>name</key> 1663 + <string>AppleScript: Control keywords</string> 1664 + <key>scope</key> 1665 + <string>keyword.operator.word.applescript</string> 1666 + <key>settings</key> 1667 + <dict> 1668 + <key>foreground</key> 1669 + <string>#eb369f</string> 1670 + </dict> 1671 + </dict> 1672 + <dict> 1673 + <key>name</key> 1674 + <string>LiveScript: Function calls</string> 1675 + <key>scope</key> 1676 + <string>meta.function-call.livescript</string> 1677 + <key>settings</key> 1678 + <dict> 1679 + <key>foreground</key> 1680 + <string>#09A1ED</string> 1681 + </dict> 1682 + </dict> 1683 + <dict> 1684 + <key>name</key> 1685 + <string>Lua: Self</string> 1686 + <key>scope</key> 1687 + <string>variable.language.self.lua</string> 1688 + <key>settings</key> 1689 + <dict> 1690 + <key>foreground</key> 1691 + <string>#13BBB7</string> 1692 + </dict> 1693 + </dict> 1694 + <dict> 1695 + <key>name</key> 1696 + <string>Swift: Classes</string> 1697 + <key>scope</key> 1698 + <string>entity.name.type.class.swift, meta.inheritance-clause.swift, meta.import.swift entity.name.type</string> 1699 + <key>settings</key> 1700 + <dict> 1701 + <key>foreground</key> 1702 + <string>#13BBB7</string> 1703 + </dict> 1704 + </dict> 1705 + <dict> 1706 + <key>name</key> 1707 + <string>Swift: String Embeds</string> 1708 + <key>scope</key> 1709 + <string>source.swift punctuation.section.embedded</string> 1710 + <key>settings</key> 1711 + <dict> 1712 + <key>foreground</key> 1713 + <string>#B38700</string> 1714 + </dict> 1715 + </dict> 1716 + <dict> 1717 + <key>name</key> 1718 + <string>Swift: Parameters</string> 1719 + <key>scope</key> 1720 + <string>variable.parameter.function.swift entity.name.function.swift</string> 1721 + <key>settings</key> 1722 + <dict> 1723 + <key>foreground</key> 1724 + <string>#565869</string> 1725 + </dict> 1726 + </dict> 1727 + <dict> 1728 + <key>name</key> 1729 + <string>Twig: Object entities</string> 1730 + <key>scope</key> 1731 + <string>meta.function-call.twig</string> 1732 + <key>settings</key> 1733 + <dict> 1734 + <key>foreground</key> 1735 + <string>#565869</string> 1736 + </dict> 1737 + </dict> 1738 + <dict> 1739 + <key>name</key> 1740 + <string>Django: Variables</string> 1741 + <key>scope</key> 1742 + <string>string.unquoted.tag-string.django</string> 1743 + <key>settings</key> 1744 + <dict> 1745 + <key>foreground</key> 1746 + <string>#565869</string> 1747 + </dict> 1748 + </dict> 1749 + <dict> 1750 + <key>name</key> 1751 + <string>Django: Punctuation</string> 1752 + <key>scope</key> 1753 + <string>entity.tag.tagbraces.django, entity.tag.filter-pipe.django</string> 1754 + <key>settings</key> 1755 + <dict> 1756 + <key>foreground</key> 1757 + <string>#676e8a</string> 1758 + </dict> 1759 + </dict> 1760 + <dict> 1761 + <key>name</key> 1762 + <string>HAML: Attributes</string> 1763 + <key>scope</key> 1764 + <string>meta.section.attributes.haml constant.language, meta.section.attributes.plain.haml constant.other.symbol</string> 1765 + <key>settings</key> 1766 + <dict> 1767 + <key>foreground</key> 1768 + <string>#FF8380</string> 1769 + </dict> 1770 + </dict> 1771 + <dict> 1772 + <key>name</key> 1773 + <string>HAML: Prolog</string> 1774 + <key>scope</key> 1775 + <string>meta.prolog.haml</string> 1776 + <key>settings</key> 1777 + <dict> 1778 + <key>foreground</key> 1779 + <string>#9194A2</string> 1780 + </dict> 1781 + </dict> 1782 + <dict> 1783 + <key>name</key> 1784 + <string>Handlebars: Punctuation</string> 1785 + <key>scope</key> 1786 + <string>support.constant.handlebars</string> 1787 + <key>settings</key> 1788 + <dict> 1789 + <key>foreground</key> 1790 + <string>#676e8a</string> 1791 + </dict> 1792 + </dict> 1793 + <dict> 1794 + <key>name</key> 1795 + <string>Log: Level</string> 1796 + <key>scope</key> 1797 + <string>text.log log.constant</string> 1798 + <key>settings</key> 1799 + <dict> 1800 + <key>foreground</key> 1801 + <string>#c914ae</string> 1802 + </dict> 1803 + </dict> 1804 + <dict> 1805 + <key>name</key> 1806 + <string>C/C++ Overrides</string> 1807 + <key>scope</key> 1808 + <string>source.c string constant.other.placeholder, source.cpp string constant.other.placeholder</string> 1809 + <key>settings</key> 1810 + <dict> 1811 + <key>foreground</key> 1812 + <string>#B38700</string> 1813 + </dict> 1814 + </dict> 1815 + <dict> 1816 + <key>name</key> 1817 + <string>Groovy: Keys</string> 1818 + <key>scope</key> 1819 + <string>constant.other.key.groovy</string> 1820 + <key>settings</key> 1821 + <dict> 1822 + <key>foreground</key> 1823 + <string>#11658F</string> 1824 + </dict> 1825 + </dict> 1826 + <dict> 1827 + <key>name</key> 1828 + <string>Groovy: Classes</string> 1829 + <key>scope</key> 1830 + <string>storage.type.groovy</string> 1831 + <key>settings</key> 1832 + <dict> 1833 + <key>foreground</key> 1834 + <string>#13BBB7</string> 1835 + </dict> 1836 + </dict> 1837 + <dict> 1838 + <key>name</key> 1839 + <string>Groovy: Types</string> 1840 + <key>scope</key> 1841 + <string>meta.definition.variable.groovy storage.type.groovy</string> 1842 + <key>settings</key> 1843 + <dict> 1844 + <key>foreground</key> 1845 + <string>#2DAE58</string> 1846 + </dict> 1847 + </dict> 1848 + <dict> 1849 + <key>name</key> 1850 + <string>Groovy: Imports</string> 1851 + <key>scope</key> 1852 + <string>storage.modifier.import.groovy</string> 1853 + <key>settings</key> 1854 + <dict> 1855 + <key>foreground</key> 1856 + <string>#CF9C00</string> 1857 + </dict> 1858 + </dict> 1859 + <dict> 1860 + <key>name</key> 1861 + <string>Pug: Class names &amp; IDs</string> 1862 + <key>scope</key> 1863 + <string>entity.other.attribute-name.class.pug, entity.other.attribute-name.id.pug</string> 1864 + <key>settings</key> 1865 + <dict> 1866 + <key>foreground</key> 1867 + <string>#13BBB7</string> 1868 + </dict> 1869 + </dict> 1870 + <dict> 1871 + <key>name</key> 1872 + <string>Pug: Punctuation</string> 1873 + <key>scope</key> 1874 + <string>constant.name.attribute.tag.pug</string> 1875 + <key>settings</key> 1876 + <dict> 1877 + <key>foreground</key> 1878 + <string>#676e8a</string> 1879 + </dict> 1880 + </dict> 1881 + <dict> 1882 + <key>name</key> 1883 + <string>Volar: &lt;style&gt; tag</string> 1884 + <key>scope</key> 1885 + <string>entity.name.tag.style.html</string> 1886 + <key>settings</key> 1887 + <dict> 1888 + <key>foreground</key> 1889 + <string>#13BBB7</string> 1890 + </dict> 1891 + </dict> 1892 + <dict> 1893 + <key>name</key> 1894 + <string>Wasm: Types</string> 1895 + <key>scope</key> 1896 + <string>entity.name.type.wasm</string> 1897 + <key>settings</key> 1898 + <dict> 1899 + <key>foreground</key> 1900 + <string>#2DAE58</string> 1901 + </dict> 1902 + </dict> 1903 + </array> 1904 + <key>uuid</key> 1905 + <string>87b0ac04-646e-4e1c-938a-54fe8fab0a3d</string> 1906 + <key>colorSpaceName</key> 1907 + <string>sRGB</string> 1908 + <key>semanticClass</key> 1909 + <string>theme.light.snazzy-light</string> 1910 + <key>author</key> 1911 + <string/> 1912 + <key>comment</key> 1913 + <string/> 1914 + </dict> 1915 + </plist>
+236
template.typ
··· 1 + // #let sig(in-between) = stack( 2 + // dir: ltr, 3 + // spacing: 0.5em, 4 + // move(dy: -0.07em, image("heart.png", width: 2%)), 5 + // in-between, 6 + // move(dy: -0.15em, image("flag.png", width: 2.5%)), 7 + // ) 8 + 9 + // From https://github.com/mgoulao/arkheion, slightly tweaked parce que le Français. 10 + #let arkheion( 11 + title: "", 12 + headertitle: "", 13 + abstract: none, 14 + keywords: (), 15 + authors: (), 16 + custom_authors: none, 17 + date: none, 18 + logo: none, 19 + body, 20 + ) = { 21 + // Set the document's basic properties. 22 + set document(author: authors.map(a => a.name), title: title) 23 + set page( 24 + margin: (left: 25mm, right: 25mm, top: 25mm, bottom: 30mm), 25 + header: text( 26 + fill: luma(30%), 27 + stack( 28 + dir: ltr, 29 + spacing: 2em, 30 + align( 31 + left, 32 + context { 33 + let selector = selector(heading).before(here()) 34 + let level = counter(selector) 35 + let headings = query(selector) 36 + 37 + if headings.len() == 0 { 38 + return 39 + } 40 + 41 + let heading = headings.last() 42 + 43 + if heading.numbering != none [ 44 + #headertitle ⁄ #heading.body 45 + ] 46 + }, 47 + ), 48 + align( 49 + right, 50 + context { 51 + let selector = selector(heading).before(here()) 52 + let level = counter(selector) 53 + let headings = query(selector) 54 + 55 + if headings.len() == 0 { 56 + return 57 + } 58 + 59 + let heading = headings.last() 60 + if heading.numbering != none [ 61 + Ch. #level.display(heading.numbering) 62 + ] 63 + }, 64 + ), 65 + ), 66 + ), 67 + numbering: (current, ..total) => if total.pos().len() > 0 68 + and current == total.at(0) { 69 + // sig(str(current)) 70 + str(current) 71 + } else { 72 + str(current) 73 + }, 74 + number-align: center, 75 + ) 76 + show raw: set text(size: 0.85em, font: ("MartianMono NF", "Martian Mono")) 77 + set text(font: "New Computer Modern", lang: "fr") 78 + set raw(theme: "snazzylight.tmTheme") 79 + show math.equation: set text(weight: 400) 80 + show math.equation: set block(spacing: 0.65em) 81 + set math.equation(numbering: "(1)") 82 + set heading(numbering: "1.1 ") 83 + // Écriture inclusive >:3 84 + show "·": sym.dot.op 85 + // show heading: set text(font: "Martian Mono") 86 + 87 + // Set run-in subheadings, starting at level 4. 88 + show heading: it => { 89 + // H1 and H2 90 + if it.level == 1 { 91 + pad( 92 + bottom: 10pt, 93 + it, 94 + ) 95 + } else if it.level == 2 { 96 + pad( 97 + bottom: 8pt, 98 + it, 99 + ) 100 + } else if it.level > 3 { 101 + text(11pt, weight: "bold", it.body + " ") 102 + } else { 103 + it 104 + } 105 + } 106 + 107 + pad( 108 + x: 0%, 109 + y: 25%, 110 + { 111 + if logo != none { 112 + pad( 113 + top: 1em, 114 + align(center)[ 115 + #image(logo, width: 80%) 116 + ], 117 + ) 118 + } 119 + 120 + if logo == none { 121 + line(length: 100%, stroke: 2pt) 122 + } 123 + // Title row. 124 + pad( 125 + bottom: 4pt, 126 + top: 4pt, 127 + align(center)[ 128 + #block(text(weight: 500, 1.75em, title)) 129 + #v(1em, weak: true) 130 + ], 131 + ) 132 + if logo == none { 133 + line(length: 100%, stroke: 2pt) 134 + } 135 + 136 + // Author information. 137 + if custom_authors != none { 138 + custom_authors 139 + } else { 140 + pad( 141 + top: 0.5em, 142 + x: 2em, 143 + grid( 144 + columns: (1fr,) * calc.min(3, authors.len()), 145 + gutter: 1em, 146 + ..authors.map(author => align(center)[ 147 + #if author.keys().contains("orcid") { 148 + link("http://orcid.org/" + author.orcid)[ 149 + #pad( 150 + bottom: -8pt, 151 + grid( 152 + columns: (8pt, auto, 8pt), 153 + rows: 10pt, 154 + [], 155 + [*#author.name*], 156 + [ 157 + #pad( 158 + left: 4pt, 159 + top: -4pt, 160 + image("orcid.svg", width: 8pt), 161 + ) 162 + ], 163 + ), 164 + ) 165 + ] 166 + } else { 167 + grid( 168 + columns: auto, 169 + rows: 2pt, 170 + [*#author.name*], 171 + ) 172 + } 173 + #author.email \ 174 + #author.affiliation 175 + ]), 176 + ), 177 + ) 178 + } 179 + 180 + align(center)[#date] 181 + 182 + // Abstract. 183 + if abstract != none { 184 + pad( 185 + x: 3em, 186 + top: 1em, 187 + bottom: 0.4em, 188 + align(center)[ 189 + #heading( 190 + outlined: false, 191 + numbering: none, 192 + text(0.85em, smallcaps[Introduction]), 193 + ) 194 + #set par(justify: true) 195 + #set text(hyphenate: false) 196 + 197 + #abstract 198 + ], 199 + ) 200 + } 201 + 202 + // Keywords 203 + if keywords.len() > 0 { 204 + [*_Mots clés_* #h(0.3cm)] + keywords.map(str).join(" · ") 205 + } 206 + }, 207 + ) 208 + 209 + // Main body. 210 + set par(justify: true) 211 + set text(hyphenate: false) 212 + 213 + body 214 + } 215 + 216 + #let monospace = body => { 217 + text(font: "Martian Mono", size: 0.7em, body) 218 + } 219 + 220 + #let arkheion-appendices(body) = { 221 + counter(heading).update(0) 222 + counter("appendices").update(1) 223 + 224 + set heading( 225 + numbering: (..nums) => { 226 + let vals = nums.pos() 227 + let value = "ABCDEFGHIJ".at(vals.at(0) - 1) 228 + if vals.len() == 1 { 229 + return value 230 + } else { 231 + return value + "." + nums.pos().slice(1).map(str).join(".") 232 + } 233 + }, 234 + ) 235 + [#pagebreak() #body] 236 + }