SF.net SVN: geany:[4248] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Sep 27 16:49:20 UTC 2009


Revision: 4248
          http://geany.svn.sourceforge.net/geany/?rev=4248&view=rev
Author:   eht16
Date:     2009-09-27 16:49:18 +0000 (Sun, 27 Sep 2009)

Log Message:
-----------
Make the code a bit more pythonic.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/scripts/create_py_tags.py

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-09-27 16:38:37 UTC (rev 4247)
+++ trunk/ChangeLog	2009-09-27 16:49:18 UTC (rev 4248)
@@ -1,3 +1,9 @@
+2009-09-27  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * scripts/create_py_tags.py:
+   Make the code a bit more pythonic.
+
+
 2009-09-27  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/keybindings.c:

Modified: trunk/scripts/create_py_tags.py
===================================================================
--- trunk/scripts/create_py_tags.py	2009-09-27 16:38:37 UTC (rev 4247)
+++ trunk/scripts/create_py_tags.py	2009-09-27 16:49:18 UTC (rev 4248)
@@ -28,250 +28,130 @@
 matcher = re.compile('^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*(\(.*\))[:]')
 
 
-def add_tag(tags, tag):
-	end_pos = tag.find(TA_TYPE)
-	tagname = tag[0:(end_pos+1)]
-	# check for duplicates
-	if len(tagname) < 5:
-		# skip short tags
-		return
-	for test in tags:
-		if test.startswith(tagname):
-			# check whether we find a tag line which starts with the same name,
-			# include the separating TA_TYPE character to ensure we don't match
-			# writelines() and write()
+class Parser:
+
+	#----------------------------------------------------------------------
+	def __init__(self):
+		self.tags = []
+
+	#----------------------------------------------------------------------
+	def add_tag(self, tag):
+		"""
+		Verify the found tag name and if it is valid, add it to the list
+
+		@param tag (str)
+		"""
+		end_pos = tag.find(TA_TYPE)
+		tagname = tag[0:(end_pos+1)]
+		# check for duplicates
+		if len(tagname) < 5:
+			# skip short tags
 			return
-	tags.append(tag)
+		for test in self.tags:
+			if test.startswith(tagname):
+				# check whether we find a tag line which starts with the same name,
+				# include the separating TA_TYPE character to ensure we don't match
+				# writelines() and write()
+				return
+		self.tags.append(tag)
 
+	#----------------------------------------------------------------------
+	def process_file(self, filename):
+		"""
+		Read the file specified by filename and look for class and function definitions
 
-def treat_file(tags, filename):
-	try:
-		fp = open(filename, 'r')
-	except:
-		sys.stderr.write('Cannot open %s\n' % filename)
-		return
-	while 1:
-		line = fp.readline()
-		if not line:
-			break
-		m = matcher.match(line)
-		if m:
-			name = m.group(2)
-			if name[0] == '_':
-				# skip non-public tags
-				continue;
-			if m.group(1) == 'class':
-				type = TYPE_CLASS
-			else:
-				type = TYPE_FUNCTION
-			args = m.group(3).strip()
-			# tagnameTA_TYPEtypeTA_ARGLISTarglist\n
-			s = name + TA_TYPE + type + TA_ARGLIST + args + '\n'
-			add_tag(tags, s)
-			#~ # maybe for later use, with a more sophisticated algo to retrieve the API
-			#~ scope = ''
-			#~ return_value = ''
-			#~ # tagnameTA_TYPEtypeTA_ARGLISTarglistTA_SCOPEscopeTA_VARTYPEreturn_value\n
-			#~ s = name + TA_TYPE + type + TA_ARGLIST + args + TA_SCOPE + scope + TA_VARTYPE + return_value + '\n'
+		@param filename (str)
+		"""
+		try:
+			fp = open(filename, 'r')
+		except:
+			sys.stderr.write('Cannot open %s\n' % filename)
+			return
+		for line in fp:
+			m = matcher.match(line)
+			if m:
+				tag_type_str, name, args = m.groups()
+				if not name or name[0] == '_':
+					# skip non-public tags
+					continue;
+				if tag_type_str == 'class':
+					tag_type = TYPE_CLASS
+				else:
+					tag_type = TYPE_FUNCTION
+				args = args.strip()
+				# tagnameTA_TYPEtypeTA_ARGLISTarglist\n
+				s = name + TA_TYPE + tag_type + TA_ARGLIST + args + '\n'
+				self.add_tag(s)
+				#~ # maybe for later use, with a more sophisticated algo to retrieve the API
+				#~ scope = ''
+				#~ return_value = ''
+				#~ # tagnameTA_TYPEtypeTA_ARGLISTarglistTA_SCOPEscopeTA_VARTYPEreturn_value\n
+				#~ s = name + TA_TYPE + type + TA_ARGLIST + args + TA_SCOPE + scope + TA_VARTYPE + return_value + '\n'
 
+	#----------------------------------------------------------------------
+	def tags_to_file(self, filename):
+		"""
+		Sort the found tags and write them into the file specified by filename
 
+		@param filename (str)
+		"""
+		# sort the tags
+		self.tags.sort()
+		# write them
+		fp = open(filename, 'wb')
+		fp.write(
+			'# format=tagmanager - Automatically generated file - do not edit (created on %s)\n' % \
+			datetime.datetime.now().ctime())
+		for s in self.tags:
+			if not s == '\n': # skip empty lines
+				fp.write(s)
+		fp.close()
 
+
+
 # files to include if none were specified on command line
 # (this list was created manually and probably needs review for sensible input files)
-default_files = [
-'/usr/lib/python2.5/anydbm.py',
-'/usr/lib/python2.5/asynchat.py',
-'/usr/lib/python2.5/asyncore.py',
-'/usr/lib/python2.5/audiodev.py',
-'/usr/lib/python2.5/base64.py',
-'/usr/lib/python2.5/BaseHTTPServer.py',
-'/usr/lib/python2.5/Bastion.py',
-'/usr/lib/python2.5/bdb.py',
-'/usr/lib/python2.5/binhex.py',
-'/usr/lib/python2.5/bisect.py',
-'/usr/lib/python2.5/calendar.py',
-'/usr/lib/python2.5/CGIHTTPServer.py',
-'/usr/lib/python2.5/cgi.py',
-'/usr/lib/python2.5/cgitb.py',
-'/usr/lib/python2.5/chunk.py',
-'/usr/lib/python2.5/cmd.py',
-'/usr/lib/python2.5/codecs.py',
-'/usr/lib/python2.5/codeop.py',
-'/usr/lib/python2.5/code.py',
-'/usr/lib/python2.5/colorsys.py',
-'/usr/lib/python2.5/commands.py',
-'/usr/lib/python2.5/compileall.py',
-'/usr/lib/python2.5/ConfigParser.py',
-'/usr/lib/python2.5/contextlib.py',
-'/usr/lib/python2.5/cookielib.py',
-'/usr/lib/python2.5/Cookie.py',
-'/usr/lib/python2.5/copy.py',
-'/usr/lib/python2.5/copy_reg.py',
-'/usr/lib/python2.5/cProfile.py',
-'/usr/lib/python2.5/csv.py',
-'/usr/lib/python2.5/dbhash.py',
-'/usr/lib/python2.5/decimal.py',
-'/usr/lib/python2.5/difflib.py',
-'/usr/lib/python2.5/dircache.py',
-'/usr/lib/python2.5/dis.py',
-'/usr/lib/python2.5/DocXMLRPCServer.py',
-'/usr/lib/python2.5/filecmp.py',
-'/usr/lib/python2.5/fileinput.py',
-'/usr/lib/python2.5/fnmatch.py',
-'/usr/lib/python2.5/formatter.py',
-'/usr/lib/python2.5/fpformat.py',
-'/usr/lib/python2.5/ftplib.py',
-'/usr/lib/python2.5/functools.py',
-'/usr/lib/python2.5/getopt.py',
-'/usr/lib/python2.5/getpass.py',
-'/usr/lib/python2.5/gettext.py',
-'/usr/lib/python2.5/glob.py',
-'/usr/lib/python2.5/gopherlib.py',
-'/usr/lib/python2.5/gzip.py',
-'/usr/lib/python2.5/hashlib.py',
-'/usr/lib/python2.5/heapq.py',
-'/usr/lib/python2.5/hmac.py',
-'/usr/lib/python2.5/htmlentitydefs.py',
-'/usr/lib/python2.5/htmllib.py',
-'/usr/lib/python2.5/HTMLParser.py',
-'/usr/lib/python2.5/httplib.py',
-'/usr/lib/python2.5/ihooks.py',
-'/usr/lib/python2.5/imaplib.py',
-'/usr/lib/python2.5/imghdr.py',
-'/usr/lib/python2.5/imputil.py',
-'/usr/lib/python2.5/inspect.py',
-'/usr/lib/python2.5/keyword.py',
-'/usr/lib/python2.5/linecache.py',
-'/usr/lib/python2.5/locale.py',
-'/usr/lib/python2.5/mailbox.py',
-'/usr/lib/python2.5/mailcap.py',
-'/usr/lib/python2.5/markupbase.py',
-'/usr/lib/python2.5/md5.py',
-'/usr/lib/python2.5/mhlib.py',
-'/usr/lib/python2.5/mimetools.py',
-'/usr/lib/python2.5/mimetypes.py',
-'/usr/lib/python2.5/MimeWriter.py',
-'/usr/lib/python2.5/mimify.py',
-'/usr/lib/python2.5/modulefinder.py',
-'/usr/lib/python2.5/multifile.py',
-'/usr/lib/python2.5/mutex.py',
-'/usr/lib/python2.5/netrc.py',
-'/usr/lib/python2.5/nntplib.py',
-'/usr/lib/python2.5/ntpath.py',
-'/usr/lib/python2.5/nturl2path.py',
-'/usr/lib/python2.5/opcode.py',
-'/usr/lib/python2.5/optparse.py',
-'/usr/lib/python2.5/os2emxpath.py',
-'/usr/lib/python2.5/os.py',
-'/usr/lib/python2.5/pdb.py',
-'/usr/lib/python2.5/pickle.py',
-'/usr/lib/python2.5/pickletools.py',
-'/usr/lib/python2.5/pipes.py',
-'/usr/lib/python2.5/pkgutil.py',
-'/usr/lib/python2.5/platform.py',
-'/usr/lib/python2.5/plistlib.py',
-'/usr/lib/python2.5/popen2.py',
-'/usr/lib/python2.5/poplib.py',
-'/usr/lib/python2.5/posixfile.py',
-'/usr/lib/python2.5/posixpath.py',
-'/usr/lib/python2.5/pprint.py',
-'/usr/lib/python2.5/pty.py',
-'/usr/lib/python2.5/py_compile.py',
-'/usr/lib/python2.5/pydoc.py',
-'/usr/lib/python2.5/Queue.py',
-'/usr/lib/python2.5/quopri.py',
-'/usr/lib/python2.5/random.py',
-'/usr/lib/python2.5/repr.py',
-'/usr/lib/python2.5/re.py',
-'/usr/lib/python2.5/rexec.py',
-'/usr/lib/python2.5/rfc822.py',
-'/usr/lib/python2.5/rlcompleter.py',
-'/usr/lib/python2.5/robotparser.py',
-'/usr/lib/python2.5/runpy.py',
-'/usr/lib/python2.5/sched.py',
-'/usr/lib/python2.5/sets.py',
-'/usr/lib/python2.5/sha.py',
-'/usr/lib/python2.5/shelve.py',
-'/usr/lib/python2.5/shlex.py',
-'/usr/lib/python2.5/shutil.py',
-'/usr/lib/python2.5/SimpleHTTPServer.py',
-'/usr/lib/python2.5/SimpleXMLRPCServer.py',
-'/usr/lib/python2.5/site.py',
-'/usr/lib/python2.5/smtpd.py',
-'/usr/lib/python2.5/smtplib.py',
-'/usr/lib/python2.5/sndhdr.py',
-'/usr/lib/python2.5/socket.py',
-'/usr/lib/python2.5/SocketServer.py',
-'/usr/lib/python2.5/stat.py',
-'/usr/lib/python2.5/statvfs.py',
-'/usr/lib/python2.5/StringIO.py',
-'/usr/lib/python2.5/stringold.py',
-'/usr/lib/python2.5/stringprep.py',
-'/usr/lib/python2.5/string.py',
-'/usr/lib/python2.5/_strptime.py',
-'/usr/lib/python2.5/struct.py',
-'/usr/lib/python2.5/subprocess.py',
-'/usr/lib/python2.5/sunaudio.py',
-'/usr/lib/python2.5/sunau.py',
-'/usr/lib/python2.5/symbol.py',
-'/usr/lib/python2.5/symtable.py',
-'/usr/lib/python2.5/tabnanny.py',
-'/usr/lib/python2.5/tarfile.py',
-'/usr/lib/python2.5/telnetlib.py',
-'/usr/lib/python2.5/tempfile.py',
-'/usr/lib/python2.5/textwrap.py',
-'/usr/lib/python2.5/this.py',
-'/usr/lib/python2.5/threading.py',
-'/usr/lib/python2.5/timeit.py',
-'/usr/lib/python2.5/toaiff.py',
-'/usr/lib/python2.5/tokenize.py',
-'/usr/lib/python2.5/token.py',
-'/usr/lib/python2.5/traceback.py',
-'/usr/lib/python2.5/trace.py',
-'/usr/lib/python2.5/tty.py',
-'/usr/lib/python2.5/types.py',
-'/usr/lib/python2.5/unittest.py',
-'/usr/lib/python2.5/urllib2.py',
-'/usr/lib/python2.5/urllib.py',
-'/usr/lib/python2.5/urlparse.py',
-'/usr/lib/python2.5/UserDict.py',
-'/usr/lib/python2.5/UserList.py',
-'/usr/lib/python2.5/user.py',
-'/usr/lib/python2.5/UserString.py',
-'/usr/lib/python2.5/uuid.py',
-'/usr/lib/python2.5/uu.py',
-'/usr/lib/python2.5/warnings.py',
-'/usr/lib/python2.5/wave.py',
-'/usr/lib/python2.5/weakref.py',
-'/usr/lib/python2.5/webbrowser.py',
-'/usr/lib/python2.5/whichdb.py',
-'/usr/lib/python2.5/xdrlib.py',
-'/usr/lib/python2.5/zipfile.py' ]
+default_files = map(lambda x: '/usr/lib/python2.5/' + x,
+[ 'anydbm.py', 'asynchat.py', 'asyncore.py', 'audiodev.py', 'base64.py', 'BaseHTTPServer.py',
+'Bastion.py', 'bdb.py', 'binhex.py', 'bisect.py', 'calendar.py', 'CGIHTTPServer.py',
+'cgi.py', 'cgitb.py', 'chunk.py', 'cmd.py', 'codecs.py', 'codeop.py', 'code.py', 'colorsys.py',
+'commands.py', 'compileall.py', 'ConfigParser.py', 'contextlib.py', 'cookielib.py', 'Cookie.py',
+'copy.py', 'copy_reg.py', 'cProfile.py', 'csv.py', 'dbhash.py', 'decimal.py', 'difflib.py',
+'dircache.py', 'dis.py', 'DocXMLRPCServer.py', 'filecmp.py', 'fileinput.py', 'fnmatch.py',
+'formatter.py', 'fpformat.py', 'ftplib.py', 'functools.py', 'getopt.py', 'getpass.py', 'gettext.py',
+'glob.py', 'gopherlib.py', 'gzip.py', 'hashlib.py', 'heapq.py', 'hmac.py', 'htmlentitydefs.py',
+'htmllib.py', 'HTMLParser.py', 'httplib.py', 'ihooks.py', 'imaplib.py', 'imghdr.py', 'imputil.py',
+'inspect.py', 'keyword.py', 'linecache.py', 'locale.py', 'mailbox.py', 'mailcap.py', 'markupbase.py',
+'md5.py', 'mhlib.py', 'mimetools.py', 'mimetypes.py', 'MimeWriter.py', 'mimify.py',
+'modulefinder.py', 'multifile.py', 'mutex.py', 'netrc.py', 'nntplib.py', 'ntpath.py',
+'nturl2path.py', 'opcode.py', 'optparse.py', 'os2emxpath.py', 'os.py', 'pdb.py', 'pickle.py',
+'pickletools.py', 'pipes.py', 'pkgutil.py', 'platform.py', 'plistlib.py', 'popen2.py',
+'poplib.py', 'posixfile.py', 'posixpath.py', 'pprint.py', 'pty.py', 'py_compile.py', 'pydoc.py',
+'Queue.py', 'quopri.py', 'random.py', 'repr.py', 're.py', 'rexec.py', 'rfc822.py', 'rlcompleter.py',
+'robotparser.py', 'runpy.py', 'sched.py', 'sets.py', 'sha.py', 'shelve.py', 'shlex.py', 'shutil.py',
+'SimpleHTTPServer.py', 'SimpleXMLRPCServer.py', 'site.py', 'smtpd.py', 'smtplib.py', 'sndhdr.py',
+'socket.py', 'SocketServer.py', 'stat.py', 'statvfs.py', 'StringIO.py', 'stringold.py',
+'stringprep.py', 'string.py', '_strptime.py', 'struct.py', 'subprocess.py', 'sunaudio.py',
+'sunau.py', 'symbol.py', 'symtable.py', 'tabnanny.py', 'tarfile.py', 'telnetlib.py', 'tempfile.py',
+'textwrap.py', 'this.py', 'threading.py', 'timeit.py', 'toaiff.py', 'tokenize.py', 'token.py',
+'traceback.py', 'trace.py', 'tty.py', 'types.py', 'unittest.py', 'urllib2.py', 'urllib.py',
+'urlparse.py', 'UserDict.py', 'UserList.py', 'user.py', 'UserString.py', 'uuid.py', 'uu.py',
+'warnings.py', 'wave.py', 'weakref.py', 'webbrowser.py', 'whichdb.py', 'xdrlib.py', 'zipfile.py'
+])
 
 
-
 def main():
-	tags = []
-
 	# process files given on command line
 	args = sys.argv[1:]
 	if not args:
 		args = default_files
 
+	parser = Parser()
+
 	for filename in args:
-		treat_file(tags, filename)
+		parser.process_file(filename)
 
-	# sort the tags
-	tags.sort()
-	# write them
-	fp = open(tag_filename, 'wb')
-	fp.write(
-		'# format=tagmanager - Automatically generated file - do not edit (created on %s)\n' % \
-		datetime.datetime.now().ctime())
-	for s in tags:
-		if not s == '\n': # skip empty lines
-			fp.write(s)
-	fp.close()
+	parser.tags_to_file(tag_filename)
 
 
 if __name__ == '__main__':


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list