You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by pf...@apache.org on 2012/08/04 02:01:47 UTC

svn commit: r1369251 - /incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge

Author: pfg
Date: Sat Aug  4 00:01:47 2012
New Revision: 1369251

URL: http://svn.apache.org/viewvc?rev=1369251&view=rev
Log:
i115780 - Update pyAltFCFGMerge to run under Python 3.

This is only a partial commit to avoid conflicts with Python2.
Also reindent while here.

Author:		Simon A. Wilper
Reviewed by:	hanya

Modified:
    incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge

Modified: incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge?rev=1369251&r1=1369250&r2=1369251&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge (original)
+++ incubator/ooo/trunk/main/filter/source/config/tools/merge/pyAltFCFGMerge Sat Aug  4 00:01:47 2012
@@ -1,4 +1,4 @@
-#!/bin/env python
+#!/usr/bin/env python
 #_____________________________________________
 # Caolan McNamara caolanm@redhat.com
 # converted from original java written by Andreas Schluens so we can continue
@@ -9,7 +9,7 @@
 # there is a java which is available for use by all
 #_____________________________________________
 
-import sys, string, os.path 
+import sys, string, os.path
 
 CFGFILE             = os.environ["SOLARVER"] + "/" + os.environ["INPATH"] + "/inc/l10ntools/FCFGMerge.cfg"
 
@@ -44,14 +44,14 @@ PROP_ITEMS           = "items"          
 #---begin java.util.Properties copy---#
 """
 
-An incomplete clean room implementation of 
+An incomplete clean room implementation of
 java.util.Properties written in Python.
 
 Copyright (C) 2002,2004 - Ollie Rutherfurd <ol...@rutherfurd.net>
 
 Based on:
 
-	http://java.sun.com/j2se/1.3/docs/api/java/util/Properties.html
+        http://java.sun.com/j2se/1.3/docs/api/java/util/Properties.html
 
 Missing:
 
@@ -89,198 +89,199 @@ __all__ = ['Properties']
 
 def dec2hex(n):
 
-	h = hex(n)[2:].upper()
-	return '\\u' + '0' * (4 - len(h)) + h
+    h = hex(n)[2:].upper()
+    return '\\u' + '0' * (4 - len(h)) + h
 
 
 def escapestr(s):
 
-	buff = []
-	# QUESTION: escape leading or trailing spaces?
-	for c in s:
-		if c == '\\':
-			buff.append('\\\\')
-		elif c == '\t':
-			buff.append('\\t')
-		elif c == '\n':
-			buff.append('\\n')
-		elif c == '\r':
-			buff.append('\\r')
-		elif c == ' ':
-			buff.append('\\ ')
-		elif c == "'":
-			buff.append("\\'")
-		elif c == '"':
-			buff.append('\\"')
-		elif c == '#':
-			buff.append('\\#')
-		elif c == '!':
-			buff.append('\\!')
-		elif c == '=':
-			buff.append('\\=')
-		elif 32 <= ord(c) <= 126:
-			buff.append(c)
-		else:
-			buff.append(dec2hex(c))
+    buff = []
+    # QUESTION: escape leading or trailing spaces?
+    for c in s:
+        if c == '\\':
+            buff.append('\\\\')
+        elif c == '\t':
+            buff.append('\\t')
+        elif c == '\n':
+            buff.append('\\n')
+        elif c == '\r':
+            buff.append('\\r')
+        elif c == ' ':
+            buff.append('\\ ')
+        elif c == "'":
+            buff.append("\\'")
+        elif c == '"':
+            buff.append('\\"')
+        elif c == '#':
+            buff.append('\\#')
+        elif c == '!':
+            buff.append('\\!')
+        elif c == '=':
+            buff.append('\\=')
+        elif 32 <= ord(c) <= 126:
+            buff.append(c)
+        else:
+            buff.append(dec2hex(c))
 
-	return ''.join(buff)
+    return ''.join(buff)
 
 
 # TODO: add support for \uXXXX?
 def unescapestr(line):
 
-	buff = []
-	escape = 0
-	for i in range(len(line)):
-		c = line[i]
-		if c == '\\':
-			if escape:
-				escape = 0
-				buff.append('\\')
-				continue
-			else:
-				# this is to deal with '\'
-				# acting as a line continuation
-				# character
-				if i == len(line) - 1:
-					buff.append('\\')
-					break
-				else:
-					escape = 1
-					continue
-		elif c == 'n':
-			if escape:
-				escape = 0
-				buff.append('\n')
-				continue
-		elif c == 'r':
-			if escape:
-				escape = 0
-				buff.append('\r')
-				continue
-		elif c == 't':
-			if escape:
-				escape = 0
-				buff.append('\t')
-				continue
-
-		buff.append(c)
-
-		# make sure escape doesn't stay one
-		# all expected escape sequences either break
-		# or continue, so this should be safe
-		if escape:
-			escape = 0
+    buff = []
+    escape = 0
+    for i in range(len(line)):
+        c = line[i]
+        if c == '\\':
+            if escape:
+                escape = 0
+                buff.append('\\')
+                continue
+            else:
+                # this is to deal with '\'
+                # acting as a line continuation
+                # character
+                if i == len(line) - 1:
+                    buff.append('\\')
+                    break
+                else:
+                    escape = 1
+                    continue
+        elif c == 'n':
+            if escape:
+                escape = 0
+                buff.append('\n')
+                continue
+        elif c == 'r':
+            if escape:
+                escape = 0
+                buff.append('\r')
+                continue
+        elif c == 't':
+            if escape:
+                escape = 0
+                buff.append('\t')
+                continue
 
-	return ''.join(buff)
+        buff.append(c)
+
+        # make sure escape doesn't stay one
+        # all expected escape sequences either break
+        # or continue, so this should be safe
+        if escape:
+            escape = 0
+
+    return ''.join(buff)
 
 
 
 class Properties(dict):
 
-	def __init__(self, defaults={}):
-		dict.__init__(self)
-		for n,v in defaults.items():
-			self[n] = v
-
-	def __getittem__(self,key):
-		try:
-			return dict.__getittem__(self,key)
-		except KeyError:
-			return None
-
-	def read(self,filename):
-		"""
-		Reads properties from a file (java Property class 
-		reads from an input stream -- see load()).
-		"""
-		f = None
-		try:
-			f = open(filename)
-			self.load(f)
-		finally:
-			if f:
-				f.close()
-
-	def load(self, buff):
-		"""
-		Reads properties from a stream (StringIO, file, etc...)
-		"""
-		props = readprops(buff)
-		for n,v in props.iteritems():
-			self[n] = v
+    def __init__(self, defaults={}):
+        dict.__init__(self)
+        for n,v in defaults.items():
+            self[n] = v
+
+    def __getittem__(self,key):
+        try:
+            return dict.__getittem__(self,key)
+        except KeyError:
+            return None
+
+    def read(self,filename):
+        """
+        Reads properties from a file (java Property class
+        reads from an input stream -- see load()).
+        """
+        f = None
+        try:
+            f = open(filename)
+            self.load(f)
+        finally:
+            if f:
+                f.close()
+
+    def load(self, buff):
+        """
+        Reads properties from a stream (StringIO, file, etc...)
+        """
+        props = readprops(buff)
+        #for n,v in props.iteritems():
+        for n in props.keys():
+            self[n] = props[n]
 
 def readprops(buff):
 
-	name,value = None,''
-	props = {}
-	continued = 0
-
-	while 1:
-		line = buff.readline()
-		if not line:
-			break
-		line = line.strip()
-
-		# empty line
-		if not line:
-			continue
-
-		# comment
-		if line[0] in ('#','!'):
-			continue
-
-		# find name
-		i,escaped = 0,0
-		while i < len(line):
-			c = line[i]
-
-			if c == '\\':
-				if escaped:
-					escaped = 0
-				else:
-					escaped = 1
-				i += 1
-				continue
-
-			elif c in (' ', '\t', ':', '=') and not escaped:
-				name = unescapestr(line[:i])
-				break
-
-			# make sure escaped doesn't stay on
-			if escaped:
-				escaped = 0
-
-			i += 1
-
-		# no dlimiter was found, name is entire line, there is no value
-		if name == None:
-			name = unescapestr(line.lstrip())
-
-		# skip delimiter
-		while line[i:i+1] in ('\t', ' ', ':', '='):
-			i += 1
-
-		value = unescapestr(line[i:].strip())
-		while value[-1:] == '\\':
-			value = value[:-1]	# remove \
-			line = buff.readline()
-			if not line:
-				break
-			value += unescapestr(line.strip())
+    name,value = None,''
+    props = {}
+    continued = 0
+
+    while 1:
+        line = buff.readline()
+        if not line:
+            break
+        line = line.strip()
+
+        # empty line
+        if not line:
+            continue
+
+        # comment
+        if line[0] in ('#','!'):
+            continue
+
+        # find name
+        i,escaped = 0,0
+        while i < len(line):
+            c = line[i]
+
+            if c == '\\':
+                if escaped:
+                    escaped = 0
+                else:
+                    escaped = 1
+                i += 1
+                continue
+
+            elif c in (' ', '\t', ':', '=') and not escaped:
+                name = unescapestr(line[:i])
+                break
+
+            # make sure escaped doesn't stay on
+            if escaped:
+                escaped = 0
+
+            i += 1
+
+        # no dlimiter was found, name is entire line, there is no value
+        if name == None:
+            name = unescapestr(line.lstrip())
+
+        # skip delimiter
+        while line[i:i+1] in ('\t', ' ', ':', '='):
+            i += 1
+
+        value = unescapestr(line[i:].strip())
+        while value[-1:] == '\\':
+            value = value[:-1]      # remove \
+            line = buff.readline()
+            if not line:
+                break
+            value += unescapestr(line.strip())
 
-		#print 'value:',value	##
-		props[name] = value
+        #print 'value:',value   ##
+        props[name] = value
 
-	return props
+    return props
 #---end java.util.Properties copy---#
 
 #   Its a simple command line tool, which can merge different XML fragments
 #   together. Such fragments must exist as files on disk, will be moved into
 #   one file together on disk.
-# 
+#
 #  @author  Andreas Schluens
-# 
+#
 def run(sCmdLine):
     printCopyright()
 
@@ -299,21 +300,21 @@ def run(sCmdLine):
 
 #prints out a copyright message on stdout.
 def printCopyright():
-    print "FCFGMerge"
-    print "Copyright: 2003 by Red Hat, Inc., based on FCFGMerge.java` by Sun"
-    print "All Rights Reserved."
+    print("FCFGMerge")
+    print("Copyright: 2003 by Red Hat, Inc., based on FCFGMerge.java` by Sun")
+    print("All Rights Reserved.")
 
 #prints out a help message on stdout.
 def printHelp():
-    print "____________________________________________________________"
-    print "usage: FCFGMerge cfg=<file name>"                            
-    print "parameters:"                                                 
-    print "\tcfg=<file name>"                                           
-    print "\t\tmust point to a system file, which contains"             
-    print "\t\tall neccessary configuration data for the merge process."
-    print "\tFurther cou can specify every parameter allowed in the"  
-    print "\tconfig file as command line parameter too, to overwrite" 
-    print "\tthe value from the file."                                
+    print("____________________________________________________________")
+    print("usage: FCFGMerge cfg=<file name>")
+    print("parameters:")
+    print("\tcfg=<file name>")
+    print("\t\tmust point to a system file, which contains")
+    print("\t\tall neccessary configuration data for the merge process.")
+    print("\tFurther cou can specify every parameter allowed in the")
+    print("\tconfig file as command line parameter too, to overwrite")
+    print("\tthe value from the file.")
 
 def StringTokenizer(mstring, separators, isSepIncluded=0):
 #Return a list of tokens given a base string and a string of
@@ -337,11 +338,11 @@ def StringTokenizer(mstring, separators,
 # and merge it together with might existing config
 # files. That provides the possibility to overwrite
 # config values via command line parameter.
-# 
+#
 # @author Andreas Schluens
 class ConfigHelper:
     def __init__(self, sPropFile, lCommandLineArgs):
-    	self.m_bEmpty = 1
+        self.m_bEmpty = 1
         # first load prop file, so its values can be overwritten
         # by command line args later
         # Do it only, if a valid file name was given.
@@ -354,9 +355,10 @@ class ConfigHelper:
         count = 0
         if lCommandLineArgs != None:
             count = len(lCommandLineArgs)
+            print("Count is {c}".format(c=count))
         self.m_bEmpty = (count < 1)
 
-        print lCommandLineArgs, "and len is", count
+        #print( lCommandLineArgs, "and len is", count )
         for arg in range(count):
             # is it a named-value argument?
             # Note: We ignores double "=" signs! => search from left to right
@@ -370,40 +372,39 @@ class ConfigHelper:
             # is it a boolean argument?
             # Note: Because "--" and "-" will be interpreted as the same
             # we search from right to left!
-            pos = string.rfind(lCommandLineArgs[arg], '-')
+            pos = lCommandLineArgs[arg].rfind('-')
             if pos == -1:
                 pos = lCommandLineArgs[arg].rfind('/')
             if pos != -1:
                 sArg = lCommandLineArgs[arg][pos+1:]
                 self.props[sArg] = 1
                 continue
-            
-            raise Exception("Invalid command line detected. The argument \""+\
-                lCommandLineArgs[arg]+"\" use an unsupported format.")
+
+            raise Exception("Invalid command line detected. The argument \""+lCommandLineArgs[arg]+"\" use an unsupported format.")
 
 #        for item in self.props:
 #            print item, '->', self.props[item]
 
     def isHelp(self):
         return (
-                (self.props.has_key("help")) or
-                (self.props.has_key("?")   ) or
-                (self.props.has_key("h")   )
+                ("help" in self.props) or
+                ("?" in self.props   ) or
+                ("h" in self.props   )
                )
 
     def getValue(self, sProp):
-        if not self.props.has_key(sProp):
+        if not sProp in self.props:
             raise Exception("The requested config value \""+sProp+"\" "\
                 "does not exists!");
         return self.props[sProp];
 
     def getValueWithDefault(self, sProp, default):
-        if not self.props.has_key(sProp):
-		return default;
+        if not sProp in self.props:
+            return default;
         return self.props[sProp];
 
     def getStringList(self, sProp, sDelimiter, bTrim, bDecode):
-        if not self.props.has_key(sProp):
+        if not sProp in self.props:
             raise Exception("The requested config value \""+sProp+"\" does "\
                 "not exists!");
         sValue = self.props[sProp]
@@ -412,7 +413,8 @@ class ConfigHelper:
         lTokens = StringTokenizer(sValue, sDelimiter)
         for sToken in lTokens:
             if bTrim:
-                sToken = string.strip(sToken)
+                sToken = sToken.strip()
+
             # remove ""
             if ((bDecode) and (sToken.find("\"") == 0) and \
                 (sToken.rfind("\"") == len(sToken)-1)):
@@ -449,9 +451,9 @@ def generateFooter():
     return "</oor:component-data>\n"
 
 # can merge different xml fragments together.
-# 
+#
 #   @author Caolan McNamara converted from the original java by Andreas Schluens
-# 
+#
 class Merger:
     def __init__(self, aCfg):
         self.m_aCfg = aCfg
@@ -472,6 +474,7 @@ class Merger:
             aFcfg = ConfigHelper(self.m_aCfg.getValue(PROP_FCFG), None)
             self.m_lFilters = aFcfg.getStringList(PROP_ITEMS, sDelimiter, bTrim, bDecode)
         except:
+            print( "Filters are empty" )
             self.m_lFilters = []
 
         try:
@@ -489,8 +492,8 @@ class Merger:
     def merge(self):
         sPackage = self.m_aCfg.getValue(PROP_PKG)
 
-        print "create package \""+sPackage+"\" ..."
-        print "generate package header ... "
+        print("create package \""+sPackage+"\" ...")
+        print("generate package header ... ")
 
         sBuffer = generateHeader(\
                 self.m_aCfg.getValue(PROP_XMLVERSION ),\
@@ -511,58 +514,60 @@ class Merger:
 
             try:
                 if i == 0: #types
-                    print "generate set for types ... "
+                    print("generate set for types ... ")
                     sSetName = self.m_aCfg.getValue(PROP_SETNAME_TYPES)
                     sSubDir = self.m_aCfg.getValue(PROP_SUBDIR_TYPES )
                     lFragments = self.m_lTypes
                 elif i == 1: # filters
-                    print "generate set for filter ... "
+                    print("generate set for filter ... ")
                     sSetName = self.m_aCfg.getValue(PROP_SETNAME_FILTERS)
                     sSubDir = self.m_aCfg.getValue(PROP_SUBDIR_FILTERS )
                     lFragments = self.m_lFilters
                 elif i == 2: # loaders
-                    print "generate set for frame loader ... "
+                    print("generate set for frame loader ... ")
                     sSetName = self.m_aCfg.getValue(PROP_SETNAME_LOADERS)
                     sSubDir = self.m_aCfg.getValue(PROP_SUBDIR_LOADERS )
                     lFragments = self.m_lLoaders
                 elif i == 3: # handlers
-                    print "generate set for content handler ... "
+                    print("generate set for content handler ... ")
                     sSetName = self.m_aCfg.getValue(PROP_SETNAME_HANDLERS)
                     sSubDir = self.m_aCfg.getValue(PROP_SUBDIR_HANDLERS )
                     lFragments = self.m_lHandlers
             except:
                 continue
 
+            print("Length of Fragments: {f} Set Name {setname} Subdir {subdir}".
+             format(f=len(lFragments),setname=sSetName,subdir=sSubDir))
+            #sys.stdin.readline()
             nItemCount = nItemCount + len(lFragments)
 
             sBuffer = sBuffer + self.getFragments(\
                 os.path.join(self.m_aFragmentsDir, sSubDir), \
                 sSetName, lFragments, 1)
 
-        print "generate package footer ... "
+        print("generate package footer ... ")
         sBuffer = sBuffer + generateFooter()
 
         # Attention!
-	# If the package seem to be empty, it make no sense to generate a
-        # corresponding xml file. We should suppress writing of this file on 
-        # disk completly ...
+        # If the package seems to be empty, it make no sense to generate a
+        # corresponding xml file. We should suppress writing of this file on
+        # disk completely ...
         if nItemCount < 1:
-            print "Package is empty and will not result into a xml file on "\
-                "disk!? Please check configuration file."
+            print("Package is empty and will not result into an xml file on disk!? Please check configuration file.")
             return
-        print "package contains "+str(nItemCount)+" items"
+        print("package contains "+str(nItemCount)+" items")
 
-        aPackage = open(sPackage, 'w')
-        print "write temp package \""+sPackage
+        aPackage = open(sPackage, mode="w")
+        print("write temp package {pkg}".format(pkg=sPackage))
         aPackage.write(sBuffer)
 
     def getFragments(self, aDir, sSetName, lFragments, nPrettyTabs):
-        sBuffer = '' 
+        sBuffer = ''
         sExtXcu = self.m_aCfg.getValue(PROP_EXTENSION_XCU);
 
         if len(lFragments) < 1:
             return sBuffer
-        
+
         for tabs in range(nPrettyTabs):
             sBuffer = sBuffer + "\t"
         sBuffer = sBuffer + "<node oor:name=\""+sSetName+"\">\n"
@@ -576,9 +581,9 @@ class Merger:
                 # handle simple files only and check for existence!
                 raise Exception("fragment \""+sFragPath+"\" does not exists.")
 
-            print "merge fragment \""+sFragPath+"\" ..."
+            print("merge fragment \""+sFragPath+"\" ...")
             sBuffer = sBuffer + aFragmentFile.read()
-            
+
             sBuffer = sBuffer + "\n"
 
         nPrettyTabs = nPrettyTabs - 1
@@ -588,4 +593,3 @@ class Merger:
         return sBuffer
 
 run(sys.argv)
-