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

 


Dernière réponse
Sujet : [Algorithmie] éditeur de code ....
chrisbk

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
chrisbk

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

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

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();
}

youdontcare

trueslash a écrit a écrit :

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


c'est quoi ? :)

trueslash

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

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

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 :)

HappyHarry

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

trueslash 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:
youdontcare 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)
youdontcare à 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]

chrisbk 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 :/
youdontcare 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]

chrisbk

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]

youdontcare 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]

trueslash 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  ;)
youdontcare 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]

chrisbk

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

trueslash

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
 
@+

chrisbk 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 ;)
antp Ç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:
trueslash 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: )

trueslash

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

antp 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]

trueslash 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à ...

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