2 Ce module contient la classe Formatage qui permet le formatage d'une
3 liste de chaines de caractères dans une syntaxe représentative d'un
4 jeu de commandes en un texte présentable
10 Cette classe contient toutes les méthodes nécessaires au formatage
11 de la chaine de caracteres issue d'un generator en un fichier
12 'lisible' ie avec indentations
14 def __init__(self,l_jdc,code=None,mode=None,sep='=',l_max=72):
15 # l_jdc représente le jeu de commandes brut sous forme de liste
28 def formate_jdc(self):
29 for etape in self.l_jdc:
30 self.count = self.count+1
32 if type(etape)==types.ListType:
34 self.indent.append(len(etape[0]))
35 self.indent_courant = self.indent[0]
36 self.texte_etape = '\n' + etape[0]
38 self.formate_etape(etape[1:])
41 self.texte_etape = etape
42 self.jdc_fini = self.jdc_fini + '\n' + self.texte_etape
45 def formate_etape(self,liste):
47 for element in liste :
48 if type(element) == types.ListType:
49 # il s'agit d'un mot-clé facteur
51 longueur = self.longueur(self.texte_etape)
53 increment = len(('\n'+self.indent_courant*' ')*ind + element[0])
58 self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + element[0]
59 length = len(self.indent)
60 self.indent.insert(length,self.indent[length-1]+len(element[0]))
61 self.indent_courant = self.indent[length]
63 self.formate_etape(element[1:])
64 elif type(element) == types.StringType:
65 # il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),'
66 if element == ')' or element == '),':
67 self.texte_etape = self.texte_etape + string.strip(element)
68 length = len(self.indent)
70 last = self.indent[length-1]
71 self.indent.remove(last)
72 self.indent_courant=self.indent[length-2]
74 self.indent_courant=self.indent[0]
76 length = len(self.indent)
78 last = self.indent[length-1]
79 self.indent.remove(last)
80 self.indent_courant=self.indent[length-2]
82 self.indent_courant=self.indent[0]
83 self.texte_etape = self.texte_etape + string.strip(element)
85 longueur = self.longueur(self.texte_etape)
86 increment = len(('\n'+self.indent_courant*' ')*ind + string.strip(element))
87 #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
88 if ((1-ind)*longueur+increment) <= self.l_max :
89 self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
92 nom,valeur = string.split(element,self.sep,1)
93 chaine = self.creer_chaine(nom,valeur,'\n'+self.indent_courant*' ',ind)+','
94 #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(element)
95 self.texte_etape = self.texte_etape + chaine
98 def longueur(self,texte):
100 texte est une string qui peut contenir des retours chariots
101 Cette méthode retourne la longueur de la dernière ligne de texte
103 liste = string.split(texte,'\n')
104 return len(liste[-1])
106 def creer_chaine(self,nom,valeur,increment,ind):
108 if len(increment + nom + self.sep) <= self.l_max:
109 texte = increment*ind
110 label = nom + self.sep
112 longueur = len(increment + label)
113 if len(string.split(valeur,'(')) == 1:
114 # il s'agit d'une vraie chaîne de caractères
116 texte = (self.l_max-2-val)*' '+valeur
119 # il s'agit d'une liste
120 liste = string.split(valeur,',')
123 ajout = string.strip(arg)
124 if len(ajout) == 0 : continue
125 longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment)
126 if longueur <= self.l_max:
128 texte = texte + ajout +','
130 texte = texte + ajout
134 texte = texte + increment + (len(label)+2)*' ' + ajout +','
136 texte = texte + increment + (len(label)+2)*' ' + ajout