SYNTAXEDIT: UN CONTROLE D'EDITION POUR LES LANGAGE DE PROGRAMMATION

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 1 févr. 2005 à 22:43
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007 - 18 févr. 2005 à 21:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29236-syntaxedit-un-controle-d-edition-pour-les-langage-de-programmation

Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
18 févr. 2005 à 21:10
j'ai posté lz mis à jours de SyntaxEdit dans la page -http://www.cppfrance.com/code.aspx?ID=29530- j'espere vous voire la bas
Dr_Progz
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
7 févr. 2005 à 19:54
Oui c'est vrai, tout ce que vous avez dit est vrai et je le corrige pour le moment, ce n'est qu 'une version beta ou peut etre moin qu'une beta, je suis entraint d'optimisé la source et j'ajoute en meme temps des commentaire. ne quitter pas rester avec moi un petit peut et j'arrive pour une nouvelle version.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 févr. 2005 à 15:14
J'ai fait un commentaire plutot positif, c'était au vu du résultat final. Mais maintenant que j'ai étudié un peu le source, je ne suis plus du même avis. Il y a beaucoup de choix que je ne comprends pas, le code n'est pas du tout optimisé. Exemple assez révélateur selon moi:
int nStopPos = min(m_nFirstChar + GetScreenChars(), lstrlen(szBuffer) - 1);

Et les classes CLineText et CBufferText ne sont pas bien conçues. Il y a beaucoup de copies de texte inutiles, des bouts de codes sont incomprénsibles. Il se trouve que l'exécutable marche bien, mais tu appelles plusieurs fois strcpy avec 0 comme paramètre. De plus chaque ligne occupe 1ko, que la ligne contienne 1000 ou 0 caractères, je pense qu'il faudrait faire de l'allocation dynamique. (ici le débordement n'est même pas controlé, si on tape plus de 1024 caractères, le programme plante).

Comme l'a dit BruNews, beaucoup de mémoire non libérée, ou même parfois de la mémoire libérée sans avoir été allouée.
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
4 févr. 2005 à 21:59
SetRect je vient just de l'impementé dans gdi.cpp, j'ai utilier Point(x, y) pour les point, mais j'ai pas utiliser Rect pour les rectangle.
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
4 févr. 2005 à 21:50
Ok, j'ai vue tous ces bugs, je suis entreint d'ajouté d'autre fonctionnalité (annuler - remplacer...) et en même temps je corrige les erreurs, je vous en remerci infinement, sans vous tous je ne pourrai pas continuer.
prochenement je lancerai un nouveau zip plus complet + ou - bien sur.
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
4 févr. 2005 à 21:27
En effet,
Si tu initialise une variable de taille nLen, évite de permettre de saisir jusqu'a nLen+1, tu risquerais d'écraser ce qui suit.
Je pense que tu as fait pour le zero terminal???
C'est pas la peine, c'est un nombre de caractere que tu récupere, le zero n'en fait pas partie.

Shell
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 févr. 2005 à 11:59
lpszBuffer = new char[nLen];
GetDlgItemText(hDlg, IDC_EDIT_TEXT, lpszBuffer, nLen + 1);
Risque d'écrasement, non ?
Je ne vois pas la desalloc de ces buffers, c'est voulu ?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 févr. 2005 à 11:30
Ah oui et puis dans un WM_SIZE, lParam contient la taille de la zone client, donc ne pas faire de GetClientRect ici

Bon j'arrête la
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 févr. 2005 à 11:26
Comme amélioration, je proposerais de ranger les chaines de szKeywordList par ordre alphabétique pour piuvoir faire une recherche dichotomique, ce serait beaucoup plus rapide (6 comparaisons a chaque fois au lieu de 56 actuellement).

D'autres petites choses moins importantes:

*lstrcpy(m_szPath, ""); -> remplace par *m_szPath = 0;

*dans main.cpp, remplace tous ces if par un switch

*Problème dans CSyntaxEdit::UpdateCaret, XPos et YPos ne sont pas toujours initialisés

*lstrlen("x") -> t'a pas envie de mettre 1 plutot?

*La molette de la souris n'est pas gérée, c'est un peu chiant

*RECT rcClient = Rect(0, 0, 0, 0); je suis pas sur que ce soit très bon de faire ca, sais-tu qu'il existe une fonction SetRect pour faire cela?

Voila, malgré tout c'est quand même très bien
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
4 févr. 2005 à 00:02
En effet c'était celui là, mais le .zip n'est toujours pas corrigé ;-)
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 févr. 2005 à 23:23
Il me semble toujours qu'il y a un appel récursif plutot problématique:

BOOL CSyntaxEdit::GetErrorLine(int nLineIndex)
{
//Pour l'utilisateur la premiere ligne c'est 1, mais
//pour nous c'est 0, d'où le -1
return GetErrorLine(nLineIndex - 1);
}
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
3 févr. 2005 à 23:15
Salut,
bon, je t'ai déjà eu sur le sujet alors tu as du corriger les bugs trouvés déjà ;-) (appel récursift, variables non initialisées)
Concernant le buffer. Pourquoi tu n'as pas simplement utilisé une std::string pour les allocations, ...
et quelques fonctions en plus pour tes besoins spécifiques (une classe en fait implémentée sur une std::string) ?

Sinon c'est classe. bien joué.


PS:j'ai eu un petit plantage sur un fichier .bas, dois y avoir d'autres pb ;-)
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 févr. 2005 à 23:14
Ah je trouve cette source très intéressante, j'ai essayé plusieurs fois de faire ca, et jamais vraiment réussi.
Juste une question: saurais tu implémenter des choses du style des commentaires multilignes du C++, parce que pour ma part j'arrive pas à trouver de solution satisfaisante.
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
3 févr. 2005 à 21:59
j'ai penser à créer un site a ce controle et de le developper plus, donc pour seux qui eulentme joindre contacter moi: dr_progz@hotmail.com
Merci
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
2 févr. 2005 à 23:27
@ garslouche,sache que je ne critique pas les sources du réseau bien au contraire,j'ai mis en parenthèse le mot "juste" comme quoi je déni pas du tout le travail de Dr_Progz,mais je me renseigne juste pour ne pas perdre trop de temps à essayer de comprendre du code qui n'est ni dans mes compétense pour l'instant ni utile pour moi pour l'instant.

HS:
Si je me suis inscrit sur le réseau code sources,c'est que j'ai bien compris que c'était un réseau d'apprentissage des langages de programmation et non un dépot de sources (encore que beaucoup y mettent du codes trouvé sur internet).
Dr_Progz Messages postés 16 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 21 février 2007
2 févr. 2005 à 19:46
SyntaxEdit est un contrôle d'édition pour les IDE, il support la colorisation du syntaxe, l'affichage de la marge, les breakpoints ainsi que la localisation des lignes d'erreur, je l'ai développé spécialement pour mon programme BASIC Installer, mais cela ne veut pas dire que vous ne pouvez pas l'utiliser, il est à votre disposition à condition que vous signaler que vous l'utiliser et qu'il set copyrighté à Adelhakim BACHAR, bien sur il n'est pas encor tout ta fait complet mais quand même j'ai posté la source en sous estiment que vous allez m'aidez à le finalisé en cherchant les erreurs ainsi en améliorant la source, en fait j'ai utilisé la POO, il y a 3 class : CLineText pour gérer les lignes, CBufferText c'est la où on stocke tout le texte et enfin la grande class CSyntaxEdit qui gère le contrôle en entier, le fichier main.cpp montre un simple utilisation de SyntaxEdit. Vous avez 41 fonctions à découvrir dans cette version et d'autres viendront prochainement. Pour plus d'informations ou si vous avez une remarque qui pourrai aidez dans le développement de ce contrôle n'hésiter pas à me contacter au -dr_progz@hotmail.com-.
NB : si je retard un petit peu dans les réponse c'est parce que je n'ai pas de connexion chez moi.
Merci Dr_Progz.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
2 févr. 2005 à 16:05
voilà, un parser c'est, comme dit garslouche, identifier les éléments signifiants d'une chaîne de caractères, les séparer (si possible de façon déterministe = sans erreur possible, pour faire gros hein, c'est plus subtil que ça) et après ça, les stocker dans des structures qui permettront l'exploitation de ces données, par exemple l'exécution d'un script dans le cas d'un script engine.

les unités signifiantes dans un code sont des lexèmes, et en C++ ça revient à ça:

- mots clefs
- identifiants (noms de fonctions, de variables, de classes / structures, d'enums, d'unions ...)
- valeurs (numériques / littérales) exprimées telles qu'elles
- les opérateurs (en tout genre, sur un ou plusieurs caractères)

ça donne parfois le vertige de se dire qu'avec seulement cela, on peut faire autant de choses...


Ceci dit, pour avoir fait des essais moi-même dans le domaine de la coloration "en temps réel" si l'on puit dire, je peux t'assurer que c'est bcp plus dur que juste écrire un parser, ce qui se règle en une poignée bien pesée de 150 - 200 lignes.

Je m'en vais de ce pas analyser ta source, et pourquoi pas l'adapter à mon langage de script, parce que comme je l'ai dit, ... je suis pas arrivé à un résultat convainquant pr mon EDI, et j'arrive pas à implémenter Scintilla.
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
2 févr. 2005 à 14:54
Zazour : l'objectif de ce site n'est pas de distribuer des logiciels gratos... c'est un site sur la programmation donc c'est "juste un programme qui colore selon la syntaxe" mais c'est surtout un bon exemple de programmation orientée objet et de manipulation des API Win32.

Et pour info parser signifie grosso-modo "analyser un texte". Dans le cas de cette source parser le code VB c'est le décomposer en mot-clés, chaînes de caractères, ... afin d'appliquer un traitement spécial à chacun.
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
2 févr. 2005 à 13:37
je comprends pas trop l'interet de ce programme,c'est "juste" un programme qui colore selon la syntaxe?
qu'appelez vous langage "parser"?
parser cela veut dire quoi?
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
2 févr. 2005 à 10:55
Effectivement je confirme que ce que j'avais fait pour MacroScript n'était pas au point. C'est clair que cette source est nettement meilleure :). Et je suis d'accord pour dire que le RichEdit n'est pas fait pour ça (j'en ai fait les frais ...)

Du beau boulot rien à dire sur la prog elle-même. C'est du C++ propre. Peut-être que ça manque un poil de commentaires par ci-par là.

Je propose qq améliorations :
1) Le langage parsé est le VB. Et c'est codé en dur. Ca serait bien de pouvoir choisir son langage et de pouvoir décrire un langage dans un fichier texte (comme le font editplus ou ultraedit)
2) Gérer la commande 'annuler' (tant qu'à faire sur plusieurs niveaux)

Conclusion j'aurais bien mis 9.5/10 pour laisser une marge de progression mais ça serait du vol vis-à-vis de nombreuses autres sources qu'on peut trouver sur ce site. Alors 10/10 !!!
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 févr. 2005 à 09:08
Avec un RichEdit, tu peut pas modifier les couleurs de mots très facilement (il faut sélectionner le texte puis lui affecter un style) pendant que tu tape du texte, ce qui n'est pas très joli.
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
2 févr. 2005 à 06:35
"RichEdit n'est pas créer pour ce genre de travail" << Pkoi ?
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
1 févr. 2005 à 22:44
j'te mettrai une autre = j'te mettrai une note
Désolé ;)
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
1 févr. 2005 à 22:43
NOn de dieu :o
La coloration des mots, j'aime !
Elle prend même en compte le copier coller.
Dans l'éditeur de script windows de gars louche je crois, il y avait un bug a ce niveau, je crois toujours.
J'vé m'intéresser de prêt à ta source.
J'aime bien également l'interface, soignée tout ce qu'il faut ;)
Bravo.
J'te mettrai une autre après vraiment bien avoir étudier ta source, la j'vais coucher lol
J'ai un rubhe
Mdr le truc qui a un rapport :)
Bonne fête de la chandeleur a tous !
Rejoignez-nous