site2wouf.fr : Python vers html.

Il vaut mieux qu'il pleuve aujourd'hui qu'un jour où il fait beau !

Pierre Dac (sur mon T shirt!)

Code Python traduit en HTML:
#vershtml.py version 1.1.1

import keyword, html
"""py.txt en py.htm
imperatifs :
1/ les strings n'utilisent pas les simples quotes

"""     
#constantes css
intro="<em ><a style=\"margin-left:35px; color:grey;\" href=\"http://site2wouf.fr/python_vers_html.php\">"     
intro+="Code Python traduit en HTML: </a></em>"     
intro+="<code><pre style=\"margin-top:2px; margin-left:20px; font-size:120%;border-radius: 20px;  max-width:600px; max-height:600px; padding-left :15px; overflow-x:auto;  border:3px ridge grey; Line-Height: 1.5;\">"     
fin="</pre></code>"     
motsclefs=keyword.kwlist
natives=["abs"     ,"bytes"     ,"chr"     ,"eval"     ,"exec"     ,"input"     ,"int"     ,"len"     ,"max"     ,\
         "min"     ,"open"     ,"print"     ,"str"     ]
nativestyle="<span style=\"color:purple\">"     
motsclefstyle="<span style=\"color:orange\">"     
diesestyle="<span style=\"color:red\">"     
fichier=open("py.txt"     ,"r"     )
texte=fichier.read()
fichier.close()
avant=["/n"     ," "     ,"("     ,"="     ,"."     ]
apres=["/n"     ," "     ,")"     ,"."     ,"("     ,":"     ]
print("Cette application va transformer le code python du fichier py.txt en html"     )
print("Et enregistrer le résultat dans py.htm..."     )
print("Les deux fichiers étant dans le répertoire de l'application !"     )
nom=input("(Facultatif ) Entrez le nom du programme :"     )
if nom!=""     :
    sources=input("(Facultatif ) Entrez un lien hypertext:"     )


#pretraitement à cause du caractère d echappement en html
texte=texte.replace("\\\""     ,"|@@|"     )

""" c est ici qu on modifie texte"""     
liste=texte.split("\"\"\""     )
"""les elements paires de la liste sont des commentaires de type triples cotes"""     
i=1
texte=""     
for morceau in liste:
    if i%2==1:
        #On cherche les strings
        morceau2=morceau.split("\""     )
        morceau2propre=""     
        j=1
        for partie in morceau2:
            if j%2==1:
                """On continue le traitement en cherchant les # hors chaine (commentaires)
qu'on remplace temporairement par |&|

"""     


                partiepropre=partie.replace("#"     ,"|&|"     )
                for mot in motsclefs:
                    for av in avant:
                        for ap in apres:
                            partiepropre=partiepropre.replace(av+mot+ap,av+motsclefstyle+mot+"</span>"     +ap)
                for mot in natives:
                    for av in avant:
                        for ap in apres:
                            partiepropre=partiepropre.replace(av+mot+ap,av+nativestyle+mot+"</span>"     +ap)
                morceau2propre+=partiepropre
            else:
                morceau2propre=morceau2propre+"<span style=\"color:#04B404\">\""      \
                +html.escape(partie,quote=True)+"\" </span>"     
            j+=1
                
        texte+=morceau2propre
    else:
        texte=texte+"<span style=\"color:#04B404\">\"\"\""      +html.escape(morceau,quote=True)+"\"\"\" </span>"     
    i+=1


""" reste à verifier ligne par ligne les mots clefs et les commentaires"""     
lignes=texte.split("\n"     )
texte=""     
for ligne in lignes:
    lignefinale=""     
    demi=ligne.split("|&|"     ,1)
    lignefinale=demi[0]
    for mot in motsclefs:
        for x in apres:
            if demi[0].find(mot+x)==0:
                lignefinale=motsclefstyle+mot+x+"</span>"     +demi[0][len(mot)+len(x):]
               
    for mot in natives:
         for x in apres:
            if demi[0].find(mot+x)==0:
                lignefinale=nativestyle+mot+x+"</span>"     +demi[0][len(mot)+len(x):]
    texte+=lignefinale
    if len(demi)>1:
        texte=texte+"<span style=\"color:red\">|&|"     +demi[1]+"</span>\n"     
    else:
        texte=texte+"\n"     

        
texte=intro+texte+fin

                  
#postraitement
texte=texte.replace("|@@|"     ,"\\\""     )
texte=texte.replace("|&|"     ,"#"     )
if nom!=""      and sources!=""     :
                  texte=texte+"<p style=\"text-align:right; width:600px; margin-top:2px; \"><em><a style=\"color:grey;\" href=\""     +sources+"\">"     +nom+"</a></em></p>"     
elif nom!=""      and sources==""     :
                  texte=texte+"<p style=\"text-align:right;width:600px;margin-top:2px; color:grey;\"><em>"     +nom+"</em></p>"     
                  

fichier=open("py.htm"     ,"w"     )
fichier.write(texte)
fichier.close()
#vershtml.py version 1.1.1


Ce code c'est quoi?

Les problématiques étaient les suivantes :

Ma solution :

Ma solution consiste en une application Python sommaire qui, exécutée dans un répertoire, va lire le code Python dans un fichier texte (py.txt) et écrire dans un autre fichier texte (py.htm) ce même code mais traduis en html.

Mode d'emploi :

Prérequis:

L'utilisateur dispose d'un fichier exemple.py et aimerait récupérer son contenu pour le publier en html.

L'utilisateur dispose de Python installé sur son ordinateur.

La démarche pas à pas:

Remarques

Pour l'instant cette application ne gère pas les 'simples quotes' pour les chaines de caractères.

Note de version

La dernière version est la 1.1.1 :

Ajout du caractère ":" dans la liste apres pour corriger un bug de coloration syntaxique du code else:

N'hésitez pas à me contacter si vous detectez la moindre imperfection, ou si vous imaginez une amélioration potentielle !

Open Sources et gratuité n'empêche ni les dons ni les remerciements

Un euros ou deux pour m'aider à payer le serveur ? Merci d'avance!