Bonsoir,
j'aimerais faire un outil bien plus simple à utiliser que ce fait pygments (je n'arrive pas à entrer dans la logique de son API).
J'aimerais savoir ce que vous pourriez attendre d'une bibliothèque pour colorer les listings.
Version imprimable
Bonsoir,
j'aimerais faire un outil bien plus simple à utiliser que ce fait pygments (je n'arrive pas à entrer dans la logique de son API).
J'aimerais savoir ce que vous pourriez attendre d'une bibliothèque pour colorer les listings.
Salut,
A la manière des lexer que l'on crée pour Scintilla, peut-être, et que tu connais, je pense.
J'ai eu à en faire un pour les fichiers .desktop, j'ai trouvé cela particulièrement aisé et l'on peut y implémenter très facilement la possibilité pour l'utilisateur de choisir ses couleurs lui-même.
Et ces lexer font plus que de la coloration syntaxique. Tant qu'à analyser le texte, autant faire un peu plus.
Bonjour VinsS et merci pour ta réponse.
Le mode de fonctionnement sera double. Pour le moment, je bosse sur un type de fichier qu'un non-programmeur pourra remplir de façon la plus intuitive possible. Voici un exemple suivi du rendu attendu.
LEXER (pour les programmeurs Python, afin de gagner un peu de temps, il y aura un équivalent sous forme de dictionnaire mais je n'ai pas encore réfléchi à cela car ce n'est pas ma priorité du moment).
La coloration sera presque comme ci dessous à deux eceptions près :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 lexer:: comment:: //... /* ... */ string:: escape:: \ keyword:: \n \t quote:: "..." keyword:: type:: int char function:: #include{{space}}<{{letter --> letter number {.} --> letter number}}> printf return for if symbol:: { } ( ) [ ] , ; = == < > * + ++ block:: {...} (...) [...]
- stdio.h et stdlib.h ne seront pas colorés.
- int et char auront une autre couleur que if et compagnie.
CODE COLORÉ PAR LE FORUM
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /* Un exemple de code de type C * * En espérant que cela sera instructif. */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // Une boucle for int compteur; for(compteur = 0 ; compteur < 10 ; compteur++){ if(compteur == 1){ printf("Une étape dans la boucle for avec \"compteur\" différent de un.\n"); } } return 0; // Fin de la fonction }
Il y aura bien entendu une version abrégée de
#include{{space}}<{{letter --> letter number {.} --> letter number}}>qui sera
#include{{sp}}<{{a-Z --> a-Z 0-9 {.} --> a-Z 0-9}}>La partie block du LEXER permettra de définir des blocs repliables : ce sera pour une sortie HTML.
A la place de regex, il y aura quelques constantes utiles comme ::space:: pour indiquer des espaces possibles, ou ... qui indique n'importe quel caractère.
Côté utilisation, il suffira de donner le LEXER et puis c'est tout. Le code analysé pourra ensuite être coloré.
Pour finir, je ferais en sorte que la classe qui s'occupe de colorer soit facilement surclassable : par exemple, les printers pour produire du texte HTML ou LaTeX seront simples à modifier même par quelqu'un qui connait peu Python (j'ai déjà fait quelques choses de ce type pour un outil permettant de mettre en forme des formules mathématiques).