Dr_Progz
Messages postés16Date d'inscriptiondimanche 28 décembre 2003StatutMembreDernière intervention21 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és16Date d'inscriptiondimanche 28 décembre 2003StatutMembreDernière intervention21 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és16Date d'inscriptiondimanche 28 décembre 2003StatutMembreDernière intervention21 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és2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDerniè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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 4 févr. 2005 à 00:02
En effet c'était celui là, mais le .zip n'est toujours pas corrigé ;-)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és16Date d'inscriptiondimanche 28 décembre 2003StatutMembreDernière intervention21 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és120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 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és16Date d'inscriptiondimanche 28 décembre 2003StatutMembreDernière intervention21 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és3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 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és583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 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és120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 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és583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 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és2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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és1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 2 févr. 2005 à 06:35
"RichEdit n'est pas créer pour ce genre de travail" << Pkoi ?
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 1 févr. 2005 à 22:44
j'te mettrai une autre = j'te mettrai une note
Désolé ;)
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 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 !
18 févr. 2005 à 21:10
Dr_Progz
7 févr. 2005 à 19:54
6 févr. 2005 à 15:14
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.
4 févr. 2005 à 21:59
4 févr. 2005 à 21:50
prochenement je lancerai un nouveau zip plus complet + ou - bien sur.
4 févr. 2005 à 21:27
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
4 févr. 2005 à 11:59
GetDlgItemText(hDlg, IDC_EDIT_TEXT, lpszBuffer, nLen + 1);
Risque d'écrasement, non ?
Je ne vois pas la desalloc de ces buffers, c'est voulu ?
4 févr. 2005 à 11:30
Bon j'arrête la
4 févr. 2005 à 11:26
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
4 févr. 2005 à 00:02
3 févr. 2005 à 23:23
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);
}
3 févr. 2005 à 23:15
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 ;-)
3 févr. 2005 à 23:14
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.
3 févr. 2005 à 21:59
Merci
2 févr. 2005 à 23:27
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).
2 févr. 2005 à 19:46
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.
2 févr. 2005 à 16:05
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.
2 févr. 2005 à 14:54
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.
2 févr. 2005 à 13:37
qu'appelez vous langage "parser"?
parser cela veut dire quoi?
2 févr. 2005 à 10:55
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 !!!
2 févr. 2005 à 09:08
2 févr. 2005 à 06:35
1 févr. 2005 à 22:44
Désolé ;)
1 févr. 2005 à 22:43
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 !