-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgen_3.py
More file actions
106 lines (81 loc) · 2.54 KB
/
gen_3.py
File metadata and controls
106 lines (81 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"""
Python class example.
This module does some more consolidating...
"""
class Element(object):
"""
An element with multiple items in the content
"""
tag = ""
indent = " "
def __init__(self, content=None):
"""
initialize an element and any number of sub-elements and content
:param content: content of the element: single string or another element.
an empty string will be ignored
example:
"""
if not content:
self.children = []
else:
self.children = [content]
def append(self, element):
self.children.append(element)
def render(self, file_out, ind = ""):
"""
an html rendering method for elements that have content
"""
file_out.write("\n")
file_out.write(ind)
file_out.write("<%s"%self.tag)
file_out.write(">")
for child in self.children:
try:
child.render(file_out, ind + self.indent)
except AttributeError:
file_out.write("\n")
file_out.write(ind + self.indent)
file_out.write(str(child))
file_out.write("\n")
file_out.write(ind)
file_out.write('</%s>'%self.tag)
class Html(Element):
tag = "html"
class Head(Element):
tag = "head"
class Body(Element):
tag = "body"
class P(Element):
tag = "p"
class OneLineTag(Element):
def render(self, file_out, ind = ""):
"""
an html rendering method for elements that have attributes and content
"""
file_out.write("\n")
file_out.write(ind)
file_out.write("<%s"%self.tag)
file_out.write(">")
for child in self.children:
try:
child.render(file_out)
except AttributeError:
file_out.write(str(child))
file_out.write('</%s>'%self.tag)
class Title(OneLineTag):
tag = "title"
if __name__ == "__main__":
import sys, cStringIO
page = Html()
head = Head()
head.append(Title("PythonClass = Revision 1087:"))
page.append(head)
body = Body()
body.append(P("Here is a paragraph of text -- there could be more of them, but this is enough to show that we can do some text"))
page.append(body)
f = cStringIO.StringIO()
page.render(f)
f.reset()
print f.read()
f.reset()
open("test_html.html", 'w').write(f.read())