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 !

[C/LINUX] BALISAGE HTML DE FICHIERS SOURCE C/C++


Information sur la source

Catégorie :Applications Linux Classé sous : exporthtml Niveau : Initié Date de création : 08/07/2006 Date de mise à jour : 14/07/2006 23:34:38 Vu / téléchargé: 5 556 / 306

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Salut à tous :)

Cette application console prend en argument un nom de fichier,
le balise avec du code HTML,
Et crée un nouveau fichier portant le même nom, mais avec l' extension .htm.
Sur le screenshot vous voyez à gauche le résultat dans Firefox; à droite sa source HTML.

Projet hyper-intéressant je conseille à tous de se pencher sur ce type d' algorithme.
150 lignes de codes, en 40 heures.

Traite un fichier de 100Ko en 15ms (à 7000Ko/ms).
 

Source

  • Dans le zip:
  • * le fichier source: CversHTML.c
  • * un petit "hello world" pour tester: test.c
  • * un script shell pour compiler à la volée et baliser CversHTML.c
  • * et un batch windows
Dans le zip:
 * le fichier source: CversHTML.c
 * un petit "hello world" pour tester: test.c
 * un script shell pour compiler à la volée et baliser CversHTML.c
 * et un batch windows

Conclusion

Signalez les bugs, merci d'avance.

Si quelqu'un connait l' équivalent de GetTickCount() sous linux ça serait pas de refus!
 

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

Historique

10 juillet 2006 21:04:14 :
Mise à jour: ver.0.2 Beaucoup d'améliorations mais code toujours compact. L' algo est fiable: si on balise un code, puis le copie depuis l' interface du navigateur web, il est recompilable sans warning. S'il y a une erreur c'est que vraiment je l' ai pas vue. memset() remplace bzero()
11 juillet 2006 12:23:31 :
L' appli est portable: compile bien sous windows aussi. Pas de nouvelle modif sauf si des erreurs sont repérées.
12 juillet 2006 15:17:26 :
ver.0.3: 2-3 erreurs corrigées ici et là. J'ai laissé tomber les tests sur VC++ (si quelqu'un réussit, chapeau).
13 juillet 2006 14:49:29 :
Merci Vicenzo.
14 juillet 2006 23:34:38 :
ver.0.5: Ajout Colorisation de caractère entre apostrophes. allocation ficout: +1 (remarque de Vicenzo) et test allocation mémoire. Ajout des accents pour console DOS et batch. C'est bon pour moi, j'y touche plus.

Commentaires et avis

signaler à un administrateur
Commentaire de Kaid le 08/07/2006 20:51:00

Si ton objectif est de trouver un équivalent à GetTickCount() pour connaitre le temps d'exécution de ton programme, tu peux utiliser la fonction gettimeofday() qui retourne la date du système en secondes et micro-secondes.

signaler à un administrateur
Commentaire de neria le 09/07/2006 11:53:37

C'est un code très interessant. Par conte ce serait sympa que ton prog charge un fichier de config personalisable qui contient les couleurs des mots clés, chaînes, nombres ...

signaler à un administrateur
Commentaire de psyphi le 10/07/2006 11:24:28

Source intéressante, qui peut se révélée bien utile.
Remarque sur le code: remplace tout tes bzero par memset(&mot,0, 255*sizeof(char)).
Regarde dans la man page de bzero, dans le paragraphe conformité, il conseil d'utilisé memset.
Pour ce qui est de l'utilisation, ca se compile bien avec codeblocks sous windows, mais quand j'utilise le programme il me génère un fichier .html de 0 ko :/ .

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

Salut :)
Allons-y pour memset(), bien vu. Pour win32, je me penche sur la question dès que la version linux est solide. Essaye de débuguer en modifiant la routine cout().

Bonne remarque sur la colorisation des chiffres, en cours d' implémentation!

Merci Kaid, ça marche super (ici il traite 8600 octets en 4 ms, soit 2150 octets par milliseconde).

J'ai corrigé quelques erreurs, mise à jour bientôt, hisoire de mériter la note!

signaler à un administrateur
Commentaire de CADRATURE le 10/07/2006 12:02:08

Avec CodeBlocks 1.0  (et mingw32-gcc.exe   3.4.4) , ça marche.
En ajoutant ceci: ....

/*
Pour faciliter le portage d'application UNIX ou pour faciliter le
travail de développeurs habitués au monde UNIX, les macros suivantes
permettront une 'migration' aisée :


#include <memory.h> // Prototypes des fonctions memcpy et memset

#define bcopy(source, dest, len) memcpy(dest, source, len)
#define bzero(area, len) memset(area, 0, len)

VOIR
http://support.microsoft.com/default.aspx?scid=kb%3Bfr%3B458620
*/

signaler à un administrateur
Commentaire de katsankat le 10/07/2006 21:12:36

memset() est défini dans string.h, pas besoin de macro c'est une fonction ANSI.

Chers Code::Blockers si vous essayez la mise à jour faudra virer GetTimeOfDay(), en attendant la prochaine MAJ, qui sera portable.

signaler à un administrateur
Commentaire de vicenzo le 13/07/2006 10:30:31

Le code compile sous VC++ en apportant une légère modification du source... On peut critiquer VC++ a bien des niveaux (surtout au niveau du support C++ , de l'implémentation des librairies standard, etc...) mais son compilateur C est tout de même pas mal fichu...

Le code de la source plante sous VC car il n'est pas "ANSI C". En effet, dans la fonction BaliserFichier() un tableau de char est déclaré en fin de bloc (char ficout[strlen(fichier)+4];)... Ce qui est strictement illégal en ANSI C où toutes les déclarations doivent être effectuée avant toute expression exécutable... En remontant la déclaration du tableau en début de bloc, tout compile et fonctionne correctement. Mais dans ce cas, on appelle strlen() avant même d'avoir tester le pointer "fichier"... Donc revoir un peu le code de début de fonction....

J'espère que cela peut aider...

signaler à un administrateur
Commentaire de katsankat le 13/07/2006 15:01:22

Super. En ce sens et sur ce point, GCC est plus tolérant, et VC++ plus conforme.

On n'a oublié aucun compilateur ni aucune plateforme? Test:
<FONT COLOR='GREEN'>// Retourne 1 si le mot est pourpre, 2 s'il est bleu, 0 si mot normal (noir)
</FONT><FONT COLOR='NAVY'>unsigned</FONT> <FONT COLOR='NAVY'>short</FONT> EstUnMotCle(<FONT COLOR='NAVY'>char</FONT>* str)
{
  <FONT COLOR='NAVY'>unsigned</FONT> <FONT COLOR='NAVY'>short</FONT> m;
  <FONT COLOR='#A52A2A'>for</FONT> (m=0; m&lt;17; m++) <FONT COLOR='#A52A2A'>if</FONT> (strcmp(MotsCles[m] ,str)==0) <FONT COLOR='#A52A2A'>return</FONT> 1;
  <FONT COLOR='#A52A2A'>for</FONT> (m=0; m&lt;19; m++) <FONT COLOR='#A52A2A'>if</FONT> (strcmp(MotsTypes[m],str)==0) <FONT COLOR='#A52A2A'>return</FONT> 2;
  <FONT COLOR='#A52A2A'>return</FONT> 0;
}

signaler à un administrateur
Commentaire de vicenzo le 13/07/2006 22:18:12

Quelques petites remarques ... :

* BOOL n'est pas un type de donnée ni une classe d'allocation mais juste une macro... Est il donc nécessaire de l'inclure dans le tableau MotType ?

* Fonction main  : l'appel direct à argv[1] sans avoir tester le argc est franco ! En effet, 99% des implémentations usuelles placeront, si aucun paramètre n'est fourni, un pointeur null dans argv[1]. Mais ce comportement n'est pas prévu et défini par la norme et sous un quelconque compilo C venu de mars, cela peut planter l'appli...

* dans la fonction BaliserFichier() :
    ..
    ficout= (char*) malloc(strlen(fichier)+4);
    sprintf(ficout, "%s.htm", fichier);
    ..
    AIE ! lors du free(ficout), sous VC++ crash en debug ! Pourquoi ? car le buffer ficout ne contient pas de zéro terminal. Il faut faire :
    malloc(strlen(fichier)+4 + 1)......

* dans la fonction Envoi() :
     ..
     memset(mot,0,200); -> vaut mieux : memset(mot,0,sizeof(mot));
     ..

* pareil pour les taille de MotsCles (17) et MotsTypes (19) : ces valeurs sont utilisées à plusieurs endroits... Un define ou un static const serait moins source d'erreurs lors d'enrichissement ultérieurs de la source.

Ce sont des petits détails ... mais bon ca peut toujours servir !
Sinon j'aurai bien vu un tableau de structure avec comme champs le caractère, le code couleur, le code fonction à appeller afin de minimiser la liste des else if de la boucle principale....

signaler à un administrateur
Commentaire de BruNews le 14/07/2006 00:24:01 administrateur CS

free() se moque de savoir ce qu'il y a à l'adresse spécifiée, le désallocateur system libère le bloc partant de l'adresse donnée à free et basta, aucun besoin que soit une chaine avec zero final ou autre.

signaler à un administrateur
Commentaire de vicenzo le 14/07/2006 09:29:06

Effectivement free() s'en moque... Mais le sprintf NON !! et va foutre le bordel à l'addresse pointée par ficout.... Et le free générer eventuellement une erreur car sprintf aura ecrit plus d'octets que prévu ou insérer des valeurs tordues et donc le free() sous certaines implémentations (dont VC) aura parfois du mal à libérer la mémoire car celle ci n'est plus valide...

signaler à un administrateur
Commentaire de samana le 01/08/2006 21:47:56

Concrètement, sans rentrer ds les détails techniques du code (manip de chaîne de caractères, portabilité windows<->unix ...) c'est une sorte de parseur (comme pour les fichiers XML avec stylsheet XSL en gros).
Joli travail. Je le mets de côté au cas où...ça peut être utile.

signaler à un administrateur
Commentaire de aminesoft1 le 04/06/2008 07:31:27 10/10

good job

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

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,671 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é.