Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GÉNÉRATION EN HTML DE SOURCES VB, AVEC COLORATION SYNTAXIQUE ET HYPERLIENS


Information sur la source

Description

Cliquez pour voir la capture en taille normale
Ce programme permet de générer l'ensemble d'un projet VB (forms, modules) sous forme de pages html. Le code HTML généré inclut la coloration syntaxique (comme d'ans l'DIE de VB).

La valeur ajoutée par rapport aux autres codes similaires est la génération dans le code de liens  hypertexte permettant de naviguer d'un appel de fonction vers la focntion correspondante, comme on le fait dans l'IDE avec la focntion "Goto Definition".

De nombreuses options sont disponibles: ajout de numéros de ligne, ajout d'un page de démarrage permettant d'accéder auxc différentes feuilles et modules, ajout sur chaque page d'un lien hyper texte vers les autres pages, etc.

Cette source est dérivée d'une de mes sources précédentes: http://www.vbfrance.com/codes/GENERATION-HTML-SOURCES-VB-AVEC-COLORATION-SYNTAXIQUE_36087.aspx. Cependant, elle est à mon avis assez différente pour justifier d'être ajouter ici comme une nouvelle source.

D'un point de vue technique, le programme utilise une table de hachage pour un accès rapide aux mots clés et fonctions. L'implémentation de la table de hachage est dans un module séparé pour permettre sa réutilisation.

Le programme est très performant en terme de vitesse: 2 secondes pour 10 pages représentant +/- 10.000 lignes de code.

 

Conclusion

Le code est clairement structuré et très abondamment commenté. Des améliorations sont surement possibles, en particulier l'IHM. Toutes vos remarques sont bienvenues.


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Proger le 11/07/2006 01:54:38

Optimisation : à quoi bon faire du hashing si le résultat est de type string ? tu fais une sympathique gestion de cette table mais tu lui tire une balle dans le pied avec toutes ces comparaisons de strings.
M'enfin si ca ne tenais qu'a moi je chargerai directement les fichiers de code à convertir dans des tableau de bytes et n'utiliserai le type string que lors de la fusion html :)

signaler à un administrateur
Commentaire de jean_marc_n2 le 11/07/2006 09:03:48

Hello,

Merci pour ton commentaire. Il n'y a pas vraiment "balle dans le pied" dans la mesure ou le nombre de comparaisons de string est tout petit :-) Il suffit de voir les perfs pour s'en convaincre :-)
A l'occasion, je ferais un petit bench pour voir ce que l'on gagne avec des tableaux de bytes.
Merci encore!
Amicalement,

signaler à un administrateur
Commentaire de Renfield le 11/07/2006 10:07:49 administrateur CS

sympa...

un commondialog serait un plus non négligeable, pour la selection du projet.
il serait sympa de pouvoir charger les VBG.

les prototypes de fonctions ne sont pas coloriées ( ByRef xxx As Single)  par exemple...

il faudrait pouvoir spécifier un repertoire de sortie, et que tout se mette même dans un sous repertoire.
tu ourrais alors ajouter des images, des css...

tu pourrais stocker dans kw les mots en majuscule, directement.

p = InStr(1, s, "function " ,vbTextCompare)
est plus rapide que
p = InStr(LCase$(s), "function ")

ta gestion d'erreur masque des erreurs de codage...
   If (i <> 0) And ((LCase(t(i - 1)) = "function") Or (LCase(t(i - 1)) = "sub")) Then

ton test i<> 0 ici, n'empeche pas VB de tenter d'acceder à t(-1)

de même, dans :
   p = InStr(1, t(i), wordToHilight, vbTextCompare)
   If p = 1 Then    <-  mettre 0 ici, pas 1

je regarderai le reste plus tard ^^

signaler à un administrateur
Commentaire de ciberrique le 11/07/2006 13:30:36

Je trouve ca tres bon... Vraiment bien, je garde.
Bravo.

signaler à un administrateur
Commentaire de ghuysmans99 le 11/07/2006 15:09:10

je suis exactement du même avis que Renfield, un CommonDialog serait le bienvenu.

signaler à un administrateur
Commentaire de Renfield le 11/07/2006 15:27:11 administrateur CS

j'ai repris mes tests....

il serait bien que la sortie HTML soit indentée automatiquement,

il y a une incohérence :
tu utilise les mots en majuscule, dans ton HASH, mais clean_symbol faisait un LCase...
des mots n'étaient pas trouvés, certaines fois.

tes liens ne fonctionnaient pas, tu mettais
<a name="#maFonction">    et a cause du #, l'ancre ne fonctionnait pas.
de même, tu écrivait le nom de l'ancre (en majuscules, donc) dans le texte des liens, ce qui fait pas très très joli ^^

j'ai corrigé ce point également:
    Print #g, header;
    If (i <> 0) And ((LCase(t(i - 1)) = "function") Or (LCase(t(i - 1)) = "sub")) Then
        Print #g, "<a name=""" & wordToHilight & """ >";
        szColor = COLOR_SYMB_A
    Else
        ' we need to insert an hyperlink
        module = Mid$(module, 1, InStr(module, ".")) & "html"
        Print #g, "<a href=""" & module & "#" & wordToHilight & """>";
        szColor = COLOR_SYMB_H
    End If
    Print #g, "<font color=""" & szColor & """>" & Left$(sBuffer, Len(wordToHilight)) & "</font>";

Les appels d'API ne sont pas redirigés vers leur déclaration

Space,ElseIf,LSet,Until ne sont pas dans ta liste de mots


j'ai également utilisé IsInHashTable_special dans IsKW
et supprimé le module = "" dans IsInHashTable_special

avec quelques optimisations a gauche a droite, je suis passé, pour un projet donné (en mode VB) de 360ms à 170ms, en moyenne

exemple d'optimisation significative :

                If (Left$(sBuffer, 1) = "'") Or (comment) Or _
                   (continuation_line_found And previous_was_comment) Then
                  
                    ' replace < and > by their html equivalent
                    If InStrB(sBuffer, "&lt;") > 0 Then
                        sBuffer = Replace(sBuffer, "&lt;", "&amp;lt;")
                    End If
                    If InStrB(sBuffer, "&gt;") > 0 Then
                        sBuffer = Replace(sBuffer, "&gt;", "&amp;gt;")
                    End If
                    If InStrB(sBuffer, "<") > 0 Then
                        sBuffer = Replace(sBuffer, "<", "&lt;")
                    End If
                    If InStrB(sBuffer, ">") > 0 Then
                        sBuffer = Replace(sBuffer, ">", "&gt;")
                    End If

et pareil dans le   Else    ' else: normal text

si le code 'corrigé' te tente, contacte moi par MP

signaler à un administrateur
Commentaire de katsankat le 11/07/2006 15:45:37

Salut :)
Juste un mot pour signaler beaucoups de mots en double ou en triple dans la liste de mots.

signaler à un administrateur
Commentaire de jean_marc_n2 le 11/07/2006 19:01:12

Hello,

merci à tous de vos commentaires.

=> Renfield, merci en particulier pour ta revue de code! Q: Les appels d'API chez moi sont bien redirigés, voir un exemple ici: C:\files\vb\vbfrance\syntaxcolor2\frmMain.html (cliquer sur ShellExecute dans COmmand2, par exemple). Sans doute un cas particulier que je ne vois pas?

Je posterais après mes vacances une version corrigée!



signaler à un administrateur
Commentaire de jean_marc_n2 le 11/07/2006 19:14:00

Oups, voici le bon lien pour tester les saut d'API:

http://users.skynet.be/candide/test/frmMain.html

Note: avec IE, le fait que les ancres aient un # devant le nom ne géne pas, c'est pour cela que les liens fonctionnent et que je n'ai pas vu l'erreur.

signaler à un administrateur
Commentaire de Renfield le 12/07/2006 00:19:30 administrateur CS

Effectivement, j'utilises FireFox ^^

signaler à un administrateur
Commentaire de tinux le 16/07/2006 14:56:31

Arff, j'ai besoin d'un soft du genre hélas j'avais pas de temps pour le faire, et là j'en vois une, SUPER !!! Hélas, mon bohneur est stoppé net par mon Visual Studio 2005 .NET....... damn !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Coloration syntaxique [ par Celebyon ] J aimerasi faire un ti prog pour me remplacer mon notepad kan je prog en html, php et *script, avec une coloration syntaxique ki me soit propre pour l coloration syntaxique [ par julwoko ] Bonjour, Je voulais savoir si c'est possible d'avoir une coloration syntaxique dans un JTextComponent &#224; la mani&#232;re d'un IDE en effet je vo coloration syntaxique [ par Desdinova66 ] Salut les mecs, Je suis en train de developper un editeur de scrirpts en java et g besoin d'une API permettant de realiser la coloration syntaxique d Coloration syntaxique et scintilla [ par VinceVG ] Salut,J'ai besoin d'un editeur avec coloration syntaxique multi (omni) langage. Quelqu'un a-til &#231;a (avec le source en vb6). Ou qqn a-t-il d&#233; Coloration syntaxique pour les messages sur codes-sources [ par franckydeluka ] Bonjour à tous ,voilà ça fait un petit moment maintenant que je surfe sur la vague 'codes-sources'et j'ai pu voir que lorsque cer OCX pour coloration syntaxique [ par lascolbe ] Bonjour,je suis à la recherche d'un controle OCX (type RichTextBox) performant qui integre la coloration syntaxique (si possible developpé en C++)Es c Coloration Syntaxique [ par dridri85 ] Voila, je cherche a faire de la coloration syntaxique dans un RichTextBox, mais je n'ai aucune idée de comment m'y prendre.J'ai cherché dans les codes Coloration syntaxique [ par spenky ] Bonjour, Je doit &#233;crire un &#233;diteur Java en Java. J'ai presque fini mais il me manque la coloration dynamique des mots cl&#233;s. Merci de me Coloration syntaxique [ par NHenry ] BonjourEn recherchant la CSLib, j'ai vu un lien sur http://tools.codes-sources.com/colorizeCode.aspxJe me suis dit c'est super, je vais tester de [vb6] pb de parsing html [ par tototar ] jsui au bord du suicide!!!voici mon pb:je veu faire du parsing sur une page html simple.voici une version simplifiee de mon code:Public Sub search()di


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.