--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/rtfutils.py Tue Apr 27 08:33:08 2010 +0300
@@ -0,0 +1,172 @@
+#============================================================================
+#Name : rtfutils.py
+#Part of : Helium
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "Eclipse Public License v1.0"
+#which accompanies this distribution, and is available
+#at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+#Initial Contributors:
+#Nokia Corporation - initial contribution.
+#
+#Contributors:
+#
+#Description:
+#===============================================================================
+
+import csv
+import os
+import PyRTF
+import StringIO
+import re
+import logging
+
+class RTFUtils(object):
+ """ RTF utility module """
+ def __init__(self, template):
+ """ template would be a RTF file to modify """
+ self.template = template
+
+ self.logger = logging.getLogger('test.relnotes')
+ logging.basicConfig(level=logging.DEBUG)
+
+ def rtftable(self, errorsfilename, outputfilename, tagtoreplace):
+ """ Create a .rtf file from the errors.csv file. """
+
+ errors = file(errorsfilename, 'rb')
+ template = file(self.template, 'rb' )
+ output = file(outputfilename, 'w' )
+
+ self._rtftable(errors, output, tagtoreplace, template)
+
+ errors.close()
+ output.close()
+ template.close()
+
+ def _rtftable(self, errors, output, tagtoreplace, template):
+ PyRTF.Elements.StandardColours.append(PyRTF.PropertySets.Colour('NokiaBlue', 153, 204, 255))
+
+ DR = PyRTF.Renderer()
+ doc = PyRTF.Document()
+ ss = doc.StyleSheet
+ section = PyRTF.Section()
+ doc.Sections.append( section )
+
+ table = PyRTF.Table( PyRTF.TabPS.DEFAULT_WIDTH * 7,
+ PyRTF.TabPS.DEFAULT_WIDTH * 3,
+ PyRTF.TabPS.DEFAULT_WIDTH * 3 )
+
+ reader = csv.reader(errors)
+
+ style = None
+ for row in reader:
+ assert len(row) == 3
+
+ if style == None:
+ style = ss.ParagraphStyles.Heading2
+ else:
+ style = ss.ParagraphStyles.Normal
+
+ # Handle each value from the row
+ rowcell = []
+
+ for value in row:
+ cell = PyRTF.Text( value )
+ rowcell.append(PyRTF.Cell( PyRTF.Paragraph(style, cell) ))
+ table.AddRow( *rowcell )
+
+ section.append( table )
+ string = StringIO.StringIO()
+ DR.Write( doc, string )
+
+ keep = ''
+ for line in string.getvalue().splitlines():
+ if keep != '' or line.startswith('{\\trowd'):
+ keep += line
+
+ #remove last '}'
+ keep = keep[0:-1]
+
+ for line in template:
+ line = line.replace(tagtoreplace, keep)
+ output.write(line)
+
+ def rtfimage(self, image, outputfilename, tagtoreplace):
+ """ Replaces tagtoreplace in a RTF file with a image """
+
+ template = file(self.template, 'rb' )
+ output = file(outputfilename, 'w' )
+
+ self._rtfimage(image, output, tagtoreplace, template)
+
+ output.close()
+ template.close()
+
+ def _rtfimage(self, image, output, tagtoreplace, template):
+ TEMP_FILE = 'image_temp.rtf'
+
+ DR = PyRTF.Renderer()
+ doc = PyRTF.Document()
+ ss = doc.StyleSheet
+ section = PyRTF.Section()
+ doc.Sections.append( section )
+
+ section.append( PyRTF.Image( image ) )
+
+ tempOutput = file( TEMP_FILE, 'w' )
+ DR.Write( doc, tempOutput )
+
+ tempOutput = file( TEMP_FILE, 'rb' )
+
+ keep = ''
+ for line in tempOutput:
+ if keep != '':
+ keep += line
+ elif line.startswith('{\pict'):
+ keep = line
+
+ #remove last '}'
+ keep = keep[0:-1]
+
+ tempOutput.close()
+
+ for line in template:
+ line = line.replace(tagtoreplace, keep)
+ output.write(line)
+
+ os.remove(TEMP_FILE)
+
+ def rtfconvert(self, inputfilename, outputfilename):
+ """ Converts a property file to be RTF link syntax """
+ inputfile = file( inputfilename, 'r' )
+ outputfile = file( outputfilename, 'w' )
+
+ self._rtfconvert(inputfile, outputfile)
+
+ inputfile.close()
+ outputfile.close()
+
+ def _rtfconvert(self, inputfile, outputfile):
+ p = re.compile(r'(.+=)((\\\\|http|\.\\|ftp)(.+))')
+ for line in inputfile:
+ newline = line
+
+ #fix bad links generated in ant
+ if newline.count('\\\\')>0:
+ newline = newline.replace('//','\\')
+ newline = newline.replace('/','\\')
+
+ if "\\n" in newline:
+ newline = newline.replace("\\n", " \\\\line ")
+ else:
+ newline = newline.replace('\\','\\\\\\\\\\\\\\\\')
+
+
+ newline = p.sub('\g<1>{_backslash_field{_backslash_*_backslash_fldinst HYPERLINK \g<2>}}', newline)
+
+ newline = newline.replace('_backslash_', r'\\')
+
+ outputfile.write(newline)