Module rtfutils
[hide private]
[frames] | no frames]

Source Code for Module rtfutils

  1  #============================================================================  
  2  #Name        : rtfutils.py  
  3  #Part of     : Helium  
  4   
  5  #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
  6  #All rights reserved. 
  7  #This component and the accompanying materials are made available 
  8  #under the terms of the License "Eclipse Public License v1.0" 
  9  #which accompanies this distribution, and is available 
 10  #at the URL "http://www.eclipse.org/legal/epl-v10.html". 
 11  # 
 12  #Initial Contributors: 
 13  #Nokia Corporation - initial contribution. 
 14  # 
 15  #Contributors: 
 16  # 
 17  #Description: 
 18  #=============================================================================== 
 19   
 20  import csv 
 21  import os 
 22  import PyRTF 
 23  import StringIO 
 24  import re 
 25  import logging 
 26   
27 -class RTFUtils(object):
28
29 - def __init__(self, template):
30 """ template would be a RTF file to modify """ 31 self.template = template 32 33 self.logger = logging.getLogger('test.relnotes') 34 logging.basicConfig(level=logging.DEBUG)
35
36 - def rtftable(self, errorsfilename, outputfilename, tagtoreplace):
37 """ Create a .rtf file from the errors.csv file. """ 38 39 errors = file(errorsfilename, 'rb') 40 template = file(self.template, 'rb' ) 41 output = file(outputfilename, 'w' ) 42 43 self._rtftable(errors, output, tagtoreplace, template) 44 45 errors.close() 46 output.close() 47 template.close()
48
49 - def _rtftable(self, errors, output, tagtoreplace, template):
50 PyRTF.Elements.StandardColours.append(PyRTF.PropertySets.Colour('NokiaBlue', 153, 204, 255)) 51 52 DR = PyRTF.Renderer() 53 doc = PyRTF.Document() 54 ss = doc.StyleSheet 55 section = PyRTF.Section() 56 doc.Sections.append( section ) 57 58 table = PyRTF.Table( PyRTF.TabPS.DEFAULT_WIDTH * 7, 59 PyRTF.TabPS.DEFAULT_WIDTH * 3, 60 PyRTF.TabPS.DEFAULT_WIDTH * 3 ) 61 62 reader = csv.reader(errors) 63 64 style = None 65 for row in reader: 66 assert len(row) == 3 67 68 if style == None: 69 style = ss.ParagraphStyles.Heading2 70 else: 71 style = ss.ParagraphStyles.Normal 72 73 # Handle each value from the row 74 rowcell = [] 75 76 for value in row: 77 cell = PyRTF.Text( value ) 78 rowcell.append(PyRTF.Cell( PyRTF.Paragraph(style, cell) )) 79 table.AddRow( *rowcell ) 80 81 section.append( table ) 82 string = StringIO.StringIO() 83 DR.Write( doc, string ) 84 85 keep = '' 86 for line in string.getvalue().splitlines(): 87 if keep != '' or line.startswith('{\\trowd'): 88 keep += line 89 90 #remove last '}' 91 keep = keep[0:-1] 92 93 for line in template: 94 line = line.replace(tagtoreplace, keep) 95 output.write(line)
96
97 - def rtfimage(self, image, outputfilename, tagtoreplace):
98 """ Replaces tagtoreplace in a RTF file with a image """ 99 100 template = file(self.template, 'rb' ) 101 output = file(outputfilename, 'w' ) 102 103 self._rtfimage(image, output, tagtoreplace, template) 104 105 output.close() 106 template.close()
107
108 - def _rtfimage(self, image, output, tagtoreplace, template):
109 TEMP_FILE = 'image_temp.rtf' 110 111 DR = PyRTF.Renderer() 112 doc = PyRTF.Document() 113 ss = doc.StyleSheet 114 section = PyRTF.Section() 115 doc.Sections.append( section ) 116 117 section.append( PyRTF.Image( image ) ) 118 119 tempOutput = file( TEMP_FILE, 'w' ) 120 DR.Write( doc, tempOutput ) 121 122 tempOutput = file( TEMP_FILE, 'rb' ) 123 124 keep = '' 125 for line in tempOutput: 126 if keep != '': 127 keep += line 128 elif line.startswith('{\pict'): 129 keep = line 130 131 #remove last '}' 132 keep = keep[0:-1] 133 134 tempOutput.close() 135 136 for line in template: 137 line = line.replace(tagtoreplace, keep) 138 output.write(line) 139 140 os.remove(TEMP_FILE)
141
142 - def rtfconvert(self, inputfilename, outputfilename):
143 """ Converts a property file to be RTF link syntax """ 144 inputfile = file( inputfilename, 'r' ) 145 outputfile = file( outputfilename, 'w' ) 146 147 self._rtfconvert(inputfile, outputfile) 148 149 inputfile.close() 150 outputfile.close()
151
152 - def _rtfconvert(self, inputfile, outputfile):
153 p = re.compile(r'(.+=)((\\\\|http|\.\\|ftp)(.+))') 154 for line in inputfile: 155 newline = line 156 157 #fix bad links generated in ant 158 if newline.count('\\\\')>0: 159 newline = newline.replace('//','\\') 160 newline = newline.replace('/','\\') 161 162 if "\\n" in newline: 163 newline = newline.replace("\\n", " \\\\line ") 164 else: 165 newline = newline.replace('\\','\\\\\\\\\\\\\\\\') 166 167 168 newline = p.sub('\g<1>{_backslash_field{_backslash_*_backslash_fldinst HYPERLINK \g<2>}}', newline) 169 170 newline = newline.replace('_backslash_', r'\\') 171 172 outputfile.write(newline)
173