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