Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3095 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Coloration syntaxique de C++ vers du HTML, problèmes ....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Coloration syntaxique de C++ vers du HTML, problèmes ....

n°524657
pc2000
Posté le 27-09-2003 à 18:06:36  profilanswer
 

Mon travail consiste à créer à partir d'un fichier source C++, un fichier coloré (syntaxiquement) en HTML.
Le problème c'est que pour colorer le texte je fais un parcours séquentiel du fichier cpp caractère par caractère (avec les flots de la biblioithèque <fstream.h> ) et donc je n'ai pas de moyen de savoir lorsqu'il y a un retour à la ligne  :o  
 
Ma démarche pour le programme serait de vérifier char par char sur le fichier et dès que je rencontre un blanc je prends le mot et je compare avec les keywords.
Et dès que je rencontre un // ou /* je colore en conséquence...
 
Qu'en pensez vous ?

mood
Publicité
Posté le 27-09-2003 à 18:06:36  profilanswer
 

n°524658
Taz
bisounours-codeur
Posté le 27-09-2003 à 18:08:36  profilanswer
 

heink ?

n°524659
kadreg
profil: Utilisateur
Posté le 27-09-2003 à 18:09:54  profilanswer
 

PC2000 a écrit :


Qu'en pensez vous ?


 
man flex :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°524662
Taz
bisounours-codeur
Posté le 27-09-2003 à 18:12:52  profilanswer
 

kadreg a écrit :


 
man flex :o

meme pas besoin. suffit de lire ligne par ligne d'insérer des tags autour des mots clef

n°524667
pc2000
Posté le 27-09-2003 à 18:29:21  profilanswer
 

Voilà le but de mon travail en gros :
 
Produire un programme (codé en C++) qui permette la coloration lexicale de fichiers sources C++.
Le programme prend en entrée un ou plusieurs fichiers C++ et produit en sortie un ou plusieurs fichiers au format HTML correspondant au sources C++ (mais colorées et bien mis en page).

n°524668
Taz
bisounours-codeur
Posté le 27-09-2003 à 18:31:46  profilanswer
 

colorer est une chose, l'indentation en est une autre.

n°524675
pc2000
Posté le 27-09-2003 à 18:36:29  profilanswer
 

Je te lis le libellé exact de mon sujet :
Certains blancs (tabulations) seraient ignorés et d'autres remplacés par le code HTML adéquat (un retour à la ligne serait remplacé par la balise "<p>" ).
 
C'est pour ça que je désigne plutôt ca comme de la petite mise en page que de l'indentation.
 
Mais peux tu répondre à ma question ?
 
Comment puis je savoir lorsque je dois aller à la ligne à partir d'un fichier cpp ou txt (avec quel(s) test(s) en C++) ?


Message édité par pc2000 le 27-09-2003 à 18:37:47
n°524682
Taz
bisounours-codeur
Posté le 27-09-2003 à 18:45:22  profilanswer
 

ok ... ben on te demande pas d'indenter, juste une bonne mise en forme parce qu'en HTML les espaces consécutifs n'ont pas le meme effet qu'en texte brut. donc en fait c'est la meme démarche : recherche un motif dans une ligne et le remplacer. avec <fstream> et <string>, y a tout pour faire ça sans problème

n°524689
pc2000
Posté le 27-09-2003 à 18:52:55  profilanswer
 

Taz a écrit :

ok ... ben on te demande pas d'indenter, juste une bonne mise en forme parce qu'en HTML les espaces consécutifs n'ont pas le meme effet qu'en texte brut. donc en fait c'est la meme démarche : recherche un motif dans une ligne et le remplacer. avec <fstream> et <string>, y a tout pour faire ça sans problème


Oui, ce sont les bibliothèques que je comptais utiliser mais pour le retour à la ligne ça ne me parait vraiment pas évident car pour les commentaires par ex on ne sait pas quand ils se finissent.
Je peux prendre des points de repère comme le ";", ou "{"... mais je sais pas ce que ca peut donner  :(

n°524691
Taz
bisounours-codeur
Posté le 27-09-2003 à 18:57:03  profilanswer
 

:heink:  
 
while(getline(cin, ligne))
{
  cout << ligne << "<BR>";
}
 
 :heink:

mood
Publicité
Posté le 27-09-2003 à 18:57:03  profilanswer
 

n°524700
pc2000
Posté le 27-09-2003 à 19:03:53  profilanswer
 

Taz a écrit :

:heink:  
 
while(getline(cin, ligne))
{
  cout << ligne << "<BR>";
}
 
 :heink:  


Désolé mais je me considère plutôt débutant en C++ vu que j'en fais que depuis un an donc ne soit pas trop surpris si j'ai un peu de mal  :p  
C'est vrai que la fonction getline est élémentaire mais je me rappelle pu trop ..
Mais elle ne prends pas de fstream en paramètre non ?
C'est bien :  getline (char* s, int n ) , non ?

n°524720
pc2000
Posté le 27-09-2003 à 19:37:29  profilanswer
 

Non c'est bon tu avais raison, ca passe, merci  :hello: .
 
 

Code :
  1. fic.getline(buffer,ligne); 
  2. while(!fic.eof())
  3.      ficout<<buffer<<"<BR>";
  4.      fic.getline(buffer,ligne);
  5. }


 
A ton avis je devrais passer par un tableau 2D (ligne par ligne) ca me semble interessant mais je sais pas si c'est un gaspillage de mémoire ou pas (vu qu'avec les tableaux l'allocation n'est pas dynamique..)  
Ca simplifierai certainement le traitement.


Message édité par pc2000 le 27-09-2003 à 19:53:25
n°524747
Taz
bisounours-codeur
Posté le 27-09-2003 à 20:30:36  profilanswer
 

PC2000 a écrit :

Non c'est bon tu avais raison, ca passe, merci  :hello: .
 
 

Code :
  1. fic.getline(buffer,ligne); 
  2. while(!fic.eof())
  3.      ficout<<buffer<<"<BR>";
  4.      fic.getline(buffer,ligne);
  5. }


 
A ton avis je devrais passer par un tableau 2D (ligne par ligne) ca me semble interessant mais je sais pas si c'est un gaspillage de mémoire ou pas (vu qu'avec les tableaux l'allocation n'est pas dynamique..)  
Ca simplifierai certainement le traitement.

ne fais jamais ce genre de chose et aies la correction de tester mon exemple getline(istream&, std::string& )

n°524749
pc2000
Posté le 27-09-2003 à 20:43:20  profilanswer
 

Taz a écrit :

ne fais jamais ce genre de chose et aies la correction de tester mon exemple getline(istream&, std::string& )


Je suis tes conseils, merci.
 
PS : j'avais testé ton exemple mais on nous a appris d'écrire de cette manière donc je ne savais pas qu'il fallait éviter.


Message édité par pc2000 le 27-09-2003 à 20:44:12
n°524750
Taz
bisounours-codeur
Posté le 27-09-2003 à 20:46:21  profilanswer
 

ben ton t'as très très mal appris ...
 
 
et ne confonds pas istream::getline et getline


Message édité par Taz le 27-09-2003 à 20:47:15
n°524755
pc2000
Posté le 27-09-2003 à 20:55:15  profilanswer
 

Taz a écrit :

ben ton t'as très très mal appris ...
 
 
et ne confonds pas istream::getline et getline


La fonction getline retourne un int non ?
Parce que j'ai ça comme erreur lors de la compilation.
 
110 C:\Documents and Settings\pierre\Mes documents\projet C++\test\coloration.cpp
implicit declaration of function `int getline(...)'

 
Je cherche juste à récupérer ligne par ligne un fichier texte pour pouvoir insérer des balises HTML (comme tu l'avais mis ci dessus).
 
Désolé je ne comprends pas le type du second argument std::string&.

n°524757
Taz
bisounours-codeur
Posté le 27-09-2003 à 20:59:16  profilanswer
 
n°524761
pc2000
Posté le 27-09-2003 à 21:20:41  profilanswer
 

Je n'arrive pas à différentier les ifstream et istream  :??:  
Pourquoi privélégier plutôt l'un que l'autre ?
Je crois avoir remarquer que l'un se déclare dans <string> et l'autre dans <string.h>

n°524763
Taz
bisounours-codeur
Posté le 27-09-2003 à 21:31:26  profilanswer
 

tout ce qui termine en .h est du C donc HS
 
istream est la super-classe dont ifstream est une sous-classe.

n°524781
HelloWorld
Salut tout le monde!
Posté le 28-09-2003 à 00:25:38  profilanswer
 

Tu connais Source-highlight ?
http://www.gnu.org/software/src-hi [...] light.html


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°524784
Taz
bisounours-codeur
Posté le 28-09-2003 à 00:38:14  profilanswer
 

je pensais exactement la même chose    [:spamafote]

n°524900
pc2000
Posté le 28-09-2003 à 15:15:43  profilanswer
 

Puisque ifstream est une sous-classe de istream, est il possible (et est ce "propre" ) de mettre pour cette fonction

Code :
  1. void creeHTML(istream&, ostream& );

deux fichiers cpp de type ifstream et ofstream (au lieu des istream et ostream) ?  
 
Merci d'avance.
 
PS : car je ne sais pas spécifier un nom de fichier pour le type istream (ainsi que l'ouvrir et le fermer).


Message édité par pc2000 le 28-09-2003 à 15:18:53
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Coloration syntaxique de C++ vers du HTML, problèmes ....

 

Sujets relatifs
[HTML/js] Probleme de positionnement avec un tableauProblemes avec pointeurs/tableaux adresses
[C++] Problèmes à la compilation avec des fonctions amies[PHP] Generer le code html avec une classe
[jbuilder] problemes de double buffering[autorun] lancer une page html dans une fenêtre aux dimensions voulues
[HTML] Texte pas centré sur ma frame /-([HTML/JS] Gestion des cadres Rechercher / Favoris / Historique de IE..
Dimensionner fenetre web en javascript ou HTML ?[HTML/JS]qu'est ce qui ne va pas avec mon programme?
Plus de sujets relatifs à : Coloration syntaxique de C++ vers du HTML, problèmes ....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR