# File lib/asciidoctor/section.rb, line 185
  def self.generate_id title, document
    attrs = document.attributes
    sep = attrs['idseparator'] || '_'
    pre = attrs['idprefix'] || '_'
    gen_id = %(#{pre}#{title.downcase.gsub InvalidSectionIdCharsRx, sep})
    unless sep.empty?
      # remove repeat and trailing separator characters
      gen_id = gen_id.tr_s sep, sep
      gen_id = gen_id.chop if gen_id.end_with? sep
      # ensure id doesn't begin with idseparator if idprefix is empty and idseparator is not empty
      if pre.empty?
        gen_id = gen_id.slice 1, gen_id.length while gen_id.start_with? sep
      end
    end
    if document.catalog[:ids].key? gen_id
      ids, cnt = document.catalog[:ids], Compliance.unique_id_start_index
      cnt += 1 while ids.key?(candidate_id = %(#{gen_id}#{sep}#{cnt}))
      candidate_id
    else
      gen_id
    end
  end