class ODFWriter::ListStyle

ListStyle: add style for ul, ol up to 6 levels deep

Public Class Methods

new( list_style ) click to toggle source

initialize

# File lib/odf_writer/list_style.rb, line 36
def initialize( list_style )
  @list_style = list_style
  @font  = {}
end

Public Instance Methods

add_list_style( xml ) click to toggle source

add_list_style

# File lib/odf_writer/list_style.rb, line 46
def add_list_style( xml )

  ns                                   = xml.collect_namespaces
  automatic_styles                     = xml.at("//office:automatic-styles", ns)
  automatic_styles                     << create_list( xml ) if automatic_styles.present?
  
  if @font.present?
    font_declarations                  = xml.at("//office:font-face-decls", ns)
    font_declarations                  << create_font( xml ) if font_declarations.present?
  end
  
end

Private Instance Methods

create_font( xml ) click to toggle source

private

# File lib/odf_writer/list_style.rb, line 66
def create_font( xml )
  node                               = Nokogiri::XML::Node.new('style:font-face', xml)
  node["style:name"]                 = @font[:font_name]
  node["svg:font-family"]            = @font[:font_family]
  node["style:font-family-generic"]  = @font[:font_family_generic]
  node["style:font-pitch"]           = @font[:font_pitch]
  node
end
create_list( xml ) click to toggle source
# File lib/odf_writer/list_style.rb, line 75
def create_list( xml )
    
  list_style                                                = Nokogiri::XML::Node.new('text:list-style', xml)
  
  #
  # common properties
  #
  case @list_style
  
    when :ul
      list_style['style:name']                              = "ul"
      
      #
      # Level 1
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "1"
      list_bullet['text:bullet-char']                       = "•"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "1cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "1cm"
      list_level << list_label
      
      #
      # Level 2
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "2"
      list_bullet['text:bullet-char']                       = "◦"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "1.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "1.5cm"
      list_level << list_label
      
      #
      # Level 3
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "3"
      list_bullet['text:bullet-char']                       = "▪"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "2cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "2cm"
      list_level << list_label
      
      #
      # Level 4
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "4"
      list_bullet['text:bullet-char']                       = "•"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "2.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "2.5cm"
      list_level << list_label
      
      #
      # Level 5
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "5"
      list_bullet['text:bullet-char']                       = "◦"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "3cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "3cm"
      list_level << list_label
      
      #
      # Level 6
      #
      list_bullet                                           = Nokogiri::XML::Node.new('text:list-level-style-bullet', xml) 
      list_bullet['text:level']                             = "6"
      list_bullet['text:bullet-char']                       = "▪"
      list_style << list_bullet
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_bullet << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "3.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "3.5cm"
      list_level << list_label
      
    when :ol
      list_style['style:name']                              = "ol"
      
      #
      # Level 1
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "1"
      list_number['style:num-suffix']                       = "."
      list_number['style:num-format']                       = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "1cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "1cm"
      list_level << list_label
      
      #
      # Level 2
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "2"
      list_number['style:num-suffix']                        = "."
      list_number['style:num-format']                        = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "1.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "1.5cm"
      list_level << list_label
      
      #
      # Level 3
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "3"
      list_number['style:num-suffix']                       = "."
      list_number['style:num-format']                       = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "2cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "2cm"
      list_level << list_label
      
      #
      # Level 4
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "4"
      list_number['style:num-suffix']                       = "."
      list_number['style:num-format']                       = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "2.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "2.5cm"
      list_level << list_label
      
      #
      # Level 5
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "5"
      list_number['style:num-suffix']                       = "."
      list_number['style:num-format']                       = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "3cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "3cm"
      list_level << list_label
      
      #
      # Level 6
      #
      list_number                                           = Nokogiri::XML::Node.new('text:list-level-style-number', xml) 
      list_number['text:level']                             = "6"
      list_number['style:num-suffix']                       = "."
      list_number['style:num-format']                       = "1"
      list_style << list_number
      
      list_level                                            = Nokogiri::XML::Node.new('style:list-level-properties', xml)
      list_level['text:list-level-position-and-space-mode'] = "label-alignment"
      list_number << list_level
      
      list_label                                            = Nokogiri::XML::Node.new('style:list-level-label-alignment', xml) 
      list_label['text:label-followed-by']                  = "listtab"
      list_label['text:list-tab-stop-position']             = "3.5cm"
      list_label['fo:text-indent']                          = "-0.5cm"
      list_label['fo:margin-left']                          = "3.5cm"
      list_level << list_label
      
  end
  
  list_style
  
end