""" A Styles is a collection of PropertySets that can be applied to a particular RTF element. At present there are only two, Text and Paragraph but ListStyles will be added soon too. """ from PropertySets import * class TextStyle : def __init__( self, text_props, name=None, shading_props=None ) : self.SetTextPropertySet ( text_props ) self.SetName ( name ) self.SetShadingPropertySet( shading_props ) def Copy( self ) : return deepcopy( self ) def SetName( self, value ) : self.Name = value return self def SetTextPropertySet( self, value ) : assert isinstance( value, TextPropertySet ) self.TextPropertySet = value return self def SetShadingPropertySet( self, value ) : assert value is None or isinstance( value, ShadingPropertySet ) self.ShadingPropertySet = value or ShadingPropertySet() return self class ParagraphStyle : def __init__( self, name, text_style, paragraph_props=None, frame_props=None, shading_props=None ) : # A style must have Font and a Font Size but the Text property set doesn't # make these mandatory so that they can be used for overrides so at this point # we need to make sure that that we have these values set if not text_style.TextPropertySet.Font : raise Exception( 'Paragraph Styles must have a Font specified.' ) if not text_style.TextPropertySet.Size : raise Exception( 'Paragraph Styles must have a Font Size specified.' ) self.SetName ( name ) self.SetTextStyle ( text_style ) self.SetParagraphPropertySet( paragraph_props ) self.SetFramePropertySet ( frame_props ) self.SetShadingPropertySet ( shading_props ) self.SetBasedOn( None ) self.SetNext ( None ) def Copy( self ) : return deepcopy( self ) def SetName( self, value ) : self.Name = value return self def SetTextStyle( self, value ) : assert isinstance( value, TextStyle ) self.TextStyle = value return self def SetParagraphPropertySet( self, value ) : assert value is None or isinstance( value, ParagraphPropertySet ) self.ParagraphPropertySet = value or ParagraphPropertySet() return self def SetFramePropertySet( self, value ) : assert value is None or isinstance( value, FramePropertySet ) self.FramePropertySet = value or FramePropertySet() return self def SetShadingPropertySet( self, value ) : """Set the background shading for the paragraph.""" assert value is None or isinstance( value, ShadingPropertySet ) self.ShadingPropertySet = value or ShadingPropertySet() return self def SetBasedOn( self, value ) : """Set the Paragraph Style that this one is based on.""" assert not value or isinstance( value, ParagraphStyle ) self.BasedOn = value return self def SetNext( self, value ) : """Set the Paragraph Style that should follow this one.""" assert not value or isinstance( value, ParagraphStyle ) self.Next = value return self