Aller au contenu

Langages

phil/highlight

Chaque langage est demandé par son nom ou l'un de ses alias, dans n'importe quelle casse : Highlighter::default()->toHtml($code, 'TS') lit du TypeScript.

LangageNomAliasAnalyseur lexical
Bash et autres shellsbashsh, shell, zsh, kshCode avec Definitions::bash()
CchCode avec Definitions::c()
C++cppc++, cc, cxx, hpp, hh, hxxCode avec Definitions::cpp()
C#csharpcs, c#, dotnetCode avec Definitions::csharp()
CSScss—StyleSheet
Diffs et correctifsdiffpatch, udiffDiff
Dockerfiledockerfiledocker, containerfileDockerfile, arguments lus comme du shell
GogogolangCode avec Definitions::go()
HTMLhtmlhtm, xhtml, vue, svelteMarkup, les scripts comme du JavaScript et les styles comme du CSS
INI, .env, propriétésinidosini, cfg, conf, properties, env, dotenv, editorconfig, gitconfigIni
JavajavajspCode avec Definitions::java()
JavaScriptjavascriptjs, mjs, cjs, jsx, nodeCode avec Definitions::javascript()
JSONjsonjsonc, json5, geojson, webmanifestCode avec Definitions::json()
Markdownmarkdownmd, mkd, mdx, commonmark, gfmMarkdown
PHPphpphp8, phtmlPhp : le code avec Definitions::php(), le balisage comme du HTML
Pythonpythonpy, py3, python3, gypCode avec Definitions::python()
Rubyrubyrb, gemspec, podspec, rakeCode avec Definitions::ruby()
RustrustrsCode avec Definitions::rust()
SCSSscssless, sassStyleSheet(scss: true)
SQLsqlmysql, postgresql, postgres, pgsql, sqlite, plsql, tsql, mariadbCode avec Definitions::sql()
Twigtwightml.twig, jinja, jinja2, nunjucks, njk, liquidTwig : les expressions par Definitions::twigExpression(), le texte comme du HTML
TypeScripttypescriptts, tsx, mts, ctsCode avec Definitions::typescript()
XMLxmlsvg, xsl, xslt, xsd, rss, atom, plist, wsdl, xaml, mathmlMarkup
YAMLyamlymlYaml

Langages de programmation

Code lit une source une seule fois et, à chaque position, essaie dans l'ordre : les espaces, les marques méta, une ligne du préprocesseur, les commentaires, les textes entre guillemets, les variables, les annotations, les symboles, les nombres, les mots, les expressions régulières, les opérateurs et la ponctuation.

QuoiTypeLangages
Mots réservéskeywordTous ; SQL dans n'importe quelle casse
Noms de types, et noms qui commencent par une majusculetypeTous ceux qui ont une liste ; les majuscules en PHP, JavaScript, TypeScript, Python, Ruby, Rust, Java, C#
true, null, None, nil…constantTous
Fonctions que fournit le langage et qu'on appelle souvent sans parenthèsesbuiltinShell (echo, cd…), Python, Ruby, Go, SQL, JavaScript (console)
Un nom suivi de (, une macro Rust (vec!), un filtre Twig (`upper`)function
$var, ${var}, $?, @var, @@varvariablePHP, shell, Ruby, SQL
Textes entre guillemets, avec leurs préfixes (f"…", b"…", u8"…", $"…", @"…") et littéraux de caractèresstringTous ; une durée de vie Rust ('a) n'est pas un caractère
Clés JSONpropertyJSON
Nombres : 0x1F, 1_000u32, .5, 1e-3numberTous
Commentaires : de ligne, de bloccommentTous
Littéraux d'expressions régulières là où une valeur est attendueregexJavaScript, TypeScript, Ruby
Décorateurs et annotations (@Override), attributs PHP et Rust (#[…]), balises PHP, lignes du préprocesseur, shebangsmetaPython, JavaScript, TypeScript, Java ; PHP, Rust ; C, C++, C# ; shell, Python, Ruby, JavaScript
Symboles Ruby (:name)constantRuby

Un nom de méthode Ruby peut se terminer par ? ou !, comme empty?. Un guillemet qui peut s'étendre sur plusieurs lignes le fait : les gabarits littéraux de JavaScript, les triples guillemets de Python, les blocs de texte de Java et de C#, les chaînes brutes de Go, les chaînes du shell et du SQL. Un guillemet doublé en SQL ('it''s') se lit comme une seule chaîne.

Balisage

Markup lit les balises, les attributs et leurs valeurs, les commentaires, les références de caractères (&amp;, &#38;), les sections CDATA, les doctypes et les instructions de traitement. En HTML, le contenu de <script> est lu comme du JavaScript et celui de <style> comme du CSS, jusqu'à la balise de fin dans n'importe quelle casse.

Feuilles de style

StyleSheet lit chaque instruction comme une règle @ (@media, un keyword), un sélecteur ou une déclaration : au premier niveau, une instruction est un sélecteur ; à l'intérieur d'un bloc, c'est un sélecteur imbriqué quand un { vient avant le prochain ; ou }, et une déclaration sinon. Une propriété est une property, une propriété personnalisée (--x) une variable ; dans une valeur, les nombres avec leurs unités et les couleurs (#fff) sont des number, les fonctions des function, !important un keyword, et l'adresse dans url(), entre guillemets ou non, une string. Le SCSS ajoute les $variables, les interpolations #{…} et les commentaires de ligne.

Langages par lignes

LangageCe qu'il colore
YAMLCommentaires, --- et ..., tirets de séquence, clés simples ou entre guillemets, scalaires entre guillemets et simples (une constante comme true, yes, on, null, ~…, un nombre ou une chaîne), ancres et alias, étiquettes, collections en flux, et les lignes des scalaires de bloc (`
INICommentaires ouverts par ; ou #, [sections], clés, = et :, valeurs (entre guillemets, nombres, constantes ou chaînes), et un commentaire après une valeur et une espace
DockerfileCommentaires, l'instruction qui ouvre une ligne dans n'importe quelle casse, et ses arguments, prolongés par une barre oblique inverse, lus comme du shell
DiffEn-têtes de fichier (diff, index, ---, +++), en-têtes de blocs (@@), lignes ajoutées (+, >) et retirées (-, <), et notes \ No newline
MarkdownBlocs de code clôturés, titres, séparateurs thématiques, marques de citation et de liste, cases de tâche ; code en ligne, emphase forte, emphase, liens, images et liens automatiques fermés sur leur ligne

Langages mixtes

Php lit une source sans balise d'ouverture comme du code ; sinon, du balisage jusqu'à chaque <?php ou <?=, et du code jusqu'au ?> suivant. Twig lit les commentaires, les délimiteurs des affichages et des balises avec leurs contrôles d'espaces, les expressions entre eux, et le texte qui les entoure comme du HTML. Chaque portion de balisage est lue à part : une balise coupée par une expression Twig (<a href="{{ url }}">) perd quelques couleurs après la coupure.

Ce qui est laissé tel quel

Les analyseurs lexicaux colorent ce dont un lecteur a besoin ; ils n'analysent pas la syntaxe. Les heredocs et les nowdocs, les commentaires de bloc imbriqués, les chaînes brutes Rust aux délimiteurs #, les chaînes brutes C++ et les expressions interpolées dans les chaînes prennent la couleur de ce qui les contient. Les marques en ligne Markdown doivent se fermer sur leur ligne. Une source d'un langage lue comme un autre n'échoue jamais : elle revient avec moins de couleurs.