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

Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008 - 11 juil. 2006 à 01:54
tinux Messages postés 244 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 21 octobre 2013 - 16 juil. 2006 à 14:56
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/38517-generation-en-html-de-sources-vb-avec-coloration-syntaxique-et-hyperliens

tinux Messages postés 244 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 21 octobre 2013
16 juil. 2006 à 14:56
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 !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juil. 2006 à 00:19
Effectivement, j'utilises FireFox ^^
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
11 juil. 2006 à 19:14
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.
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
11 juil. 2006 à 19:01
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!
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
11 juil. 2006 à 15:45
Salut :)
Juste un mot pour signaler beaucoups de mots en double ou en triple dans la liste de mots.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2006 à 15:27
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
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, "";
szColor = COLOR_SYMB_A
Else
' we need to insert an hyperlink
module = Mid$(module, 1, InStr(module, ".")) & "html"
Print #g, "";
szColor = COLOR_SYMB_H
End If
Print #g, "" & Left$(sBuffer, Len(wordToHilight)) & "";

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, "<") > 0 Then
sBuffer = Replace(sBuffer, "<", "&lt;")
End If
If InStrB(sBuffer, ">") > 0 Then
sBuffer = Replace(sBuffer, ">", "&gt;")
End If
If InStrB(sBuffer, "<") > 0 Then
sBuffer = Replace(sBuffer, "<", "<")
End If
If InStrB(sBuffer, ">") > 0 Then
sBuffer = Replace(sBuffer, ">", ">")
End If

et pareil dans le Else ' else: normal text

si le code 'corrigé' te tente, contacte moi par MP
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 1
11 juil. 2006 à 15:09
je suis exactement du même avis que Renfield, un CommonDialog serait le bienvenu.
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
11 juil. 2006 à 13:30
Je trouve ca tres bon... Vraiment bien, je garde.
Bravo.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2006 à 10:07
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 ^^
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
11 juil. 2006 à 09:03
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,
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
11 juil. 2006 à 01:54
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 :)
Rejoignez-nous