Accueil > > > CONVERTISSEUR FICHIER CAML -> FICHIER HTML
CONVERTISSEUR FICHIER CAML -> FICHIER HTML
Information sur la source
Description
Je débute en python et il s'agit là de mon premier programme complet. Toute remarque constructive tant sur les malfonctionnements du programme que sur ma façon de programmer en python est la bienvenue. Le programme 1 : ml2html.py prend en argument une liste des noms de fichiers Caml Light / Objective Caml (extension .ml) et génère une page html contenant le code des programmes donnés en arguments en conservant l'indentation et en ajoutant une coloration syntaxique rudimentaire (facilement modifiable) nommée ml2html_resultat.html. Le programme 2 : ml2html-tk.py est une interface graphique à ml2html utilisant Tkinter qui donne deux arguments optionnels supplémentaires : le nom du fichier à générer et le répertoire des fichiers à convertir, les valeurs par défaut étant ml2html_resultat.html et le répertoire courant. Note : testé uniquement sous Linux.
Source
- #Programme 1 : ml2html.py
-
- #! /usr/bin/python
- # -*- coding:Utf-8 -*-
-
- ##############################################################
- #
- # ml2html : convertit les fichiers donnés en arguments en un
- # fichier html conservant l'indentation et ajoutant
- # la coloration syntaxique des mots_clé.
- #
- ##############################################################
-
- import sys
-
- mots_cle0=["let","and","in","for","do","done","while","if","then","else"]
- mots_cle1=["load","include","begin","end","match","with","try","fun","function","rec","ref"]
-
- #fonte à invoquer pour mots_cle0
- font_0="<FONT COLOR='BLUE'>"
- #fonte à invoquer pour mots_cle0
- font_1="<FONT COLOR='RED'>"
- #fonte à invoquer pour les commentaires
- font_comment="<FONT COLOR='GREEN'>"
- #fonte à invoquer pour les chaînes de commentaire
- font_string="<FONT COLOR='#FF00FF'>"
- #fin de fonte
- font_end="</FONT>"
-
- class Statut:
- """Classe chargée de gérer le type de texte lu (commentaires ou code ou chaine de caractères)"""
- def __init__(self,comment=False,string=False):
- self.comment=comment
- self.string=string
- def __repr__(self):
- "Comment : %d\nString : %d" %(self.comment,self.string)
-
- def parse(texte):
- """Prend en argument une chaîne de caractères correspondant à un programme CAML et renvoie du code HTML conservant l'indentation et avec coloration syntaxique"""
- #mot en cours
- m=''
- #chaine rendue par ml2html
- t=''
- #statut
- s=Statut()
-
- #concatène le mot lu à la chaine t avec la coloration syntaxique
- def vide_mot(m):
- if not s.string and not s.comment:
- if m in mots_cle0:
- return '%s%s%s' %(font_0,m,font_end)
- elif m in mots_cle1:
- return '%s%s%s' %(font_1,m,font_end)
- else:
- return m
- else:
- return m
-
- #parcourt le texte à la recherche des caractères de changement de statut
- for i in range(len(texte)):
- c=texte[i]
-
- if c =='\"' and not texte[i-1]=='\\':
- if s.string:
- #fin de la chaîne de caractères
- t+=vide_mot(m)+c+font_end
- m=''
- s.string=False
- elif not s.comment:
- #début de la chaîne de caractères
- t+=vide_mot(m)+font_string+c
- m=''
- s.string=True
- else:
- #c'est un commentaire : '\"' est un caractère comme les autres
- t+=vide_mot(m)+c
- m=''
-
- elif c=='(':
- if texte[i+1]=='*':
- if not s.string:
- #début de commentaire
- t+=vide_mot(m)+font_comment+c
- s.comment=True
- mot=''
- else:
- #on est dans une chaîne de caractères
- t+=vide_mot(m)+c
- m=''
- else:
- t+=vide_mot(m)+c
- m=''
-
- elif c==')' and texte[i-1]=='*':
- if s.comment and not s.string:
- #fin d'une chaîne de caractères
- t+=vide_mot(m)+c+font_end
- m=''
- s.comment=False
- else:
- t+=vide_mot(m)+c
- m=''
- elif c in [' ','\n','=']:
- #le mot se termine
- t+=vide_mot(m)+c
- m=''
- else:
- #on incrémente le mot m
- m+=c
- t+=vide_mot(m)
- mot=''
- return t
-
- if __name__ == "__main__":
- resultat=open("ml2html_resultat.html",'w')
- resultat.write("<HTML><BODY><PRE>\n\n")
- for fichier in sys.argv[1:]:
- resultat.write("%s \n\n" %(parse(file(fichier).read())))
- resultat.write("</PRE></BODY></HTML>")
- resultat.close()
-
- #fin
-
- #Programme 2 : ml2html-tk.py
-
- #! /usr/bin/python
- # -*- coding:Utf-8 -*-
-
- ##############################################################
- #
- # ml2html-tk : interface graphique pour le programme ml2html
- #
- ##############################################################
-
- import os
- from ml2html import *
- from Tkinter import *
-
- def popup(texte=''):
- #envoie un popup
- pop=Tk()
- txt=Label(pop,text=texte)
- txt.pack()
- pop.mainloop()
-
- def convertir():
- #répertoire courant
- cur_dir=os.getcwd()
-
- # 'répertoire' est une entrée facultative,
- # évaluée au répertoire courant si elle n'est pas donnée
- if ent0.get()=='':
- e0=cur_dir
- else:
- e0=ent0.get()
-
- e1=ent1.get()
-
- # 'fichier à générer' est une entrée facultative,
- # évaluée à "ml2html.ml" si elle n'est pas donnée
- if ent2.get()=='':
- e2='ml2html_resultat.html'
- else:
- e2=ent2.get()
-
- if e1=='':
- # Aucun fichier à convertir
- popup("Donner un argument svp.")
- else:
- resultat=open(e2,'w')
- resultat.write("<HTML><BODY><PRE>\n\n")
- for fichier in e1.split():
- resultat.write("%s \n\n" %(parse(file(os.path.join(e0,fichier)).read())))
- resultat.write("</PRE></BODY></HTML>")
- resultat.close()
- popup("### Fini! ###\n%s généré dans %s." %(e2,cur_dir))
-
-
- # mise en place de l'interface graphique
- fen=Tk()
- fen.title('ml2html: ml -> html')
-
- txt0=Label(fen,text='répertoire')
- txt1=Label(fen,text='fichier(s) à convertir')
- txt2=Label(fen,text='fichier à générer')
-
- ent0=Entry(fen)
- ent1=Entry(fen)
- ent2=Entry(fen)
-
- bouton1=Button(fen,text='Convertir',command=convertir)
- bouton2=Button(fen,text='Quitter',command=fen.quit)
-
- txt0.grid()
- txt1.grid(row=1)
- txt2.grid(row=2)
- ent0.grid(row=0,column=1)
- ent1.grid(row=1,column=1)
- ent2.grid(row=2,column=1)
- bouton1.grid(row=3)
- bouton2.grid(row=3,column=1)
-
- fen.mainloop()
-
- # fin
-
#Programme 1 : ml2html.py
#! /usr/bin/python
# -*- coding:Utf-8 -*-
##############################################################
#
# ml2html : convertit les fichiers donnés en arguments en un
# fichier html conservant l'indentation et ajoutant
# la coloration syntaxique des mots_clé.
#
##############################################################
import sys
mots_cle0=["let","and","in","for","do","done","while","if","then","else"]
mots_cle1=["load","include","begin","end","match","with","try","fun","function","rec","ref"]
#fonte à invoquer pour mots_cle0
font_0="<FONT COLOR='BLUE'>"
#fonte à invoquer pour mots_cle0
font_1="<FONT COLOR='RED'>"
#fonte à invoquer pour les commentaires
font_comment="<FONT COLOR='GREEN'>"
#fonte à invoquer pour les chaînes de commentaire
font_string="<FONT COLOR='#FF00FF'>"
#fin de fonte
font_end="</FONT>"
class Statut:
"""Classe chargée de gérer le type de texte lu (commentaires ou code ou chaine de caractères)"""
def __init__(self,comment=False,string=False):
self.comment=comment
self.string=string
def __repr__(self):
"Comment : %d\nString : %d" %(self.comment,self.string)
def parse(texte):
"""Prend en argument une chaîne de caractères correspondant à un programme CAML et renvoie du code HTML conservant l'indentation et avec coloration syntaxique"""
#mot en cours
m=''
#chaine rendue par ml2html
t=''
#statut
s=Statut()
#concatène le mot lu à la chaine t avec la coloration syntaxique
def vide_mot(m):
if not s.string and not s.comment:
if m in mots_cle0:
return '%s%s%s' %(font_0,m,font_end)
elif m in mots_cle1:
return '%s%s%s' %(font_1,m,font_end)
else:
return m
else:
return m
#parcourt le texte à la recherche des caractères de changement de statut
for i in range(len(texte)):
c=texte[i]
if c =='\"' and not texte[i-1]=='\\':
if s.string:
#fin de la chaîne de caractères
t+=vide_mot(m)+c+font_end
m=''
s.string=False
elif not s.comment:
#début de la chaîne de caractères
t+=vide_mot(m)+font_string+c
m=''
s.string=True
else:
#c'est un commentaire : '\"' est un caractère comme les autres
t+=vide_mot(m)+c
m=''
elif c=='(':
if texte[i+1]=='*':
if not s.string:
#début de commentaire
t+=vide_mot(m)+font_comment+c
s.comment=True
mot=''
else:
#on est dans une chaîne de caractères
t+=vide_mot(m)+c
m=''
else:
t+=vide_mot(m)+c
m=''
elif c==')' and texte[i-1]=='*':
if s.comment and not s.string:
#fin d'une chaîne de caractères
t+=vide_mot(m)+c+font_end
m=''
s.comment=False
else:
t+=vide_mot(m)+c
m=''
elif c in [' ','\n','=']:
#le mot se termine
t+=vide_mot(m)+c
m=''
else:
#on incrémente le mot m
m+=c
t+=vide_mot(m)
mot=''
return t
if __name__ == "__main__":
resultat=open("ml2html_resultat.html",'w')
resultat.write("<HTML><BODY><PRE>\n\n")
for fichier in sys.argv[1:]:
resultat.write("%s \n\n" %(parse(file(fichier).read())))
resultat.write("</PRE></BODY></HTML>")
resultat.close()
#fin
#Programme 2 : ml2html-tk.py
#! /usr/bin/python
# -*- coding:Utf-8 -*-
##############################################################
#
# ml2html-tk : interface graphique pour le programme ml2html
#
##############################################################
import os
from ml2html import *
from Tkinter import *
def popup(texte=''):
#envoie un popup
pop=Tk()
txt=Label(pop,text=texte)
txt.pack()
pop.mainloop()
def convertir():
#répertoire courant
cur_dir=os.getcwd()
# 'répertoire' est une entrée facultative,
# évaluée au répertoire courant si elle n'est pas donnée
if ent0.get()=='':
e0=cur_dir
else:
e0=ent0.get()
e1=ent1.get()
# 'fichier à générer' est une entrée facultative,
# évaluée à "ml2html.ml" si elle n'est pas donnée
if ent2.get()=='':
e2='ml2html_resultat.html'
else:
e2=ent2.get()
if e1=='':
# Aucun fichier à convertir
popup("Donner un argument svp.")
else:
resultat=open(e2,'w')
resultat.write("<HTML><BODY><PRE>\n\n")
for fichier in e1.split():
resultat.write("%s \n\n" %(parse(file(os.path.join(e0,fichier)).read())))
resultat.write("</PRE></BODY></HTML>")
resultat.close()
popup("### Fini! ###\n%s généré dans %s." %(e2,cur_dir))
# mise en place de l'interface graphique
fen=Tk()
fen.title('ml2html: ml -> html')
txt0=Label(fen,text='répertoire')
txt1=Label(fen,text='fichier(s) à convertir')
txt2=Label(fen,text='fichier à générer')
ent0=Entry(fen)
ent1=Entry(fen)
ent2=Entry(fen)
bouton1=Button(fen,text='Convertir',command=convertir)
bouton2=Button(fen,text='Quitter',command=fen.quit)
txt0.grid()
txt1.grid(row=1)
txt2.grid(row=2)
ent0.grid(row=0,column=1)
ent1.grid(row=1,column=1)
ent2.grid(row=2,column=1)
bouton1.grid(row=3)
bouton2.grid(row=3,column=1)
fen.mainloop()
# fin
Historique
- 29 juillet 2006 20:57:53 :
- mise en page
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
comment créer un fichier HTML avec Python [ par anwaarber ]
salut a tous,j'ai un problème lors de la création d'un fichier HTML avec pythonsurtout quand je fait passer des variables dans le code :def
Python peut être interpreté par un navigateur comme dans html [ par rabikisa ]
Est-ce possible d'interpreter python à partir d'un navigateur si on utilise une base de données gadfly?(comme les pages html quoi...)si possible comme
Script Python pour html [ par aera group ]
Bonjour, je uis actuelement au chapitre 17 du tutoriel de Gérard Swinnen : Apprendre à programmer avec Python (téléchargable sur http://www.cifen.ulg.
html [ par MimiEtude ]
slt tous le monde!!!pouvez vous m'expliquer le sens ou bien la fonction de cette instruction?<meta name="MSSmartTagsPreventParsing" content="TRUE"
Modifier titre page html [ par miniimoi ]
Bonjour,je dois créer un proxy en python pour un projet et il faut que je recupere le titre de la page html et le modifier.Je suis novice dans ce doma
recupérer le contenu html d'1 site [ par sakusou ]
salut à tous, Je dois récupérer le contenu html d'un site web à partir de l'url en python, pour faire ça, j'ai pensé à d'abord récupérer l'arborescenc
click sur un bouton html [ par ziedff ]
je veux cliquer sur un bouton HTML en utilisant du code Python
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|