]> git.lyx.org Git - features.git/commitdiff
Update scripts to support simultaneously python 2 and 3
authorJosé Matos <jamatos@lyx.org>
Sat, 28 Apr 2018 09:51:35 +0000 (10:51 +0100)
committerJosé Matos <jamatos@lyx.org>
Sat, 28 Apr 2018 10:03:46 +0000 (11:03 +0100)
The fixes are simple and on line with the changes made during
the 2.3 development. It was an oversight to leave them out.

With this commit all the python scripts should be supported by
python 2 and 3.

lib/scripts/convertDefault.py
lib/scripts/fen2ascii.py
lib/scripts/fig2pdftex.py
lib/scripts/fig2pstex.py
lib/scripts/fig_copy.py
lib/scripts/include_bib.py
lib/scripts/listerrors
lib/scripts/tex_copy.py

index e54b0668881af03fcd052cbbfabe64d1ffb1e62d..9a460b7cf3031e11495f3f68a24e35831ae4dd3d 100644 (file)
 # replacement in ~/.lyx/scripts
 
 # converts an image $2 (format $1) to $4 (format $3)
+from __future__ import print_function
 import os, re, sys
 
+PY2 = sys.version_info[0] == 2
+
 # We may need some extra options only supported by recent convert versions
 re_version = re.compile(r'^Version:.*ImageMagick\s*(\d*)\.(\d*)\.(\d*).*$')
 # imagemagick 7
@@ -31,6 +34,9 @@ if fout.close() != None:
     fout = os.popen('convert -version 2>&1')
     output = fout.readline()
     fout.close()
+if not PY2:
+    output = output.decode()
+
 version = re_version.match(output)
 
 # Imagemagick by default
@@ -63,12 +69,12 @@ if sys.argv[1] == 'pdf' and (version >= 0x060206 or gm):
 if sys.argv[3] == 'ppm' and (im and version >= 0x060305 or gm):
     opts = opts + ' -flatten'
 
-# print >> sys.stdout, command, sys.argv[2], sys.argv[4]
+# print (command, sys.argv[2], sys.argv[4], file= sys.stdout)
 if (im or gm) and os.system(r'%s %s "%s" "%s"' % (command, opts, sys.argv[2], sys.argv[3] + ':' + sys.argv[4])) != 0:
-    print >> sys.stderr, sys.argv[0], 'ERROR'
-    print >> sys.stderr, ('Execution of "%s" failed.' % command)
+    print (sys.argv[0], 'ERROR', file= sys.stderr)
+    print ('Execution of "%s" failed.' % command, file= sys.stderr)
     sys.exit(1)
 elif not im and not gm and sys.platform == 'darwin' and os.system(r'%s "%s" "%s"' % (command, sys.argv[2], sys.argv[4])) != 0:
-    print >> sys.stderr, sys.argv[0], 'ERROR'
-    print >> sys.stderr, ('Execution of "%s" failed.' % command)
+    print (sys.argv[0], 'ERROR', file= sys.stderr)
+    print ('Execution of "%s" failed.' % command, file= sys.stderr)
     sys.exit(1)
index d7f0fb3d775e9ba13f49bce98d17b33c3464b368..74087440e20ed8890bca120435c9fe23b8279086 100644 (file)
@@ -9,6 +9,7 @@
 # This script will convert a chess position in the FEN
 # format to an ascii representation of the position.
 
+from __future__ import print_function
 import sys,string,os
 
 os.close(0)
@@ -26,7 +27,7 @@ comp=string.split(line,'/')
 cont=1
 margin= " "*6
 
-print margin+'   +'+"-"*15+'+'
+print (margin+'   +'+"-"*15+'+')
 for i in range(8):
     cont = cont + 1
     tmp=""
@@ -42,7 +43,7 @@ for i in range(8):
             cont = cont + 1
 
     row = 8 - i
-    print margin, row, tmp+"|"
+    print (margin, row, tmp+"|")
 
-print margin+'   +'+"-"*15+'+'
-print margin+'    a b c d e f g h '
+print (margin+'   +'+"-"*15+'+')
+print (margin+'    a b c d e f g h ')
index 603fd3110363e91374b0ce9089a27f596b0cad01..b458ccd8f3b7f368469162202ec500be2b87ed86 100644 (file)
@@ -26,7 +26,7 @@
 #   the real pdf file will be overwritten by a tex file named file.pdf.
 #
 
-
+from __future__ import print_function
 import os, sys, re
 
 
@@ -35,7 +35,7 @@ def runCommand(cmd):
         run a command, quit if fails
     '''
     if os.system(cmd) != 0:
-        print "Command '%s' fails." % cmd
+        print("Command '%s' fails." % cmd)
         sys.exit(1)
 
 
@@ -78,15 +78,15 @@ else:
     # with tetex.
     epsfile = outbase + '.pstex'
     tmp = mkstemp()
-    boundingboxline = re.compile('%%BoundingBox:\s+(\d*)\s+(\d*)\s+(\d*)\s+(\d*)')
-    for line in open(epsfile).xreadlines():
-        if line[:13] == '%%BoundingBox':
-            (llx, lly, urx, ury) = map(int, boundingboxline.search(line).groups())
+    boundingboxline = re.compile(b'%%BoundingBox:\s+(\d*)\s+(\d*)\s+(\d*)\s+(\d*)')
+    for line in open(epsfile, 'rb'):
+        if line[:13] == b'%%BoundingBox':
+            (llx, lly, urx, ury) = list(map(int, boundingboxline.search(line).groups()))
             width = urx - llx
             height = ury - lly
             xoffset = - llx
             yoffset = - lly
-            tmp.write('''%%%%BoundingBox: 0 0 %d %d
+            tmp.write(b'''%%%%BoundingBox: 0 0 %d %d
 << /PageSize  [%d %d] >> setpagedevice
 gsave %d %d translate
 ''' % (width, height, width, height, xoffset, yoffset))
index aaf3a1bd3afa5323d0b80f7013548d2829400168..90e163de40b2819b3a1d134e1a48b062117afa67 100644 (file)
@@ -26,6 +26,7 @@
 #   the real eps file will be overwritten by a tex file named file.eps.
 #
 
+from __future__ import print_function
 import os, sys
 
 # We expect two args, the names of the input and output files.
@@ -45,5 +46,5 @@ outbase = os.path.splitext(output)[0]
 # Generate the PSTEX_T file
 if os.system('fig2dev -Lpstex %s %s.eps' % (input, outbase)) != 0 or \
   os.system('fig2dev -Lpstex_t -p%s %s %s' % (outbase, input, output)) != 0:
-  print 'fig2dev fails'
+  print ('fig2dev fails')
   sys.exit(1)
index d5e0421668558dff0f7cd9949f412f268ac6981b..a398c1dbf526b249b34098dddec5f40aa0e58fbd 100644 (file)
 # picture files that are stored as relative paths are replaced
 # with the absolute path.
 
+from __future__ import print_function
 import os, sys
 
 if len(sys.argv) != 3:
-    print >> sys.stderr, "Usage: fig_copy.py <from file> <to file>"
+    print ("Usage: fig_copy.py <from file> <to file>", file=sys.stderr)
     sys.exit(1)
 
 if not os.path.isfile(sys.argv[1]):
-    print >> sys.stderr, "Unable to read", sys.argv[1]
+    print ("Unable to read", sys.argv[1], file=sys.stderr)
     sys.exit(1)
 
 from_dir = os.path.split(os.path.realpath(sys.argv[1]))[0]
@@ -45,14 +46,14 @@ import re
 # We're looking for a line of text that defines an entry of
 # type '2' (a polyline), subtype '5' (an external picture file).
 # The line has 14 other data fields.
-patternline = re.compile(r'^\s*2\s+5(\s+[0-9.+-]+){14}\s*$')
-emptyline   = re.compile(r'^\s*$')
-commentline = re.compile(r'^\s*#.*$')
+patternline = re.compile(br'^\s*2\s+5(\s+[0-9.+-]+){14}\s*$')
+emptyline   = re.compile(br'^\s*$')
+commentline = re.compile(br'^\s*#.*$')
 # we allow space in path name
-figureline  = re.compile(r'^(\s*[01]\s*)(\S[\S ]*)(\s*)$')
+figureline  = re.compile(br'^(\s*[01]\s*)(\S[\S ]*)(\s*)$')
 
-input = open(sys.argv[1], 'r')
-output = open(sys.argv[2], 'w')
+input = open(sys.argv[1], 'rb')
+output = open(sys.argv[2], 'wb')
 
 # path in the fig is relative to this path
 os.chdir(from_dir)
@@ -68,7 +69,7 @@ for line in input:
         found = False
     elif patternline.match(line):
         found = True
-    print >> output, line,
+    output.write(line)
 
 input.close()
 output.close()
index 54053558cee6bad8732bb6cf7d7336983d3b55c9..7e14d13579472dfe239d88066ab9e11d38e4ea91 100644 (file)
@@ -8,25 +8,26 @@
 
 # Full author contact details are available in file CREDITS
 
-# This script is intended to include a BibTeX-generated biblography 
+# This script is intended to include a BibTeX-generated biblography
 # in a LaTeX file, as publishers often want. It can be run manually
 # on an exported LaTeX file, though it needs to be compiled first,
 # so the bbl file will exist.
 #
 # It should also be possible to create a LyX converter to run this
-# automatically. To set it up, create a format "ltxbbl"; make sure to 
-# check it as a document format. Then create a LaTeX-->ltxbbl converter, 
+# automatically. To set it up, create a format "ltxbbl"; make sure to
+# check it as a document format. Then create a LaTeX-->ltxbbl converter,
 # with the command:
 #   python -tt $$s/scripts/include_bib.py $$i $$o
 # and give it the flags:
 #   needaux,nice
 # You'll then have it in the export menu.
-# 
+#
 # We do not activate this converter by default, because there are problems
 # when one tries to use multiple bibliographies.
 #
 # Please report any problems on the devel list.
 
+from __future__ import print_function
 import sys, os
 
 class secbib:
@@ -42,7 +43,7 @@ class BibError(Exception):
     return self.msg
 
 
-def InsertBib(fil, out):   
+def InsertBib(fil, out):
   ''' Inserts the contents of the .bbl file instead of the bibliography in a new .tex file '''
 
   texlist = open(fil, 'r').readlines()
@@ -50,7 +51,7 @@ def InsertBib(fil, out):
   # multiple bibliographies
   biblist = []
   stylist = []
-  
+
   for i, line in enumerate(texlist):
     if "\\bibliographystyle" in line:
       stylist.append(i)
@@ -58,7 +59,7 @@ def InsertBib(fil, out):
       biblist.append(i)
     elif "\\begin{btSect}" in line:
       raise BibError("Cannot export sectioned bibliographies")
-  
+
   if len(biblist) > 1:
     raise BibError("Cannot export multiple bibliographies.")
   if not biblist:
@@ -70,21 +71,21 @@ def InsertBib(fil, out):
   bbllist = open(bblfile, 'r').readlines()
   newlist += bbllist
   newlist += texlist[bibpos + 1:]
-    
+
   outfile = open(out, 'w')
   outfile.write("".join(newlist))
   outfile.close()
   return out
-    
+
 
 def usage():
-  print r'''
+  print (r'''
 Usage: python include_bib.py file.tex [outfile.tex]
   Includes the contents of file.bbl, which must exist in the
   same directory as file.tex, in place of the \bibliography
   command, and creates the new file outfile.tex. If no name
   for that file is given, we create: file-bbl.tex.
-'''  
+''')
 
 if __name__ == "__main__":
   args = len(sys.argv)
@@ -95,7 +96,7 @@ if __name__ == "__main__":
   # we might should make sure this is a tex file....
   infile = sys.argv[1]
   if infile[-4:] != ".tex":
-    print "Error: " + infile + " is not a TeX file"
+    print ("Error: " + infile + " is not a TeX file")
     usage()
     sys.exit(1)
 
@@ -105,4 +106,4 @@ if __name__ == "__main__":
     outfile = infile[:-4] + "-bbl.tex"
 
   newfile = InsertBib(infile, outfile)
-  print "Wrote " + outfile
+  print ("Wrote " + outfile)
index 473f7ff003d95ae3a6267fe2380b5272e5b81a2a..232e5422c884c484b5deee0bc19ae1153bbd69e9 100755 (executable)
@@ -22,20 +22,21 @@ Bernard Michael Hurley <berhardh@westherts.ac.uk>
     modifications to original listerrors."""
 __copyright__ = "Copyright 2002 - Kayvan A. Sylvan."
 
+from __future__ import print_function
 import sys, string
 
 def write_error(msg, tool = "noweb", line_number = 1):
   """Write out the given message in TeX error style.
 
   called like: write_error(msg, tool, line_number)."""
-  print "! Build Error: ==> %s ==>\n" % (tool),
-  print " ...\n\nl.%d ...\n" % (line_number),
+  print ("! Build Error: ==> %s ==>" % tool)
+  print (" ...\n\nl.%d ..." % line_number)
   if type(msg) == type("str"): # simple string
-    print msg
+    print (msg)
   else: # some kind of list (sequence or tuple)
     for m in msg:
-        if m != "": print m,
-    print
+        if m != "": print (m, end=" ")
+    print ()
 
 __lines = [] # lines pushed back
 
@@ -62,12 +63,13 @@ def main():
 
   Reads stdin and writes to stdout. Filter errors"""
 
-  while 1:
+  while True:
     line = getline()
     if line == "": break
     try_patterns_dispatch = [ noweb_try, gcc_try, xlc_try ]
     for predicate in try_patterns_dispatch:
       if predicate(line): break
+
 def noweb_try(line):
   """see if line is a noweb error.
 
index 42ac7a7c4bb7b78294d8f1d1e827523ae4b2d419..bb0cc68b72acff179150f2169059546e9b9befa8 100644 (file)
@@ -52,6 +52,10 @@ def main(argv):
     latex_file = argv[3]
     latex_base, latex_ext = os.path.splitext(latex_file)
 
+    # convert strings to bytes since we are using binary files
+    from_base = from_base.encode()
+    latex_base = latex_base.encode()
+
     # Read the input file and write the output file
     if(not os.path.isfile(abs_from_file)):
          error("%s is not a valid file.\n" % abs_from_file)