Transcrire une page HTML dans Delphi

Transcrire une page HTML dans Delphi - Delphi/Pascal - Programmation

Marsh Posté le 19-04-2011 à 11:35:41    

Bonjour
 
Je doit réaliser un programme sous Delphi afin qu'à partir d'une page HTML je puisse la retranscrire dans l'interface de Delphi. J'ai quelques idées de bases mais je bute sur de nombreux autres problèmes. Pour commencer, j'aimerais bien arriver à transcrire tout ce qui à un rapport avec le texte et le fond de la page, puis plus tard pour les tableaux et les images.
 
Pour commencer, j'ai récupéré le code pour créer une fiche où l'utilisateur peut rentrer son texte et Delphi le réécrit dans un mémo. Mais maintenant tout le travail commence ! Pour cela je pensais incorporer une bibliothèque de balises où le programme puiserait quand il rencontrerait une balise. Néanmoins, je ne sais pas comment faire pour incorporer ou créer cette bibliothèque ni comment écrire qu'à chaque fois qu'on rencontre une balise, on l'identifie et on la traite.
Ensuite, quels entités utilisés ? Pour l'instant je ne connais que les bases de Delphi et je ne vois pas comment avec des mémos ou des labels je vais pouvoir "écrire" une page HTML.
 
Bon en gros, je suis perdue...  :(  
Est ce que quelqu'un aurait quelques pistes à me donner ?
 
Merci
 

Reply

Marsh Posté le 19-04-2011 à 11:35:41   

Reply

Marsh Posté le 19-04-2011 à 15:33:46    

C'est un sacré travail que tu dois faire là. C'est dans quel contexte ? études ou travail pro ? tu dois faire ça pour n'importe quelle page html ?
réécrire un parser de balises en delphi, langage mal adapté au traitement des chaines et meme au xml, c'est vraiment hard-core, voire masochiste.

 

avec des memo et labels tu pourras simuler des <form> html. mais bon...

 

bon courage si ce n'est qu'un exercice :)


Message édité par rengzehn le 19-04-2011 à 15:34:34
Reply

Marsh Posté le 19-04-2011 à 16:13:27    

Effectivement, je serais curieux de savoir quel est le vrai besoin, le besoin initial. Parce que là, tu exprimes une solution technique qui me semble assez loufoque  :ouch:  
 
C'est clair que c'est un boulot de malade car il ne s'agit pas juste de réécrire un parser de html, y'a aussi le parser du css qui fait le gros de la mise en forme. Faut que tu sois capable de gérer le css1, 2 et 3 (quand on sait que y'a des navigateurs "modernes" qui ne gèrent pas correctement le css3 (voire parfois le 2.1 :/ ).


Message édité par rufo le 19-04-2011 à 16:13:41

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-04-2011 à 17:02:52    

ça sent le pierre tramouille cette histoire :o kradeg ? sors de ce pseudo ?


Message édité par rengzehn le 19-04-2011 à 17:03:23
Reply

Marsh Posté le 19-04-2011 à 19:35:12    

Alors en fait c'est un projet d'école d'ingénieur. Je ne doit être capable que de retranscrire des pages HTML sans déborder sur du CSS ou du Java. Il faudrait juste que le programme retranscrive quelques balises de base : le texte (gros, gras, italique, couleurs,...), le fond, l’entête. Puis plus tard, les tableaux et les images. Il ne s'agit pas de faire un navigateur complet, juste d'entamer la réflexion.  
Cela n’empêche que je ne sais pas comment entamer le programme.

Reply

Marsh Posté le 20-04-2011 à 09:58:09    

Ben un parser html ET css (et c'est pas du java mais du Javascript, ça n'a rien à voir!!!). Si tu prends un site web coder proprement, tu vas trouver dans le html que des balises (aucune mise en forme) et dans le css, toute la mise en page (images de fond, marges, taille des polices, gras, italique...). Si tu dois reproduire la mise en page de base, tu vas donc être obligé d'analyser le ou les css, en tenant compte des héritages et priorités de règles.
 
ex :

Code :
  1. p {
  2.  font-weight: bold !important;
  3. }
  4.  
  5. p.test {
  6.  font-weight: normal;
  7. }


Ben à cause du !important, la règle de p.test sera ignorée...
 
Et pour rappel, les balises de mise en forme <b>, <i>, center>, <font>, <strike>, <u>... sont dépréciées et on doit utiliser les propriétés css qui les remplacent. Donc si ton prof a dasn l'idée de vous faire parser des sites web avec ce genre de balises, tu lui jettes des pierre de ma part, car ces sites ne respectent ni les normes du W3C, ni l'accessibilité (A, AA, AAA) pour les personnes handicapées visuellement :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-04-2011 à 18:06:06    

Après discussion avec mon prof, on doit commencer juste par traduire quelques balises de début, pas une page entière de web.  
Le problème que j'ai pour commencer c'est que je ne sais pas comment faire pour que le programme comprenne que c'est une balise et non pas un signe inférieur ou supérieur (< ou > ).

Reply

Marsh Posté le 20-04-2011 à 19:48:16    

Salut
 
si tu lit ton code html d'un fichier texte, ça ne gène pas, par ex.tu lis une ligne et tu fait un test avec pos:
 
 

var tmp:string;
 
if pos('<title>', tmp) > 0 then...


 
dans l'éditeur tu vois que tes <> sont en bleu et pas noir  ;)

Reply

Marsh Posté le 20-04-2011 à 19:49:12    

Salut
 
si tu lit ton code html d'un fichier texte, ça ne gène pas, par ex.tu lis une ligne et tu fait un test avec pos:
 
 

var tmp:string;
 
if pos('<title>', tmp) > 0 then...


 
dans l'éditeur tu vois que tes <> sont en bleu et pas noir  ;)

Reply

Marsh Posté le 20-04-2011 à 20:10:43    

J'ai pas réussi à utiliser la commande pos. Pourrais-tu me donner un peu plus de détails ?
 
Pour l'instant dans mon programme, je récupère mon texte html dans un memo. Maintenant, j'aimerais commencer par lui demander de lire ce qui est marqué dans ce memo et qu'il le reconnaisse.  
 
 

Code :
  1. begin
  2. compteur:= 0;
  3. for i:=1 to Memo1.Lines.Count do
  4.       begin
  5.         ligne:=Memo1.Lines[i];
  6.         if ligne ='<head>' then
  7.         compteur := compteur +1
  8.       end;
  9. end;


Le compteur me sert juste à savoir si a bien reconnu le caractère. Sauf que quand je fait du pas à pas, ligne prend bien la valeur <head> mais ne rentre pas dans la boucle. Vous voyez le problème ?

Reply

Marsh Posté le 20-04-2011 à 20:10:43   

Reply

Marsh Posté le 20-04-2011 à 20:18:08    

if ligne= '<head>' c'est pas bon parceque tu ne peut rien avoir d'autre sinon la condition est fausse  
 
pour pos justement ça indique que si on trouve '<head>' dans ligne au moins au premier caractère de la chaine c'est bon
 
 

begin
compteur:= 0;
for i:=1 to Memo1.Lines.Count do
       begin
         ligne:=Memo1.Lines[i];
         if pos('<head>',ligne) > 0  then
         compteur := compteur +1
       end;
end;


 
 
tu peut mettre autre chose que 0 of courses, si tu met 5 il faudra que <head> soit au 5eme caractère


Message édité par Flagad'aware le 20-04-2011 à 20:19:28
Reply

Marsh Posté le 20-04-2011 à 20:19:16    

Ok autant pour moi.... Il fallait commencer i à 0... Pas futée la fille...

Reply

Marsh Posté le 20-04-2011 à 20:20:04    

memo.lines.count -1 aussi
 
 
par contre attéssion avec pos il te donne la première occurence  de la sous chaine recherchée, si tu cherchais un deuxième <head> dans la meme chaine il faudrait déja supprimer le permier...


Message édité par Flagad'aware le 20-04-2011 à 20:23:55
Reply

Marsh Posté le 20-04-2011 à 20:24:02    

Ok nikel pour pos, j'ai compris comment ça marche. Mais maintenant comment je retranscrit ce qu'il y a dans la balise head dans l'inteface delphi ? Memo ? Label ? Je ne sais pas quel entité choisir...

Reply

Marsh Posté le 20-04-2011 à 20:29:17    

tu peut faire ça avec un richedit, ça permet de mettre pas mal de guirlandes et c'est plus complet qu'un memo
 
les labels faudrait les créer dynamiquement à chaque fois au bon endroit

Reply

Marsh Posté le 20-04-2011 à 20:34:21    

Pour prendre une chaîne de caractère entre la balise de début et de fin <head> .... </head>, est ce que l'on peut raisonner par position de la balise par rapport au texte entier ?

Reply

Marsh Posté le 20-04-2011 à 20:40:14    

roulolo je connais pas le html mais vu tout ce qu'il y a entre tu peut pas, déja t'a ça sur 15000 lignes et en plus t'a tout un tât d'infos à trier quand meme (parser on dit je crois)
 
si c'est juste sur une chaine tu peut facilement oui pour un lienweb par exemple

Reply

Marsh Posté le 21-04-2011 à 10:28:56    

Si tu connais pas le html, t'es vraiment très mal parti :/
 
Perso, je ne pense pas que passer par la fonction pos() soit une bonne idée. J'utiliserais plutôt les regex, mais attention avec le pb des conteneurs, style <div>...<div>...</div>...</div>, ne pas se tromper dans les balises fermantes, qui ferme quoi et autant que possible traiter les cas où une balise fermante a été oubliée + le coup des balises non conteneur comme <img />, <hr />...  
 
Après, côté structure, il te faut un arbre (comme ce que fait le DOM). Moi, je serais toi, je chercherais un parser XML pas trop strict pour parser le HTML et avoir déjà la structure en arbre. Ca peut être soit un composant Delphi, soit un exe codé dans un autre langage que tu appellerais en ligne de commande et qui d'une manière ou d'une autre te renverrait l'arbre à ton exe en Delphi...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-04-2011 à 12:33:50    

rufo a écrit :

Si tu connais pas le html, t'es vraiment très mal parti :/


 
m'en fou c'est pas moi qui doit trouver  [:gijar]  :D  
 
c'est vrai que dans le cas  <div>...<div>...</div>...</div> avec pos c'est chaud  [:cyber103]

Reply

Marsh Posté le 21-04-2011 à 14:25:07    

Flagad'aware a écrit :


 
m'en fou c'est pas moi qui doit trouver  [:gijar]  :D  
 
c'est vrai que dans le cas  <div>...<div>...</div>...</div> avec pos c'est chaud  [:cyber103]


 
c'est pas toi qui doit trouver quoi  :heink: Si tu ne connais pas le html (le langage, hein!), comment veux-tu être capable d'écrire un parser et de faire un rendu potable :??:  


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 21-04-2011 à 21:03:22    

bah c'est pas moi qui pose la question, je propose juste des possibilités pour aider Miss'cotto  :)

Reply

Marsh Posté le 22-04-2011 à 09:41:30    

Flagad'aware a écrit :

bah c'est pas moi qui pose la question, je propose juste des possibilités pour aider Miss'cotto  :)


 
Oops, je t'avais confondu avec l'auteur du topic, désolé  :pt1cable:  


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-04-2011 à 13:19:10    

s'pô grave  :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed