diff options
Diffstat (limited to 'texall')
| -rwxr-xr-x | texall | 154 |
1 files changed, 80 insertions, 74 deletions
@@ -44,7 +44,7 @@ class TexallOptionParser(OptionParser): dest="interactionmode", choices=("batchmode", "nonstopmode", "scrollmode", "errorstopmode"), help="control the behaviour of latex (on of batchmode (default), nonstopmode (default for -o), scrollmode, errorstopmode)") self.add_option("-I", "--ignore", - action="store", dest="ignorepattern", default=".*vorlage|\.\#|.*-rmligs\.tex$", + action="store", dest="ignorepattern", default=".*vorlage|\\.\\#|.*-rmligs\\.tex$", help="regular expression of filenames to ignore") self.add_option("-P", "--required-pattern", action="store", dest="requiredpattern", default='^\\\\documentclass|^%%% TeX-master: t', @@ -311,7 +311,7 @@ def analyseFile(dirname, filename, analyserclasses, parsetype, fulltext=False, c deppath = texpath(dirname, dep, extlist=extlist) except ValueError, e: continue - if (not recursesystemfiles) and re_systemfile.match(deppath): # skip system files + if (not recursesystemfiles) and re_systemfile.search(deppath): # skip system files continue depname = strippath(deppath, dirname) depdata = analyseFile(dirname, depname, analyserclasses, parsetype, fulltext, cache, True, recursesystemfiles) @@ -330,8 +330,78 @@ def analyseTex(dirname, filename): def analyseLog(dirname, filename): return analyseFile(dirname, filename, loganalysers, "log", fulltext=True, cache=False) +binpath = os.path.expandvars("$PATH") +if binpath == "$PATH": + binpath = os.path.defpath +binpath = binpath.split(os.path.pathsep) +def isinpath(name): + for p in binpath: + if os.path.exists(os.path.join(p, name)): + return True + return False + +if isinpath("rmligs"): + rmligs_name = "rmligs" +elif isinpath("rmligs-german"): + rmligs_name = "rmligs-german" +else: + rmligs_name = "" + error("rmligs", "Command not found. Please install rmligs (or rmligs-german) for optimal results", warning=True) + kpsecache = {} kpseproc = {} +haskpseinter = isinpath("kpseinter") +def kpselookup(lookupname, pathtype, progname): + if not kpsecache.has_key((pathtype,progname)): + kpsecache[(pathtype,progname)] = {} + cache = kpsecache[(pathtype,progname)] + if cache.has_key(lookupname): + if cache[lookupname]: + return cache[lookupname] + else: + raise ValueError("not found by kpathsea: %s"%lookupname) + if not haskpseinter: + kpse=subprocess.Popen(["kpsewhich", "-format", pathtype, "-progname", progname, lookupname], + stdout=subprocess.PIPE, + cwd="/") + (out,err)=kpse.communicate() + if kpse.wait() == 0: + pathname = out[:-1] + cache[lookupname] = pathname + return pathname + else: + cache[lookupname] = None + raise ValueError("not found by kpathsea: %s"%lookupname) + else: + if kpseproc.has_key((pathtype, progname)): + proc, master = kpseproc[(pathtype, progname)] + os.write(master, lookupname + "\n") + else: + master, slave = pty.openpty() + + #turn off echo + attr = termios.tcgetattr(slave) + attr[3] = attr[3] & ~termios.ECHO + termios.tcsetattr(slave, termios.TCSANOW, attr) + + proc = subprocess.Popen(["kpseinter", "--interactive", + "-format", pathtype, + "-progname", progname, + lookupname], + stdout=slave, + stdin=slave, + cwd="/") + kpseproc[(pathtype, progname)] = proc, master + answer = os.read(master, 1024) + while answer and answer[-1] in ("\n", "\r"): + answer = answer[:-2] + if answer != "": + cache[lookupname] = answer + return answer + else: + cache[lookupname] = None + raise ValueError("not found by kpathsea: %s"%lookupname) + def texpath(dirname,filename,pathtype="tex",progname="latex",extlist=("",)): if extlist == None: return filename @@ -345,59 +415,13 @@ def texpath(dirname,filename,pathtype="tex",progname="latex",extlist=("",)): if opts.nokpse: raise ValueError("file not found, not using kpsewhich: %s (extensions: %r)") # call kpsewhich to locate the file - if not kpsecache.has_key((pathtype,progname)): - kpsecache[(pathtype,progname)] = {} - cache = kpsecache[(pathtype,progname)] for ext in extlist: - lookupname = filename + ext - if cache.has_key(lookupname): - if cache[lookupname]: - return cache[lookupname] - else: - continue - else: - if iswindows: - kpse=subprocess.Popen(["kpsewhich", "-format", pathtype, "-progname", progname, lookupname], - stdout=subprocess.PIPE, - cwd=dirname) - (out,err)=kpse.communicate() - if kpse.wait() == 0: - pathname = out[:-1] - cache[lookupname] = pathname - return pathname - else: - cache[lookupname] = None - else: - if kpseproc.has_key((pathtype, progname)): - _, master = kpseproc[(pathtype, progname)] - os.write(master, lookupname + "\n") - else: - master, slave = pty.openpty() - - #turn off echo - attr = termios.tcgetattr(slave) - attr[3] = attr[3] & ~termios.ECHO - termios.tcsetattr(slave, termios.TCSANOW, attr) - - proc = subprocess.Popen(["kpsewhich", "-interactive", - "-format", pathtype, - "-progname", progname, lookupname], - stdout=slave, - stdin=slave, - cwd="/") - kpseproc[(pathtype, progname)] = (proc, master) - if select.select([master], [], [], .05)[0]: - pathname = os.read(master, 1024) - else: - pathname = None - if pathname: - while pathname[-1] in ("\n", "\r"): - pathname = pathname[:-2] - cache[lookupname] = pathname - return pathname - else: - cache[lookupname] = None - raise ValueError("file not found by kpsewhich: %s (extensions: %r)"%(filename,extlist)) + try: + path = kpselookup(filename + ext, pathtype, progname) + return path + except ValueError: + pass + raise ValueError("not found by kpathsea: %s (extensions: %r)"%(filename,extlist)) errors = [] procfiles = [] @@ -459,24 +483,6 @@ def strippath(pathname, start): else: return pathname -binpath = os.path.expandvars("$PATH") -if binpath == "$PATH": - binpath = os.path.defpath -binpath = binpath.split(os.path.pathsep) -def isinpath(name): - for p in binpath: - if os.path.exists(os.path.join(p, name)): - return True - return False - -if isinpath("rmligs"): - rmligs_name = "rmligs" -elif isinpath("rmligs-german"): - rmligs_name = "rmligs-german" -else: - rmligs_name = "" - error("rmligs", "Command not found. Please install rmligs (or rmligs-german) for optimal results", warning=True) - def alltexfiles(arglist): """iterate over all .tex files that are not ignored by -I""" for a in arglist: @@ -864,10 +870,10 @@ try: re_texfile = re.compile(".*\.tex$", re.I) if iswindows: - re_systemfile = re.compile("^?:\\\\Program", re.I) + re_systemfile = re.compile("^?:\\\\Program|\\.(sty|cls)$", re.I) re_nonlocal = re.compile("^?:\\\\") else: - re_systemfile = re.compile("^/usr/") + re_systemfile = re.compile("^/usr/|\\.(sty|cls)$") re_nonlocal = re.compile("^/") re_texcomment = re.compile("(?<!\\\\)%.*?$", re.M) |
