Python, la puissance du langage

Pour graffle2svg , j’ai besoin de parser du RTF (format pseudo ouvert). En gros, pour définir les couleurs de police, je dois transformer une déclaration du type

defn= '{\colortbl;\red255\green255\blue255;\red75\green75\blue75;}foo'

en un tableau du type [”#000000”, “#ffffff”, “#4b4b4b”] (le premier point-virgule signifie déclaration vide, donc couleur par défaut).

En python, avec les expressions rationnelles, c’est limpide :

endidx = defn.find("}", startidx)
primitive_reg = re.compile(r"(\D+)(\d+)")
for colordef in defn[startidx-1:endidx-1].split(";"):
    color = {'red':0, 'green':0, 'blue':0}
    for primitivedef in colordef.split('\\'):
         primitive_match = primitive_reg.match(primitivedef)
         if primitive_match is not None:
            primitive, value = primitive_match.groups()
            color[primitive] = int(value)
    self.color.append("#%02x"%color['red'] + "%02x"%color['green'] + "%02x"%color['blue'])

Dix lignes, pas mal !

GodSlayer Saturday 16 October 2010 at 7:25 pm | | Logiciels libres

two comments

Mathieu

“graffle2svg” ? Un autre de tes projets libres ? C’est juste un besoin croisé sur le chemin de progit ? Tu n’apparais pas comme contributeur sur la page du projet…

Mathieu, (URL) - 16-10-’10 21:51
JN

C’est effectivement une étape dans la traduction de progit, pour pouvoir localiser les figures. Je n’apparais pas dans les contributeurs pour la simple et bonne raison que j’ai déjà envoyé des correctifs, mais que les auteurs n’ont pas daigné les intégrer. Je continue mon petit bonhomme de chemin avec un version perso (encore une fois, vive git)

Le plus étonnant dans l’histoire est que le format .graffle est utilisé par l’application Omnigraffle, spécifique à MacOSX. Je m’attendais plutôt à trouver du ps ou du pdf dans les sections texte, pas un format issu de Redmond.

JN, (Email ) (URL) - 17-10-’10 11:43
(optional field)
(optional field)
Remember personal info?
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.