]> granicus.if.org Git - python/commitdiff
Whitespace normalization.
authorTim Peters <tim.peters@gmail.com>
Wed, 17 Jan 2001 08:48:39 +0000 (08:48 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 17 Jan 2001 08:48:39 +0000 (08:48 +0000)
57 files changed:
Lib/shlex.py
Tools/idle/CallTipWindow.py
Tools/idle/CallTips.py
Tools/idle/ClassBrowser.py
Tools/idle/Debugger.py
Tools/idle/Delegator.py
Tools/idle/FileList.py
Tools/idle/FormatParagraph.py
Tools/idle/IdleConf.py
Tools/idle/IdleHistory.py
Tools/idle/MultiScrolledLists.py
Tools/idle/MultiStatusBar.py
Tools/idle/OutputWindow.py
Tools/idle/ParenMatch.py
Tools/idle/PathBrowser.py
Tools/idle/PyShell.py
Tools/idle/RemoteInterp.py
Tools/idle/ScriptBinding.py
Tools/idle/ScrolledList.py
Tools/idle/Separator.py
Tools/idle/StackViewer.py
Tools/idle/ToolTip.py
Tools/idle/WindowList.py
Tools/scripts/byteyears.py
Tools/scripts/checkpyc.py
Tools/scripts/classfix.py
Tools/scripts/copytime.py
Tools/scripts/dutree.py
Tools/scripts/findlinksto.py
Tools/scripts/fixcid.py
Tools/scripts/fixheader.py
Tools/scripts/fixps.py
Tools/scripts/ftpmirror.py
Tools/scripts/gencodec.py
Tools/scripts/h2py.py
Tools/scripts/ifdef.py
Tools/scripts/linktree.py
Tools/scripts/lll.py
Tools/scripts/logmerge.py
Tools/scripts/mailerdaemon.py
Tools/scripts/methfix.py
Tools/scripts/mkreal.py
Tools/scripts/nm2def.py
Tools/scripts/objgraph.py
Tools/scripts/parseentities.py
Tools/scripts/pathfix.py
Tools/scripts/pdeps.py
Tools/scripts/pindent.py
Tools/scripts/ptags.py
Tools/scripts/redemo.py
Tools/scripts/suff.py
Tools/scripts/sum5.py
Tools/scripts/texi2html.py
Tools/scripts/trace.py
Tools/scripts/treesync.py
Tools/scripts/which.py
Tools/scripts/xxci.py

index 2d7d68a79a7fe92b02ecbb625470f910534843a6..d90a0b9dc47db34ad8ff483cb11e138924fa908e 100644 (file)
@@ -1,14 +1,14 @@
 """A lexical analyzer class for simple shell-like syntaxes."""
 
-# Module and documentation by Eric S. Raymond, 21 Dec 1998 
+# Module and documentation by Eric S. Raymond, 21 Dec 1998
 # Input stacking and error message cleanup added by ESR, March 2000
-# push_source() and pop_source() made explicit by ESR, January 2001. 
+# push_source() and pop_source() made explicit by ESR, January 2001.
 
 import os.path
 import sys
 
 class shlex:
-    "A lexical analyzer class for simple shell-like syntaxes." 
+    "A lexical analyzer class for simple shell-like syntaxes."
     def __init__(self, instream=None, infile=None):
         if instream:
             self.instream = instream
@@ -101,7 +101,7 @@ class shlex:
                 self.lineno = self.lineno + 1
             if self.debug >= 3:
                 print "shlex: in state", repr(self.state), \
-                      "I see character:", repr(nextchar) 
+                      "I see character:", repr(nextchar)
             if self.state is None:
                 self.token = ''        # past end of file
                 break
@@ -136,14 +136,14 @@ class shlex:
                 if nextchar == self.state:
                     self.state = ' '
                     break
-                elif not nextchar:     # end of file
+                elif not nextchar:      # end of file
                     if self.debug >= 2:
                         print "shlex: I see EOF in quotes state"
                     # XXX what error should be raised here?
                     raise ValueError, "No closing quotation"
             elif self.state == 'a':
                 if not nextchar:
-                    self.state = None  # end of file
+                    self.state = None   # end of file
                     break
                 elif nextchar in self.whitespace:
                     if self.debug >= 2:
@@ -194,7 +194,7 @@ class shlex:
         return "\"%s\", line %d: " % (infile, lineno)
 
 
-if __name__ == '__main__': 
+if __name__ == '__main__':
     if len(sys.argv) == 1:
         lexer = shlex()
     else:
index cbeab8cc15fc0e0bc4c6bf658f5e2719f47c795b..d253fa5969a9cb3a5161f6b67bb05ac5bc3ca3ef 100644 (file)
@@ -28,7 +28,7 @@ class CallTip:
                       background="#ffffe0", relief=SOLID, borderwidth=1,
                       font = self.widget['font'])
         label.pack()
-                      
+
     def hidetip(self):
         tw = self.tipwindow
         self.tipwindow = None
@@ -53,7 +53,7 @@ class container: # Conceptually an editor_window
         text.event_add("<<calltip-hide>>", ")")
         text.bind("<<calltip-show>>", self.calltip_show)
         text.bind("<<calltip-hide>>", self.calltip_hide)
-        
+
         text.focus_set()
         # root.mainloop() # not in idle
 
index 04eccde0b401eaaf75a6a97efdc8e80d9c0ef364..7c5f41c73d55f1b72ad50f7195ddc5aeaa5ef33f 100644 (file)
@@ -45,7 +45,7 @@ class CallTips:
         if self.calltip:
             self.calltip.hidetip()
             self.calltip = None
-        
+
     def paren_open_event(self, event):
         self._remove_calltip_window()
         arg_text = get_arg_text(self.get_object_at_cursor())
@@ -91,9 +91,9 @@ class CallTips:
             namespace = sys.modules.copy()
             namespace.update(__main__.__dict__)
             try:
-                    return eval(word, namespace)
+                return eval(word, namespace)
             except:
-                    pass
+                pass
         return None # Can't find an object.
 
 def _find_constructor(class_ob):
index f4401642587ff984d8096d15afae7c1bb5ad6d88..19f3b7e6003c11634b9e192cb1f21a555ca999a7 100644 (file)
@@ -92,7 +92,7 @@ class ModuleBrowserTreeItem(TreeItem):
 
     def IsExpandable(self):
         return os.path.normcase(self.file[-3:]) == ".py"
-    
+
     def listclasses(self):
         dir, file = os.path.split(self.file)
         name, ext = os.path.splitext(file)
index 267d39f4c2e51fd9634e9f9436017d3791eaaef2..e4591ff6df168d2431bf16add1444877c5715966 100644 (file)
@@ -17,7 +17,7 @@ class Debugger(bdb.Bdb):
         bdb.Bdb.__init__(self)
         self.pyshell = pyshell
         self.make_gui()
-    
+
     def canonic(self, filename):
         # Canonicalize filename -- called by Bdb
         return os.path.normcase(os.path.abspath(filename))
@@ -299,10 +299,10 @@ class Debugger(bdb.Bdb):
         import linecache # Import as late as possible
         line = linecache.getline(filename, lineno)
         if not line:
-                return 'That line does not exist!'
+            return 'That line does not exist!'
         if not self.breaks.has_key(filename):
-                self.breaks[filename] = []
+            self.breaks[filename] = []
         list = self.breaks[filename]
         if not lineno in list:
-                list.append(lineno)
+            list.append(lineno)
         bp = bdb.Breakpoint(filename, lineno, temporary, cond)
index 3665247c97d5c294fcb1fc5a0978868678a4a332..6125591fe0dd1aef5ad67dda101001c8f63b97ae 100644 (file)
@@ -1,4 +1,3 @@
-
 class Delegator:
 
     # The cache is only used to be able to change delegates!
index 079115768450730a488ec808b5ecbb1d7ad37d47..db862a13f675e27a67323d5c0e8a9694b2450aa2 100644 (file)
@@ -26,12 +26,12 @@ class FileList:
 
 
     def goodname(self, filename):
-            filename = self.canonize(filename)
-            key = os.path.normcase(filename)
-            if self.dict.has_key(key):
-                edit = self.dict[key]
-                filename = edit.io.filename or filename
-            return filename
+        filename = self.canonize(filename)
+        key = os.path.normcase(filename)
+        if self.dict.has_key(key):
+            edit = self.dict[key]
+            filename = edit.io.filename or filename
+        return filename
 
     def open(self, filename):
         assert filename
index 76c52f55d186ec55e5f40f3bc916f73a84696657..ea18cc056dd4a2d199fd87a89054bd05087906c2 100644 (file)
@@ -28,10 +28,10 @@ class FormatParagraph:
     keydefs = {
         '<<format-paragraph>>': ['<Alt-q>'],
     }
-    
+
     unix_keydefs = {
         '<<format-paragraph>>': ['<Meta-q>'],
-    } 
+    }
 
     def __init__(self, editwin):
         self.editwin = editwin
index 36cad5110808656f4f5281157cea4fb9ccba31e6..37f4ef1b0c75060188b598ed8096e910d4616807 100644 (file)
@@ -10,24 +10,24 @@ class IdleConfParser(ConfigParser):
     builtin_sections = {}
     for section in ('EditorWindow', 'Colors'):
         builtin_sections[section] = section
-    
+
     def getcolor(self, sec, name):
         """Return a dictionary with foreground and background colors
 
         The return value is appropriate for passing to Tkinter in, e.g.,
         a tag_config call.
         """
-       fore = self.getdef(sec, name + "-foreground")
-       back = self.getdef(sec, name + "-background")
+        fore = self.getdef(sec, name + "-foreground")
+        back = self.getdef(sec, name + "-background")
         return {"foreground": fore,
                 "background": back}
 
     def getdef(self, sec, options, raw=0, vars=None, default=None):
         """Get an option value for given section or return default"""
-       try:
+        try:
             return self.get(sec, options, raw, vars)
-       except (NoSectionError, NoOptionError):
-           return default
+        except (NoSectionError, NoOptionError):
+            return default
 
     def getsection(self, section):
         """Return a SectionConfigParser object"""
@@ -37,10 +37,10 @@ class IdleConfParser(ConfigParser):
         exts = []
         for sec in self.sections():
             if self.builtin_sections.has_key(sec):
-               continue
-           # enable is a bool, but it may not be defined
-           if self.getdef(sec, 'enable') != '0':
-               exts.append(sec)
+                continue
+            # enable is a bool, but it may not be defined
+            if self.getdef(sec, 'enable') != '0':
+                exts.append(sec)
         return exts
 
     def reload(self):
@@ -69,10 +69,10 @@ class SectionConfigParser:
 
     def getint(self, option):
         return self.config.getint(self.section, option)
-    
+
     def getfloat(self, option):
         return self.config.getint(self.section, option)
-    
+
     def getboolean(self, option):
         return self.config.getint(self.section, option)
 
@@ -98,7 +98,7 @@ def load(dir):
         genplatfile = os.path.join(dir, "config-mac.txt")
     else:
         genplatfile = os.path.join(dir, "config-unix.txt")
-        
+
     platfile = os.path.join(dir, "config-%s.txt" % sys.platform)
 
     try:
@@ -110,4 +110,3 @@ def load(dir):
                    os.path.join(homedir, ".idle")))
 
 idleconf = IdleConfParser()
-
index aa41b7319868843066f00e94569b93cac8805838..b882c92c152a1ce44d969004b25141ff017c6131 100644 (file)
@@ -86,4 +86,3 @@ class History:
         self.text.mark_set("insert", "end-1c")
         self.text.insert("insert", s)
         self.text.see("insert")
-
index 32f6246172949936c8073ea09341a2c22d5baa39..6c140df45148a0af2bbacc45703299486f6ae5f1 100644 (file)
@@ -10,7 +10,7 @@ from Separator import HSeparator
 from ScrolledList import ScrolledList
 
 class MultiScrolledLists:
-    
+
     def __init__(self, root, nlists=2):
         assert nlists >= 1
         self.root = root
@@ -51,17 +51,17 @@ class MultiScrolledLists:
         self.fill(0)
         # XXX one after_idle isn't enough; two are...
         top.after_idle(self.call_pack_propagate_1)
-    
+
     def call_pack_propagate_1(self):
         self.top.after_idle(self.call_pack_propagate)
-    
+
     def call_pack_propagate(self):
         for frame in self.frames:
             frame.pack_propagate(0)
-    
+
     def close(self, event=None):
         self.top.destroy()
-    
+
     def settitle(self):
         short = self.shorttitle()
         long = self.longtitle()
@@ -80,23 +80,23 @@ class MultiScrolledLists:
     def longtitle(self):
         # override this
         return "Multi Scrolled Lists"
-    
+
     def shorttitle(self):
         # override this
         return None
-    
+
     def width(self, i):
         # override this
         return 20
-    
+
     def height(self, i):
         # override this
         return 10
-    
+
     def subtitle(self, i):
         # override this
         return "Column %d" % i
-     
+
     def fill(self, i):
         for k in range(i, self.nlists):
             self.lists[k].clear()
@@ -105,14 +105,14 @@ class MultiScrolledLists:
         l = self.items(i)
         for s in l:
             list.append(s)
-        
+
     def on_select(self, index, i):
         item = self.lists[i].get(index)
         del self.path[i:]
         self.path.append(item)
         if i+1 < self.nlists:
             self.fill(i+1)
-   
+
     def items(self, i):
         # override this
         l = []
@@ -122,7 +122,7 @@ class MultiScrolledLists:
                 s = self.path[i-1] + "." + s
             l.append(s)
         return l
-    
+
     def on_double(self, index, i):
         pass
 
index c11db3e0cf8450bc40e353f39241e0709da9e200..dd6d04145f243aa66f0a1d06afd737d6660f63fb 100644 (file)
@@ -1,32 +1,32 @@
 from Tkinter import *
 
 class MultiStatusBar(Frame):
-       
-       def __init__(self, master=None, **kw):
-               if master is None:
-                       master = Tk()
-               apply(Frame.__init__, (self, master), kw)
-               self.labels = {}
 
-       def set_label(self, name, text='', side=LEFT):
-               if not self.labels.has_key(name):
-                       label = Label(self, bd=1, relief=SUNKEN, anchor=W)
-                       label.pack(side=side)
-                       self.labels[name] = label
-               else:
-                       label = self.labels[name]
-               label.config(text=text)
+    def __init__(self, master=None, **kw):
+        if master is None:
+            master = Tk()
+        apply(Frame.__init__, (self, master), kw)
+        self.labels = {}
+
+    def set_label(self, name, text='', side=LEFT):
+        if not self.labels.has_key(name):
+            label = Label(self, bd=1, relief=SUNKEN, anchor=W)
+            label.pack(side=side)
+            self.labels[name] = label
+        else:
+            label = self.labels[name]
+        label.config(text=text)
 
 def _test():
-       b = Frame()
-       c = Text(b)
-       c.pack(side=TOP)
-       a = MultiStatusBar(b)
-       a.set_label("one", "hello")
-       a.set_label("two", "world")
-       a.pack(side=BOTTOM, fill=X)
-       b.pack()
-       b.mainloop()
+    b = Frame()
+    c = Text(b)
+    c.pack(side=TOP)
+    a = MultiStatusBar(b)
+    a.set_label("one", "hello")
+    a.set_label("two", "world")
+    a.pack(side=BOTTOM, fill=X)
+    b.pack()
+    b.mainloop()
 
 if __name__ == '__main__':
-       _test()
+    _test()
index 0c36a881f57c50592f859fbf87771a8c99f65188..3d97362a21ffbee41b24d3d370105e00b4de3835 100644 (file)
@@ -111,17 +111,17 @@ class OnDemandOutputWindow:
         # XXX Should use IdlePrefs.ColorPrefs
         "stdout":  {"foreground": "blue"},
         "stderr":  {"foreground": "#007700"},
-    }   
-    
+    }
+
     def __init__(self, flist):
         self.flist = flist
         self.owin = None
-    
+
     def write(self, s, tags, mark):
         if not self.owin:
             self.setup()
         self.owin.write(s, tags, mark)
-    
+
     def setup(self):
         self.owin = owin = OutputWindow(self.flist)
         text = owin.text
index a607e49a0ed51e579672bc58217925e6273f21a5..17d76c2659c53cd91a00061f031e8e3b96a6850d 100644 (file)
@@ -20,7 +20,7 @@ class ParenMatch:
     """Highlight matching parentheses
 
     There are three supported style of paren matching, based loosely
-    on the Emacs options.  The style is select based on the 
+    on the Emacs options.  The style is select based on the
     HILITE_STYLE attribute; it can be changed used the set_style
     method.
 
@@ -43,9 +43,9 @@ class ParenMatch:
     to the right of a right paren.  I don't know how to do that in Tk,
     so I haven't bothered.
     """
-    
+
     menudefs = []
-    
+
     keydefs = {
         '<<flash-open-paren>>' : ('<KeyRelease-parenright>',
                                   '<KeyRelease-bracketright>',
@@ -146,7 +146,7 @@ class LastOpenBracketFinder:
     indentwidth = AutoIndent.indentwidth
     tabwidth = AutoIndent.tabwidth
     context_use_ps1 = AutoIndent.context_use_ps1
-    
+
     def __init__(self, editwin):
         self.editwin = editwin
         self.text = editwin.text
@@ -158,7 +158,7 @@ class LastOpenBracketFinder:
             startatindex = `startat` + ".0"
             # rawtext needs to contain everything up to the last
             # character, which was the close paren.  the parser also
-           # requires that the last line ends with "\n"
+            # requires that the last line ends with "\n"
             rawtext = self.text.get(startatindex, "insert")[:-1] + "\n"
             y.set_str(rawtext)
             bod = y.find_good_parse_start(
@@ -175,7 +175,7 @@ class LastOpenBracketFinder:
         lno = index2line(self.text.index("insert"))
         i, buf = self._find_offset_in_buf(lno)
         if i is None \
-          or keysym_type(buf[i]) != right_keysym_type:
+           or keysym_type(buf[i]) != right_keysym_type:
             return None
         lines_back = string.count(buf[i:], "\n") - 1
         # subtract one for the "\n" added to please the parser
@@ -189,4 +189,3 @@ class LastOpenBracketFinder:
                   icis=self.editwin.is_char_in_string):
             return icis(startindex + "%dc" % offset)
         return inner
-
index 7ea241096a83183000d627a6bd90d894535e02ac..86cd2707dc11c28c5fb8f8676c8502732d3a70e9 100644 (file)
@@ -6,7 +6,7 @@ from TreeWidget import TreeItem
 from ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
 
 class PathBrowser(ClassBrowser):
-    
+
     def __init__(self, flist):
         self.init(flist)
 
index 06d4f151215f3d8ae13b1e20fc18d6802c4626f1..86c0f6b0ae4bc1f1bee004ee4770542bc06bd731 100644 (file)
@@ -124,7 +124,7 @@ class ModifiedColorDelegator(ColorDelegator):
         "stderr": cconf.getcolor("stderr"),
         "console": cconf.getcolor("console"),
         "ERROR": cconf.getcolor("ERROR"),
-       None: cconf.getcolor("normal"),
+        None: cconf.getcolor("normal"),
     })
 
 
index 3ad574b01d2596f9023febbba2f8e00b88f4ac23..724997c01037cb4dbc7ac9921e638cbf4668ad50 100644 (file)
@@ -9,7 +9,7 @@ VERBOSE = None
 class SocketProtocol:
     """A simple protocol for sending strings across a socket"""
     BUF_SIZE = 8192
-    
+
     def __init__(self, sock):
         self.sock = sock
         self._buffer = ''
@@ -176,11 +176,11 @@ class CommandProtocol:
 
     def decode_seqno(self, buf):
         return struct.unpack("I", buf)[0]
-                
+
 
 class StdioRedirector:
     """Redirect sys.std{in,out,err} to a set of file-like objects"""
-    
+
     def __init__(self, stdin, stdout, stderr):
         self.stdin = stdin
         self.stdout = stdout
@@ -292,7 +292,7 @@ class RIClient:
                 self._cmd.dispatch()
         except EOFError:
             pass
-        
+
     def handle_stdout(self, buf):
         sys.stdout.write(buf)
 ##        sys.stdout.flush()
@@ -339,5 +339,4 @@ if __name__ == "__main__":
         startRemoteInterp(id)
     else:
         file = args[1]
-        riExec(id, file)        
-    
+        riExec(id, file)
index e46cb76274aa1ee052095c437c4ce37004ff8396..b54dfc4c791931a8ec97e27c6aeae119d3a41c49 100644 (file)
@@ -34,13 +34,13 @@ To fix case 2, change all tabs to spaces by using Select All followed \
 by Untabify Region (both in the Edit menu)."""
 
 class ScriptBinding:
-    
+
     keydefs = {
         '<<check-module>>': ['<Alt-F5>', '<Meta-F5>'],
         '<<import-module>>': ['<F5>'],
         '<<run-script>>': ['<Control-F5>'],
     }
-    
+
     menudefs = [
         ('edit', [None,
                   ('Check module', '<<check-module>>'),
index 7fb1c202d58d0b78902d0d2194e7c4de7e84646d..92119365770540d8e5c57673f95f359a581892a3 100644 (file)
@@ -1,7 +1,7 @@
 from Tkinter import *
 
 class ScrolledList:
-    
+
     default = "(None)"
 
     def __init__(self, master, **options):
index 2645e57a37e4c5d6e9070f2c9a8ee843fc7006b6..7145559c7b97ee41b570e33f46361601c5f9e72e 100644 (file)
@@ -1,7 +1,7 @@
 from Tkinter import *
 
 class Separator:
-    
+
     def __init__(self, master, orient, min=10, thickness=5, bg=None):
         self.min = max(1, min)
         self.thickness = max(1, thickness)
@@ -10,14 +10,14 @@ class Separator:
             self.dim = "width"
             self.dir = "x"
             self.cursor = "sb_h_double_arrow"
-       elif orient in ("v", "vertical"):
-           self.side = "top"
-           self.dim = "height"
-           self.dir = "y"
+        elif orient in ("v", "vertical"):
+            self.side = "top"
+            self.dim = "height"
+            self.dir = "y"
             self.cursor = "sb_v_double_arrow"
-       else:
-           raise ValueError, "Separator: orient should be h or v"
-       self.winfo_dim = "winfo_" + self.dim
+        else:
+            raise ValueError, "Separator: orient should be h or v"
+        self.winfo_dim = "winfo_" + self.dim
         self.master = master = Frame(master)
         master.pack(expand=1, fill="both")
         self.f1 = Frame(master)
index 5b3c87a522ed3b1eb83a21c36a77456e64ec8ed7..ab09db016372e697717d51942d4c21c937e036d8 100644 (file)
@@ -100,7 +100,7 @@ class VariablesTreeItem(ObjectTreeItem):
             item = make_objecttreeitem(key + " =", value, setfunction)
             sublist.append(item)
         return sublist
-        
+
 def get_stack(t=None, f=None):
     if t is None:
         t = sys.last_traceback
index 691f5101c1633969d28c4e520a39f028b30a4e1a..eadcdea5a14fa6a1ba466183ffa5700c72b823e8 100644 (file)
@@ -81,7 +81,7 @@ def main():
     b.pack()
     root.update()
     tip = ListboxToolTip(b, ["Hello", "world"])
-    
+
     # root.mainloop() # not in idle
 
 main()
index 6de3e5855c5103f09dd7fa106e973925aaf15dc8..7e05a57c03296ce697f73a18777aad2eb3daf0c0 100644 (file)
@@ -39,7 +39,7 @@ class WindowList:
 
     def unregister_callback(self, callback):
         try:
-           self.callbacks.remove(callback)
+            self.callbacks.remove(callback)
         except ValueError:
             pass
 
index bada5a538abbd5d095f362e2e986d49707ba3249..f67be704a41b40d2f193d6935a74cb6c49952739 100755 (executable)
@@ -12,46 +12,46 @@ from stat import *
 
 # Use lstat() to stat files if it exists, else stat()
 try:
-       statfunc = os.lstat
+    statfunc = os.lstat
 except AttributeError:
-       statfunc = os.stat
+    statfunc = os.stat
 
 # Parse options
 if sys.argv[1] == '-m':
-       itime = ST_MTIME
-       del sys.argv[1]
+    itime = ST_MTIME
+    del sys.argv[1]
 elif sys.argv[1] == '-c':
-       itime = ST_CTIME
-       del sys.argv[1]
+    itime = ST_CTIME
+    del sys.argv[1]
 elif sys.argv[1] == '-a':
-       itime = ST_CTIME
-       del sys.argv[1]
+    itime = ST_CTIME
+    del sys.argv[1]
 else:
-       itime = ST_MTIME
+    itime = ST_MTIME
 
-secs_per_year = 365.0 * 24.0 * 3600.0  # Scale factor
-now = time.time()                      # Current time, for age computations
-status = 0                             # Exit status, set to 1 on errors
+secs_per_year = 365.0 * 24.0 * 3600.0   # Scale factor
+now = time.time()                       # Current time, for age computations
+status = 0                              # Exit status, set to 1 on errors
 
 # Compute max file name length
 maxlen = 1
 for file in sys.argv[1:]:
-       if len(file) > maxlen: maxlen = len(file)
+    if len(file) > maxlen: maxlen = len(file)
 
 # Process each argument in turn
 for file in sys.argv[1:]:
-       try:
-               st = statfunc(file)
-       except os.error, msg:
-               sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
-               status = 1
-               st = ()
-       if st:
-               anytime = st[itime]
-               size = st[ST_SIZE]
-               age = now - anytime
-               byteyears = float(size) * float(age) / secs_per_year
-               print string.ljust(file, maxlen),
-               print string.rjust(`int(byteyears)`, 8)
+    try:
+        st = statfunc(file)
+    except os.error, msg:
+        sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
+        status = 1
+        st = ()
+    if st:
+        anytime = st[itime]
+        size = st[ST_SIZE]
+        age = now - anytime
+        byteyears = float(size) * float(age) / secs_per_year
+        print string.ljust(file, maxlen),
+        print string.rjust(`int(byteyears)`, 8)
 
 sys.exit(status)
index 7be625c3c48643d87d0eb87ec2235ec041ae62ef..b38b456a897a3f121c622ab2ec0e9b1254d44f8b 100755 (executable)
@@ -8,58 +8,58 @@ from stat import ST_MTIME
 import imp
 
 def main():
-       silent = 0
-       verbose = 0
-       if sys.argv[1:]:
-               if sys.argv[1] == '-v':
-                       verbose = 1
-               elif sys.argv[1] == '-s':
-                       silent = 1
-       MAGIC = imp.get_magic()
-       if not silent:
-               print 'Using MAGIC word', `MAGIC`
-       for dirname in sys.path:
-               try:
-                       names = os.listdir(dirname)
-               except os.error:
-                       print 'Cannot list directory', `dirname`
-                       continue
-               if not silent:
-                       print 'Checking', `dirname`, '...'
-               names.sort()
-               for name in names:
-                       if name[-3:] == '.py':
-                               name = os.path.join(dirname, name)
-                               try:
-                                       st = os.stat(name)
-                               except os.error:
-                                       print 'Cannot stat', `name`
-                                       continue
-                               if verbose:
-                                       print 'Check', `name`, '...'
-                               name_c = name + 'c'
-                               try:
-                                       f = open(name_c, 'r')
-                               except IOError:
-                                       print 'Cannot open', `name_c`
-                                       continue
-                               magic_str = f.read(4)
-                               mtime_str = f.read(4)
-                               f.close()
-                               if magic_str <> MAGIC:
-                                       print 'Bad MAGIC word in ".pyc" file',
-                                       print `name_c`
-                                       continue
-                               mtime = get_long(mtime_str)
-                               if mtime == 0 or mtime == -1:
-                                       print 'Bad ".pyc" file', `name_c`
-                               elif mtime <> st[ST_MTIME]:
-                                       print 'Out-of-date ".pyc" file',
-                                       print `name_c`
+    silent = 0
+    verbose = 0
+    if sys.argv[1:]:
+        if sys.argv[1] == '-v':
+            verbose = 1
+        elif sys.argv[1] == '-s':
+            silent = 1
+    MAGIC = imp.get_magic()
+    if not silent:
+        print 'Using MAGIC word', `MAGIC`
+    for dirname in sys.path:
+        try:
+            names = os.listdir(dirname)
+        except os.error:
+            print 'Cannot list directory', `dirname`
+            continue
+        if not silent:
+            print 'Checking', `dirname`, '...'
+        names.sort()
+        for name in names:
+            if name[-3:] == '.py':
+                name = os.path.join(dirname, name)
+                try:
+                    st = os.stat(name)
+                except os.error:
+                    print 'Cannot stat', `name`
+                    continue
+                if verbose:
+                    print 'Check', `name`, '...'
+                name_c = name + 'c'
+                try:
+                    f = open(name_c, 'r')
+                except IOError:
+                    print 'Cannot open', `name_c`
+                    continue
+                magic_str = f.read(4)
+                mtime_str = f.read(4)
+                f.close()
+                if magic_str <> MAGIC:
+                    print 'Bad MAGIC word in ".pyc" file',
+                    print `name_c`
+                    continue
+                mtime = get_long(mtime_str)
+                if mtime == 0 or mtime == -1:
+                    print 'Bad ".pyc" file', `name_c`
+                elif mtime <> st[ST_MTIME]:
+                    print 'Out-of-date ".pyc" file',
+                    print `name_c`
 
 def get_long(s):
-       if len(s) <> 4:
-               return -1
-       return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
+    if len(s) <> 4:
+        return -1
+    return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
 
 main()
index 53ea0b88f13c20d0c8e1b4a9f5e79e73e72c4245..332db1274e0151daad2819a610a51fa0f40470a0 100755 (executable)
@@ -4,9 +4,9 @@
 #
 # Fix Python source files to use the new class definition syntax, i.e.,
 # the syntax used in Python versions before 0.9.8:
-#      class C() = base(), base(), ...: ...
+#       class C() = base(), base(), ...: ...
 # is changed to the current syntax:
-#      class C(base, base, ...): ...
+#       class C(base, base, ...): ...
 #
 # The script uses heuristics to find class definitions that usually
 # work but occasionally can fail; carefully check the output!
@@ -39,113 +39,113 @@ dbg = err
 rep = sys.stdout.write
 
 def main():
-       bad = 0
-       if not sys.argv[1:]: # No arguments
-               err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
-               sys.exit(2)
-       for arg in sys.argv[1:]:
-               if os.path.isdir(arg):
-                       if recursedown(arg): bad = 1
-               elif os.path.islink(arg):
-                       err(arg + ': will not process symbolic links\n')
-                       bad = 1
-               else:
-                       if fix(arg): bad = 1
-       sys.exit(bad)
+    bad = 0
+    if not sys.argv[1:]: # No arguments
+        err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
+        sys.exit(2)
+    for arg in sys.argv[1:]:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-       return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-       dbg('recursedown(' + `dirname` + ')\n')
-       bad = 0
-       try:
-               names = os.listdir(dirname)
-       except os.error, msg:
-               err(dirname + ': cannot list directory: ' + `msg` + '\n')
-               return 1
-       names.sort()
-       subdirs = []
-       for name in names:
-               if name in (os.curdir, os.pardir): continue
-               fullname = os.path.join(dirname, name)
-               if os.path.islink(fullname): pass
-               elif os.path.isdir(fullname):
-                       subdirs.append(fullname)
-               elif ispython(name):
-                       if fix(fullname): bad = 1
-       for fullname in subdirs:
-               if recursedown(fullname): bad = 1
-       return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##     dbg('fix(' + `filename` + ')\n')
-       try:
-               f = open(filename, 'r')
-       except IOError, msg:
-               err(filename + ': cannot open: ' + `msg` + '\n')
-               return 1
-       head, tail = os.path.split(filename)
-       tempname = os.path.join(head, '@' + tail)
-       g = None
-       # If we find a match, we rewind the file and start over but
-       # now copy everything to a temp file.
-       lineno = 0
-       while 1:
-               line = f.readline()
-               if not line: break
-               lineno = lineno + 1
-               while line[-2:] == '\\\n':
-                       nextline = f.readline()
-                       if not nextline: break
-                       line = line + nextline
-                       lineno = lineno + 1
-               newline = fixline(line)
-               if newline != line:
-                       if g is None:
-                               try:
-                                       g = open(tempname, 'w')
-                               except IOError, msg:
-                                       f.close()
-                                       err(tempname+': cannot create: '+\
-                                           `msg`+'\n')
-                                       return 1
-                               f.seek(0)
-                               lineno = 0
-                               rep(filename + ':\n')
-                               continue # restart from the beginning
-                       rep(`lineno` + '\n')
-                       rep('< ' + line)
-                       rep('> ' + newline)
-               if g is not None:
-                       g.write(newline)
-
-       # End of file
-       f.close()
-       if not g: return 0 # No changes
-
-       # Finishing touch -- move files
-
-       # First copy the file's mode to the temp file
-       try:
-               statbuf = os.stat(filename)
-               os.chmod(tempname, statbuf[ST_MODE] & 07777)
-       except os.error, msg:
-               err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-       # Then make a backup of the original file as filename~
-       try:
-               os.rename(filename, filename + '~')
-       except os.error, msg:
-               err(filename + ': warning: backup failed (' + `msg` + ')\n')
-       # Now move the temp file to the original file
-       try:
-               os.rename(tempname, filename)
-       except os.error, msg:
-               err(filename + ': rename failed (' + `msg` + ')\n')
-               return 1
-       # Return succes
-       return 0
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+\
+                        `msg`+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
+
+    # End of file
+    f.close()
+    if not g: return 0 # No changes
+
+    # Finishing touch -- move files
+
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 # This expression doesn't catch *all* class definition headers,
 # but it's pretty darn close.
@@ -159,34 +159,34 @@ baseprog = regex.compile(baseexpr)
 import string
 
 def fixline(line):
-       if classprog.match(line) < 0: # No 'class' keyword -- no change
-               return line
-       
-       (a0, b0), (a1, b1), (a2, b2) = classprog.regs[:3]
-       # a0, b0 = Whole match (up to ':')
-       # a1, b1 = First subexpression (up to classname)
-       # a2, b2 = Second subexpression (=.*)
-       head = line[:b1]
-       tail = line[b0:] # Unmatched rest of line
-       
-       if a2 == b2: # No base classes -- easy case
-               return head + ':' + tail
-       
-       # Get rid of leading '='
-       basepart = line[a2+1:b2]
-
-       # Extract list of base expressions
-       bases = string.splitfields(basepart, ',')
-       
-       # Strip trailing '()' from each base expression
-       for i in range(len(bases)):
-               if baseprog.match(bases[i]) >= 0:
-                       x1, y1 = baseprog.regs[1]
-                       bases[i] = bases[i][x1:y1]
-       
-       # Join the bases back again and build the new line
-       basepart = string.joinfields(bases, ', ')
-       
-       return head + '(' + basepart + '):' + tail
+    if classprog.match(line) < 0: # No 'class' keyword -- no change
+        return line
+
+    (a0, b0), (a1, b1), (a2, b2) = classprog.regs[:3]
+    # a0, b0 = Whole match (up to ':')
+    # a1, b1 = First subexpression (up to classname)
+    # a2, b2 = Second subexpression (=.*)
+    head = line[:b1]
+    tail = line[b0:] # Unmatched rest of line
+
+    if a2 == b2: # No base classes -- easy case
+        return head + ':' + tail
+
+    # Get rid of leading '='
+    basepart = line[a2+1:b2]
+
+    # Extract list of base expressions
+    bases = string.splitfields(basepart, ',')
+
+    # Strip trailing '()' from each base expression
+    for i in range(len(bases)):
+        if baseprog.match(bases[i]) >= 0:
+            x1, y1 = baseprog.regs[1]
+            bases[i] = bases[i][x1:y1]
+
+    # Join the bases back again and build the new line
+    basepart = string.joinfields(bases, ', ')
+
+    return head + '(' + basepart + '):' + tail
 
 main()
index d01643b1811f17ffa14a130383c92ab8da883327..74c29c95ec876b8e0857bdb6dcb9c7c20d690f91 100755 (executable)
@@ -7,19 +7,19 @@ import os
 from stat import ST_ATIME, ST_MTIME # Really constants 7 and 8
 
 def main():
-       if len(sys.argv) <> 3:
-               sys.stderr.write('usage: copytime source destination\n')
-               sys.exit(2)
-       file1, file2 = sys.argv[1], sys.argv[2]
-       try:
-               stat1 = os.stat(file1)
-       except os.error:
-               sys.stderr.write(file1 + ': cannot stat\n')
-               sys.exit(1)
-       try:
-               os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME]))
-       except os.error:
-               sys.stderr.write(file2 + ': cannot change time\n')
-               sys.exit(2)
+    if len(sys.argv) <> 3:
+        sys.stderr.write('usage: copytime source destination\n')
+        sys.exit(2)
+    file1, file2 = sys.argv[1], sys.argv[2]
+    try:
+        stat1 = os.stat(file1)
+    except os.error:
+        sys.stderr.write(file1 + ': cannot stat\n')
+        sys.exit(1)
+    try:
+        os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME]))
+    except os.error:
+        sys.stderr.write(file2 + ': cannot change time\n')
+        sys.exit(2)
 
 main()
index 5e78d6399ea4482e7b9ef91e7e87953982a8f36e..63b3e672a55e4f57a2c33fe6ca9438a10039275d 100755 (executable)
@@ -4,56 +4,56 @@
 import os, string, sys, errno
 
 def main():
-       p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
-       total, d = None, {}
-       for line in p.readlines():
-               i = 0
-               while line[i] in '0123456789': i = i+1
-               size = eval(line[:i])
-               while line[i] in ' \t': i = i+1
-               file = line[i:-1]
-               comps = string.splitfields(file, '/')
-               if comps[0] == '': comps[0] = '/'
-               if comps[len(comps)-1] == '': del comps[len(comps)-1]
-               total, d = store(size, comps, total, d)
-       try:
-               display(total, d)
-       except IOError, e:
-               if e.errno != errno.EPIPE:
-                       raise
+    p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
+    total, d = None, {}
+    for line in p.readlines():
+        i = 0
+        while line[i] in '0123456789': i = i+1
+        size = eval(line[:i])
+        while line[i] in ' \t': i = i+1
+        file = line[i:-1]
+        comps = string.splitfields(file, '/')
+        if comps[0] == '': comps[0] = '/'
+        if comps[len(comps)-1] == '': del comps[len(comps)-1]
+        total, d = store(size, comps, total, d)
+    try:
+        display(total, d)
+    except IOError, e:
+        if e.errno != errno.EPIPE:
+            raise
 
 def store(size, comps, total, d):
-       if comps == []:
-               return size, d
-       if not d.has_key(comps[0]):
-               d[comps[0]] = None, {}
-       t1, d1 = d[comps[0]]
-       d[comps[0]] = store(size, comps[1:], t1, d1)
-       return total, d
+    if comps == []:
+        return size, d
+    if not d.has_key(comps[0]):
+        d[comps[0]] = None, {}
+    t1, d1 = d[comps[0]]
+    d[comps[0]] = store(size, comps[1:], t1, d1)
+    return total, d
 
 def display(total, d):
-       show(total, d, '')
+    show(total, d, '')
 
 def show(total, d, prefix):
-       if not d: return
-       list = []
-       sum = 0
-       for key in d.keys():
-               tsub, dsub = d[key]
-               list.append((tsub, key))
-               if tsub is not None: sum = sum + tsub
-##     if sum < total:
-##             list.append((total - sum, os.curdir))
-       list.sort()
-       list.reverse()
-       width = len(`list[0][0]`)
-       for tsub, key in list:
-               if tsub is None:
-                       psub = prefix
-               else:
-                       print prefix + string.rjust(`tsub`, width) + ' ' + key
-                       psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
-               if d.has_key(key):
-                       show(tsub, d[key][1], psub)
+    if not d: return
+    list = []
+    sum = 0
+    for key in d.keys():
+        tsub, dsub = d[key]
+        list.append((tsub, key))
+        if tsub is not None: sum = sum + tsub
+##      if sum < total:
+##              list.append((total - sum, os.curdir))
+    list.sort()
+    list.reverse()
+    width = len(`list[0][0]`)
+    for tsub, key in list:
+        if tsub is None:
+            psub = prefix
+        else:
+            print prefix + string.rjust(`tsub`, width) + ' ' + key
+            psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
+        if d.has_key(key):
+            show(tsub, d[key][1], psub)
 
 main()
index 06821cd6cbe9029205a24dd146cc85b544ccd39e..e4731a589bbb4766315c8fdfbd4b1dccfe425c71 100755 (executable)
@@ -10,33 +10,33 @@ import regex
 import getopt
 
 def main():
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], '')
-               if len(args) < 2:
-                       raise getopt.error, 'not enough arguments'
-       except getopt.error, msg:
-               sys.stdout = sys.stderr
-               print msg
-               print 'usage: findlinksto pattern directory ...'
-               sys.exit(2)
-       pat, dirs = args[0], args[1:]
-       prog = regex.compile(pat)
-       for dirname in dirs:
-               os.path.walk(dirname, visit, prog)
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], '')
+        if len(args) < 2:
+            raise getopt.error, 'not enough arguments'
+    except getopt.error, msg:
+        sys.stdout = sys.stderr
+        print msg
+        print 'usage: findlinksto pattern directory ...'
+        sys.exit(2)
+    pat, dirs = args[0], args[1:]
+    prog = regex.compile(pat)
+    for dirname in dirs:
+        os.path.walk(dirname, visit, prog)
 
 def visit(prog, dirname, names):
-       if os.path.islink(dirname):
-               names[:] = []
-               return
-       if os.path.ismount(dirname):
-               print 'descend into', dirname
-       for name in names:
-               name = os.path.join(dirname, name)
-               try:
-                       linkto = os.readlink(name)
-                       if prog.search(linkto) >= 0:
-                               print name, '->', linkto
-               except os.error:
-                       pass
+    if os.path.islink(dirname):
+        names[:] = []
+        return
+    if os.path.ismount(dirname):
+        print 'descend into', dirname
+    for name in names:
+        name = os.path.join(dirname, name)
+        try:
+            linkto = os.readlink(name)
+            if prog.search(linkto) >= 0:
+                print name, '->', linkto
+        except os.error:
+            pass
 
 main()
index cf0ec16394203883b1e59ad80cef972e29b33b3c..836ceed87fa8d28b46337826c1190a0c6ef24d48 100755 (executable)
@@ -46,151 +46,151 @@ dbg = err
 rep = sys.stdout.write
 
 def usage():
-       progname = sys.argv[0]
-       err('Usage: ' + progname +
-                 ' [-c] [-r] [-s file] ... file-or-directory ...\n')
-       err('\n')
-       err('-c           : substitute inside comments\n')
-       err('-r           : reverse direction for following -s options\n')
-       err('-s substfile : add a file of substitutions\n')
-       err('\n')
-       err('Each non-empty non-comment line in a substitution file must\n')
-       err('contain exactly two words: an identifier and its replacement.\n')
-       err('Comments start with a # character and end at end of line.\n')
-       err('If an identifier is preceded with a *, it is not substituted\n')
-       err('inside a comment even when -c is specified.\n')
+    progname = sys.argv[0]
+    err('Usage: ' + progname +
+              ' [-c] [-r] [-s file] ... file-or-directory ...\n')
+    err('\n')
+    err('-c           : substitute inside comments\n')
+    err('-r           : reverse direction for following -s options\n')
+    err('-s substfile : add a file of substitutions\n')
+    err('\n')
+    err('Each non-empty non-comment line in a substitution file must\n')
+    err('contain exactly two words: an identifier and its replacement.\n')
+    err('Comments start with a # character and end at end of line.\n')
+    err('If an identifier is preceded with a *, it is not substituted\n')
+    err('inside a comment even when -c is specified.\n')
 
 def main():
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], 'crs:')
-       except getopt.error, msg:
-               err('Options error: ' + str(msg) + '\n')
-               usage()
-               sys.exit(2)
-       bad = 0
-       if not args: # No arguments
-               usage()
-               sys.exit(2)
-       for opt, arg in opts:
-               if opt == '-c':
-                       setdocomments()
-               if opt == '-r':
-                       setreverse()
-               if opt == '-s':
-                       addsubst(arg)
-       for arg in args:
-               if os.path.isdir(arg):
-                       if recursedown(arg): bad = 1
-               elif os.path.islink(arg):
-                       err(arg + ': will not process symbolic links\n')
-                       bad = 1
-               else:
-                       if fix(arg): bad = 1
-       sys.exit(bad)
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'crs:')
+    except getopt.error, msg:
+        err('Options error: ' + str(msg) + '\n')
+        usage()
+        sys.exit(2)
+    bad = 0
+    if not args: # No arguments
+        usage()
+        sys.exit(2)
+    for opt, arg in opts:
+        if opt == '-c':
+            setdocomments()
+        if opt == '-r':
+            setreverse()
+        if opt == '-s':
+            addsubst(arg)
+    for arg in args:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 # Change this regular expression to select a different set of files
 Wanted = '^[a-zA-Z0-9_]+\.[ch]$'
 def wanted(name):
-       return regex.match(Wanted, name) >= 0
+    return regex.match(Wanted, name) >= 0
 
 def recursedown(dirname):
-       dbg('recursedown(' + `dirname` + ')\n')
-       bad = 0
-       try:
-               names = os.listdir(dirname)
-       except os.error, msg:
-               err(dirname + ': cannot list directory: ' + str(msg) + '\n')
-               return 1
-       names.sort()
-       subdirs = []
-       for name in names:
-               if name in (os.curdir, os.pardir): continue
-               fullname = os.path.join(dirname, name)
-               if os.path.islink(fullname): pass
-               elif os.path.isdir(fullname):
-                       subdirs.append(fullname)
-               elif wanted(name):
-                       if fix(fullname): bad = 1
-       for fullname in subdirs:
-               if recursedown(fullname): bad = 1
-       return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + str(msg) + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif wanted(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##     dbg('fix(' + `filename` + ')\n')
-       if filename == '-':
-               # Filter mode
-               f = sys.stdin
-               g = sys.stdout
-       else:
-               # File replacement mode
-               try:
-                       f = open(filename, 'r')
-               except IOError, msg:
-                       err(filename + ': cannot open: ' + str(msg) + '\n')
-                       return 1
-               head, tail = os.path.split(filename)
-               tempname = os.path.join(head, '@' + tail)
-               g = None
-       # If we find a match, we rewind the file and start over but
-       # now copy everything to a temp file.
-       lineno = 0
-       initfixline()
-       while 1:
-               line = f.readline()
-               if not line: break
-               lineno = lineno + 1
-               while line[-2:] == '\\\n':
-                       nextline = f.readline()
-                       if not nextline: break
-                       line = line + nextline
-                       lineno = lineno + 1
-               newline = fixline(line)
-               if newline != line:
-                       if g is None:
-                               try:
-                                       g = open(tempname, 'w')
-                               except IOError, msg:
-                                       f.close()
-                                       err(tempname+': cannot create: '+
-                                           str(msg)+'\n')
-                                       return 1
-                               f.seek(0)
-                               lineno = 0
-                               initfixline()
-                               rep(filename + ':\n')
-                               continue # restart from the beginning
-                       rep(`lineno` + '\n')
-                       rep('< ' + line)
-                       rep('> ' + newline)
-               if g is not None:
-                       g.write(newline)
+##      dbg('fix(' + `filename` + ')\n')
+    if filename == '-':
+        # Filter mode
+        f = sys.stdin
+        g = sys.stdout
+    else:
+        # File replacement mode
+        try:
+            f = open(filename, 'r')
+        except IOError, msg:
+            err(filename + ': cannot open: ' + str(msg) + '\n')
+            return 1
+        head, tail = os.path.split(filename)
+        tempname = os.path.join(head, '@' + tail)
+        g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    initfixline()
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+
+                        str(msg)+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                initfixline()
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
 
-       # End of file
-       if filename == '-': return 0 # Done in filter mode
-       f.close()
-       if not g: return 0 # No changes
+    # End of file
+    if filename == '-': return 0 # Done in filter mode
+    f.close()
+    if not g: return 0 # No changes
 
-       # Finishing touch -- move files
+    # Finishing touch -- move files
 
-       # First copy the file's mode to the temp file
-       try:
-               statbuf = os.stat(filename)
-               os.chmod(tempname, statbuf[ST_MODE] & 07777)
-       except os.error, msg:
-               err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
-       # Then make a backup of the original file as filename~
-       try:
-               os.rename(filename, filename + '~')
-       except os.error, msg:
-               err(filename + ': warning: backup failed (' + str(msg) + ')\n')
-       # Now move the temp file to the original file
-       try:
-               os.rename(tempname, filename)
-       except os.error, msg:
-               err(filename + ': rename failed (' + str(msg) + ')\n')
-               return 1
-       # Return succes
-       return 0
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + str(msg) + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + str(msg) + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 # Tokenizing ANSI C (partly)
 
@@ -221,98 +221,98 @@ InsideCommentPattern = '\(' + string.joinfields(InsideComment, '\|') + '\)'
 InsideCommentProgram = regex.compile(InsideCommentPattern)
 
 def initfixline():
-       global Program
-       Program = OutsideCommentProgram
+    global Program
+    Program = OutsideCommentProgram
 
 def fixline(line):
-       global Program
-##     print '-->', `line`
-       i = 0
-       while i < len(line):
-               i = Program.search(line, i)
-               if i < 0: break
-               found = Program.group(0)
-##             if Program is InsideCommentProgram: print '...',
-##             else: print '   ',
-##             print found
-               if len(found) == 2:
-                       if found == '/*':
-                               Program = InsideCommentProgram
-                       elif found == '*/':
-                               Program = OutsideCommentProgram
-               n = len(found)
-               if Dict.has_key(found):
-                       subst = Dict[found]
-                       if Program is InsideCommentProgram:
-                               if not Docomments:
-                                       print 'Found in comment:', found
-                                       i = i + n
-                                       continue
-                               if NotInComment.has_key(found):
-##                                     print 'Ignored in comment:',
-##                                     print found, '-->', subst
-##                                     print 'Line:', line,
-                                       subst = found
-##                             else:
-##                                     print 'Substituting in comment:',
-##                                     print found, '-->', subst
-##                                     print 'Line:', line,
-                       line = line[:i] + subst + line[i+n:]
-                       n = len(subst)
-               i = i + n
-       return line
+    global Program
+##      print '-->', `line`
+    i = 0
+    while i < len(line):
+        i = Program.search(line, i)
+        if i < 0: break
+        found = Program.group(0)
+##              if Program is InsideCommentProgram: print '...',
+##              else: print '   ',
+##              print found
+        if len(found) == 2:
+            if found == '/*':
+                Program = InsideCommentProgram
+            elif found == '*/':
+                Program = OutsideCommentProgram
+        n = len(found)
+        if Dict.has_key(found):
+            subst = Dict[found]
+            if Program is InsideCommentProgram:
+                if not Docomments:
+                    print 'Found in comment:', found
+                    i = i + n
+                    continue
+                if NotInComment.has_key(found):
+##                                      print 'Ignored in comment:',
+##                                      print found, '-->', subst
+##                                      print 'Line:', line,
+                    subst = found
+##                              else:
+##                                      print 'Substituting in comment:',
+##                                      print found, '-->', subst
+##                                      print 'Line:', line,
+            line = line[:i] + subst + line[i+n:]
+            n = len(subst)
+        i = i + n
+    return line
 
 Docomments = 0
 def setdocomments():
-       global Docomments
-       Docomments = 1
+    global Docomments
+    Docomments = 1
 
 Reverse = 0
 def setreverse():
-       global Reverse
-       Reverse = (not Reverse)
+    global Reverse
+    Reverse = (not Reverse)
 
 Dict = {}
 NotInComment = {}
 def addsubst(substfile):
-       try:
-               fp = open(substfile, 'r')
-       except IOError, msg:
-               err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
-               sys.exit(1)
-       lineno = 0
-       while 1:
-               line = fp.readline()
-               if not line: break
-               lineno = lineno + 1
-               try:
-                       i = string.index(line, '#')
-               except string.index_error:
-                       i = -1          # Happens to delete trailing \n
-               words = string.split(line[:i])
-               if not words: continue
-               if len(words) == 3 and words[0] == 'struct':
-                       words[:2] = [words[0] + ' ' + words[1]]
-               elif len(words) <> 2:
-                       err(substfile + ':' + `lineno` +
-                                 ': warning: bad line: ' + line)
-                       continue
-               if Reverse:
-                       [value, key] = words
-               else:
-                       [key, value] = words
-               if value[0] == '*':
-                       value = value[1:]
-               if key[0] == '*':
-                       key = key[1:]
-                       NotInComment[key] = value
-               if Dict.has_key(key):
-                       err(substfile + ':' + `lineno` +
-                                 ': warning: overriding: ' +
-                                 key + ' ' + value + '\n')
-                       err(substfile + ':' + `lineno` +
-                                 ': warning: previous: ' + Dict[key] + '\n')
-               Dict[key] = value
-       fp.close()
+    try:
+        fp = open(substfile, 'r')
+    except IOError, msg:
+        err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
+        sys.exit(1)
+    lineno = 0
+    while 1:
+        line = fp.readline()
+        if not line: break
+        lineno = lineno + 1
+        try:
+            i = string.index(line, '#')
+        except string.index_error:
+            i = -1          # Happens to delete trailing \n
+        words = string.split(line[:i])
+        if not words: continue
+        if len(words) == 3 and words[0] == 'struct':
+            words[:2] = [words[0] + ' ' + words[1]]
+        elif len(words) <> 2:
+            err(substfile + ':' + `lineno` +
+                      ': warning: bad line: ' + line)
+            continue
+        if Reverse:
+            [value, key] = words
+        else:
+            [key, value] = words
+        if value[0] == '*':
+            value = value[1:]
+        if key[0] == '*':
+            key = key[1:]
+            NotInComment[key] = value
+        if Dict.has_key(key):
+            err(substfile + ':' + `lineno` +
+                      ': warning: overriding: ' +
+                      key + ' ' + value + '\n')
+            err(substfile + ':' + `lineno` +
+                      ': warning: previous: ' + Dict[key] + '\n')
+        Dict[key] = value
+    fp.close()
 
 main()
index 774b907e4fdd0d4f2b15f170ca8181899f7d87a9..9b65a44fb091ecf05e5d62ffb21be3af6bc75f8c 100755 (executable)
@@ -6,44 +6,44 @@ import sys
 import string
 
 def main():
-       args = sys.argv[1:]
-       for file in args:
-               process(file)
+    args = sys.argv[1:]
+    for file in args:
+        process(file)
 
 def process(file):
-       try:
-               f = open(file, 'r')
-       except IOError, msg:
-               sys.stderr.write('%s: can\'t open: %s\n' % (file, str(msg)))
-               return
-       data = f.read()
-       f.close()
-       if data[:2] <> '/*':
-               sys.stderr.write('%s does not begin with C comment\n' % file)
-               return
-       try:
-               f = open(file, 'w')
-       except IOError, msg:
-               sys.stderr.write('%s: can\'t write: %s\n' % (file, str(msg)))
-               return
-       sys.stderr.write('Processing %s ...\n' % file)
-       magic = 'Py_'
-       for c in file:
-               if c in string.letters + string.digits:
-                       magic = magic + string.upper(c)
-               else: magic = magic + '_'
-       sys.stdout = f
-       print '#ifndef', magic
-       print '#define', magic
-       print '#ifdef __cplusplus'
-       print 'extern "C" {'
-       print '#endif'
-       print
-       f.write(data)
-       print
-       print '#ifdef __cplusplus'
-       print '}'
-       print '#endif'
-       print '#endif /*', '!'+magic, '*/'
+    try:
+        f = open(file, 'r')
+    except IOError, msg:
+        sys.stderr.write('%s: can\'t open: %s\n' % (file, str(msg)))
+        return
+    data = f.read()
+    f.close()
+    if data[:2] <> '/*':
+        sys.stderr.write('%s does not begin with C comment\n' % file)
+        return
+    try:
+        f = open(file, 'w')
+    except IOError, msg:
+        sys.stderr.write('%s: can\'t write: %s\n' % (file, str(msg)))
+        return
+    sys.stderr.write('Processing %s ...\n' % file)
+    magic = 'Py_'
+    for c in file:
+        if c in string.letters + string.digits:
+            magic = magic + string.upper(c)
+        else: magic = magic + '_'
+    sys.stdout = f
+    print '#ifndef', magic
+    print '#define', magic
+    print '#ifdef __cplusplus'
+    print 'extern "C" {'
+    print '#endif'
+    print
+    f.write(data)
+    print
+    print '#ifdef __cplusplus'
+    print '}'
+    print '#endif'
+    print '#endif /*', '!'+magic, '*/'
 
 main()
index 665c1a297624073f2705ad460b6ab705ad3819cc..1e6e114af3826955dd4bfff2a6fd4409878705b6 100755 (executable)
@@ -8,26 +8,26 @@ import re
 
 
 def main():
-       for file in sys.argv[1:]:
-               try:
-                       f = open(file, 'r')
-               except IOError, msg:
-                       print file, ': can\'t open :', msg
-                       continue
-               line = f.readline()
-               if not re.match('^#! */usr/local/bin/python', line):
-                       print file, ': not a /usr/local/bin/python script'
-                       f.close()
-                       continue
-               rest = f.read()
-               f.close()
-               line = re.sub('/usr/local/bin/python',
-                             '/usr/bin/env python', line)
-               print file, ':', `line`
-               f = open(file, "w")
-               f.write(line)
-               f.write(rest)
-               f.close()
+    for file in sys.argv[1:]:
+        try:
+            f = open(file, 'r')
+        except IOError, msg:
+            print file, ': can\'t open :', msg
+            continue
+        line = f.readline()
+        if not re.match('^#! */usr/local/bin/python', line):
+            print file, ': not a /usr/local/bin/python script'
+            f.close()
+            continue
+        rest = f.read()
+        f.close()
+        line = re.sub('/usr/local/bin/python',
+                      '/usr/bin/env python', line)
+        print file, ':', `line`
+        f = open(file, "w")
+        f.write(line)
+        f.write(rest)
+        f.close()
 
 
 main()
index 4b02714f7965e1b849886659d40b7c361402d3f8..c894a7b0522f5250800c2ac7a13cc9e3e93e8ca9 100755 (executable)
@@ -4,7 +4,7 @@
 
 usage: ftpmirror [-v] [-q] [-i] [-m] [-n] [-r] [-s pat]
                  [-l username [-p passwd [-a account]]]
-                hostname [remotedir [localdir]]
+                 hostname [remotedir [localdir]]
 -v: verbose
 -q: quiet
 -i: interactive mode
@@ -28,10 +28,10 @@ from fnmatch import fnmatch
 
 # Print usage message and exit
 def usage(*args):
-       sys.stdout = sys.stderr
-       for msg in args: print msg
-       print __doc__
-       sys.exit(2)
+    sys.stdout = sys.stderr
+    for msg in args: print msg
+    print __doc__
+    sys.exit(2)
 
 verbose = 1 # 0 for -q, 2 for -v
 interactive = 0
@@ -42,356 +42,356 @@ skippats = ['.', '..', '.mirrorinfo']
 
 # Main program: parse command line and start processing
 def main():
-       global verbose, interactive, mac, rmok, nologin
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], 'a:bil:mnp:qrs:v')
-       except getopt.error, msg:
-               usage(msg)
-       login = ''
-       passwd = ''
-       account = ''
-       for o, a in opts:
-               if o == '-l': login = a
-               if o == '-p': passwd = a
-               if o == '-a': account = a
-               if o == '-v': verbose = verbose + 1
-               if o == '-q': verbose = 0
-               if o == '-i': interactive = 1
-               if o == '-m': mac = 1; nologin = 1; skippats.append('*.o')
-               if o == '-n': nologin = 1
-               if o == '-r': rmok = 1
-               if o == '-s': skippats.append(a)
-       if not args: usage('hostname missing')
-       host = args[0]
-       remotedir = ''
-       localdir = ''
-       if args[1:]:
-               remotedir = args[1]
-               if args[2:]:
-                       localdir = args[2]
-                       if args[3:]: usage('too many arguments')
-       #
-       f = ftplib.FTP()
-       if verbose: print 'Connecting to %s...' % `host`
-       f.connect(host)
-       if not nologin:
-               if verbose:
-                       print 'Logging in as %s...' % `login or 'anonymous'`
-               f.login(login, passwd, account)
-       if verbose: print 'OK.'
-       pwd = f.pwd()
-       if verbose > 1: print 'PWD =', `pwd`
-       if remotedir:
-               if verbose > 1: print 'cwd(%s)' % `remotedir`
-               f.cwd(remotedir)
-               if verbose > 1: print 'OK.'
-               pwd = f.pwd()
-               if verbose > 1: print 'PWD =', `pwd`
-       #
-       mirrorsubdir(f, localdir)
+    global verbose, interactive, mac, rmok, nologin
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'a:bil:mnp:qrs:v')
+    except getopt.error, msg:
+        usage(msg)
+    login = ''
+    passwd = ''
+    account = ''
+    for o, a in opts:
+        if o == '-l': login = a
+        if o == '-p': passwd = a
+        if o == '-a': account = a
+        if o == '-v': verbose = verbose + 1
+        if o == '-q': verbose = 0
+        if o == '-i': interactive = 1
+        if o == '-m': mac = 1; nologin = 1; skippats.append('*.o')
+        if o == '-n': nologin = 1
+        if o == '-r': rmok = 1
+        if o == '-s': skippats.append(a)
+    if not args: usage('hostname missing')
+    host = args[0]
+    remotedir = ''
+    localdir = ''
+    if args[1:]:
+        remotedir = args[1]
+        if args[2:]:
+            localdir = args[2]
+            if args[3:]: usage('too many arguments')
+    #
+    f = ftplib.FTP()
+    if verbose: print 'Connecting to %s...' % `host`
+    f.connect(host)
+    if not nologin:
+        if verbose:
+            print 'Logging in as %s...' % `login or 'anonymous'`
+        f.login(login, passwd, account)
+    if verbose: print 'OK.'
+    pwd = f.pwd()
+    if verbose > 1: print 'PWD =', `pwd`
+    if remotedir:
+        if verbose > 1: print 'cwd(%s)' % `remotedir`
+        f.cwd(remotedir)
+        if verbose > 1: print 'OK.'
+        pwd = f.pwd()
+        if verbose > 1: print 'PWD =', `pwd`
+    #
+    mirrorsubdir(f, localdir)
 
 # Core logic: mirror one subdirectory (recursively)
 def mirrorsubdir(f, localdir):
-       pwd = f.pwd()
-       if localdir and not os.path.isdir(localdir):
-               if verbose: print 'Creating local directory', `localdir`
-               try:
-                   makedir(localdir)
-               except os.error, msg:
-                   print "Failed to establish local directory", `localdir`
-                   return
-       infofilename = os.path.join(localdir, '.mirrorinfo')
-       try:
-               text = open(infofilename, 'r').read()
-       except IOError, msg:
-               text = '{}'
-       try:
-               info = eval(text)
-       except (SyntaxError, NameError):
-               print 'Bad mirror info in %s' % `infofilename`
-               info = {}
-       subdirs = []
-       listing = []
-       if verbose: print 'Listing remote directory %s...' % `pwd`
-       f.retrlines('LIST', listing.append)
-       filesfound = []
-       for line in listing:
-               if verbose > 1: print '-->', `line`
-               if mac:
-                       # Mac listing has just filenames;
-                       # trailing / means subdirectory
-                       filename = string.strip(line)
-                       mode = '-'
-                       if filename[-1:] == '/':
-                               filename = filename[:-1]
-                               mode = 'd'
-                       infostuff = ''
-               else:
-                       # Parse, assuming a UNIX listing
-                       words = string.split(line, None, 8)
-                       if len(words) < 6:
-                               if verbose > 1: print 'Skipping short line'
-                               continue
-                       filename = string.lstrip(words[-1])
-                       i = string.find(filename, " -> ")
-                       if i >= 0:
-                               # words[0] had better start with 'l'...
-                               if verbose > 1:
-                                   print 'Found symbolic link %s' % `filename`
-                               linkto = filename[i+4:]
-                               filename = filename[:i]
-                       infostuff = words[-5:-1]
-                       mode = words[0]
-               skip = 0
-               for pat in skippats:
-                       if fnmatch(filename, pat):
-                               if verbose > 1:
-                                       print 'Skip pattern', `pat`,
-                                       print 'matches', `filename`
-                               skip = 1
-                               break
-               if skip:
-                       continue
-               if mode[0] == 'd':
-                       if verbose > 1:
-                               print 'Remembering subdirectory', `filename`
-                       subdirs.append(filename)
-                       continue
-               filesfound.append(filename)
-               if info.has_key(filename) and info[filename] == infostuff:
-                       if verbose > 1:
-                               print 'Already have this version of',`filename`
-                       continue
-               fullname = os.path.join(localdir, filename)
-               tempname = os.path.join(localdir, '@'+filename)
-               if interactive:
-                       doit = askabout('file', filename, pwd)
-                       if not doit:
-                               if not info.has_key(filename):
-                                       info[filename] = 'Not retrieved'
-                               continue
-               try:
-                       os.unlink(tempname)
-               except os.error:
-                       pass
-               if mode[0] == 'l':
-                       if verbose:
-                               print "Creating symlink %s -> %s" % (
-                                       `filename`, `linkto`)
-                       try:
-                               os.symlink(linkto, tempname)
-                       except IOError, msg:
-                               print "Can't create %s: %s" % (
-                                       `tempname`, str(msg))
-                               continue
-               else:
-                       try:
-                               fp = open(tempname, 'wb')
-                       except IOError, msg:
-                               print "Can't create %s: %s" % (
-                                       `tempname`, str(msg))
-                               continue
-                       if verbose:
-                               print 'Retrieving %s from %s as %s...' % \
-                                         (`filename`, `pwd`, `fullname`)
-                       if verbose:
-                               fp1 = LoggingFile(fp, 1024, sys.stdout)
-                       else:
-                               fp1 = fp
-                       t0 = time.time()
-                       try:
-                               f.retrbinary('RETR ' + filename,
-                                            fp1.write, 8*1024)
-                       except ftplib.error_perm, msg:
-                               print msg
-                       t1 = time.time()
-                       bytes = fp.tell()
-                       fp.close()
-                       if fp1 != fp:
-                               fp1.close()
-               try:
-                       os.unlink(fullname)
-               except os.error:
-                       pass            # Ignore the error
-               try:
-                       os.rename(tempname, fullname)
-               except os.error, msg:
-                       print "Can't rename %s to %s: %s" % (`tempname`,
-                                                            `fullname`,
-                                                            str(msg))
-                       continue
-               info[filename] = infostuff
-               writedict(info, infofilename)
-               if verbose and mode[0] != 'l':
-                       dt = t1 - t0
-                       kbytes = bytes / 1024.0
-                       print int(round(kbytes)),
-                       print 'Kbytes in',
-                       print int(round(dt)),
-                       print 'seconds',
-                       if t1 > t0:
-                               print '(~%d Kbytes/sec)' % \
-                                         int(round(kbytes/dt),)
-                       print
-       #
-       # Remove files from info that are no longer remote
-       deletions = 0
-       for filename in info.keys():
-               if filename not in filesfound:
-                       if verbose:
-                               print "Removing obsolete info entry for",
-                               print `filename`, "in", `localdir or "."`
-                       del info[filename]
-                       deletions = deletions + 1
-       if deletions:
-               writedict(info, infofilename)
-       #
-       # Remove local files that are no longer in the remote directory
-       try:
-           if not localdir: names = os.listdir(os.curdir)
-           else: names = os.listdir(localdir)
-       except os.error:
-           names = []
-       for name in names:
-               if name[0] == '.' or info.has_key(name) or name in subdirs:
-                       continue
-               skip = 0
-               for pat in skippats:
-                       if fnmatch(name, pat):
-                               if verbose > 1:
-                                       print 'Skip pattern', `pat`,
-                                       print 'matches', `name`
-                               skip = 1
-                               break
-               if skip:
-                       continue
-               fullname = os.path.join(localdir, name)
-               if not rmok:
-                       if verbose:
-                               print 'Local file', `fullname`,
-                               print 'is no longer pertinent'
-                       continue
-               if verbose: print 'Removing local file/dir', `fullname`
-               remove(fullname)
-       #
-       # Recursively mirror subdirectories
-       for subdir in subdirs:
-               if interactive:
-                       doit = askabout('subdirectory', subdir, pwd)
-                       if not doit: continue
-               if verbose: print 'Processing subdirectory', `subdir`
-               localsubdir = os.path.join(localdir, subdir)
-               pwd = f.pwd()
-               if verbose > 1:
-                       print 'Remote directory now:', `pwd`
-                       print 'Remote cwd', `subdir`
-               try:
-                       f.cwd(subdir)
-               except ftplib.error_perm, msg:
-                       print "Can't chdir to", `subdir`, ":", `msg`
-               else:
-                       if verbose: print 'Mirroring as', `localsubdir`
-                       mirrorsubdir(f, localsubdir)
-                       if verbose > 1: print 'Remote cwd ..'
-                       f.cwd('..')
-               newpwd = f.pwd()
-               if newpwd != pwd:
-                       print 'Ended up in wrong directory after cd + cd ..'
-                       print 'Giving up now.'
-                       break
-               else:
-                       if verbose > 1: print 'OK.'
+    pwd = f.pwd()
+    if localdir and not os.path.isdir(localdir):
+        if verbose: print 'Creating local directory', `localdir`
+        try:
+            makedir(localdir)
+        except os.error, msg:
+            print "Failed to establish local directory", `localdir`
+            return
+    infofilename = os.path.join(localdir, '.mirrorinfo')
+    try:
+        text = open(infofilename, 'r').read()
+    except IOError, msg:
+        text = '{}'
+    try:
+        info = eval(text)
+    except (SyntaxError, NameError):
+        print 'Bad mirror info in %s' % `infofilename`
+        info = {}
+    subdirs = []
+    listing = []
+    if verbose: print 'Listing remote directory %s...' % `pwd`
+    f.retrlines('LIST', listing.append)
+    filesfound = []
+    for line in listing:
+        if verbose > 1: print '-->', `line`
+        if mac:
+            # Mac listing has just filenames;
+            # trailing / means subdirectory
+            filename = string.strip(line)
+            mode = '-'
+            if filename[-1:] == '/':
+                filename = filename[:-1]
+                mode = 'd'
+            infostuff = ''
+        else:
+            # Parse, assuming a UNIX listing
+            words = string.split(line, None, 8)
+            if len(words) < 6:
+                if verbose > 1: print 'Skipping short line'
+                continue
+            filename = string.lstrip(words[-1])
+            i = string.find(filename, " -> ")
+            if i >= 0:
+                # words[0] had better start with 'l'...
+                if verbose > 1:
+                    print 'Found symbolic link %s' % `filename`
+                linkto = filename[i+4:]
+                filename = filename[:i]
+            infostuff = words[-5:-1]
+            mode = words[0]
+        skip = 0
+        for pat in skippats:
+            if fnmatch(filename, pat):
+                if verbose > 1:
+                    print 'Skip pattern', `pat`,
+                    print 'matches', `filename`
+                skip = 1
+                break
+        if skip:
+            continue
+        if mode[0] == 'd':
+            if verbose > 1:
+                print 'Remembering subdirectory', `filename`
+            subdirs.append(filename)
+            continue
+        filesfound.append(filename)
+        if info.has_key(filename) and info[filename] == infostuff:
+            if verbose > 1:
+                print 'Already have this version of',`filename`
+            continue
+        fullname = os.path.join(localdir, filename)
+        tempname = os.path.join(localdir, '@'+filename)
+        if interactive:
+            doit = askabout('file', filename, pwd)
+            if not doit:
+                if not info.has_key(filename):
+                    info[filename] = 'Not retrieved'
+                continue
+        try:
+            os.unlink(tempname)
+        except os.error:
+            pass
+        if mode[0] == 'l':
+            if verbose:
+                print "Creating symlink %s -> %s" % (
+                        `filename`, `linkto`)
+            try:
+                os.symlink(linkto, tempname)
+            except IOError, msg:
+                print "Can't create %s: %s" % (
+                        `tempname`, str(msg))
+                continue
+        else:
+            try:
+                fp = open(tempname, 'wb')
+            except IOError, msg:
+                print "Can't create %s: %s" % (
+                        `tempname`, str(msg))
+                continue
+            if verbose:
+                print 'Retrieving %s from %s as %s...' % \
+                          (`filename`, `pwd`, `fullname`)
+            if verbose:
+                fp1 = LoggingFile(fp, 1024, sys.stdout)
+            else:
+                fp1 = fp
+            t0 = time.time()
+            try:
+                f.retrbinary('RETR ' + filename,
+                             fp1.write, 8*1024)
+            except ftplib.error_perm, msg:
+                print msg
+            t1 = time.time()
+            bytes = fp.tell()
+            fp.close()
+            if fp1 != fp:
+                fp1.close()
+        try:
+            os.unlink(fullname)
+        except os.error:
+            pass            # Ignore the error
+        try:
+            os.rename(tempname, fullname)
+        except os.error, msg:
+            print "Can't rename %s to %s: %s" % (`tempname`,
+                                                 `fullname`,
+                                                 str(msg))
+            continue
+        info[filename] = infostuff
+        writedict(info, infofilename)
+        if verbose and mode[0] != 'l':
+            dt = t1 - t0
+            kbytes = bytes / 1024.0
+            print int(round(kbytes)),
+            print 'Kbytes in',
+            print int(round(dt)),
+            print 'seconds',
+            if t1 > t0:
+                print '(~%d Kbytes/sec)' % \
+                          int(round(kbytes/dt),)
+            print
+    #
+    # Remove files from info that are no longer remote
+    deletions = 0
+    for filename in info.keys():
+        if filename not in filesfound:
+            if verbose:
+                print "Removing obsolete info entry for",
+                print `filename`, "in", `localdir or "."`
+            del info[filename]
+            deletions = deletions + 1
+    if deletions:
+        writedict(info, infofilename)
+    #
+    # Remove local files that are no longer in the remote directory
+    try:
+        if not localdir: names = os.listdir(os.curdir)
+        else: names = os.listdir(localdir)
+    except os.error:
+        names = []
+    for name in names:
+        if name[0] == '.' or info.has_key(name) or name in subdirs:
+            continue
+        skip = 0
+        for pat in skippats:
+            if fnmatch(name, pat):
+                if verbose > 1:
+                    print 'Skip pattern', `pat`,
+                    print 'matches', `name`
+                skip = 1
+                break
+        if skip:
+            continue
+        fullname = os.path.join(localdir, name)
+        if not rmok:
+            if verbose:
+                print 'Local file', `fullname`,
+                print 'is no longer pertinent'
+            continue
+        if verbose: print 'Removing local file/dir', `fullname`
+        remove(fullname)
+    #
+    # Recursively mirror subdirectories
+    for subdir in subdirs:
+        if interactive:
+            doit = askabout('subdirectory', subdir, pwd)
+            if not doit: continue
+        if verbose: print 'Processing subdirectory', `subdir`
+        localsubdir = os.path.join(localdir, subdir)
+        pwd = f.pwd()
+        if verbose > 1:
+            print 'Remote directory now:', `pwd`
+            print 'Remote cwd', `subdir`
+        try:
+            f.cwd(subdir)
+        except ftplib.error_perm, msg:
+            print "Can't chdir to", `subdir`, ":", `msg`
+        else:
+            if verbose: print 'Mirroring as', `localsubdir`
+            mirrorsubdir(f, localsubdir)
+            if verbose > 1: print 'Remote cwd ..'
+            f.cwd('..')
+        newpwd = f.pwd()
+        if newpwd != pwd:
+            print 'Ended up in wrong directory after cd + cd ..'
+            print 'Giving up now.'
+            break
+        else:
+            if verbose > 1: print 'OK.'
 
 # Helper to remove a file or directory tree
 def remove(fullname):
-       if os.path.isdir(fullname) and not os.path.islink(fullname):
-               try:
-                       names = os.listdir(fullname)
-               except os.error:
-                       names = []
-               ok = 1
-               for name in names:
-                       if not remove(os.path.join(fullname, name)):
-                               ok = 0
-               if not ok:
-                       return 0
-               try:
-                       os.rmdir(fullname)
-               except os.error, msg:
-                       print "Can't remove local directory %s: %s" % \
-                             (`fullname`, str(msg))
-                       return 0
-       else:
-               try:
-                       os.unlink(fullname)
-               except os.error, msg:
-                       print "Can't remove local file %s: %s" % \
-                             (`fullname`, str(msg))
-                       return 0
-       return 1
+    if os.path.isdir(fullname) and not os.path.islink(fullname):
+        try:
+            names = os.listdir(fullname)
+        except os.error:
+            names = []
+        ok = 1
+        for name in names:
+            if not remove(os.path.join(fullname, name)):
+                ok = 0
+        if not ok:
+            return 0
+        try:
+            os.rmdir(fullname)
+        except os.error, msg:
+            print "Can't remove local directory %s: %s" % \
+                  (`fullname`, str(msg))
+            return 0
+    else:
+        try:
+            os.unlink(fullname)
+        except os.error, msg:
+            print "Can't remove local file %s: %s" % \
+                  (`fullname`, str(msg))
+            return 0
+    return 1
 
 # Wrapper around a file for writing to write a hash sign every block.
 class LoggingFile:
-       def __init__(self, fp, blocksize, outfp):
-               self.fp = fp
-               self.bytes = 0
-               self.hashes = 0
-               self.blocksize = blocksize
-               self.outfp = outfp
-       def write(self, data):
-               self.bytes = self.bytes + len(data)
-               hashes = int(self.bytes) / self.blocksize
-               while hashes > self.hashes:
-                       self.outfp.write('#')
-                       self.outfp.flush()
-                       self.hashes = self.hashes + 1
-               self.fp.write(data)
-       def close(self):
-               self.outfp.write('\n')
+    def __init__(self, fp, blocksize, outfp):
+        self.fp = fp
+        self.bytes = 0
+        self.hashes = 0
+        self.blocksize = blocksize
+        self.outfp = outfp
+    def write(self, data):
+        self.bytes = self.bytes + len(data)
+        hashes = int(self.bytes) / self.blocksize
+        while hashes > self.hashes:
+            self.outfp.write('#')
+            self.outfp.flush()
+            self.hashes = self.hashes + 1
+        self.fp.write(data)
+    def close(self):
+        self.outfp.write('\n')
 
 # Ask permission to download a file.
 def askabout(filetype, filename, pwd):
-       prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd)
-       while 1:
-               reply = string.lower(string.strip(raw_input(prompt)))
-               if reply in ['y', 'ye', 'yes']:
-                       return 1
-               if reply in ['', 'n', 'no', 'nop', 'nope']:
-                       return 0
-               print 'Please answer yes or no.'
+    prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd)
+    while 1:
+        reply = string.lower(string.strip(raw_input(prompt)))
+        if reply in ['y', 'ye', 'yes']:
+            return 1
+        if reply in ['', 'n', 'no', 'nop', 'nope']:
+            return 0
+        print 'Please answer yes or no.'
 
 # Create a directory if it doesn't exist.  Recursively create the
 # parent directory as well if needed.
 def makedir(pathname):
-       if os.path.isdir(pathname):
-               return
-       dirname = os.path.dirname(pathname)
-       if dirname: makedir(dirname)
-       os.mkdir(pathname, 0777)
+    if os.path.isdir(pathname):
+        return
+    dirname = os.path.dirname(pathname)
+    if dirname: makedir(dirname)
+    os.mkdir(pathname, 0777)
 
 # Write a dictionary to a file in a way that can be read back using
 # rval() but is still somewhat readable (i.e. not a single long line).
 # Also creates a backup file.
 def writedict(dict, filename):
-       dir, file = os.path.split(filename)
-       tempname = os.path.join(dir, '@' + file)
-       backup = os.path.join(dir, file + '~')
-       try:
-               os.unlink(backup)
-       except os.error:
-               pass
-       fp = open(tempname, 'w')
-       fp.write('{\n')
-       for key, value in dict.items():
-               fp.write('%s: %s,\n' % (`key`, `value`))
-       fp.write('}\n')
-       fp.close()
-       try:
-               os.rename(filename, backup)
-       except os.error:
-               pass
-       os.rename(tempname, filename)
+    dir, file = os.path.split(filename)
+    tempname = os.path.join(dir, '@' + file)
+    backup = os.path.join(dir, file + '~')
+    try:
+        os.unlink(backup)
+    except os.error:
+        pass
+    fp = open(tempname, 'w')
+    fp.write('{\n')
+    for key, value in dict.items():
+        fp.write('%s: %s,\n' % (`key`, `value`))
+    fp.write('}\n')
+    fp.close()
+    try:
+        os.rename(filename, backup)
+    except os.error:
+        pass
+    os.rename(tempname, filename)
 
 
 if __name__ == '__main__':
-       main()
+    main()
index 39b42ffc05fa0560d7a8d75e4b06a47ab52c532c..bc70a32309e7e76717e369034cb6bb329195d801 100644 (file)
@@ -180,14 +180,14 @@ class Codec(codecs.Codec):
     def encode(self,input,errors='strict'):
 
         return codecs.charmap_encode(input,errors,encoding_map)
-        
+
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_map)
 
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
-        
+
 class StreamReader(Codec,codecs.StreamReader):
     pass
 
@@ -210,7 +210,7 @@ def getregentry():
     else:
         l.append("decoding_map = {")
         splits = 0
-        
+
     mappings = map.items()
     mappings.sort()
     append = l.append
@@ -290,7 +290,7 @@ def convertdir(dir,prefix='',comments=1):
             print '* conversion failed'
 
 def rewritepythondir(dir,prefix='',comments=1):
-    
+
     mapnames = os.listdir(dir)
     for mapname in mapnames:
         if not mapname.endswith('.mapping'):
index fd4b2670bcac1c63e99eb9edc7e56050970e2c8a..92f64c0882cad57935f6ab9b7c8e3c9b2c0ff1b7 100755 (executable)
@@ -41,110 +41,110 @@ p_char = regex.compile("'\(\\\\.[^\\\\]*\|[^\\\\]\)'")
 filedict = {}
 
 try:
-       searchdirs=string.splitfields(os.environ['include'],';')
+    searchdirs=string.splitfields(os.environ['include'],';')
 except KeyError:
-       try:
-               searchdirs=string.splitfields(os.environ['INCLUDE'],';')
-       except KeyError:
-               try:
-                       if string.find( sys.platform, "beos" ) == 0:
-                               searchdirs=string.splitfields(os.environ['BEINCLUDES'],';')
-                       else:
-                               raise KeyError
-               except KeyError:
-                       searchdirs=['/usr/include']
+    try:
+        searchdirs=string.splitfields(os.environ['INCLUDE'],';')
+    except KeyError:
+        try:
+            if string.find( sys.platform, "beos" ) == 0:
+                searchdirs=string.splitfields(os.environ['BEINCLUDES'],';')
+            else:
+                raise KeyError
+        except KeyError:
+            searchdirs=['/usr/include']
 
 def main():
-       global filedict
-       opts, args = getopt.getopt(sys.argv[1:], 'i:')
-       for o, a in opts:
-               if o == '-i':
-                       ignores.append(regex.compile(a))
-       if not args:
-               args = ['-']
-       for filename in args:
-               if filename == '-':
-                       sys.stdout.write('# Generated by h2py from stdin\n')
-                       process(sys.stdin, sys.stdout)
-               else:
-                       fp = open(filename, 'r')
-                       outfile = os.path.basename(filename)
-                       i = string.rfind(outfile, '.')
-                       if i > 0: outfile = outfile[:i]
-                       outfile = string.upper(outfile)
-                       outfile = outfile + '.py'
-                       outfp = open(outfile, 'w')
-                       outfp.write('# Generated by h2py from %s\n' % filename)
-                       filedict = {}
-                       for dir in searchdirs:
-                               if filename[:len(dir)] == dir:
-                                       filedict[filename[len(dir)+1:]] = None  # no '/' trailing
-                                       break
-                       process(fp, outfp)
-                       outfp.close()
-                       fp.close()
+    global filedict
+    opts, args = getopt.getopt(sys.argv[1:], 'i:')
+    for o, a in opts:
+        if o == '-i':
+            ignores.append(regex.compile(a))
+    if not args:
+        args = ['-']
+    for filename in args:
+        if filename == '-':
+            sys.stdout.write('# Generated by h2py from stdin\n')
+            process(sys.stdin, sys.stdout)
+        else:
+            fp = open(filename, 'r')
+            outfile = os.path.basename(filename)
+            i = string.rfind(outfile, '.')
+            if i > 0: outfile = outfile[:i]
+            outfile = string.upper(outfile)
+            outfile = outfile + '.py'
+            outfp = open(outfile, 'w')
+            outfp.write('# Generated by h2py from %s\n' % filename)
+            filedict = {}
+            for dir in searchdirs:
+                if filename[:len(dir)] == dir:
+                    filedict[filename[len(dir)+1:]] = None  # no '/' trailing
+                    break
+            process(fp, outfp)
+            outfp.close()
+            fp.close()
 
 def process(fp, outfp, env = {}):
-       lineno = 0
-       while 1:
-               line = fp.readline()
-               if not line: break
-               lineno = lineno + 1
-               n = p_define.match(line)
-               if n >= 0:
-                       # gobble up continuation lines
-                       while line[-2:] == '\\\n':
-                               nextline = fp.readline()
-                               if not nextline: break
-                               lineno = lineno + 1
-                               line = line + nextline
-                       name = p_define.group(1)
-                       body = line[n:]
-                       # replace ignored patterns by spaces
-                       for p in ignores:
-                               body = regsub.gsub(p, ' ', body)
-                       # replace char literals by ord(...)
-                       body = regsub.gsub(p_char, 'ord(\\0)', body)
-                       stmt = '%s = %s\n' % (name, string.strip(body))
-                       ok = 0
-                       try:
-                               exec stmt in env
-                       except:
-                               sys.stderr.write('Skipping: %s' % stmt)
-                       else:
-                               outfp.write(stmt)
-               n =p_macro.match(line)
-               if n >= 0:
-                       macro, arg = p_macro.group(1, 2)
-                       body = line[n:]
-                       for p in ignores:
-                               body = regsub.gsub(p, ' ', body)
-                       body = regsub.gsub(p_char, 'ord(\\0)', body)
-                       stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
-                       try:
-                               exec stmt in env
-                       except:
-                               sys.stderr.write('Skipping: %s' % stmt)
-                       else:
-                               outfp.write(stmt)
-               if p_include.match(line) >= 0:
-                       regs = p_include.regs
-                       a, b = regs[1]
-                       filename = line[a:b]
-                       if not filedict.has_key(filename):
-                               filedict[filename] = None
-                               inclfp = None
-                               for dir in searchdirs:
-                                       try:
-                                               inclfp = open(dir + '/' + filename, 'r')
-                                               break
-                                       except IOError:
-                                               pass
-                               if inclfp:
-                                       outfp.write(
-                                               '\n# Included from %s\n' % filename)
-                                       process(inclfp, outfp, env)
-                               else:
-                                       sys.stderr.write('Warning - could not find file %s' % filename)
+    lineno = 0
+    while 1:
+        line = fp.readline()
+        if not line: break
+        lineno = lineno + 1
+        n = p_define.match(line)
+        if n >= 0:
+            # gobble up continuation lines
+            while line[-2:] == '\\\n':
+                nextline = fp.readline()
+                if not nextline: break
+                lineno = lineno + 1
+                line = line + nextline
+            name = p_define.group(1)
+            body = line[n:]
+            # replace ignored patterns by spaces
+            for p in ignores:
+                body = regsub.gsub(p, ' ', body)
+            # replace char literals by ord(...)
+            body = regsub.gsub(p_char, 'ord(\\0)', body)
+            stmt = '%s = %s\n' % (name, string.strip(body))
+            ok = 0
+            try:
+                exec stmt in env
+            except:
+                sys.stderr.write('Skipping: %s' % stmt)
+            else:
+                outfp.write(stmt)
+        n =p_macro.match(line)
+        if n >= 0:
+            macro, arg = p_macro.group(1, 2)
+            body = line[n:]
+            for p in ignores:
+                body = regsub.gsub(p, ' ', body)
+            body = regsub.gsub(p_char, 'ord(\\0)', body)
+            stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
+            try:
+                exec stmt in env
+            except:
+                sys.stderr.write('Skipping: %s' % stmt)
+            else:
+                outfp.write(stmt)
+        if p_include.match(line) >= 0:
+            regs = p_include.regs
+            a, b = regs[1]
+            filename = line[a:b]
+            if not filedict.has_key(filename):
+                filedict[filename] = None
+                inclfp = None
+                for dir in searchdirs:
+                    try:
+                        inclfp = open(dir + '/' + filename, 'r')
+                        break
+                    except IOError:
+                        pass
+                if inclfp:
+                    outfp.write(
+                            '\n# Included from %s\n' % filename)
+                    process(inclfp, outfp, env)
+                else:
+                    sys.stderr.write('Warning - could not find file %s' % filename)
 
 main()
index 939bea9afa500ca9682083a4e76da4fdd5c4c647..da14437d2a2dd620a94cfca038c0e7c6e6cadead 100755 (executable)
@@ -3,7 +3,7 @@
 # Selectively preprocess #ifdef / #ifndef statements.
 # Usage:
 # ifdef [-Dname] ... [-Uname] ... [file] ...
-# 
+#
 # This scans the file(s), looking for #ifdef and #ifndef preprocessor
 # commands that test for one of the names mentioned in the -D and -U
 # options.  On standard output it writes a copy of the input file(s)
@@ -35,79 +35,79 @@ defs = []
 undefs = []
 
 def main():
-       opts, args = getopt.getopt(sys.argv[1:], 'D:U:')
-       for o, a in opts:
-               if o == '-D':
-                       defs.append(a)
-               if o == '-U':
-                       undefs.append(a)
-       if not args:
-               args = ['-']
-       for file in args:
-               if file == '-':
-                       process(sys.stdin, sys.stdout)
-               else:
-                       f = open(file, 'r')
-                       process(f, sys.stdout)
-                       f.close()
+    opts, args = getopt.getopt(sys.argv[1:], 'D:U:')
+    for o, a in opts:
+        if o == '-D':
+            defs.append(a)
+        if o == '-U':
+            undefs.append(a)
+    if not args:
+        args = ['-']
+    for file in args:
+        if file == '-':
+            process(sys.stdin, sys.stdout)
+        else:
+            f = open(file, 'r')
+            process(f, sys.stdout)
+            f.close()
 
 def process(fpi, fpo):
-       keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif')
-       ok = 1
-       stack = []
-       while 1:
-               line = fpi.readline()
-               if not line: break
-               while line[-2:] == '\\\n':
-                       nextline = fpi.readline()
-                       if not nextline: break
-                       line = line + nextline
-               tmp = string.strip(line)
-               if tmp[:1] != '#':
-                       if ok: fpo.write(line)
-                       continue
-               tmp = string.strip(tmp[1:])
-               words = string.split(tmp)
-               keyword = words[0]
-               if keyword not in keywords:
-                       if ok: fpo.write(line)
-                       continue
-               if keyword in ('ifdef', 'ifndef') and len(words) == 2:
-                       if keyword == 'ifdef':
-                               ko = 1
-                       else:
-                               ko = 0
-                       word = words[1]
-                       if word in defs:
-                               stack.append((ok, ko, word))
-                               if not ko: ok = 0
-                       elif word in undefs:
-                               stack.append((ok, not ko, word))
-                               if ko: ok = 0
-                       else:
-                               stack.append((ok, -1, word))
-                               if ok: fpo.write(line)
-               elif keyword == 'if':
-                       stack.append((ok, -1, ''))
-                       if ok: fpo.write(line)
-               elif keyword == 'else' and stack:
-                       s_ok, s_ko, s_word = stack[-1]
-                       if s_ko < 0:
-                               if ok: fpo.write(line)
-                       else:
-                               s_ko = not s_ko
-                               ok = s_ok
-                               if not s_ko: ok = 0
-                               stack[-1] = s_ok, s_ko, s_word
-               elif keyword == 'endif' and stack:
-                       s_ok, s_ko, s_word = stack[-1]
-                       if s_ko < 0:
-                               if ok: fpo.write(line)
-                       del stack[-1]
-                       ok = s_ok
-               else:
-                       sys.stderr.write('Unknown keyword %s\n' % keyword)
-       if stack:
-               sys.stderr.write('stack: %s\n' % stack)
+    keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif')
+    ok = 1
+    stack = []
+    while 1:
+        line = fpi.readline()
+        if not line: break
+        while line[-2:] == '\\\n':
+            nextline = fpi.readline()
+            if not nextline: break
+            line = line + nextline
+        tmp = string.strip(line)
+        if tmp[:1] != '#':
+            if ok: fpo.write(line)
+            continue
+        tmp = string.strip(tmp[1:])
+        words = string.split(tmp)
+        keyword = words[0]
+        if keyword not in keywords:
+            if ok: fpo.write(line)
+            continue
+        if keyword in ('ifdef', 'ifndef') and len(words) == 2:
+            if keyword == 'ifdef':
+                ko = 1
+            else:
+                ko = 0
+            word = words[1]
+            if word in defs:
+                stack.append((ok, ko, word))
+                if not ko: ok = 0
+            elif word in undefs:
+                stack.append((ok, not ko, word))
+                if ko: ok = 0
+            else:
+                stack.append((ok, -1, word))
+                if ok: fpo.write(line)
+        elif keyword == 'if':
+            stack.append((ok, -1, ''))
+            if ok: fpo.write(line)
+        elif keyword == 'else' and stack:
+            s_ok, s_ko, s_word = stack[-1]
+            if s_ko < 0:
+                if ok: fpo.write(line)
+            else:
+                s_ko = not s_ko
+                ok = s_ok
+                if not s_ko: ok = 0
+                stack[-1] = s_ok, s_ko, s_word
+        elif keyword == 'endif' and stack:
+            s_ok, s_ko, s_word = stack[-1]
+            if s_ko < 0:
+                if ok: fpo.write(line)
+            del stack[-1]
+            ok = s_ok
+        else:
+            sys.stderr.write('Unknown keyword %s\n' % keyword)
+    if stack:
+        sys.stderr.write('stack: %s\n' % stack)
 
 main()
index 677be399e192cb9f464c2d1e5f8629c9bb4cef18..502873eca2f5cc3a24f980949f5a0743ad0d1f5b 100755 (executable)
@@ -17,63 +17,63 @@ LINK = '.LINK' # Name of special symlink at the top.
 debug = 0
 
 def main():
-       if not 3 <= len(sys.argv) <= 4:
-               print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
-               return 2
-       oldtree, newtree = sys.argv[1], sys.argv[2]
-       if len(sys.argv) > 3:
-               link = sys.argv[3]
-               link_may_fail = 1
-       else:
-               link = LINK
-               link_may_fail = 0
-       if not os.path.isdir(oldtree):
-               print oldtree + ': not a directory'
-               return 1
-       try:
-               os.mkdir(newtree, 0777)
-       except os.error, msg:
-               print newtree + ': cannot mkdir:', msg
-               return 1
-       linkname = os.path.join(newtree, link)
-       try:
-               os.symlink(os.path.join(os.pardir, oldtree), linkname)
-       except os.error, msg:
-               if not link_may_fail:
-                       print linkname + ': cannot symlink:', msg
-                       return 1
-               else:
-                       print linkname + ': warning: cannot symlink:', msg
-       linknames(oldtree, newtree, link)
-       return 0
+    if not 3 <= len(sys.argv) <= 4:
+        print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
+        return 2
+    oldtree, newtree = sys.argv[1], sys.argv[2]
+    if len(sys.argv) > 3:
+        link = sys.argv[3]
+        link_may_fail = 1
+    else:
+        link = LINK
+        link_may_fail = 0
+    if not os.path.isdir(oldtree):
+        print oldtree + ': not a directory'
+        return 1
+    try:
+        os.mkdir(newtree, 0777)
+    except os.error, msg:
+        print newtree + ': cannot mkdir:', msg
+        return 1
+    linkname = os.path.join(newtree, link)
+    try:
+        os.symlink(os.path.join(os.pardir, oldtree), linkname)
+    except os.error, msg:
+        if not link_may_fail:
+            print linkname + ': cannot symlink:', msg
+            return 1
+        else:
+            print linkname + ': warning: cannot symlink:', msg
+    linknames(oldtree, newtree, link)
+    return 0
 
 def linknames(old, new, link):
-       if debug: print 'linknames', (old, new, link)
-       try:
-               names = os.listdir(old)
-       except os.error, msg:
-               print old + ': warning: cannot listdir:', msg
-               return
-       for name in names:
-               if name not in (os.curdir, os.pardir):
-                       oldname = os.path.join(old, name)
-                       linkname = os.path.join(link, name)
-                       newname = os.path.join(new, name)
-                       if debug > 1: print oldname, newname, linkname
-                       if os.path.isdir(oldname) and \
-                          not os.path.islink(oldname):
-                               try:
-                                       os.mkdir(newname, 0777)
-                                       ok = 1
-                               except:
-                                       print newname + \
-                                             ': warning: cannot mkdir:', msg
-                                       ok = 0
-                               if ok:
-                                       linkname = os.path.join(os.pardir,
-                                                               linkname)
-                                       linknames(oldname, newname, linkname)
-                       else:
-                               os.symlink(linkname, newname)
+    if debug: print 'linknames', (old, new, link)
+    try:
+        names = os.listdir(old)
+    except os.error, msg:
+        print old + ': warning: cannot listdir:', msg
+        return
+    for name in names:
+        if name not in (os.curdir, os.pardir):
+            oldname = os.path.join(old, name)
+            linkname = os.path.join(link, name)
+            newname = os.path.join(new, name)
+            if debug > 1: print oldname, newname, linkname
+            if os.path.isdir(oldname) and \
+               not os.path.islink(oldname):
+                try:
+                    os.mkdir(newname, 0777)
+                    ok = 1
+                except:
+                    print newname + \
+                          ': warning: cannot mkdir:', msg
+                    ok = 0
+                if ok:
+                    linkname = os.path.join(os.pardir,
+                                            linkname)
+                    linknames(oldname, newname, linkname)
+            else:
+                os.symlink(linkname, newname)
 
 sys.exit(main())
index d107080e8ecec77f801ac469c72a5c06660bf7f0..cbcd80a63ba90c6195456e674f8769982b0a5746 100755 (executable)
@@ -8,18 +8,18 @@
 import sys, os
 
 def lll(dirname):
-       for name in os.listdir(dirname):
-               if name not in (os.curdir, os.pardir):
-                       full = os.path.join(dirname, name)
-                       if os.path.islink(full):
-                               print name, '->', os.readlink(full)
+    for name in os.listdir(dirname):
+        if name not in (os.curdir, os.pardir):
+            full = os.path.join(dirname, name)
+            if os.path.islink(full):
+                print name, '->', os.readlink(full)
 
 args = sys.argv[1:]
 if not args: args = [os.curdir]
 first = 1
 for arg in args:
-       if len(args) > 1:
-               if not first: print
-               first = 0
-               print arg + ':'
-       lll(arg)
+    if len(args) > 1:
+        if not first: print
+        first = 0
+        print arg + ':'
+    lll(arg)
index a09fd46f13830d09d0f15c6524d5c59621b7ce59..1d9bf2b1d1d5312c7ac231557bdf8054e970aec9 100755 (executable)
@@ -116,7 +116,7 @@ def digest_chunk(chunk):
             text.insert(0, revline)
         records.append((date, working_file, rev, author, text))
     return records
-        
+
 def format_output(database):
     prevtext = None
     prev = []
index 4a0669a1ab0b57c785c79f200827c8b0eec9617d..113b376cfef73e39cd0c0fc6650e7dd9dcc5f249 100755 (executable)
@@ -166,7 +166,7 @@ def parsedir(dir, modify):
     # find all numeric file names and sort them
     files = filter(lambda fn, pat=pat: pat.match(fn) is not None, os.listdir('.'))
     files.sort(sort_numeric)
-    
+
     for fn in files:
         # Lets try to parse the file.
         fp = open(fn)
index b0918d61a2aeb68e67218fbe0e668246f72daf72..a9b7c213c4bc70ab77bcdbf0c44c388be614807f 100755 (executable)
@@ -1,9 +1,9 @@
 #! /usr/bin/env python
 
-# Fix Python source files to avoid using 
-#      def method(self, (arg1, ..., argn)):
+# Fix Python source files to avoid using
+#       def method(self, (arg1, ..., argn)):
 # instead of the more rational
-#      def method(self, arg1, ..., argn):
+#       def method(self, arg1, ..., argn):
 #
 # Command line arguments are files or directories to be processed.
 # Directories are searched recursively for files whose name looks
@@ -37,137 +37,137 @@ dbg = err
 rep = sys.stdout.write
 
 def main():
-       bad = 0
-       if not sys.argv[1:]: # No arguments
-               err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
-               sys.exit(2)
-       for arg in sys.argv[1:]:
-               if os.path.isdir(arg):
-                       if recursedown(arg): bad = 1
-               elif os.path.islink(arg):
-                       err(arg + ': will not process symbolic links\n')
-                       bad = 1
-               else:
-                       if fix(arg): bad = 1
-       sys.exit(bad)
+    bad = 0
+    if not sys.argv[1:]: # No arguments
+        err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
+        sys.exit(2)
+    for arg in sys.argv[1:]:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-       return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-       dbg('recursedown(' + `dirname` + ')\n')
-       bad = 0
-       try:
-               names = os.listdir(dirname)
-       except os.error, msg:
-               err(dirname + ': cannot list directory: ' + `msg` + '\n')
-               return 1
-       names.sort()
-       subdirs = []
-       for name in names:
-               if name in (os.curdir, os.pardir): continue
-               fullname = os.path.join(dirname, name)
-               if os.path.islink(fullname): pass
-               elif os.path.isdir(fullname):
-                       subdirs.append(fullname)
-               elif ispython(name):
-                       if fix(fullname): bad = 1
-       for fullname in subdirs:
-               if recursedown(fullname): bad = 1
-       return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##     dbg('fix(' + `filename` + ')\n')
-       try:
-               f = open(filename, 'r')
-       except IOError, msg:
-               err(filename + ': cannot open: ' + `msg` + '\n')
-               return 1
-       head, tail = os.path.split(filename)
-       tempname = os.path.join(head, '@' + tail)
-       g = None
-       # If we find a match, we rewind the file and start over but
-       # now copy everything to a temp file.
-       lineno = 0
-       while 1:
-               line = f.readline()
-               if not line: break
-               lineno = lineno + 1
-               if g is None and '\0' in line:
-                       # Check for binary files
-                       err(filename + ': contains null bytes; not fixed\n')
-                       f.close()
-                       return 1
-               if lineno == 1 and g is None and line[:2] == '#!':
-                       # Check for non-Python scripts
-                       words = string.split(line[2:])
-                       if words and regex.search('[pP]ython', words[0]) < 0:
-                               msg = filename + ': ' + words[0]
-                               msg = msg + ' script; not fixed\n'
-                               err(msg)
-                               f.close()
-                               return 1
-               while line[-2:] == '\\\n':
-                       nextline = f.readline()
-                       if not nextline: break
-                       line = line + nextline
-                       lineno = lineno + 1
-               newline = fixline(line)
-               if newline != line:
-                       if g is None:
-                               try:
-                                       g = open(tempname, 'w')
-                               except IOError, msg:
-                                       f.close()
-                                       err(tempname+': cannot create: '+\
-                                           `msg`+'\n')
-                                       return 1
-                               f.seek(0)
-                               lineno = 0
-                               rep(filename + ':\n')
-                               continue # restart from the beginning
-                       rep(`lineno` + '\n')
-                       rep('< ' + line)
-                       rep('> ' + newline)
-               if g is not None:
-                       g.write(newline)
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        if g is None and '\0' in line:
+            # Check for binary files
+            err(filename + ': contains null bytes; not fixed\n')
+            f.close()
+            return 1
+        if lineno == 1 and g is None and line[:2] == '#!':
+            # Check for non-Python scripts
+            words = string.split(line[2:])
+            if words and regex.search('[pP]ython', words[0]) < 0:
+                msg = filename + ': ' + words[0]
+                msg = msg + ' script; not fixed\n'
+                err(msg)
+                f.close()
+                return 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+\
+                        `msg`+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
 
-       # End of file
-       f.close()
-       if not g: return 0 # No changes
-       
-       # Finishing touch -- move files
+    # End of file
+    f.close()
+    if not g: return 0 # No changes
 
-       # First copy the file's mode to the temp file
-       try:
-               statbuf = os.stat(filename)
-               os.chmod(tempname, statbuf[ST_MODE] & 07777)
-       except os.error, msg:
-               err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-       # Then make a backup of the original file as filename~
-       try:
-               os.rename(filename, filename + '~')
-       except os.error, msg:
-               err(filename + ': warning: backup failed (' + `msg` + ')\n')
-       # Now move the temp file to the original file
-       try:
-               os.rename(tempname, filename)
-       except os.error, msg:
-               err(filename + ': rename failed (' + `msg` + ')\n')
-               return 1
-       # Return succes
-       return 0
+    # Finishing touch -- move files
+
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 
 fixpat = '^[ \t]+def +[a-zA-Z0-9_]+ *( *self *, *\(( *\(.*\) *)\) *) *:'
 fixprog = regex.compile(fixpat)
 
 def fixline(line):
-       if fixprog.match(line) >= 0:
-               (a, b), (c, d) = fixprog.regs[1:3]
-               line = line[:a] + line[c:d] + line[b:]
-       return line
+    if fixprog.match(line) >= 0:
+        (a, b), (c, d) = fixprog.regs[1:3]
+        line = line[:a] + line[c:d] + line[b:]
+    return line
 
 
 main()
index a065c1759a511f1d793fbe2130447261a9381b9f..eda01a8bb91a7d9f41f4ae2aeaa679ebad5da7f0 100755 (executable)
@@ -15,51 +15,51 @@ error = 'mkreal error'
 BUFSIZE = 32*1024
 
 def mkrealfile(name):
-       st = os.stat(name) # Get the mode
-       mode = S_IMODE(st[ST_MODE])
-       linkto = os.readlink(name) # Make sure again it's a symlink
-       f_in = open(name, 'r') # This ensures it's a file
-       os.unlink(name)
-       f_out = open(name, 'w')
-       while 1:
-               buf = f_in.read(BUFSIZE)
-               if not buf: break
-               f_out.write(buf)
-       del f_out # Flush data to disk before changing mode
-       os.chmod(name, mode)
+    st = os.stat(name) # Get the mode
+    mode = S_IMODE(st[ST_MODE])
+    linkto = os.readlink(name) # Make sure again it's a symlink
+    f_in = open(name, 'r') # This ensures it's a file
+    os.unlink(name)
+    f_out = open(name, 'w')
+    while 1:
+        buf = f_in.read(BUFSIZE)
+        if not buf: break
+        f_out.write(buf)
+    del f_out # Flush data to disk before changing mode
+    os.chmod(name, mode)
 
 def mkrealdir(name):
-       st = os.stat(name) # Get the mode
-       mode = S_IMODE(st[ST_MODE])
-       linkto = os.readlink(name)
-       files = os.listdir(name)
-       os.unlink(name)
-       os.mkdir(name, mode)
-       os.chmod(name, mode)
-       linkto = join(os.pardir, linkto)
-       #
-       for file in files:
-               if file not in (os.curdir, os.pardir):
-                       os.symlink(join(linkto, file), join(name, file))
+    st = os.stat(name) # Get the mode
+    mode = S_IMODE(st[ST_MODE])
+    linkto = os.readlink(name)
+    files = os.listdir(name)
+    os.unlink(name)
+    os.mkdir(name, mode)
+    os.chmod(name, mode)
+    linkto = join(os.pardir, linkto)
+    #
+    for file in files:
+        if file not in (os.curdir, os.pardir):
+            os.symlink(join(linkto, file), join(name, file))
 
 def main():
-       sys.stdout = sys.stderr
-       progname = os.path.basename(sys.argv[0])
-       if progname == '-c': progname = 'mkreal'
-       args = sys.argv[1:]
-       if not args:
-               print 'usage:', progname, 'path ...'
-               sys.exit(2)
-       status = 0
-       for name in args:
-               if not os.path.islink(name):
-                       print progname+':', name+':', 'not a symlink'
-                       status = 1
-               else:
-                       if os.path.isdir(name):
-                               mkrealdir(name)
-                       else:
-                               mkrealfile(name)
-       sys.exit(status)
+    sys.stdout = sys.stderr
+    progname = os.path.basename(sys.argv[0])
+    if progname == '-c': progname = 'mkreal'
+    args = sys.argv[1:]
+    if not args:
+        print 'usage:', progname, 'path ...'
+        sys.exit(2)
+    status = 0
+    for name in args:
+        if not os.path.islink(name):
+            print progname+':', name+':', 'not a symlink'
+            status = 1
+        else:
+            if os.path.isdir(name):
+                mkrealdir(name)
+            else:
+                mkrealfile(name)
+    sys.exit(status)
 
 main()
index 6fd17b2fad8bc8578e96e576057c9b4dc08f4877..fc1022a42b43acd7ca2215ff82df42b48767fd3a 100755 (executable)
@@ -98,6 +98,6 @@ def main():
     f = sys.stdout # open('PC/python_nt.def','w')
     f.write(DEF_TEMPLATE % (exports))
     f.close()
-    
+
 if __name__ == '__main__':
     main()
index 4eab79b8832a27e33d79593a9f0df207c813328a..e25e5b8414ce1d923ffe9eff345dacea694aead3 100755 (executable)
@@ -40,19 +40,19 @@ matcher = regex.compile('\(.*\):\t?........ \(.\) \(.*\)$')
 # If there is no list for the key yet, it is created.
 #
 def store(dict, key, item):
-       if dict.has_key(key):
-               dict[key].append(item)
-       else:
-               dict[key] = [item]
+    if dict.has_key(key):
+        dict[key].append(item)
+    else:
+        dict[key] = [item]
 
 # Return a flattened version of a list of strings: the concatenation
 # of its elements with intervening spaces.
 #
 def flat(list):
-       s = ''
-       for item in list:
-               s = s + ' ' + item
-       return s[1:]
+    s = ''
+    for item in list:
+        s = s + ' ' + item
+    return s[1:]
 
 # Global variables mapping defined/undefined names to files and back.
 #
@@ -65,151 +65,151 @@ undef2file = {}
 # Argument is an open file.
 #
 def readinput(file):
-       while 1:
-               s = file.readline()
-               if not s:
-                       break
-               # If you get any output from this line,
-               # it is probably caused by an unexpected input line:
-               if matcher.search(s) < 0: s; continue # Shouldn't happen
-               (ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
-               fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
-               if type in definitions:
-                       store(def2file, name, fn)
-                       store(file2def, fn, name)
-               elif type in externals:
-                       store(file2undef, fn, name)
-                       store(undef2file, name, fn)
-               elif not type in ignore:
-                       print fn + ':' + name + ': unknown type ' + type
+    while 1:
+        s = file.readline()
+        if not s:
+            break
+        # If you get any output from this line,
+        # it is probably caused by an unexpected input line:
+        if matcher.search(s) < 0: s; continue # Shouldn't happen
+        (ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
+        fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
+        if type in definitions:
+            store(def2file, name, fn)
+            store(file2def, fn, name)
+        elif type in externals:
+            store(file2undef, fn, name)
+            store(undef2file, name, fn)
+        elif not type in ignore:
+            print fn + ':' + name + ': unknown type ' + type
 
 # Print all names that were undefined in some module and where they are
 # defined.
 #
 def printcallee():
-       flist = file2undef.keys()
-       flist.sort()
-       for file in flist:
-               print file + ':'
-               elist = file2undef[file]
-               elist.sort()
-               for ext in elist:
-                       if len(ext) >= 8:
-                               tabs = '\t'
-                       else:
-                               tabs = '\t\t'
-                       if not def2file.has_key(ext):
-                               print '\t' + ext + tabs + ' *undefined'
-                       else:
-                               print '\t' + ext + tabs + flat(def2file[ext])
+    flist = file2undef.keys()
+    flist.sort()
+    for file in flist:
+        print file + ':'
+        elist = file2undef[file]
+        elist.sort()
+        for ext in elist:
+            if len(ext) >= 8:
+                tabs = '\t'
+            else:
+                tabs = '\t\t'
+            if not def2file.has_key(ext):
+                print '\t' + ext + tabs + ' *undefined'
+            else:
+                print '\t' + ext + tabs + flat(def2file[ext])
 
 # Print for each module the names of the other modules that use it.
 #
 def printcaller():
-       files = file2def.keys()
-       files.sort()
-       for file in files:
-               callers = []
-               for label in file2def[file]:
-                       if undef2file.has_key(label):
-                               callers = callers + undef2file[label]
-               if callers:
-                       callers.sort()
-                       print file + ':'
-                       lastfn = ''
-                       for fn in callers:
-                               if fn <> lastfn:
-                                       print '\t' + fn
-                               lastfn = fn
-               else:
-                       print file + ': unused'
+    files = file2def.keys()
+    files.sort()
+    for file in files:
+        callers = []
+        for label in file2def[file]:
+            if undef2file.has_key(label):
+                callers = callers + undef2file[label]
+        if callers:
+            callers.sort()
+            print file + ':'
+            lastfn = ''
+            for fn in callers:
+                if fn <> lastfn:
+                    print '\t' + fn
+                lastfn = fn
+        else:
+            print file + ': unused'
 
 # Print undefine names and where they are used.
 #
 def printundef():
-       undefs = {}
-       for file in file2undef.keys():
-               for ext in file2undef[file]:
-                       if not def2file.has_key(ext):
-                               store(undefs, ext, file)
-       elist = undefs.keys()
-       elist.sort()
-       for ext in elist:
-               print ext + ':'
-               flist = undefs[ext]
-               flist.sort()
-               for file in flist:
-                       print '\t' + file
+    undefs = {}
+    for file in file2undef.keys():
+        for ext in file2undef[file]:
+            if not def2file.has_key(ext):
+                store(undefs, ext, file)
+    elist = undefs.keys()
+    elist.sort()
+    for ext in elist:
+        print ext + ':'
+        flist = undefs[ext]
+        flist.sort()
+        for file in flist:
+            print '\t' + file
 
 # Print warning messages about names defined in more than one file.
 #
 def warndups():
-       savestdout = sys.stdout
-       sys.stdout = sys.stderr
-       names = def2file.keys()
-       names.sort()
-       for name in names:
-               if len(def2file[name]) > 1:
-                       print 'warning:', name, 'multiply defined:',
-                       print flat(def2file[name])
-       sys.stdout = savestdout
+    savestdout = sys.stdout
+    sys.stdout = sys.stderr
+    names = def2file.keys()
+    names.sort()
+    for name in names:
+        if len(def2file[name]) > 1:
+            print 'warning:', name, 'multiply defined:',
+            print flat(def2file[name])
+    sys.stdout = savestdout
 
 # Main program
 #
 def main():
-       try:
-               optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
-       except getopt.error:
-               sys.stdout = sys.stderr
-               print 'Usage:', os.path.basename(sys.argv[0]),
-               print           '[-cdu] [file] ...'
-               print '-c: print callers per objectfile'
-               print '-d: print callees per objectfile'
-               print '-u: print usage of undefined symbols'
-               print 'If none of -cdu is specified, all are assumed.'
-               print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
-               print 'e.g.: nm -o /lib/libc.a | objgraph'
-               return 1
-       optu = optc = optd = 0
-       for opt, void in optlist:
-               if opt == '-u':
-                       optu = 1
-               elif opt == '-c':
-                       optc = 1
-               elif opt == '-d':
-                       optd = 1
-       if optu == optc == optd == 0:
-               optu = optc = optd = 1
-       if not args:
-               args = ['-']
-       for file in args:
-               if file == '-':
-                       readinput(sys.stdin)
-               else:
-                       readinput(open(file, 'r'))
-       #
-       warndups()
-       #
-       more = (optu + optc + optd > 1)
-       if optd:
-               if more:
-                       print '---------------All callees------------------'
-               printcallee()
-       if optu:
-               if more:
-                       print '---------------Undefined callees------------'
-               printundef()
-       if optc:
-               if more:
-                       print '---------------All Callers------------------'
-               printcaller()
-       return 0
+    try:
+        optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
+    except getopt.error:
+        sys.stdout = sys.stderr
+        print 'Usage:', os.path.basename(sys.argv[0]),
+        print           '[-cdu] [file] ...'
+        print '-c: print callers per objectfile'
+        print '-d: print callees per objectfile'
+        print '-u: print usage of undefined symbols'
+        print 'If none of -cdu is specified, all are assumed.'
+        print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
+        print 'e.g.: nm -o /lib/libc.a | objgraph'
+        return 1
+    optu = optc = optd = 0
+    for opt, void in optlist:
+        if opt == '-u':
+            optu = 1
+        elif opt == '-c':
+            optc = 1
+        elif opt == '-d':
+            optd = 1
+    if optu == optc == optd == 0:
+        optu = optc = optd = 1
+    if not args:
+        args = ['-']
+    for file in args:
+        if file == '-':
+            readinput(sys.stdin)
+        else:
+            readinput(open(file, 'r'))
+    #
+    warndups()
+    #
+    more = (optu + optc + optd > 1)
+    if optd:
+        if more:
+            print '---------------All callees------------------'
+        printcallee()
+    if optu:
+        if more:
+            print '---------------Undefined callees------------'
+        printundef()
+    if optc:
+        if more:
+            print '---------------All Callers------------------'
+        printcaller()
+    return 0
 
 # Call the main program.
 # Use its return value as exit status.
 # Catch interrupts to avoid stack trace.
 #
 try:
-       sys.exit(main())
+    sys.exit(main())
 except KeyboardInterrupt:
-       sys.exit(1)
+    sys.exit(1)
index ab4f8300e9170f35246c3eecc1e4e7f0bfcca0fc..cf4e17c1fc862c585ffd0fdea497d34974bdf7c6 100755 (executable)
@@ -8,7 +8,7 @@
     Python snippet defining a dictionary "entitydefs" mapping literal
     entity name to character or numeric entity.
 
-    Marc-Andre Lemburg, mal@lemburg.com, 1999. 
+    Marc-Andre Lemburg, mal@lemburg.com, 1999.
     Use as you like. NO WARRANTIES.
 
 """
@@ -62,4 +62,3 @@ if __name__ == '__main__':
     text = infile.read()
     defs = parse(text)
     writefile(outfile,defs)
-
index be04b2114adabe64ed6c1e85bc53644d325eb790..d4e307186ca7aa7b12aa6cc018ce36ed6053d591 100755 (executable)
@@ -33,117 +33,117 @@ rep = sys.stdout.write
 new_interpreter = None
 
 def main():
-       global new_interpreter
-       usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
-                sys.argv[0])
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], 'i:')
-       except getopt.error, msg:
-               err(msg + '\n')
-               err(usage)
-               sys.exit(2)
-       for o, a in opts:
-               if o == '-i':
-                       new_interpreter = a
-       if not new_interpreter or new_interpreter[0] != '/' or not args:
-               err('-i option or file-or-directory missing\n')
-               err(usage)
-               sys.exit(2)
-       bad = 0
-       for arg in args:
-               if os.path.isdir(arg):
-                       if recursedown(arg): bad = 1
-               elif os.path.islink(arg):
-                       err(arg + ': will not process symbolic links\n')
-                       bad = 1
-               else:
-                       if fix(arg): bad = 1
-       sys.exit(bad)
+    global new_interpreter
+    usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
+             sys.argv[0])
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'i:')
+    except getopt.error, msg:
+        err(msg + '\n')
+        err(usage)
+        sys.exit(2)
+    for o, a in opts:
+        if o == '-i':
+            new_interpreter = a
+    if not new_interpreter or new_interpreter[0] != '/' or not args:
+        err('-i option or file-or-directory missing\n')
+        err(usage)
+        sys.exit(2)
+    bad = 0
+    for arg in args:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-       return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-       dbg('recursedown(' + `dirname` + ')\n')
-       bad = 0
-       try:
-               names = os.listdir(dirname)
-       except os.error, msg:
-               err(dirname + ': cannot list directory: ' + `msg` + '\n')
-               return 1
-       names.sort()
-       subdirs = []
-       for name in names:
-               if name in (os.curdir, os.pardir): continue
-               fullname = os.path.join(dirname, name)
-               if os.path.islink(fullname): pass
-               elif os.path.isdir(fullname):
-                       subdirs.append(fullname)
-               elif ispython(name):
-                       if fix(fullname): bad = 1
-       for fullname in subdirs:
-               if recursedown(fullname): bad = 1
-       return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##     dbg('fix(' + `filename` + ')\n')
-       try:
-               f = open(filename, 'r')
-       except IOError, msg:
-               err(filename + ': cannot open: ' + `msg` + '\n')
-               return 1
-       line = f.readline()
-       fixed = fixline(line)
-       if line == fixed:
-               rep(filename+': no change\n')
-               f.close()
-               return
-       head, tail = os.path.split(filename)
-       tempname = os.path.join(head, '@' + tail)
-       try:
-               g = open(tempname, 'w')
-       except IOError, msg:
-               f.close()
-               err(tempname+': cannot create: '+`msg`+'\n')
-               return 1
-       rep(filename + ': updating\n')
-       g.write(fixed)
-       BUFSIZE = 8*1024
-       while 1:
-               buf = f.read(BUFSIZE)
-               if not buf: break
-               g.write(buf)
-       g.close()
-       f.close()
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    line = f.readline()
+    fixed = fixline(line)
+    if line == fixed:
+        rep(filename+': no change\n')
+        f.close()
+        return
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    try:
+        g = open(tempname, 'w')
+    except IOError, msg:
+        f.close()
+        err(tempname+': cannot create: '+`msg`+'\n')
+        return 1
+    rep(filename + ': updating\n')
+    g.write(fixed)
+    BUFSIZE = 8*1024
+    while 1:
+        buf = f.read(BUFSIZE)
+        if not buf: break
+        g.write(buf)
+    g.close()
+    f.close()
 
-       # Finishing touch -- move files
+    # Finishing touch -- move files
 
-       # First copy the file's mode to the temp file
-       try:
-               statbuf = os.stat(filename)
-               os.chmod(tempname, statbuf[ST_MODE] & 07777)
-       except os.error, msg:
-               err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-       # Then make a backup of the original file as filename~
-       try:
-               os.rename(filename, filename + '~')
-       except os.error, msg:
-               err(filename + ': warning: backup failed (' + `msg` + ')\n')
-       # Now move the temp file to the original file
-       try:
-               os.rename(tempname, filename)
-       except os.error, msg:
-               err(filename + ': rename failed (' + `msg` + ')\n')
-               return 1
-       # Return succes
-       return 0
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 def fixline(line):
-       if line[:2] != '#!':
-               return line
-       if string.find(line, "python") < 0:
-               return line
-       return '#! %s\n' % new_interpreter
+    if line[:2] != '#!':
+        return line
+    if string.find(line, "python") < 0:
+        return line
+    return '#! %s\n' % new_interpreter
 
 main()
index fb730f1ed345ef4de97d1a6d90f50658c3816294..18b582b693e06924842f1c048f3872389decd7e6 100755 (executable)
@@ -5,7 +5,7 @@
 # Find dependencies between a bunch of Python modules.
 #
 # Usage:
-#      pdeps file1.py file2.py ...
+#       pdeps file1.py file2.py ...
 #
 # Output:
 # Four tables separated by lines like '--- Closure ---':
@@ -29,31 +29,31 @@ import string
 # Main program
 #
 def main():
-       args = sys.argv[1:]
-       if not args:
-               print 'usage: pdeps file.py file.py ...'
-               return 2
-       #
-       table = {}
-       for arg in args:
-               process(arg, table)
-       #
-       print '--- Uses ---'
-       printresults(table)
-       #
-       print '--- Used By ---'
-       inv = inverse(table)
-       printresults(inv)
-       #
-       print '--- Closure of Uses ---'
-       reach = closure(table)
-       printresults(reach)
-       #
-       print '--- Closure of Used By ---'
-       invreach = inverse(reach)
-       printresults(invreach)
-       #
-       return 0
+    args = sys.argv[1:]
+    if not args:
+        print 'usage: pdeps file.py file.py ...'
+        return 2
+    #
+    table = {}
+    for arg in args:
+        process(arg, table)
+    #
+    print '--- Uses ---'
+    printresults(table)
+    #
+    print '--- Used By ---'
+    inv = inverse(table)
+    printresults(inv)
+    #
+    print '--- Closure of Uses ---'
+    reach = closure(table)
+    printresults(reach)
+    #
+    print '--- Closure of Used By ---'
+    invreach = inverse(reach)
+    printresults(invreach)
+    #
+    return 0
 
 
 # Compiled regular expressions to search for import statements
@@ -65,56 +65,56 @@ m_from = regex.compile('^[ \t]*import[ \t]+\([^#]+\)')
 # Collect data from one file
 #
 def process(filename, table):
-       fp = open(filename, 'r')
-       mod = os.path.basename(filename)
-       if mod[-3:] == '.py':
-               mod = mod[:-3]
-       table[mod] = list = []
-       while 1:
-               line = fp.readline()
-               if not line: break
-               while line[-1:] == '\\':
-                       nextline = fp.readline()
-                       if not nextline: break
-                       line = line[:-1] + nextline
-               if m_import.match(line) >= 0:
-                       (a, b), (a1, b1) = m_import.regs[:2]
-               elif m_from.match(line) >= 0:
-                       (a, b), (a1, b1) = m_from.regs[:2]
-               else: continue
-               words = string.splitfields(line[a1:b1], ',')
-               # print '#', line, words
-               for word in words:
-                       word = string.strip(word)
-                       if word not in list:
-                               list.append(word)
+    fp = open(filename, 'r')
+    mod = os.path.basename(filename)
+    if mod[-3:] == '.py':
+        mod = mod[:-3]
+    table[mod] = list = []
+    while 1:
+        line = fp.readline()
+        if not line: break
+        while line[-1:] == '\\':
+            nextline = fp.readline()
+            if not nextline: break
+            line = line[:-1] + nextline
+        if m_import.match(line) >= 0:
+            (a, b), (a1, b1) = m_import.regs[:2]
+        elif m_from.match(line) >= 0:
+            (a, b), (a1, b1) = m_from.regs[:2]
+        else: continue
+        words = string.splitfields(line[a1:b1], ',')
+        # print '#', line, words
+        for word in words:
+            word = string.strip(word)
+            if word not in list:
+                list.append(word)
 
 
 # Compute closure (this is in fact totally general)
 #
 def closure(table):
-       modules = table.keys()
-       #
-       # Initialize reach with a copy of table
-       #
-       reach = {}
-       for mod in modules:
-               reach[mod] = table[mod][:]
-       #
-       # Iterate until no more change
-       #
-       change = 1
-       while change:
-               change = 0
-               for mod in modules:
-                       for mo in reach[mod]:
-                               if mo in modules:
-                                       for m in reach[mo]:
-                                               if m not in reach[mod]:
-                                                       reach[mod].append(m)
-                                                       change = 1
-       #
-       return reach
+    modules = table.keys()
+    #
+    # Initialize reach with a copy of table
+    #
+    reach = {}
+    for mod in modules:
+        reach[mod] = table[mod][:]
+    #
+    # Iterate until no more change
+    #
+    change = 1
+    while change:
+        change = 0
+        for mod in modules:
+            for mo in reach[mod]:
+                if mo in modules:
+                    for m in reach[mo]:
+                        if m not in reach[mod]:
+                            reach[mod].append(m)
+                            change = 1
+    #
+    return reach
 
 
 # Invert a table (this is again totally general).
@@ -122,13 +122,13 @@ def closure(table):
 # so there may be empty lists in the inverse.
 #
 def inverse(table):
-       inv = {}
-       for key in table.keys():
-               if not inv.has_key(key):
-                       inv[key] = []
-               for item in table[key]:
-                       store(inv, item, key)
-       return inv
+    inv = {}
+    for key in table.keys():
+        if not inv.has_key(key):
+            inv[key] = []
+        for item in table[key]:
+            store(inv, item, key)
+    return inv
 
 
 # Store "item" in "dict" under "key".
@@ -136,32 +136,32 @@ def inverse(table):
 # If there is no list for the key yet, it is created.
 #
 def store(dict, key, item):
-       if dict.has_key(key):
-               dict[key].append(item)
-       else:
-               dict[key] = [item]
+    if dict.has_key(key):
+        dict[key].append(item)
+    else:
+        dict[key] = [item]
 
 
 # Tabulate results neatly
 #
 def printresults(table):
-       modules = table.keys()
-       maxlen = 0
-       for mod in modules: maxlen = max(maxlen, len(mod))
-       modules.sort()
-       for mod in modules:
-               list = table[mod]
-               list.sort()
-               print string.ljust(mod, maxlen), ':',
-               if mod in list:
-                       print '(*)',
-               for ref in list:
-                       print ref,
-               print
+    modules = table.keys()
+    maxlen = 0
+    for mod in modules: maxlen = max(maxlen, len(mod))
+    modules.sort()
+    for mod in modules:
+        list = table[mod]
+        list.sort()
+        print string.ljust(mod, maxlen), ':',
+        if mod in list:
+            print '(*)',
+        for ref in list:
+            print ref,
+        print
 
 
 # Call main and honor exit status
 try:
-       sys.exit(main())
+    sys.exit(main())
 except KeyboardInterrupt:
-       sys.exit(1)
+    sys.exit(1)
index 6eba0214ca556552211a4f5c1ddbb7f95c692e33..318c20e80ccca590f5c27a6b04f9656f220717ba 100755 (executable)
@@ -97,236 +97,236 @@ start = 'if', 'while', 'for', 'try', 'def', 'class'
 
 class PythonIndenter:
 
-       def __init__(self, fpi = sys.stdin, fpo = sys.stdout,
-                    indentsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-               self.fpi = fpi
-               self.fpo = fpo
-               self.indentsize = indentsize
-               self.tabsize = tabsize
-               self.lineno = 0
-               self.expandtabs = expandtabs
-               self._write = fpo.write
-               self.kwprog = re.compile(
-                       r'^\s*(?P<kw>[a-z]+)'
-                       r'(\s+(?P<id>[a-zA-Z_]\w*))?'
-                       r'[^\w]')
-               self.endprog = re.compile(
-                       r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
-                       r'(\s+(?P<id>[a-zA-Z_]\w*))?'
-                       r'[^\w]')
-               self.wsprog = re.compile(r'^[ \t]*')
-       # end def __init__
-
-       def write(self, line):
-               if self.expandtabs:
-                       self._write(string.expandtabs(line, self.tabsize))
-               else:
-                       self._write(line)
-               # end if
-       # end def write
-
-       def readline(self):
-               line = self.fpi.readline()
-               if line: self.lineno = self.lineno + 1
-               # end if
-               return line
-       # end def readline
-
-       def error(self, fmt, *args):
-               if args: fmt = fmt % args
-               # end if
-               sys.stderr.write('Error at line %d: %s\n' % (self.lineno, fmt))
-               self.write('### %s ###\n' % fmt)
-       # end def error
-
-       def getline(self):
-               line = self.readline()
-               while line[-2:] == '\\\n':
-                       line2 = self.readline()
-                       if not line2: break
-                       # end if
-                       line = line + line2
-               # end while
-               return line
-       # end def getline
-
-       def putline(self, line, indent = None):
-               if indent is None:
-                       self.write(line)
-                       return
-               # end if
-               tabs, spaces = divmod(indent*self.indentsize, self.tabsize)
-               i = 0
-               m = self.wsprog.match(line)
-               if m: i = m.end()
-               # end if
-               self.write('\t'*tabs + ' '*spaces + line[i:])
-       # end def putline
-
-       def reformat(self):
-               stack = []
-               while 1:
-                       line = self.getline()
-                       if not line: break      # EOF
-                       # end if
-                       m = self.endprog.match(line)
-                       if m:
-                               kw = 'end'
-                               kw2 = m.group('kw')
-                               if not stack:
-                                       self.error('unexpected end')
-                               elif stack[-1][0] != kw2:
-                                       self.error('unmatched end')
-                               # end if
-                               del stack[-1:]
-                               self.putline(line, len(stack))
-                               continue
-                       # end if
-                       m = self.kwprog.match(line)
-                       if m:
-                               kw = m.group('kw')
-                               if kw in start:
-                                       self.putline(line, len(stack))
-                                       stack.append((kw, kw))
-                                       continue
-                               # end if
-                               if next.has_key(kw) and stack:
-                                       self.putline(line, len(stack)-1)
-                                       kwa, kwb = stack[-1]
-                                       stack[-1] = kwa, kw
-                                       continue
-                               # end if
-                       # end if
-                       self.putline(line, len(stack))
-               # end while
-               if stack:
-                       self.error('unterminated keywords')
-                       for kwa, kwb in stack:
-                               self.write('\t%s\n' % kwa)
-                       # end for
-               # end if
-       # end def reformat
-
-       def delete(self):
-               begin_counter = 0
-               end_counter = 0
-               while 1:
-                       line = self.getline()
-                       if not line: break      # EOF
-                       # end if
-                       m = self.endprog.match(line)
-                       if m:
-                               end_counter = end_counter + 1
-                               continue
-                       # end if
-                       m = self.kwprog.match(line)
-                       if m:
-                               kw = m.group('kw')
-                               if kw in start:
-                                       begin_counter = begin_counter + 1
-                               # end if
-                       # end if
-                       self.putline(line)
-               # end while
-               if begin_counter - end_counter < 0:
-                       sys.stderr.write('Warning: input contained more end tags than expected\n')
-               elif begin_counter - end_counter > 0:
-                       sys.stderr.write('Warning: input contained less end tags than expected\n')
-               # end if
-       # end def delete
-       
-       def complete(self):
-               self.indentsize = 1
-               stack = []
-               todo = []
-               current, firstkw, lastkw, topid = 0, '', '', ''
-               while 1:
-                       line = self.getline()
-                       i = 0
-                       m = self.wsprog.match(line)
-                       if m: i = m.end()
-                       # end if
-                       m = self.endprog.match(line)
-                       if m:
-                               thiskw = 'end'
-                               endkw = m.group('kw')
-                               thisid = m.group('id')
-                       else:
-                               m = self.kwprog.match(line)
-                               if m:
-                                       thiskw = m.group('kw')
-                                       if not next.has_key(thiskw):
-                                               thiskw = ''
-                                       # end if
-                                       if thiskw in ('def', 'class'):
-                                               thisid = m.group('id')
-                                       else:
-                                               thisid = ''
-                                       # end if
-                               elif line[i:i+1] in ('\n', '#'):
-                                       todo.append(line)
-                                       continue
-                               else:
-                                       thiskw = ''
-                               # end if
-                       # end if
-                       indent = len(string.expandtabs(line[:i], self.tabsize))
-                       while indent < current:
-                               if firstkw:
-                                       if topid:
-                                               s = '# end %s %s\n' % (
-                                                       firstkw, topid)
-                                       else:
-                                               s = '# end %s\n' % firstkw
-                                       # end if
-                                       self.putline(s, current)
-                                       firstkw = lastkw = ''
-                               # end if
-                               current, firstkw, lastkw, topid = stack[-1]
-                               del stack[-1]
-                       # end while
-                       if indent == current and firstkw:
-                               if thiskw == 'end':
-                                       if endkw != firstkw:
-                                               self.error('mismatched end')
-                                       # end if
-                                       firstkw = lastkw = ''
-                               elif not thiskw or thiskw in start:
-                                       if topid:
-                                               s = '# end %s %s\n' % (
-                                                       firstkw, topid)
-                                       else:
-                                               s = '# end %s\n' % firstkw
-                                       # end if
-                                       self.putline(s, current)
-                                       firstkw = lastkw = topid = ''
-                               # end if
-                       # end if
-                       if indent > current:
-                               stack.append((current, firstkw, lastkw, topid))
-                               if thiskw and thiskw not in start:
-                                       # error
-                                       thiskw = ''
-                               # end if
-                               current, firstkw, lastkw, topid = \
-                                        indent, thiskw, thiskw, thisid
-                       # end if
-                       if thiskw:
-                               if thiskw in start:
-                                       firstkw = lastkw = thiskw
-                                       topid = thisid
-                               else:
-                                       lastkw = thiskw
-                               # end if
-                       # end if
-                       for l in todo: self.write(l)
-                       # end for
-                       todo = []
-                       if not line: break
-                       # end if
-                       self.write(line)
-               # end while
-       # end def complete
+    def __init__(self, fpi = sys.stdin, fpo = sys.stdout,
+                 indentsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+        self.fpi = fpi
+        self.fpo = fpo
+        self.indentsize = indentsize
+        self.tabsize = tabsize
+        self.lineno = 0
+        self.expandtabs = expandtabs
+        self._write = fpo.write
+        self.kwprog = re.compile(
+                r'^\s*(?P<kw>[a-z]+)'
+                r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+                r'[^\w]')
+        self.endprog = re.compile(
+                r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
+                r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+                r'[^\w]')
+        self.wsprog = re.compile(r'^[ \t]*')
+    # end def __init__
+
+    def write(self, line):
+        if self.expandtabs:
+            self._write(string.expandtabs(line, self.tabsize))
+        else:
+            self._write(line)
+        # end if
+    # end def write
+
+    def readline(self):
+        line = self.fpi.readline()
+        if line: self.lineno = self.lineno + 1
+        # end if
+        return line
+    # end def readline
+
+    def error(self, fmt, *args):
+        if args: fmt = fmt % args
+        # end if
+        sys.stderr.write('Error at line %d: %s\n' % (self.lineno, fmt))
+        self.write('### %s ###\n' % fmt)
+    # end def error
+
+    def getline(self):
+        line = self.readline()
+        while line[-2:] == '\\\n':
+            line2 = self.readline()
+            if not line2: break
+            # end if
+            line = line + line2
+        # end while
+        return line
+    # end def getline
+
+    def putline(self, line, indent = None):
+        if indent is None:
+            self.write(line)
+            return
+        # end if
+        tabs, spaces = divmod(indent*self.indentsize, self.tabsize)
+        i = 0
+        m = self.wsprog.match(line)
+        if m: i = m.end()
+        # end if
+        self.write('\t'*tabs + ' '*spaces + line[i:])
+    # end def putline
+
+    def reformat(self):
+        stack = []
+        while 1:
+            line = self.getline()
+            if not line: break      # EOF
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                kw = 'end'
+                kw2 = m.group('kw')
+                if not stack:
+                    self.error('unexpected end')
+                elif stack[-1][0] != kw2:
+                    self.error('unmatched end')
+                # end if
+                del stack[-1:]
+                self.putline(line, len(stack))
+                continue
+            # end if
+            m = self.kwprog.match(line)
+            if m:
+                kw = m.group('kw')
+                if kw in start:
+                    self.putline(line, len(stack))
+                    stack.append((kw, kw))
+                    continue
+                # end if
+                if next.has_key(kw) and stack:
+                    self.putline(line, len(stack)-1)
+                    kwa, kwb = stack[-1]
+                    stack[-1] = kwa, kw
+                    continue
+                # end if
+            # end if
+            self.putline(line, len(stack))
+        # end while
+        if stack:
+            self.error('unterminated keywords')
+            for kwa, kwb in stack:
+                self.write('\t%s\n' % kwa)
+            # end for
+        # end if
+    # end def reformat
+
+    def delete(self):
+        begin_counter = 0
+        end_counter = 0
+        while 1:
+            line = self.getline()
+            if not line: break      # EOF
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                end_counter = end_counter + 1
+                continue
+            # end if
+            m = self.kwprog.match(line)
+            if m:
+                kw = m.group('kw')
+                if kw in start:
+                    begin_counter = begin_counter + 1
+                # end if
+            # end if
+            self.putline(line)
+        # end while
+        if begin_counter - end_counter < 0:
+            sys.stderr.write('Warning: input contained more end tags than expected\n')
+        elif begin_counter - end_counter > 0:
+            sys.stderr.write('Warning: input contained less end tags than expected\n')
+        # end if
+    # end def delete
+
+    def complete(self):
+        self.indentsize = 1
+        stack = []
+        todo = []
+        current, firstkw, lastkw, topid = 0, '', '', ''
+        while 1:
+            line = self.getline()
+            i = 0
+            m = self.wsprog.match(line)
+            if m: i = m.end()
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                thiskw = 'end'
+                endkw = m.group('kw')
+                thisid = m.group('id')
+            else:
+                m = self.kwprog.match(line)
+                if m:
+                    thiskw = m.group('kw')
+                    if not next.has_key(thiskw):
+                        thiskw = ''
+                    # end if
+                    if thiskw in ('def', 'class'):
+                        thisid = m.group('id')
+                    else:
+                        thisid = ''
+                    # end if
+                elif line[i:i+1] in ('\n', '#'):
+                    todo.append(line)
+                    continue
+                else:
+                    thiskw = ''
+                # end if
+            # end if
+            indent = len(string.expandtabs(line[:i], self.tabsize))
+            while indent < current:
+                if firstkw:
+                    if topid:
+                        s = '# end %s %s\n' % (
+                                firstkw, topid)
+                    else:
+                        s = '# end %s\n' % firstkw
+                    # end if
+                    self.putline(s, current)
+                    firstkw = lastkw = ''
+                # end if
+                current, firstkw, lastkw, topid = stack[-1]
+                del stack[-1]
+            # end while
+            if indent == current and firstkw:
+                if thiskw == 'end':
+                    if endkw != firstkw:
+                        self.error('mismatched end')
+                    # end if
+                    firstkw = lastkw = ''
+                elif not thiskw or thiskw in start:
+                    if topid:
+                        s = '# end %s %s\n' % (
+                                firstkw, topid)
+                    else:
+                        s = '# end %s\n' % firstkw
+                    # end if
+                    self.putline(s, current)
+                    firstkw = lastkw = topid = ''
+                # end if
+            # end if
+            if indent > current:
+                stack.append((current, firstkw, lastkw, topid))
+                if thiskw and thiskw not in start:
+                    # error
+                    thiskw = ''
+                # end if
+                current, firstkw, lastkw, topid = \
+                         indent, thiskw, thiskw, thisid
+            # end if
+            if thiskw:
+                if thiskw in start:
+                    firstkw = lastkw = thiskw
+                    topid = thisid
+                else:
+                    lastkw = thiskw
+                # end if
+            # end if
+            for l in todo: self.write(l)
+            # end for
+            todo = []
+            if not line: break
+            # end if
+            self.write(line)
+        # end while
+    # end def complete
 
 # end class PythonIndenter
 
@@ -336,134 +336,134 @@ class PythonIndenter:
 # - xxx_file(filename): process file in place, return true iff changed
 
 def complete_filter(input = sys.stdin, output = sys.stdout,
-                   stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.complete()
+                    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.complete()
 # end def complete_filter
 
 def delete_filter(input= sys.stdin, output = sys.stdout,
-                       stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.delete()
+                        stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.delete()
 # end def delete_filter
 
 def reformat_filter(input = sys.stdin, output = sys.stdout,
-                   stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.reformat()
+                    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.reformat()
 # end def reformat_filter
 
 class StringReader:
-       def __init__(self, buf):
-               self.buf = buf
-               self.pos = 0
-               self.len = len(self.buf)
-       # end def __init__
-       def read(self, n = 0):
-               if n <= 0:
-                       n = self.len - self.pos
-               else:
-                       n = min(n, self.len - self.pos)
-               # end if
-               r = self.buf[self.pos : self.pos + n]
-               self.pos = self.pos + n
-               return r
-       # end def read
-       def readline(self):
-               i = string.find(self.buf, '\n', self.pos)
-               return self.read(i + 1 - self.pos)
-       # end def readline
-       def readlines(self):
-               lines = []
-               line = self.readline()
-               while line:
-                       lines.append(line)
-                       line = self.readline()
-               # end while
-               return lines
-       # end def readlines
-       # seek/tell etc. are left as an exercise for the reader
+    def __init__(self, buf):
+        self.buf = buf
+        self.pos = 0
+        self.len = len(self.buf)
+    # end def __init__
+    def read(self, n = 0):
+        if n <= 0:
+            n = self.len - self.pos
+        else:
+            n = min(n, self.len - self.pos)
+        # end if
+        r = self.buf[self.pos : self.pos + n]
+        self.pos = self.pos + n
+        return r
+    # end def read
+    def readline(self):
+        i = string.find(self.buf, '\n', self.pos)
+        return self.read(i + 1 - self.pos)
+    # end def readline
+    def readlines(self):
+        lines = []
+        line = self.readline()
+        while line:
+            lines.append(line)
+            line = self.readline()
+        # end while
+        return lines
+    # end def readlines
+    # seek/tell etc. are left as an exercise for the reader
 # end class StringReader
 
 class StringWriter:
-       def __init__(self):
-               self.buf = ''
-       # end def __init__
-       def write(self, s):
-               self.buf = self.buf + s
-       # end def write
-       def getvalue(self):
-               return self.buf
-       # end def getvalue
+    def __init__(self):
+        self.buf = ''
+    # end def __init__
+    def write(self, s):
+        self.buf = self.buf + s
+    # end def write
+    def getvalue(self):
+        return self.buf
+    # end def getvalue
 # end class StringWriter
 
 def complete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       input = StringReader(source)
-       output = StringWriter()
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.complete()
-       return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.complete()
+    return output.getvalue()
 # end def complete_string
 
 def delete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       input = StringReader(source)
-       output = StringWriter()
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.delete()
-       return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.delete()
+    return output.getvalue()
 # end def delete_string
 
 def reformat_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       input = StringReader(source)
-       output = StringWriter()
-       pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-       pi.reformat()
-       return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.reformat()
+    return output.getvalue()
 # end def reformat_string
 
 def complete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       source = open(filename, 'r').read()
-       result = complete_string(source, stepsize, tabsize, expandtabs)
-       if source == result: return 0
-       # end if
-       import os
-       try: os.rename(filename, filename + '~')
-       except os.error: pass
-       # end try
-       f = open(filename, 'w')
-       f.write(result)
-       f.close()
-       return 1
+    source = open(filename, 'r').read()
+    result = complete_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def complete_file
 
 def delete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       source = open(filename, 'r').read()
-       result = delete_string(source, stepsize, tabsize, expandtabs)
-       if source == result: return 0
-       # end if
-       import os
-       try: os.rename(filename, filename + '~')
-       except os.error: pass
-       # end try
-       f = open(filename, 'w')
-       f.write(result)
-       f.close()
-       return 1
+    source = open(filename, 'r').read()
+    result = delete_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def delete_file
 
 def reformat_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-       source = open(filename, 'r').read()
-       result = reformat_string(source, stepsize, tabsize, expandtabs)
-       if source == result: return 0
-       # end if
-       import os
-       try: os.rename(filename, filename + '~')
-       except os.error: pass
-       # end try
-       f = open(filename, 'w')
-       f.write(result)
-       f.close()
-       return 1
+    source = open(filename, 'r').read()
+    result = reformat_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def reformat_file
 
 # Test program when called as a script
@@ -482,62 +482,62 @@ the program acts as a filter (reads stdin, writes stdout).
 """ % vars()
 
 def error_both(op1, op2):
-       sys.stderr.write('Error: You can not specify both '+op1+' and -'+op2[0]+' at the same time\n')
-       sys.stderr.write(usage)
-       sys.exit(2)
+    sys.stderr.write('Error: You can not specify both '+op1+' and -'+op2[0]+' at the same time\n')
+    sys.stderr.write(usage)
+    sys.exit(2)
 # end def error_both
 
 def test():
-       import getopt
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], 'cdrs:t:e')
-       except getopt.error, msg:
-               sys.stderr.write('Error: %s\n' % msg)
-               sys.stderr.write(usage)
-               sys.exit(2)
-       # end try
-       action = None
-       stepsize = STEPSIZE
-       tabsize = TABSIZE
-       expandtabs = EXPANDTABS
-       for o, a in opts:
-               if o == '-c':
-                       if action: error_both(o, action)
-                       # end if
-                       action = 'complete'
-               elif o == '-d':
-                       if action: error_both(o, action)
-                       # end if
-                       action = 'delete'
-               elif o == '-r':
-                       if action: error_both(o, action)
-                       # end if
-                       action = 'reformat'
-               elif o == '-s':
-                       stepsize = string.atoi(a)
-               elif o == '-t':
-                       tabsize = string.atoi(a)
-               elif o == '-e':
-                       expandtabs = 1
-               # end if
-       # end for
-       if not action:
-               sys.stderr.write(
-                       'You must specify -c(omplete), -d(elete) or -r(eformat)\n')
-               sys.stderr.write(usage)
-               sys.exit(2)
-       # end if
-       if not args or args == ['-']:
-               action = eval(action + '_filter')
-               action(sys.stdin, sys.stdout, stepsize, tabsize, expandtabs)
-       else:
-               action = eval(action + '_file')
-               for file in args:
-                       action(file, stepsize, tabsize, expandtabs)
-               # end for
-       # end if
+    import getopt
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'cdrs:t:e')
+    except getopt.error, msg:
+        sys.stderr.write('Error: %s\n' % msg)
+        sys.stderr.write(usage)
+        sys.exit(2)
+    # end try
+    action = None
+    stepsize = STEPSIZE
+    tabsize = TABSIZE
+    expandtabs = EXPANDTABS
+    for o, a in opts:
+        if o == '-c':
+            if action: error_both(o, action)
+            # end if
+            action = 'complete'
+        elif o == '-d':
+            if action: error_both(o, action)
+            # end if
+            action = 'delete'
+        elif o == '-r':
+            if action: error_both(o, action)
+            # end if
+            action = 'reformat'
+        elif o == '-s':
+            stepsize = string.atoi(a)
+        elif o == '-t':
+            tabsize = string.atoi(a)
+        elif o == '-e':
+            expandtabs = 1
+        # end if
+    # end for
+    if not action:
+        sys.stderr.write(
+                'You must specify -c(omplete), -d(elete) or -r(eformat)\n')
+        sys.stderr.write(usage)
+        sys.exit(2)
+    # end if
+    if not args or args == ['-']:
+        action = eval(action + '_filter')
+        action(sys.stdin, sys.stdout, stepsize, tabsize, expandtabs)
+    else:
+        action = eval(action + '_file')
+        for file in args:
+            action(file, stepsize, tabsize, expandtabs)
+        # end for
+    # end if
 # end def test
 
 if __name__ == '__main__':
-       test()
+    test()
 # end if
index f7f7eb5f7e3d44c78e8b12465d9b24340f2d06e5..ea8eb3f1c2bf2dbf392197156719a6386c7952c0 100755 (executable)
@@ -39,7 +39,7 @@ def treat_file(file):
     tags.append(s)
     while 1:
         line = fp.readline()
-        if not line: 
+        if not line:
             break
         m = matcher.match(line)
         if m:
index 535e75606bd878c29594344979c48158e3c19ebe..1eed8f845c04b2d3fded4b69e2e6ec8f2d9d4528 100644 (file)
@@ -4,159 +4,159 @@ from Tkinter import *
 import re
 
 class ReDemo:
-       
-       def __init__(self, master):
-               self.master = master
-
-               self.promptdisplay = Label(self.master, anchor=W,
-                       text="Enter a Perl-style regular expression:")
-               self.promptdisplay.pack(side=TOP, fill=X)
-
-               self.regexdisplay = Entry(self.master)
-               self.regexdisplay.pack(fill=X)
-               self.regexdisplay.focus_set()
-
-               self.addoptions()
-
-               self.statusdisplay = Label(self.master, text="", anchor=W)
-               self.statusdisplay.pack(side=TOP, fill=X)
-
-               self.labeldisplay = Label(self.master, anchor=W,
-                       text="Enter a string to search:")
-               self.labeldisplay.pack(fill=X)
-               self.labeldisplay.pack(fill=X)
-
-               self.showframe = Frame(master)
-               self.showframe.pack(fill=X, anchor=W)
-
-               self.showvar = StringVar(master)
-               self.showvar.set("first")
-
-               self.showfirstradio = Radiobutton(self.showframe,
-                                                text="Highlight first match",
-                                                 variable=self.showvar,
-                                                 value="first",
-                                                 command=self.recompile)
-               self.showfirstradio.pack(side=LEFT)
-
-               self.showallradio = Radiobutton(self.showframe,
-                                               text="Highlight all matches",
-                                               variable=self.showvar,
-                                               value="all",
-                                               command=self.recompile)
-               self.showallradio.pack(side=LEFT)
-
-               self.stringdisplay = Text(self.master, width=60, height=4)
-               self.stringdisplay.pack(fill=BOTH, expand=1)
-               self.stringdisplay.tag_configure("hit", background="yellow")
-
-               self.grouplabel = Label(self.master, text="Groups:", anchor=W)
-               self.grouplabel.pack(fill=X)
-
-               self.grouplist = Listbox(self.master)
-               self.grouplist.pack(expand=1, fill=BOTH)
-
-               self.regexdisplay.bind('<Key>', self.recompile)
-               self.stringdisplay.bind('<Key>', self.reevaluate)
-
-               self.compiled = None
-               self.recompile()
-
-               btags = self.regexdisplay.bindtags()
-               self.regexdisplay.bindtags(btags[1:] + btags[:1])
-
-               btags = self.stringdisplay.bindtags()
-               self.stringdisplay.bindtags(btags[1:] + btags[:1])
-       
-       def addoptions(self):
-               self.frames = []
-               self.boxes = []
-               self.vars = []
-               for name in ('IGNORECASE',
-                            'LOCALE',
-                            'MULTILINE',
-                            'DOTALL',
-                            'VERBOSE'):
-                       if len(self.boxes) % 3 == 0:
-                               frame = Frame(self.master)
-                               frame.pack(fill=X)
-                               self.frames.append(frame)
-                       val = getattr(re, name)
-                       var = IntVar()
-                       box = Checkbutton(frame,
-                               variable=var, text=name,
-                               offvalue=0, onvalue=val,
-                               command=self.recompile)
-                       box.pack(side=LEFT)
-                       self.boxes.append(box)
-                       self.vars.append(var)
-       
-       def getflags(self):
-               flags = 0
-               for var in self.vars:
-                       flags = flags | var.get()
-               flags = flags
-               return flags
-       
-       def recompile(self, event=None):
-               try:
-                       self.compiled = re.compile(self.regexdisplay.get(),
-                                                  self.getflags())
-                       bg = self.promptdisplay['background']
-                       self.statusdisplay.config(text="", background=bg)
-               except re.error, msg:
-                       self.compiled = None
-                       self.statusdisplay.config(
-                               text="re.error: %s" % str(msg),
-                               background="red")
-               self.reevaluate()
-       
-       def reevaluate(self, event=None):
-               try:
-                       self.stringdisplay.tag_remove("hit", "1.0", END)
-               except TclError:
-                       pass
-               try:
-                       self.stringdisplay.tag_remove("hit0", "1.0", END)
-               except TclError:
-                       pass
-               self.grouplist.delete(0, END)
-               if not self.compiled:
-                       return
-               self.stringdisplay.tag_configure("hit", background="yellow")
-               self.stringdisplay.tag_configure("hit0", background="orange")
-               text = self.stringdisplay.get("1.0", END)
-               last = 0
-               nmatches = 0
-               while last <= len(text):
-                       m = self.compiled.search(text, last)
-                       if m is None:
-                               break
-                       first, last = m.span()
-                       if last == first:
-                               last = first+1
-                               tag = "hit0"
-                       else:
-                               tag = "hit"
-                       pfirst = "1.0 + %d chars" % first
-                       plast = "1.0 + %d chars" % last
-                       self.stringdisplay.tag_add(tag, pfirst, plast)
-                       if nmatches == 0:
-                               self.stringdisplay.yview_pickplace(pfirst)
-                               groups = list(m.groups())
-                               groups.insert(0, m.group())
-                               for i in range(len(groups)):
-                                       g = "%2d: %s" % (i, `groups[i]`)
-                                       self.grouplist.insert(END, g)
-                       nmatches = nmatches + 1
-                       if self.showvar.get() == "first":
-                               break
-
-               if nmatches == 0:
-                       self.statusdisplay.config(text="(no match)",
-                                                 background="yellow")
-               else:
-                       self.statusdisplay.config(text="")
+
+    def __init__(self, master):
+        self.master = master
+
+        self.promptdisplay = Label(self.master, anchor=W,
+                text="Enter a Perl-style regular expression:")
+        self.promptdisplay.pack(side=TOP, fill=X)
+
+        self.regexdisplay = Entry(self.master)
+        self.regexdisplay.pack(fill=X)
+        self.regexdisplay.focus_set()
+
+        self.addoptions()
+
+        self.statusdisplay = Label(self.master, text="", anchor=W)
+        self.statusdisplay.pack(side=TOP, fill=X)
+
+        self.labeldisplay = Label(self.master, anchor=W,
+                text="Enter a string to search:")
+        self.labeldisplay.pack(fill=X)
+        self.labeldisplay.pack(fill=X)
+
+        self.showframe = Frame(master)
+        self.showframe.pack(fill=X, anchor=W)
+
+        self.showvar = StringVar(master)
+        self.showvar.set("first")
+
+        self.showfirstradio = Radiobutton(self.showframe,
+                                         text="Highlight first match",
+                                          variable=self.showvar,
+                                          value="first",
+                                          command=self.recompile)
+        self.showfirstradio.pack(side=LEFT)
+
+        self.showallradio = Radiobutton(self.showframe,
+                                        text="Highlight all matches",
+                                        variable=self.showvar,
+                                        value="all",
+                                        command=self.recompile)
+        self.showallradio.pack(side=LEFT)
+
+        self.stringdisplay = Text(self.master, width=60, height=4)
+        self.stringdisplay.pack(fill=BOTH, expand=1)
+        self.stringdisplay.tag_configure("hit", background="yellow")
+
+        self.grouplabel = Label(self.master, text="Groups:", anchor=W)
+        self.grouplabel.pack(fill=X)
+
+        self.grouplist = Listbox(self.master)
+        self.grouplist.pack(expand=1, fill=BOTH)
+
+        self.regexdisplay.bind('<Key>', self.recompile)
+        self.stringdisplay.bind('<Key>', self.reevaluate)
+
+        self.compiled = None
+        self.recompile()
+
+        btags = self.regexdisplay.bindtags()
+        self.regexdisplay.bindtags(btags[1:] + btags[:1])
+
+        btags = self.stringdisplay.bindtags()
+        self.stringdisplay.bindtags(btags[1:] + btags[:1])
+
+    def addoptions(self):
+        self.frames = []
+        self.boxes = []
+        self.vars = []
+        for name in ('IGNORECASE',
+                     'LOCALE',
+                     'MULTILINE',
+                     'DOTALL',
+                     'VERBOSE'):
+            if len(self.boxes) % 3 == 0:
+                frame = Frame(self.master)
+                frame.pack(fill=X)
+                self.frames.append(frame)
+            val = getattr(re, name)
+            var = IntVar()
+            box = Checkbutton(frame,
+                    variable=var, text=name,
+                    offvalue=0, onvalue=val,
+                    command=self.recompile)
+            box.pack(side=LEFT)
+            self.boxes.append(box)
+            self.vars.append(var)
+
+    def getflags(self):
+        flags = 0
+        for var in self.vars:
+            flags = flags | var.get()
+        flags = flags
+        return flags
+
+    def recompile(self, event=None):
+        try:
+            self.compiled = re.compile(self.regexdisplay.get(),
+                                       self.getflags())
+            bg = self.promptdisplay['background']
+            self.statusdisplay.config(text="", background=bg)
+        except re.error, msg:
+            self.compiled = None
+            self.statusdisplay.config(
+                    text="re.error: %s" % str(msg),
+                    background="red")
+        self.reevaluate()
+
+    def reevaluate(self, event=None):
+        try:
+            self.stringdisplay.tag_remove("hit", "1.0", END)
+        except TclError:
+            pass
+        try:
+            self.stringdisplay.tag_remove("hit0", "1.0", END)
+        except TclError:
+            pass
+        self.grouplist.delete(0, END)
+        if not self.compiled:
+            return
+        self.stringdisplay.tag_configure("hit", background="yellow")
+        self.stringdisplay.tag_configure("hit0", background="orange")
+        text = self.stringdisplay.get("1.0", END)
+        last = 0
+        nmatches = 0
+        while last <= len(text):
+            m = self.compiled.search(text, last)
+            if m is None:
+                break
+            first, last = m.span()
+            if last == first:
+                last = first+1
+                tag = "hit0"
+            else:
+                tag = "hit"
+            pfirst = "1.0 + %d chars" % first
+            plast = "1.0 + %d chars" % last
+            self.stringdisplay.tag_add(tag, pfirst, plast)
+            if nmatches == 0:
+                self.stringdisplay.yview_pickplace(pfirst)
+                groups = list(m.groups())
+                groups.insert(0, m.group())
+                for i in range(len(groups)):
+                    g = "%2d: %s" % (i, `groups[i]`)
+                    self.grouplist.insert(END, g)
+            nmatches = nmatches + 1
+            if self.showvar.get() == "first":
+                break
+
+        if nmatches == 0:
+            self.statusdisplay.config(text="(no match)",
+                                      background="yellow")
+        else:
+            self.statusdisplay.config(text="")
 
 
 # Main function, run when invoked as a stand-alone Python program.
index 826e236c3f23cbab3169f10e500c8fdc5cef1905..e085cd0df916b3c7b996ef126c1cf3190073ea2c 100755 (executable)
@@ -7,23 +7,23 @@
 import sys
 
 def main():
-       files = sys.argv[1:]
-       suffixes = {}
-       for file in files:
-               suff = getsuffix(file)
-               if not suffixes.has_key(suff):
-                       suffixes[suff] = []
-               suffixes[suff].append(file)
-       keys = suffixes.keys()
-       keys.sort()
-       for suff in keys:
-               print `suff`, len(suffixes[suff])
+    files = sys.argv[1:]
+    suffixes = {}
+    for file in files:
+        suff = getsuffix(file)
+        if not suffixes.has_key(suff):
+            suffixes[suff] = []
+        suffixes[suff].append(file)
+    keys = suffixes.keys()
+    keys.sort()
+    for suff in keys:
+        print `suff`, len(suffixes[suff])
 
 def getsuffix(file):
-       suff = ''
-       for i in range(len(file)):
-               if file[i] == '.':
-                       suff = file[i:]
-       return suff
+    suff = ''
+    for i in range(len(file)):
+        if file[i] == '.':
+            suff = file[i:]
+    return suff
 
 main()
index 09bc6863b2037ed296f4c013f52c889ced6f8f65..6d3b96528282204136f64fc8df0694b8c8bfea07 100755 (executable)
@@ -25,73 +25,73 @@ StringType = type('')
 FileType = type(sys.stdin)
 
 def sum(*files):
-       sts = 0
-       if files and type(files[-1]) == FileType:
-               out, files = files[-1], files[:-1]
-       else:
-               out = sys.stdout
-       if len(files) == 1 and type(files[0]) != StringType:
-               files = files[0]
-       for f in files:
-               if type(f) == StringType:
-                       if f == '-':
-                               sts = printsumfp(sys.stdin, '<stdin>', out) or sts
-                       else:
-                               sts = printsum(f, out) or sts
-               else:
-                       sts = sum(f, out) or sts
-       return sts
+    sts = 0
+    if files and type(files[-1]) == FileType:
+        out, files = files[-1], files[:-1]
+    else:
+        out = sys.stdout
+    if len(files) == 1 and type(files[0]) != StringType:
+        files = files[0]
+    for f in files:
+        if type(f) == StringType:
+            if f == '-':
+                sts = printsumfp(sys.stdin, '<stdin>', out) or sts
+            else:
+                sts = printsum(f, out) or sts
+        else:
+            sts = sum(f, out) or sts
+    return sts
 
 def printsum(file, out = sys.stdout):
-       try:
-               fp = open(file, rmode)
-       except IOError, msg:
-               sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
-               return 1
-       if fnfilter:
-               file = fnfilter(file)
-       sts = printsumfp(fp, file, out)
-       fp.close()
-       return sts
+    try:
+        fp = open(file, rmode)
+    except IOError, msg:
+        sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
+        return 1
+    if fnfilter:
+        file = fnfilter(file)
+    sts = printsumfp(fp, file, out)
+    fp.close()
+    return sts
 
 def printsumfp(fp, file, out = sys.stdout):
-       m = md5.md5()
-       try:
-               while 1:
-                       data = fp.read(bufsize)
-                       if not data: break
-                       m.update(data)
-       except IOError, msg:
-               sys.stderr.write('%s: I/O error: %s\n' % (file, msg))
-               return 1
-       out.write('%s %s\n' % (hexify(m.digest()), file))
-       return 0
+    m = md5.md5()
+    try:
+        while 1:
+            data = fp.read(bufsize)
+            if not data: break
+            m.update(data)
+    except IOError, msg:
+        sys.stderr.write('%s: I/O error: %s\n' % (file, msg))
+        return 1
+    out.write('%s %s\n' % (hexify(m.digest()), file))
+    return 0
 
 def hexify(s):
-       res = ''
-       for c in s:
-               res = res + '%02x' % ord(c)
-       return res
+    res = ''
+    for c in s:
+        res = res + '%02x' % ord(c)
+    return res
 
 def main(args = sys.argv[1:], out = sys.stdout):
-       global fnfilter, rmode, bufsize
-       import getopt
-       try:
-               opts, args = getopt.getopt(args, 'blts:')
-       except getopt.error, msg:
-               sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
-               return 2
-       for o, a in opts:
-               if o == '-l':
-                       fnfilter = os.path.basename
-               if o == '-b':
-                       rmode = 'rb'
-               if o == '-t':
-                       rmode = 'r'
-               if o == '-s':
-                       bufsize = string.atoi(a)
-       if not args: args = ['-']
-       return sum(args, out)
+    global fnfilter, rmode, bufsize
+    import getopt
+    try:
+        opts, args = getopt.getopt(args, 'blts:')
+    except getopt.error, msg:
+        sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
+        return 2
+    for o, a in opts:
+        if o == '-l':
+            fnfilter = os.path.basename
+        if o == '-b':
+            rmode = 'rb'
+        if o == '-t':
+            rmode = 'r'
+        if o == '-s':
+            bufsize = string.atoi(a)
+    if not args: args = ['-']
+    return sum(args, out)
 
 if __name__ == '__main__' or __name__ == sys.argv[0]:
-       sys.exit(main(sys.argv[1:], sys.stdout))
+    sys.exit(main(sys.argv[1:], sys.stdout))
index 8c747aa0a2b8c4f175460fa8998f91f58c68ba96..dfe96db2e7b6754661939b670c268296d20b70c5 100755 (executable)
@@ -46,13 +46,13 @@ blprog = re.compile('^[ \t]*$')                   # Blank line
 kwprog = re.compile('@[a-z]+')                    # Keyword (embedded, usually
                                                   # with {} args)
 spprog = re.compile('[\n@{}&<>]')                 # Special characters in
-                                                  # running text 
+                                                  # running text
                                                   #
                                                   # menu item (Yuck!)
 miprog = re.compile('^\* ([^:]*):(:|[ \t]*([^\t,\n.]+)([^ \t\n]*))[ \t\n]*')
 
 
-\f
+
 class HTMLNode:
     """Some of the parser's functionality is separated into this class.
 
@@ -1568,7 +1568,7 @@ def test():
     print_headers = 0
     cont = 0
     html3 = 0
-   
+
     while sys.argv[1:2] == ['-d']:
         debugging = debugging + 1
         del sys.argv[1:2]
index d8016b08c41cdb13552690ba57e618dbbfe6e14e..78715e0fc5edb386c3f372e6cdf2bdc09b80c172 100644 (file)
@@ -261,7 +261,7 @@ def find_executable_linenos(filename):
     # The only way I know to find line numbers is to look for the
     # SET_LINENO instructions.  Isn't there some way to get it from
     # the AST?
-    
+
     return _find_LINENO(code)
 
 ### XXX because os.path.commonprefix seems broken by my way of thinking...
@@ -279,7 +279,7 @@ def commonprefix(dirs):
                 if i == 0: return ''
                 break
     return os.sep.join(prefix)
-    
+
 def create_results_log(results, dirname = ".", show_missing = 1,
                        save_counts = 0):
     import re
@@ -297,7 +297,7 @@ def create_results_log(results, dirname = ".", show_missing = 1,
         results.update(results.__class__(counts, modules))
     except IOError:
         pass
-    
+
     # there are many places where this is insufficient, like a blank
     # line embedded in a multiline string.
     blank = re.compile(r'^\s*(#.*)?$')
@@ -307,7 +307,7 @@ def create_results_log(results, dirname = ".", show_missing = 1,
     tfdir = tempfile.gettempdir()
     for key in per_file.keys():
         filename = key
-        
+
         # skip some "files" we don't care about...
         if filename == "<string>":
             continue
@@ -484,7 +484,7 @@ class Trace:
                     print '%s(%d): ??' % (modulename, lineno)
 
         return self.trace
-    
+
 
 def _err_exit(msg):
     sys.stderr.write("%s: %s\n" % (sys.argv[0], msg))
index ded0b1707b8b77188922e8dd10066536c05af907..96beba000768b9de1e5a7c4cb9db966aeb8f1623 100755 (executable)
@@ -17,7 +17,7 @@ entry in the master tree are synchronized.  This means:
                 copy the slave to the master
         else (the master is newer):
             copy the master to the slave
-    
+
     normalizing the slave means replacing CRLF with LF when the master
     doesn't use CRLF
 
@@ -59,7 +59,7 @@ def main():
         print "slavedir masterdir"
         return
     process(slave, master)
-    
+
 def process(slave, master):
     cvsdir = os.path.join(master, "CVS")
     if not os.path.isdir(cvsdir):
index a05d91998a58d97a09729735259dec3a5ee24020..96e242c0f1bbe1e86531d0dcf362da0becb15181 100755 (executable)
@@ -11,7 +11,7 @@ import sys, os, string
 from stat import *
 
 def msg(str):
-       sys.stderr.write(str + '\n')
+    sys.stderr.write(str + '\n')
 
 pathlist = string.splitfields(os.environ['PATH'], ':')
 
@@ -19,38 +19,38 @@ sts = 0
 longlist = ''
 
 if sys.argv[1:] and sys.argv[1][:2] == '-l':
-       longlist = sys.argv[1]
-       del sys.argv[1]
+    longlist = sys.argv[1]
+    del sys.argv[1]
 
 for prog in sys.argv[1:]:
-       ident = ()
-       for dir in pathlist:
-               file = os.path.join(dir, prog)
-               try:
-                       st = os.stat(file)
-               except os.error:
-                       continue
-               if not S_ISREG(st[ST_MODE]):
-                       msg(file + ': not a disk file')
-               else:
-                       mode = S_IMODE(st[ST_MODE])
-                       if mode & 0111:
-                               if not ident:
-                                       print file
-                                       ident = st[:3]
-                               else:
-                                       if st[:3] == ident:
-                                               s = 'same as: '
-                                       else:
-                                               s = 'also: '
-                                       msg(s + file)
-                       else:
-                               msg(file + ': not executable')
-               if longlist:
-                       sts = os.system('ls ' + longlist + ' ' + file)
-                       if sts: msg('"ls -l" exit status: ' + `sts`)
-       if not ident:
-               msg(prog + ': not found')
-               sts = 1
+    ident = ()
+    for dir in pathlist:
+        file = os.path.join(dir, prog)
+        try:
+            st = os.stat(file)
+        except os.error:
+            continue
+        if not S_ISREG(st[ST_MODE]):
+            msg(file + ': not a disk file')
+        else:
+            mode = S_IMODE(st[ST_MODE])
+            if mode & 0111:
+                if not ident:
+                    print file
+                    ident = st[:3]
+                else:
+                    if st[:3] == ident:
+                        s = 'same as: '
+                    else:
+                        s = 'also: '
+                    msg(s + file)
+            else:
+                msg(file + ': not executable')
+        if longlist:
+            sts = os.system('ls ' + longlist + ' ' + file)
+            if sts: msg('"ls -l" exit status: ' + `sts`)
+    if not ident:
+        msg(prog + ': not found')
+        sts = 1
 
 sys.exit(sts)
index d8608a094cd7d0fd8fec26d01d455cca253e83c3..2567bc508b624560ffb67201922cf247874fe74f 100755 (executable)
@@ -16,102 +16,102 @@ EXECMAGIC = '\001\140\000\010'
 MAXSIZE = 200*1024 # Files this big must be binaries and are skipped.
 
 def getargs():
-       args = sys.argv[1:]
-       if args:
-               return args
-       print 'No arguments, checking almost *, in "ls -t" order'
-       list = []
-       for file in os.listdir(os.curdir):
-               if not skipfile(file):
-                       list.append((getmtime(file), file))
-       list.sort()
-       if not list:
-               print 'Nothing to do -- exit 1'
-               sys.exit(1)
-       list.sort()
-       list.reverse()
-       for mtime, file in list: args.append(file)
-       return args
+    args = sys.argv[1:]
+    if args:
+        return args
+    print 'No arguments, checking almost *, in "ls -t" order'
+    list = []
+    for file in os.listdir(os.curdir):
+        if not skipfile(file):
+            list.append((getmtime(file), file))
+    list.sort()
+    if not list:
+        print 'Nothing to do -- exit 1'
+        sys.exit(1)
+    list.sort()
+    list.reverse()
+    for mtime, file in list: args.append(file)
+    return args
 
 def getmtime(file):
-       try:
-               st = os.stat(file)
-               return st[ST_MTIME]
-       except os.error:
-               return -1
+    try:
+        st = os.stat(file)
+        return st[ST_MTIME]
+    except os.error:
+        return -1
 
 badnames = ['tags', 'TAGS', 'xyzzy', 'nohup.out', 'core']
 badprefixes = ['.', ',', '@', '#', 'o.']
 badsuffixes = \
-       ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
-        '.pyc', '.fdc', '.rgb', '.elc', ',v']
+        ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
+         '.pyc', '.fdc', '.rgb', '.elc', ',v']
 ignore = []
 
 def setup():
-       ignore[:] = badnames
-       for p in badprefixes:
-               ignore.append(p + '*')
-       for p in badsuffixes:
-               ignore.append('*' + p)
-       try:
-               f = open('.xxcign', 'r')
-       except IOError:
-               return
-       ignore[:] = ignore + string.split(f.read())
+    ignore[:] = badnames
+    for p in badprefixes:
+        ignore.append(p + '*')
+    for p in badsuffixes:
+        ignore.append('*' + p)
+    try:
+        f = open('.xxcign', 'r')
+    except IOError:
+        return
+    ignore[:] = ignore + string.split(f.read())
 
 def skipfile(file):
-       for p in ignore:
-               if fnmatch.fnmatch(file, p): return 1
-       try:
-               st = os.lstat(file)
-       except os.error:
-               return 1 # Doesn't exist -- skip it
-       # Skip non-plain files.
-       if not S_ISREG(st[ST_MODE]): return 1
-       # Skip huge files -- probably binaries.
-       if st[ST_SIZE] >= MAXSIZE: return 1
-       # Skip executables
-       try:
-               data = open(file, 'r').read(len(EXECMAGIC))
-               if data == EXECMAGIC: return 1
-       except:
-               pass
-       return 0
+    for p in ignore:
+        if fnmatch.fnmatch(file, p): return 1
+    try:
+        st = os.lstat(file)
+    except os.error:
+        return 1 # Doesn't exist -- skip it
+    # Skip non-plain files.
+    if not S_ISREG(st[ST_MODE]): return 1
+    # Skip huge files -- probably binaries.
+    if st[ST_SIZE] >= MAXSIZE: return 1
+    # Skip executables
+    try:
+        data = open(file, 'r').read(len(EXECMAGIC))
+        if data == EXECMAGIC: return 1
+    except:
+        pass
+    return 0
 
 def badprefix(file):
-       for bad in badprefixes:
-               if file[:len(bad)] == bad: return 1
-       return 0
+    for bad in badprefixes:
+        if file[:len(bad)] == bad: return 1
+    return 0
 
 def badsuffix(file):
-       for bad in badsuffixes:
-               if file[-len(bad):] == bad: return 1
-       return 0
+    for bad in badsuffixes:
+        if file[-len(bad):] == bad: return 1
+    return 0
 
 def go(args):
-       for file in args:
-               print file + ':'
-               if differing(file):
-                       showdiffs(file)
-                       if askyesno('Check in ' + file + ' ? '):
-                               sts = os.system('rcs -l ' + file) # ignored
-                               sts = os.system('ci -l ' + file)
+    for file in args:
+        print file + ':'
+        if differing(file):
+            showdiffs(file)
+            if askyesno('Check in ' + file + ' ? '):
+                sts = os.system('rcs -l ' + file) # ignored
+                sts = os.system('ci -l ' + file)
 
 def differing(file):
-       cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
-       sts = os.system(cmd)
-       return sts != 0
+    cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
+    sts = os.system(cmd)
+    return sts != 0
 
 def showdiffs(file):
-       cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
-       sts = os.system(cmd)
+    cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
+    sts = os.system(cmd)
 
 def askyesno(prompt):
-       s = raw_input(prompt)
-       return s in ['y', 'yes']
+    s = raw_input(prompt)
+    return s in ['y', 'yes']
 
 try:
-       setup()
-       go(getargs())
+    setup()
+    go(getargs())
 except KeyboardInterrupt:
-       print '[Intr]'
+    print '[Intr]'