]> git.lyx.org Git - lyx.git/blobdiff - lib/scripts/TeXFiles.py
Fix Python 3 issues when generating preview snippets
[lyx.git] / lib / scripts / TeXFiles.py
index 9e6f6b54898f584d9b9a6d6470cc3b1594bdc1f2..16b7df2e8b2a2ec7e29bab2b4ba42b4a431e1931 100755 (executable)
 # TeX style files      -> option sty
 # bibtex style files   -> option bst
 # bibtex database files -> option bib
+# biblatex bibstyles   -> option bbx
+# biblatex citestyles  -> option cbx
 #
 # with the help
 # of kpsewhich and creates a
-# bstFiles.lst, clsFiles.lst, styFiles.lst, bibFiles.lst
+# bstFiles.lst, clsFiles.lst, styFiles.lst, bibFiles.lst,
+# bbxFiles.lst, cbxFiles.lst
 # without any parameter all files are created.
 #
 # Herbert Voss <voss@perce.org>
 #
 # Updates from Jean-Marc Lasgouttes.
 #
-# bib support added by Juergen Spitzmueller (v0.3)
+# bib, bbx and cbx support added by Juergen Spitzmueller (v0.4)
 #
 # translated to python by Bo Peng, so that the script only 
 # relies on python and kpsewhich (no shell command is used).
 # 
 
+from __future__ import print_function
 import os, sys, re
 
 cls_stylefile = 'clsFiles.lst'
 sty_stylefile = 'styFiles.lst'
 bst_stylefile = 'bstFiles.lst'
 bib_files = 'bibFiles.lst'
+bbx_files = 'bbxFiles.lst'
+cbx_files = 'cbxFiles.lst'
 
 def cmdOutput(cmd):
     '''utility function: run a command and get its output as a string
@@ -51,19 +57,19 @@ def cmdOutput(cmd):
 # processing command line options
 if len(sys.argv) > 1:
     if sys.argv[1] in ['--help', '-help']:
-        print '''Usage: TeXFiles.py [-version | cls | sty | bst | bib ]
+        print('''Usage: TeXFiles.py [-version | cls | sty | bst | bib | bbx| cbx ]
             Default is without any Parameters,
-            so that all files will be created'''
+            so that all files will be created''')
         sys.exit(0)
     else:
         types = sys.argv[1:]
         for type in types:
-            if type not in ['cls', 'sty', 'bst', 'bib']:
-                print 'ERROR: unknown type', type
+            if type not in ['cls', 'sty', 'bst', 'bib', 'bbx', 'cbx']:
+                print('ERROR: unknown type', type)
                 sys.exit(1)
 else:
     # if no parameter is specified, assume all
-    types = ['cls', 'sty', 'bst', 'bib']
+    types = ['cls', 'sty', 'bst', 'bib', 'bbx', 'cbx']
 
 #
 # MS-DOS and MS-Windows define $COMSPEC or $ComSpec and use `;' to separate
@@ -79,7 +85,7 @@ if sys.platform == 'cygwin':
 
 # process each file type
 for type in types:
-    print "Indexing files of type", type
+    print("Indexing files of type", type)
     if type == 'cls':
         outfile = cls_stylefile
         kpsetype = '.tex'
@@ -92,6 +98,12 @@ for type in types:
     elif type == 'bib':
         outfile = bib_files
         kpsetype = '.bib'
+    elif type == 'bbx':
+        outfile = bbx_files
+        kpsetype = '.tex'
+    elif type == 'cbx':
+        outfile = cbx_files
+        kpsetype = '.tex'
 
     dirs = cmdOutput('kpsewhich --show-path=' + kpsetype).replace('!!', '').strip()
     # remove excessive //
@@ -104,11 +116,22 @@ for type in types:
         if not os.path.isdir(dir):
             continue
         # walk down the file hierarchy
-        for root,path,files in os.walk(dir):
+        visited = set()
+        for root,dirs,files in os.walk(dir, followlinks=True):
+            # prevent inifinite recursion
+            recurse = []
+            for dir in dirs:
+                dirname = os.path.join(root, dir)
+                dirname = os.path.realpath(dirname)
+                dirname = os.path.normcase(dirname)
+                if dirname not in visited:
+                    visited.add(dirname)
+                    recurse.append(dir)
+            dirs[:] = recurse
             # check file type
             for file in files:
                 if len(file) > 4 and file[-4:] == file_ext:
                     # force the use of / since miktex uses / even under windows
-                    print >> out, root.replace('\\', '/') + '/' + file
+                    print(root.replace('\\', '/') + '/' + file, file=out)
     out.close()