/gluon/contrib/pyrtf/Styles.py

https://github.com/goldenboy/skiheilw2p
Python | 93 lines | 59 code | 21 blank | 13 comment | 12 complexity | c88a1a94c02693bd1d69cc4ba950efd8 MD5 | raw file
  1. """
  2. A Styles is a collection of PropertySets that can be applied to a particular RTF element.
  3. At present there are only two, Text and Paragraph but ListStyles will be added soon too.
  4. """
  5. from PropertySets import *
  6. class TextStyle :
  7. def __init__( self, text_props, name=None, shading_props=None ) :
  8. self.SetTextPropertySet ( text_props )
  9. self.SetName ( name )
  10. self.SetShadingPropertySet( shading_props )
  11. def Copy( self ) :
  12. return deepcopy( self )
  13. def SetName( self, value ) :
  14. self.Name = value
  15. return self
  16. def SetTextPropertySet( self, value ) :
  17. assert isinstance( value, TextPropertySet )
  18. self.TextPropertySet = value
  19. return self
  20. def SetShadingPropertySet( self, value ) :
  21. assert value is None or isinstance( value, ShadingPropertySet )
  22. self.ShadingPropertySet = value or ShadingPropertySet()
  23. return self
  24. class ParagraphStyle :
  25. def __init__( self, name, text_style, paragraph_props=None, frame_props=None, shading_props=None ) :
  26. # A style must have Font and a Font Size but the Text property set doesn't
  27. # make these mandatory so that they can be used for overrides so at this point
  28. # we need to make sure that that we have these values set
  29. if not text_style.TextPropertySet.Font : raise Exception( 'Paragraph Styles must have a Font specified.' )
  30. if not text_style.TextPropertySet.Size : raise Exception( 'Paragraph Styles must have a Font Size specified.' )
  31. self.SetName ( name )
  32. self.SetTextStyle ( text_style )
  33. self.SetParagraphPropertySet( paragraph_props )
  34. self.SetFramePropertySet ( frame_props )
  35. self.SetShadingPropertySet ( shading_props )
  36. self.SetBasedOn( None )
  37. self.SetNext ( None )
  38. def Copy( self ) :
  39. return deepcopy( self )
  40. def SetName( self, value ) :
  41. self.Name = value
  42. return self
  43. def SetTextStyle( self, value ) :
  44. assert isinstance( value, TextStyle )
  45. self.TextStyle = value
  46. return self
  47. def SetParagraphPropertySet( self, value ) :
  48. assert value is None or isinstance( value, ParagraphPropertySet )
  49. self.ParagraphPropertySet = value or ParagraphPropertySet()
  50. return self
  51. def SetFramePropertySet( self, value ) :
  52. assert value is None or isinstance( value, FramePropertySet )
  53. self.FramePropertySet = value or FramePropertySet()
  54. return self
  55. def SetShadingPropertySet( self, value ) :
  56. """Set the background shading for the paragraph."""
  57. assert value is None or isinstance( value, ShadingPropertySet )
  58. self.ShadingPropertySet = value or ShadingPropertySet()
  59. return self
  60. def SetBasedOn( self, value ) :
  61. """Set the Paragraph Style that this one is based on."""
  62. assert not value or isinstance( value, ParagraphStyle )
  63. self.BasedOn = value
  64. return self
  65. def SetNext( self, value ) :
  66. """Set the Paragraph Style that should follow this one."""
  67. assert not value or isinstance( value, ParagraphStyle )
  68. self.Next = value
  69. return self