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?
gen_id = gen_id.tr_s sep, sep
gen_id = gen_id.chop if gen_id.end_with? sep
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