3 import sys
, os
, os
.path
, cgi
, StringIO
, codecs
, glob
4 import keyword
, token
, tokenize
6 from zope
.pagetemplate
.pagetemplatefile
import PageTemplateFile
12 _KEYWORD
= token
.NT_OFFSET
14 tokclasses
= {token
.NUMBER
: 'number',
16 token
.STRING
: 'string',
17 tokenize
.COMMENT
: 'comment',
23 def __init__(self
, input, output
):
27 self
.output
.write("<pre id=python>")
28 tokenize
.tokenize(input.readline
, self
.tokeneater
)
29 if self
.tokclass
is not None:
30 self
.output
.write('</span>')
31 self
.output
.write("</pre>\n")
33 def tokeneater(self
, toktype
, toktext
, (srow
, scol
), (erow
, ecol
), line
):
34 if toktype
== token
.ERRORTOKEN
:
35 raise RuntimeError("ErrorToken occured")
36 if toktype
in [token
.NEWLINE
, tokenize
.NL
]:
37 self
.output
.write('\n')
40 # map token type to a color group
41 if token
.LPAR
<= toktype
and toktype
<= token
.OP
:
43 elif toktype
== token
.NAME
and keyword
.iskeyword(toktext
):
47 assert scol
>= self
.col
48 self
.output
.write(" "*(scol
-self
.col
))
51 tokclass
= tokclasses
[toktype
]
54 if self
.tokclass
is not None and tokclass
!= self
.tokclass
:
55 self
.output
.write('</span>')
56 if tokclass
is not None and tokclass
!= self
.tokclass
:
57 self
.output
.write('<span class="%s">' % tokclass
)
58 self
.output
.write(cgi
.escape(toktext
))
59 self
.tokclass
= tokclass
61 # calculate new column position
62 self
.col
= scol
+ len(toktext
)
63 newline
= toktext
.rfind("\n")
65 self
.col
= len(toktext
) - newline
- 1
70 def __init__(self
, name
):
71 if name
.startswith("./"):
74 relname
= os
.path
.join("..", "examples", name
)
75 htmlbuffer
= StringIO
.StringIO()
76 py2html(codecs
.open("%s.py" % relname
, encoding
="iso-8859-1"), htmlbuffer
)
77 self
.code
= htmlbuffer
.getvalue()
78 self
.png
= "%s.png" % os
.path
.basename(name
)
79 self
.width
, self
.height
= Image
.open("%s.png" % relname
).size
81 for suffix
in ["py", "dat", "eps"]:
83 filesize
= "%.1f KB" % (os
.path
.getsize("%s.%s" % (relname
, suffix
)) / 1024.0)
87 self
.downloads
.append({"filename": "%s.%s" % (name
, suffix
),
89 "iconname": "%s.png" % suffix
})
92 class MyPageTemplateFile(PageTemplateFile
):
94 def write(self
, text
):
95 if isinstance(text
, str):
96 text
= unicode(text
, encoding
="iso-8859-1")
97 return PageTemplateFile
.write(self
, text
)
100 def mkrellink(linkname
, options
):
101 # returns a string containing the relative url for linkname (an absolute url)
102 pagename
= options
["pagename"]
103 while linkname
.find("/") != -1 and pagename
.find("/") != -1:
104 linknamefirst
, linknameother
= linkname
.split("/", 1)
105 pagenamefirst
, pagenameother
= pagename
.split("/", 1)
106 if linknamefirst
== pagenamefirst
:
107 linkname
= linknameother
108 pagename
= pagenameother
111 for i
in pagename
.split("/")[:-1]:
112 linkname
= "../" + linkname
115 maintemplate
= MyPageTemplateFile("maintemplate.pt")
118 newsdom
= xml
.dom
.minidom
.parse("news.pt")
119 news
= "".join(["%s%s" % (dt
.toxml(), dd
.toxml())
120 for dt
, dd
in zip(newsdom
.getElementsByTagName("dt")[:latestnews
],
121 newsdom
.getElementsByTagName("dd")[:latestnews
])])
123 for ptname
in glob
.glob("*.pt"):
124 if ptname
in ["maintemplate.pt", "examples.pt"]:
126 htmlname
= "%s.html" % ptname
[:-3]
128 template
= MyPageTemplateFile(ptname
)
129 content
= template(pagename
=htmlname
,
130 maintemplate
=maintemplate
,
133 version
=pyx
.__version
__,
135 codecs
.open("build/%s" % htmlname
, "w", encoding
="iso-8859-1").write(content
)
137 examplestemplate
= MyPageTemplateFile("examples.pt")
138 examplepages
= [item
[:-2] for item
in open("../examples/INDEX").readlines() if item
[-2] == "/"]
140 for dir in ["."] + examplepages
:
142 abstract
= open("../examples/%s/README" % dir).read().replace("__version__", pyx
.__version
__).replace("\PyX{}", "PyX")
145 examples
= [example(dir + "/" + item
.strip()) for item
in open("../examples/%s/INDEX" % dir).readlines() if item
[-2] != "/"]
147 htmlname
= "examples/%s/index.html" % dir
149 htmlname
= "examples/index.html"
151 content
= examplestemplate(pagename
=htmlname
,
152 maintemplate
=maintemplate
,
155 examplepages
=examplepages
,
157 codecs
.open("build/%s" % htmlname
, "w", encoding
="iso-8859-1").write(content
)