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
, basename
, dir=None):
73 name
= os
.path
.join(dir, basename
)
76 relname
= os
.path
.join("..", "examples", name
)
77 htmlbuffer
= StringIO
.StringIO()
78 py2html(codecs
.open("%s.py" % relname
, encoding
="iso-8859-1"), htmlbuffer
)
79 self
.code
= htmlbuffer
.getvalue()
80 self
.png
= "%s.png" % basename
81 self
.width
, self
.height
= Image
.open("%s.png" % relname
).size
83 for suffix
in ["py", "dat", "jpg", "eps", "pdf"]:
85 filesize
= "%.1f KB" % (os
.path
.getsize("%s.%s" % (relname
, suffix
)) / 1024.0)
89 self
.downloads
.append({"filename": "%s.%s" % (basename
, suffix
),
90 "suffixname": ".%s" % suffix
,
92 "iconname": "%s.png" % suffix
})
95 class MyPageTemplateFile(PageTemplateFile
):
97 def write(self
, text
):
98 if isinstance(text
, str):
99 text
= unicode(text
, encoding
="iso-8859-1")
100 return PageTemplateFile
.write(self
, text
)
103 def mkrellink(linkname
, options
):
104 # returns a string containing the relative url for linkname (an absolute url)
105 pagename
= options
["pagename"]
106 while linkname
.find("/") != -1 and pagename
.find("/") != -1:
107 linknamefirst
, linknameother
= linkname
.split("/", 1)
108 pagenamefirst
, pagenameother
= pagename
.split("/", 1)
109 if linknamefirst
== pagenamefirst
:
110 linkname
= linknameother
111 pagename
= pagenameother
114 for i
in pagename
.split("/")[:-1]:
115 linkname
= "../" + linkname
118 maintemplate
= MyPageTemplateFile("maintemplate.pt")
121 newsdom
= xml
.dom
.minidom
.parse("news.pt")
122 news
= "".join(["%s%s" % (dt
.toxml(), dd
.toxml())
123 for dt
, dd
in zip(newsdom
.getElementsByTagName("dt")[:latestnews
],
124 newsdom
.getElementsByTagName("dd")[:latestnews
])])
126 for ptname
in glob
.glob("*.pt"):
127 if ptname
in ["maintemplate.pt", "examples.pt"]:
129 htmlname
= "%s.html" % ptname
[:-3]
130 template
= MyPageTemplateFile(ptname
)
131 content
= template(pagename
=htmlname
,
132 maintemplate
=maintemplate
,
135 version
=pyx
.__version
__,
137 codecs
.open("build/%s" % htmlname
, "w", encoding
="iso-8859-1").write(content
)
139 examplestemplate
= MyPageTemplateFile("examples.pt")
140 examplepages
= [item
[:-2]
141 for item
in open("../examples/INDEX").readlines()
144 for dir in [None] + examplepages
:
145 srcdir
= "../examples"
148 srcdir
= os
.path
.join(srcdir
, dir)
149 destdir
= os
.path
.join(destdir
, dir)
151 abstract
= open(os
.path
.join(srcdir
, "README")).read()
154 abstract
= abstract
.replace("__version__", pyx
.__version
__).replace("\PyX{}", "PyX").replace("\TeX{}", "TeX").replace("\LaTeX{}", "LaTeX").replace("\n\n", "<br><br>")
155 examples
= [example(item
.strip(), dir)
156 for item
in open(os
.path
.join(srcdir
, "INDEX")).readlines()
158 htmlname
= os
.path
.join(destdir
, "index.html")
159 content
= examplestemplate(pagename
=htmlname
,
160 maintemplate
=maintemplate
,
163 examplepages
=examplepages
,
165 codecs
.open("build/%s" % htmlname
, "w", encoding
="iso-8859-1").write(content
)