class RubyXL::SharedStringsTable

def [](index)

def [](index)
  strings[index]
end

def add(v, index = nil)

def add(v, index = nil)
  index ||= strings.size
  strings[index] =
    case v
    when RubyXL::RichText then v
    when String then RubyXL::RichText.new(:t => RubyXL::Text.new(:value => v))
    when RubyXL::Text               then RubyXL::RichText.new(:t => v)
    when RubyXL::RichTextRun        then RubyXL::RichText.new(:r => [ v ])
    when RubyXL::PhoneticRun        then RubyXL::RichText.new(:r_ph => [ v ])
    when RubyXL::PhoneticProperties then RubyXL::RichText.new(:phonetic_pr => v)
    end
  @index_by_content[v.to_s] = index
end

def before_write_xml

def before_write_xml
  super
  self.unique_count = self.count
  self.count > 0
end

def empty?

def empty?
  strings.empty?
end

def get_index(str, add_if_missing = false)

def get_index(str, add_if_missing = false)
  index = @index_by_content[str]
  index = add(str) if index.nil? && add_if_missing
  index
end

def initialize(*params)

def initialize(*params)
  super
  # So far, going by the structure that the original creator had in mind. However,
  # since the actual implementation is now extracted into a separate class,
  # we will be able to transparrently change it later if needs be.
  @index_by_content = {}
end

def xlsx_path

def xlsx_path
  ROOT.join('xl', 'sharedStrings.xml')
end