1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 """ Pakiet generowania plikow jezyka Python. """
20
21 import abc
22
23 TABULATOR = ' '
24
25 -class Line(object):
26 """ Generowanie linni kodu. """
28 self.text = text
29 self.tab = tab
31 """ Pobranie tekstu kodu. """
32 return self.text
34 """ Ustawienie ilosci tabulacji w linni. """
35 self.tab = tab
36
39 """ Klasa bazowa obiektow generujacych kod. """
40 __metaclass__ = abc.ABCMeta
41 @staticmethod
42 - def cout(text, tab, enter=True):
43 """ Zwraca fragment kodu z odpowiednim odstepem. """
44 result = ""
45 for i in range(tab):
46 result += TABULATOR
47 result = result + text
48 if enter == True:
49 result = result + "\n"
50 return result
51 @abc.abstractmethod
53 """ Renderowanie elementu. """
54 raise NotImplementedError()
55
57 """ Klasa obiektu renderujacego funkcje. """
59 """ Metoda inicjalizujaca. """
60 self.name = name
61 self.args = args
62 self.line = []
64 """ Dodanie linni kodu w funkcji. """
65 self.line.append(DefRenderer.cout(text, tab, False))
67 """ Renderowanie funkcji. """
68 result = DefRenderer.cout("def %s(%s):" % (self.name, self.args), tab)
69 i = 0
70 for once in self.line:
71 result = result + DefRenderer.cout(once, tab + 1)
72 i = i + 1
73 if i == 0:
74 result = result + DefRenderer.cout("pass", tab + 1)
75 result = result + "\n"
76 return result
77
79 """ Klasa obiektu generujacego importy. """
83 """ Dodanie pojedynczego importu. """
84 if from_import == None:
85 self.imports.append("import %s" % imp)
86 else:
87 self.imports.append("from %s import %s" % (from_import, imp))
89 """ Renderowanie importow. """
90 result = ''
91 imp = set(self.imports)
92 for once in imp:
93 result = result + self.cout(once, tab)
94 return result
95