Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2027 connectés 

  FORUM HardWare.fr
  Programmation

  [Algorithmie] éditeur de code ....

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Algorithmie] éditeur de code ....

n°116310
trueslash
(╯°□°)╯︵ MMM
Posté le 22-03-2002 à 20:54:15  profilanswer
 

voilà, j'ai décidé de programmer un éditeur de code en delphi ...
 
j'ai utilisé un richedit, j'ai fait une fonction qui permet de colorier du texte mais je sais pas comment gérer la MAJ des couleurs au fur et à mesure des frappes de l'utilisateur.
 
je dois tout recontroller le texte à chque frappe ?
essayer de mettre en place un contrôle local ?
 
j'aimerais des idées paske chuis bloké là ...

mood
Publicité
Posté le 22-03-2002 à 20:54:15  profilanswer
 

n°116334
antp
Super Administrateur
Champion des excuses bidons
Posté le 22-03-2002 à 21:20:10  profilanswer
 

Tu le fais parce que tu as besoin d'une zone de texte style éditeur de code, ou bien tu le fais par "défi" / "devoir" ?
Si c'est juste parce que tu en as besoin, ne te fatigue plus, utlise ça:
http://synedit.sourceforge.net/
Y a pas mieux je pense ;)
C'est ce qu'utilise ConTEXT par exemple : http://fixedsys.com/context/

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°116337
trueslash
(╯°□°)╯︵ MMM
Posté le 22-03-2002 à 21:25:42  profilanswer
 

antp a écrit a écrit :

Tu le fais parce que tu as besoin d'une zone de texte style éditeur de code, ou bien tu le fais par "défi" / "devoir" ?
Si c'est juste parce que tu en as besoin, ne te fatigue plus, utlise ça:
http://synedit.sourceforge.net/
Y a pas mieux je pense ;)
C'est ce qu'utilise ConTEXT par exemple : http://fixedsys.com/context/  
 
 




 
en fait, c'était aussi par défi  :D  
 
mais je vais regarder tes adresses qd même, merci bcp

n°116340
trueslash
(╯°□°)╯︵ MMM
Posté le 22-03-2002 à 21:50:26  profilanswer
 

bon, comme j'ai pas envie de lire tout le code de synedit, je vais exposer mes idées ...
 

  • SOLUTION BOURRIN:


à chaque frappe, je recalcule toutes les couleurs pour tout le texte (ZOGZOG)  [:tatanka]  
 

  • SOLUTION + FINE


à chque frappe, je regarde quelle touche a été frappée et je réfléchie pour savoir quelle importance ça peut avoir...
exemple en C++:
on frappe un espace, pas grave, seulement une ligne à analyser !
on frappe une accolade  :sweat: gros bourdel ...
 
 
k'en pensez vous ?
 
ps est ce que partir d'un richedit est handicappant ?
(j'ai pas envie de ma lancer ds la prog de composants ...  :crazy: )

n°116341
antp
Super Administrateur
Champion des excuses bidons
Posté le 22-03-2002 à 21:55:07  profilanswer
 

Ça ressemble quand même fort à la réinvention de la roue :/
Et SynEdit est pas difficile à utiliser...
Enfin bon :)
Pour le RichEdit je l'ai jamais utilisé donc je peux pas t'aider, mais je te souhaite bonne chance :jap:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°116343
chrisbk
-
Posté le 22-03-2002 à 21:56:04  profilanswer
 

ah ben bien, j'ai fait ca y'a deux semaine :)
 
bon, voila comment j'ai fait :
 
j'ai un abre N-aire qui contient les mots a colorier (chaque noeud a N-fils, avec un caractere par fils  . de cette facon tu peux facilement verifier si un mot est a colorier ou non)
 
Ensuite a chaque input de l'utilisateur, je check le mot courant (tu prends la position actuelle, tu te deplace sur la gauche jusqu'a trouver un separateur (espace, entrée, ';' ...), idem sur la droite
 
je passe le mot dans mon arbre, je regarde si ca existe. Si oui, zou, en couleur !
 
Note que l'arbre est pratique pour autre chose, genre la completion automatique ;)

n°116355
trueslash
(╯°□°)╯︵ MMM
Posté le 22-03-2002 à 22:37:18  profilanswer
 

chrisbk a écrit a écrit :

ah ben bien, j'ai fait ca y'a deux semaine :)
 
bon, voila comment j'ai fait :
 
j'ai un abre N-aire qui contient les mots a colorier (chaque noeud a N-fils, avec un caractere par fils  . de cette facon tu peux facilement verifier si un mot est a colorier ou non)
 
Ensuite a chaque input de l'utilisateur, je check le mot courant (tu prends la position actuelle, tu te deplace sur la gauche jusqu'a trouver un separateur (espace, entrée, ';' ...), idem sur la droite
 
je passe le mot dans mon arbre, je regarde si ca existe. Si oui, zou, en couleur !
 
Note que l'arbre est pratique pour autre chose, genre la completion automatique ;)  




 
l'histoire de l'arbre, j'y avais pensé  :) ce qui me pose problème, c'est de trouver les cas où il ya bcp de changements à faire sur les couleurs du texte ....
 
par exemple, tu tapes un " qqpart et ça te changes les couleurs de ton code sur 12 lignes ...          ou pas :wahoo:  
 
bon, je m'y remets
 
@+

n°116397
chrisbk
-
Posté le 22-03-2002 à 23:38:27  profilanswer
 

trueslash a écrit a écrit :

 
 
l'histoire de l'arbre, j'y avais pensé  :) ce qui me pose problème, c'est de trouver les cas où il ya bcp de changements à faire sur les couleurs du texte ....
 
par exemple, tu tapes un " qqpart et ça te changes les couleurs de ton code sur 12 lignes ...          ou pas :wahoo:  
 
bon, je m'y remets
 
@+  




 
ah oui merde j'avais oublier ce cas (vu que je le gere pas :)
le " meparait assez chaud, vu qu'il faut savoir si c un ouvrant, ou un fermant ;
 
tu dois pouvoir verifier ca en cherchant la couleur du mot precedant (si coloré, alors fermant, sinon ouvrant)
 
a partir de la t'as plus qu'a aller en avant et chercher quand ca se ferme, colorier le tout  
aucune idée de l'impact sur la vitesse

n°116415
youdontcar​e
Posté le 23-03-2002 à 00:25:23  profilanswer
 

j'en avais commencé un, je m'étais arrêté aux tokens qui ne modifient que la ligne courante ;) dans ce cas-là, c'était tout simple : chopper la position du curseur, chopper la ligne sur laquelle est le curseur, passer la ligne à un miniparser qui renvoie une liste chaîne de tokens avec leurs positions dans la chaîne, et update du richedit.
 
pour les tokens comme ", /*, */ en C, j'imagine qu'il n'y a pas de solution miracle : par ex pour */, parser toute la source jusqu'à tomber sur /* ou sur le premier token. peut-être garder un arbre en mémoire de tout le fichier pour accélérer le parsing & permettre des trucs sympas comme savoir dans quelle fonction / méthode on est, etc.
 
une chose est sûre, il ne faut PAS colorier tout le fichier lors de l'ouverture mais seulement la partie visible. j'ai essayé tout le fichier, j'ai eu des problèmes :D (ça rame très vite pour un nombre de lignes relativement peu important). donc en fait, colorier au fur et à mesure qu'on descend / remonte dans le fichier.

 

[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]

n°116426
trueslash
(╯°□°)╯︵ MMM
Posté le 23-03-2002 à 00:52:36  profilanswer
 

interessant l'histoire de colorier que la partie visible, cé pô con !
 
sinon, je crois que je vais partir de cette idée:  
 
=> l'utilisateur tape qqchose  
 
=> analyse du caractère inséré/supprimé
 
=> déduction de la portée maximale du changement
 
=> recoloriage
 
le problème, c qu'il faut réfléchir aux structures de données à utiliser et je me sens pas d'improviser   :wahoo:  
 
bon, au boulot  ;)

mood
Publicité
Posté le 23-03-2002 à 00:52:36  profilanswer
 

n°116428
youdontcar​e
Posté le 23-03-2002 à 00:59:16  profilanswer
 

stp, tiens-nous au courant ! ça m'intéresse beaucoup de savoir comment tu vas faire pour les caractères qui changent plus d'une ligne de couleurs (/*, */, etc.).
 
:hello:

 

[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]

n°116432
chrisbk
-
Posté le 23-03-2002 à 01:08:56  profilanswer
 

youdontcare a écrit a écrit :

 
 
une chose est sûre, il ne faut PAS colorier tout le fichier lors de l'ouverture mais seulement la partie visible. j'ai essayé tout le fichier, j'ai eu des problèmes :D (ça rame très vite pour un nombre de lignes relativement peu important). donc en fait, colorier au fur et à mesure qu'on descend / remonte dans le fichier.  
 
 




 
 
 
Ca ramait tant que ca ?
 
 
Sinon pour optimiser y'a deja un truc tout con : ne pas mettre ajour la fenetre a chaque changement de couleur
 
en MFC c'est :
 
setRedraw(FALSE);
 
changement de couleur
 
 
setRedraw(TRUE);
Invalidate(FALSE);
 
 
(redraw ou repaint ? je sais pu :D )

 

[jfdsdjhfuetppo]--Message édité par chrisbk--[/jfdsdjhfuetppo]

n°116437
youdontcar​e
Posté le 23-03-2002 à 01:14:14  profilanswer
 

c'était assez terrible sur les 'gros fichiers', je me souviens de qq dizaines de secondes pour la coloration. visual l'ouvrait instantanément.
 
j'ai peut-être codé ça comme un pied aussi ... :D :D :D pour le setRedraw(), merci :) j'essaierai de tester si j'ai le temps de me replonger là-dedans (le code a presque un an et ma mémoire défaille ...)

 

[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]

n°116439
chrisbk
-
Posté le 23-03-2002 à 01:16:19  profilanswer
 

t'avais fait ca avec un parser et tout et tout ? Clair que c la bonne solution (une fois qu'on a les token on doit pouvoir en tirer plein de chose interessantes :D ), mais la fo deja plus de tps pour coder ca :/

n°116443
youdontcar​e
Posté le 23-03-2002 à 01:23:25  profilanswer
 

à la base, le parser était là car je testais la compilation d'un langage script.
 
du coup le code pour l'update était hyper simple :
 
TokenizerResult tr;
if (tknz.Tokenize(singleLine, length+1, tr))
{
  Token* t = tr.root;
  while (t)
  {
    if (t->type < Token_line)
      SetColorRange(t->srcidx1+start, t->srcidx2+start, colors[t->type]);
    t = t->next;
  }
}
 
le 'tokenizer' convertit la ligne sur laquelle on tape en une liste chaînée de tokens, la méthode de coloration parcourt la liste et update les couleurs (SetColorRange) en fonction du type du token (t->type) et de sa position dans la ligne (srcidx1, srcidx2).
 
c'était juste un test bourrin et rapide, ça marchait assez bien.
 
en en reparlant, ça me redonne envie de tester ça plus en profondeur. bon, j'aimerai bien aussi me coder 'mon' richedit :D avec une lib de fontes comme freetype, permettre du html dans les commentaires de fonctions, génération automatique de la doc, pouvoir 'replier' certains bouts de code, marquer telle fonction comme 'à revoir', etc.
 
oui, ça doit déjà exister (genre emacs :lol:) mais je suis sectaire :)

 

[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]

n°116444
youdontcar​e
Posté le 23-03-2002 à 01:25:01  profilanswer
 

j'avais repompé le code de coloration sur un projet trouvé sur le net, qui faisait la syntaxe vb ... donc trueslash tu peux chercher de ce côté là aussi (parce que la doc, j'ai essayé ... j'ai encore eu des problèmes :D)

n°116447
trueslash
(╯°□°)╯︵ MMM
Posté le 23-03-2002 à 02:09:41  profilanswer
 

ben je vais plutôt le faire en delphi  :D  
pour le moment, je réfléchis à comment hiérarchiser un fichier texte contenant du code par rapport à la portée des modifications que l'on peut y faire
 
 :wahoo: ouh là, c pas tres clair ce que je viens de dire ...
 
au lit !  :sol:  
 
 :hello:

n°116448
HappyHarry
Posté le 23-03-2002 à 02:16:50  profilanswer
 

trueslash a écrit a écrit :

ben je vais plutôt le faire en delphi  :D  
pour le moment, je réfléchis à comment hiérarchiser un fichier texte contenant du code par rapport à la portée des modifications que l'on peut y faire
 
 :wahoo: ouh là, c pas tres clair ce que je viens de dire ...
 
au lit !  :sol:  
 
 :hello:  




je confirme ! g rien pigé !  :D

n°116477
chrisbk
-
Posté le 23-03-2002 à 12:12:47  profilanswer
 

HappyHarry a écrit a écrit :

 
je confirme ! g rien pigé !  :D  




 
 
Moi j'ai compris [:neffy]
 
ca risque d'etre assez sport, non, ta hierarchie .......... quoique c'est a essayer :)

n°116479
chrisbk
-
Posté le 23-03-2002 à 12:14:18  profilanswer
 

trueslash : pour ton editeur te faudra aussi l'identation automatique ....  
 
Je te laisse chercher car en fait c'est tres con comme truc :D

n°116489
trueslash
(╯°□°)╯︵ MMM
Posté le 23-03-2002 à 12:36:39  profilanswer
 

chrisbk a écrit a écrit :

trueslash : pour ton editeur te faudra aussi l'identation automatique ....  
 
Je te laisse chercher car en fait c'est tres con comme truc :D  




 
 
en fait un de mes autres projets, c'est de définir des guides de style... ça paraît assez chaud comme ça mais si j'arrive à hiérarchiser, ça devrait être faisable

n°116492
youdontcar​e
Posté le 23-03-2002 à 12:45:20  profilanswer
 

trueslash a écrit a écrit :

en fait un de mes autres projets, c'est de définir des guides de style


c'est quoi ? :)

n°116503
trueslash
(╯°□°)╯︵ MMM
Posté le 23-03-2002 à 13:20:26  profilanswer
 

youdontcare a écrit a écrit :

c'est quoi ? :)  




 
qqchose qui met ton code en forme automatiquement, exemple:
 
tu tapes:
 
for(unsigned int i=0; i<10; i++)
{tab[i] = tab2[i];
k++;
AppelFonction();}
 
et il te transformes ça en:
for(unsigned int i=0; i<10; i++)
{
     tab[i] = tab2[i];
     k++;
     AppelFonction();
}

n°116509
youdontcar​e
Posté le 23-03-2002 à 13:46:44  profilanswer
 

sympa !
 
idéal pour chambouler la syntaxe de tes collègues et imposer ta loi :D ;)

n°116516
chrisbk
-
Posté le 23-03-2002 à 14:01:50  profilanswer
 

trueslash a écrit a écrit :

 
 
qqchose qui met ton code en forme automatiquement, exemple:
 
tu tapes:
 
for(unsigned int i=0; i<10; i++)
{tab[i] = tab2[i];
k++;
AppelFonction();}
 
et il te transformes ça en:
for(unsigned int i=0; i<10; i++)
{
     tab[i] = tab2[i];
     k++;
     AppelFonction();
}  




 
ca devraitpas etre bien sur, enfin, en "post processing" (genre tu tape tout ton code et il te le formate apres)
 
Globalement l'idée c'est qu'a chaque retour a la ligne, tu compte le nombre d'espace qu'il y a au debut de la ligne précédente. A ceci tu ajoute des espaces suivantle nombre de '{' de la ligne précédente et vala ! :D

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Algorithmie] éditeur de code ....

 

Sujets relatifs
[C++ Builder] Win32 Error. Code : 1410.La classe existe déjà[java] meilleur editeur pour creation graphique
QUESTION d'un NEWBIE... Sur code des jeux :)[PHP] Vérifier si les champs d'un form sont remplis...pb (code inside)
[hmtl] Une page qui marche ds l'editeur et mais pas sur le net ?????Integration de code assembleur dans du C avec mingw32
[JAVA] Stored Procedures : Retourner un status code et un resultsetEditeur/Compilateur de Java
imprimer du code source...[Flash] explication de code Action SCript. Urgent plize :(
Plus de sujets relatifs à : [Algorithmie] éditeur de code ....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR