class Asciidoctor::Epub3::DocumentIdGenerator
Constants
- CharRefRx
- InvalidIdCharsRx
- LeadingDigitRx
- ReservedIds
Public Class Methods
generate_id(doc, pre = nil, sep = nil)
click to toggle source
# File lib/asciidoctor-epub3/converter.rb, line 1782 def generate_id doc, pre = nil, sep = nil synthetic = false unless (id = doc.id) # NOTE we assume pre is a valid ID prefix and that pre and sep only contain valid ID chars pre ||= '_' sep = sep ? sep.chr : '_' if doc.header? id = doc.doctitle sanitize: true id = id.gsub CharRefRx do $1 ? ($1 == 'amp' ? 'and' : sep) : ((d = $2 ? $2.to_i : $3.hex) == 8217 ? '' : ([d].pack 'U*')) end if id.include? '&' id = id.downcase.gsub InvalidIdCharsRx, sep if id.empty? id, synthetic = nil, true else unless sep.empty? if (id = id.tr_s sep, sep).end_with? sep if id == sep id, synthetic = nil, true else id = (id.start_with? sep) ? id[1..-2] : id.chop end elsif id.start_with? sep id = id[1..-1] end end unless synthetic if pre.empty? id = %(_#{id}) if LeadingDigitRx =~ id elsif !(id.start_with? pre) id = %(#{pre}#{id}) end end end elsif (first_section = doc.first_section) id = first_section.id else synthetic = true end id = %(#{pre}document#{sep}#{doc.object_id}) if synthetic end logger.error %(chapter uses a reserved ID: #{id}) if !synthetic && (ReservedIds.include? id) id end