begin process at 2012 05 24 00:02:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier & Disque

 > CONVERTISSEUR FICHIER CAML -> FICHIER HTML

CONVERTISSEUR FICHIER CAML -> FICHIER HTML


 Information sur la source

Note :
Aucune note
Catégorie :Fichier & Disque Classé sous :caml, html Niveau :Débutant Date de création :29/07/2006 Date de mise à jour :29/07/2006 20:57:53 Vu :3 035

Auteur : jpountz

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

Source avec Zip Source avec une capture IMPLÉMENTATION DE LA TORTUE LOGO, APPLICATION AUX FRACTALES
Source avec Zip Source avec une capture MISE EN ORBITE D'UN SATELLITE
Source avec une capture COURSE DE CHEVAUX

 Sources de la même categorie

ENLEVER LES ACCENTS DE TOUS LES FICHIERS par Averell
Source avec une capture TRIER SES FILMS PAR GENRE - INTERFACE ZENITY OU LIGNE DE COM... par sarathai
LE GLOUTON ! [MANGE ET RECRACHE LES FICHIERS QU IL TROUVE D... par saigneurdushi
PYSCANLOG SCANNER DE FICHIER LOG par Guillamue06
Source avec Zip RÉPLICATOR par dhuyp

 Sources en rapport avec celle ci

Source avec Zip GÉNÉRATEUR HTML POUR L'UTILISATION DE PYTHON EN CGI par Just_1
Source avec Zip INFORMATIONS SUR UN ISBN DEPUIS INTERNET par lepecheur
Source avec Zip Source avec une capture CRÉER UNE PAGE HTML (AVEC INTERFACE GRAPHIQUE) par aera group
Source avec Zip Source avec une capture ALBUMEUR PHOTO: SCRIPT DE CRÉATION D'ALBUM PHOTO EN HTML À P... par vychnou

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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&#232;me lors de la cr&#233;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?&lt;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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 7,114 sec (3)

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