begin process at 2010 02 10 09:19:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 889 / 309

Auteur : katsankat

Ecrire un message privé
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

Les Membres Club peuvent 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.

 Sources du même auteur

Source avec Zip Source avec une capture [C, WIN32/LINUX] LIB POUR TRAVAILLER DES IMAGES BITMAPS
Source avec Zip Source avec une capture [C/WIN32] REJOINDRE UN AMI SUR COD2 (CALL OF DUTY 2)
Source avec Zip Source avec une capture [WIN32/SPEECH SDK] CONNECTION SERVEUR DE MESSAGERIE POP3
Source avec Zip Source avec une capture [GTK+] FENÊTRE POPUP ANIMÉE EN BAS À DROITE DE L' ÉCRAN
Source avec Zip Source avec une capture [C/LINUX] ENVOYER UN MESSAGE PAR MAIL

 Sources de la même categorie

Source avec Zip Source avec une capture ANIMATIION GRAPHIQUE DES STRUCTURES DE DONNÉES par algoro
PILOTAGE DES 8 SORTIES DU PORT // par cedpic
Source avec Zip PARALLEL OBJECT PROGRAMMING IN C++ (POP-C++) : DEMO par lwinkler
Source avec Zip VOTE ELECTRONIQUE par luvianne
Source avec une capture REMOTE POST PHP WITH SOCKET LINUX par 0x0syscall

Commentaires et avis

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.

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 ...

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 :/ .

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!

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
*/

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.

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...

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;
}

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....

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.

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...

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.

Commentaire de aminesoft1 le 04/06/2008 07:31:27 10/10

good job

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales