All pastes #25889 Raw Edit

Python

public python v1 · immutable
#25889 ·published 2005-10-18 21:29 UTC
rendered paste body
#!/usr/bin/env pythonimport sys, re#----------------------------------------------------------------------------PROGRAM = "Deskbar Applet"VERSION = "0.7.0"TEMPLATE = """==============%s %s==============Changes:%s"""[1:]# if CONTRIB_TEMPLATE is None print each changelog entry along with it's author#else collect all contributors in the last line. as defined by the template#CONTRIB_TEMPLATE = NoneCONTRIB_TEMPLATE = "Contributors to this release: %s"# Wether to stop when a line like ========= Version ======== is foundBREAK_AT_VERSION_CHANGE = Trueif "-a" in sys.argv:	BREAK_AT_VERSION_CHANGE = False#------------------------------------------------------------------------STATE_HEADER           = 1STATE_HEADER_NAME_END  = 2STATE_HEADER_VERSION   = 3STATE_HEADER_VERSION_IN= 4STATE_FILES_OR_COMMENT = 5STATE_FILES            = 6STATE_COMMENT          = 7content = file("ChangeLog").read()state = STATE_HEADERNEWLINE_FLAG = Falsecomments = []comment = ""name = ""for char in content:	if char in (" ", "\n", "\t"):		if state == STATE_COMMENT and not comment.endswith(' '):			comment = comment + ' '		elif state == STATE_HEADER and not name.endswith(' '):			name = name + ' '		if char == "\n":			NEWLINE_FLAG = True		continue		if state == STATE_HEADER or state == STATE_HEADER_NAME_END:		if char == ">":			state = STATE_FILES_OR_COMMENT		elif char in "0123456789-":			pass		elif char == "<":			state = STATE_HEADER_NAME_END		elif state == STATE_HEADER:			name = name + char			elif state == STATE_FILES:		if char == ":":			state = STATE_FILES_OR_COMMENT			elif state == STATE_FILES_OR_COMMENT:		if char == "*" or char == "(":			state = STATE_FILES		else:			state = STATE_COMMENT			comment = comment + char		elif state == STATE_COMMENT:		if (char in "0123456789" or char == "*" or char == "=") and NEWLINE_FLAG:			if char in "0123456789":				state = STATE_HEADER			elif char == "*":				state = STATE_FILES			elif BREAK_AT_VERSION_CHANGE: # and char == "="				# We have a version change, we can stop or continue				break						if re.match(r"(A|R) [a-zA-Z0-9-/_\. ]+:", comment.strip()) == None:				#Remember the comment				name = name.strip()				if name == "":					name = comments[-1][0]				comments.append((name.strip(), comment.strip()))						# Clear the current comment			comment = ""			name = ""		else:			# Appending letters			comment = comment + char	NEWLINE_FLAG = Falseif comment != "":	name = name.strip()	if name == "":		name = comments[-1][0]	comments.append((name.strip(), comment.strip()))if CONTRIB_TEMPLATE != None:	print TEMPLATE % (PROGRAM, VERSION, '\n'.join(["\t* %s" % comment[1] for comment in comments]))		contributors = set()	for name, comment in comments:		contributors.add(name)		contrib_string = "" 	for name in contributors:		if contrib_string == "":			contrib_string = name		elif name != "":			contrib_string = "%s, %s" % (contrib_string, name)		print CONTRIB_TEMPLATE % contrib_stringelse:	print TEMPLATE % (PROGRAM, VERSION, '\n'.join(["\t* %s (%s)" % (comment[1], comment[0]) for comment in comments]))print