7
7
:copyright: Copyright 2017 by Yongping Guo
8
8
:license: BSD, see LICENSE for details.
9
9
"""
10
+ from __future__ import print_function
10
11
11
12
import re , os
12
13
import codecs
@@ -76,7 +77,7 @@ class Ditaa(directives.images.Image):
76
77
77
78
def run (self ):
78
79
if self .arguments :
79
- print self .arguments
80
+ print ( self .arguments )
80
81
document = self .state .document
81
82
if self .content :
82
83
return [document .reporter .warning (
@@ -119,11 +120,13 @@ def run(self):
119
120
120
121
def render_ditaa (app , code , options , format , prefix = 'ditaa' ):
121
122
"""Render ditaa code into a PNG output file."""
122
- hashkey = code .encode ('utf-8' ) + str (options ) + \
123
+ # ditaa expects UTF-8 by default
124
+ code = code .encode ('utf-8' )
125
+ hashkey = str (code ) + str (options ) + \
123
126
str (app .builder .config .ditaa ) + \
124
127
str (app .builder .config .ditaa_args )
125
- infname = '%s-%s.%s' % (prefix , sha (hashkey ).hexdigest (), "ditaa" )
126
- outfname = '%s-%s.%s' % (prefix , sha (hashkey ).hexdigest (), "png" )
128
+ infname = '%s-%s.%s' % (prefix , sha (hashkey . encode ( 'utf-8' ) ).hexdigest (), "ditaa" )
129
+ outfname = '%s-%s.%s' % (prefix , sha (hashkey . encode ( 'utf-8' ) ).hexdigest (), "png" )
127
130
128
131
rel_imgpath = (format == "html" ) and relative_uri (app .builder .env .docname , app .builder .imagedir ) or ''
129
132
infullfn = path .join (app .builder .outdir , app .builder .imagedir , infname )
@@ -135,25 +138,23 @@ def render_ditaa(app, code, options, format, prefix='ditaa'):
135
138
return outrelfn , outfullfn
136
139
137
140
ensuredir (path .dirname (outfullfn ))
138
- # ditaa expects UTF-8 by default
139
- if isinstance (code , unicode ): code = code .encode ('utf-8' )
140
141
141
142
ditaa_args = [app .builder .config .ditaa ]
142
143
ditaa_args .extend (app .builder .config .ditaa_args )
143
144
ditaa_args .extend (options )
144
145
ditaa_args .extend ( [infname , outfname ] ) # use relative path
145
- f = open (infullfn , 'w ' )
146
- f .write (code . encode ( 'utf-8' ) )
147
- f .close ()
146
+ f = open (infullfn , 'wb ' )
147
+ f .write (code )
148
+ f .close ()
148
149
currpath = os .getcwd ()
149
150
os .chdir (path .join (app .builder .outdir , app .builder .imagedir ))
150
151
151
152
try :
152
153
if app .builder .config .ditaa_log_enable :
153
- print "rending %s" % (outfullfn )
154
+ print ( "rending %s" % (outfullfn ) )
154
155
#app.builder.warn(ditaa_args)
155
156
p = Popen (ditaa_args , stdout = PIPE , stdin = PIPE , stderr = PIPE )
156
- except OSError , err :
157
+ except OSError as err :
157
158
if err .errno != ENOENT : # No such file or directory
158
159
raise
159
160
app .builder .warn ('ditaa command %r cannot be run (needed for ditaa '
@@ -169,11 +170,11 @@ def render_ditaa(app, code, options, format, prefix='ditaa'):
169
170
# Ditaa may close standard input when an error occurs,
170
171
# resulting in a broken pipe on communicate()
171
172
stdout , stderr = p .communicate (code )
172
- except OSError , err :
173
+ except OSError as err :
173
174
if err .errno != EPIPE :
174
175
raise
175
176
wentWrong = True
176
- except IOError , err :
177
+ except IOError as err :
177
178
if err .errno != EINVAL :
178
179
raise
179
180
wentWrong = True
0 commit comments