aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtexall154
1 files changed, 80 insertions, 74 deletions
diff --git a/texall b/texall
index 03d6d9c..6951024 100755
--- a/texall
+++ b/texall
@@ -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)