menu
  Home  ==>  articles  ==>  web  ==>  pascal_to_html   

u_c_pascal_to_html - John COLIBRI.


1 - Introduction

Pour présenter des articles sur Pascal et Delphi dans ce site, il me fallait avant tout un utilitaire qui transforme les .PAS en code .HTML.

Pour Pascalissime, il y a longtemps que le brave ED avait réglé le problème:

  • des balises 'début de programme' et 'fin de programme' marquaient le début et la fin des codes .PAS importés
  • ED se chargeait alors de numéroter les lignes et de cracher le Postscript artistiquement décoré:
  • mise en gras des mots clés
    • italique pour les identificateurs
    • correction de l'indentation. En effet, l'espace n'a pas la bonne valeur en point par rapport à la police en chasse variable pour les structures "en peigne":

      VAR total: Integer;
      montant: Double;

C'est ce type de transformation qu'il fallait donc demander à ED de faire mais en générant du HTML.

1.2 - L'objectif

Dans le cadre de cet article, nous nous contenterons de présenter la transformation de fichiers .PAS isolés, en supposant que le code .HTML généré est importé (par copier / coller) dans les articles .HTML. L'utilitaire présenté
  • part d'un fichier ASCII classique (généré par NotePad ou par Delphi
  • crée un fichier .HTML que vous pouvez visualiser avec un Browser quelconque en cliquant dessus

2 - Utilisation

L'application p_test_c_pascal_to_html donne un exemple. Il suffit;
  • d'importer u_c_pascal_to_html
  • de créer la classe c_pascal_to_html et d'appeler la méthode pascal_to_html:
        with c_pascal_to_html.create_pascal_to_html('pascal'p_dirp_file_namedo
        begin
          transform_to_html;
          Free;
        end// with c_text_file

2.2 - Répertoires et Directives de compilation

L'unité u_c_pascal_to_html est prévue pour être placée dans:

C:
  programs
    colibri_utilities
      web
        pascal_to_html

Vous pouvez naturellement changer cette organisation par Projet | Options | Directories

Les directives de compilation sont:

  • R+ (vérification des intervalles)
  • S+ (vérification de la pile)
  • pas d'optimisation

3 - Programmation

La lecture du fichier se fait en lisant un fichier ASCII par c_text (cf l'article c_text_file).

Le texte est analysé lexicalement pour débiter le programme en symboles.

Le principe de cette analyse est toujours le même:

  • une boucle pour sauter les caractères indésirables
  • une boucle qui récupère dans une String les caractères utiles
Pour l'analyse du texte, les particularités classiques concernent:
  • les chaînes littérales:
    • il faut sauter les guillemets dédoublés
    • les commentaires inclus dans les chaînes littérales ne doivent pas être pris en compte:

      Memo1.Lines.Add('ce n''est pas un (* commentaire');

  • les commentaires de toute race doivent être ananlisés, sans empilement et en sautant les lignes au besoin

    { début
    (* emboîté non pris en compte *)
    'idem pour les chaînes, même non terminées
    } // c'est la fin

Plusieurs points liés à la spec HTML ont nécessité quelques précautions:
  • .HTML gère les espaces et les retours chariots de façon très spéciale:
    • le texte est censé être découpé en paragraphes. Le début d'un paragraphe est censé être signalé par la balise <P> et est censé se terminer par un </P>.

      Je dis "censé", car ce <P> est ou non présent, et est très souvent implicite: après un trait horizontal (la balise <HR>), un paragraphe semble démarrer automatiquement. Quant au </P> c'est une bête très rare dans les pages Web de nos jours: lorsque un <P> est rencontré, un </P> est sous-entendu.

      Un peu comme si en Pascal cela vous fatiguait de mettre BEGIN et que le END vous ennuyait si profondément que vous laissiez au compilateur le soin d'en parsemer vos programmes ici ou là. Drole de mentalité...

    • les fins de lignes sont marquées par la balise <BR>. L'équivaleut en somme du retour chariot des traitements de texte. Fort bien.

    • les blancs de votre fichier ASCII (espace, tabulation je crois, Return et LineFeed (en gros 32, 9, 13 et 10) sont tous concaténés: plusieurs blancs consécutifs sont transformés en un seul blanc.

      Pour formater, plusieurs choix:

      • soit passer en text pré-formatté (la balise <PRE>), ce qui se traduit par une police à chasse fixe (type courrier) et conservation des espaces et des retours chariots de votre texte

      • soit placer dans le texte des espaces qui ne sont pas concaténés, en insérant les caractères:

         

        pour chaque espace à produire

  • les caractères utilisés pour la grammaire HTML, tels que < et > doivent être transformés par un mécanisme d'échappement. Classique, certes, mais oh combien lourd dans le cas d'HTML. Ainsi

    < devient <
    espace devient  
    etc.

En ce qui concerne les couleurs, je souhaitais avoir:
  • les mots clés en capitales rouges et grasses
  • les identificateurs en noir italique
  • les chaînes littérales Pascal en bleu
  • les commentaires Pascal de tout poil (soit // soit { soit (* ) en violet
Toutes ces couleurs sont en CONST et vous pouvez les changer si vous le souhaitez. Une amélioration triviale consisterait à permettre la modification par une procédure de la classe.


4 - Améliorations

Il serait possible
  • d'incorporer ce programme dans l'utilitaire qui permet le changement de répertoires avec un tDirectoryListBox, et le balayage récursif en utilisant c_dirs
  • de permettre l'inclusion de fichiers .PAS dans un fichier .TXT (par une notation similaire à $INCLUDE, par exemple), ce qui permet la transformation du .TXT en .HTML en une seule passe (c'est en vérité ce que fait le brave ED)

5 - Télécharger

Vous pouvez télécharger:

Comme d'habitude:
  • nous vous remercions de nous signaler toute erreur, inexactitude ou problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections qui en résulteront pourront aider les prochains lecteurs
  • tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même les bienvenus à jcolibri@jcolibri.com.
  • plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en cliquant "envoyer" :
    Nom :
    E-mail :
    Commentaires * :
     

  • et si vous avez apprécié cet article, faites connaître notre site, ajoutez un lien dans vos listes de liens ou citez-nous dans vos blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.

L'auteur

John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le conseil (composants, architecture, test) et la formation. Son site contient des articles avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client.
Créé: sep-01. Maj: aou-15  148 articles, 471 sources .ZIP, 2.021 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2015
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
    + web_internet_sockets
      – http_client
      – moteur_de_recherche
      – javascript_debugger
      + asp_net
      – client_serveur_tcp
      – site_editor
      – pascal_to_html
      – cgi_form
      + les_logs_http_bruts
      + les_blogs
      – intraweb_tutorial
      + services_web
      – serveur_web_iis
      – client_serveur_pop3
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
    + colibri_helpers
    + colibri_skelettons
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog