def update_backend_attributes new_backend, force = nil
if force || (new_backend && new_backend != @backend)
current_backend, current_basebackend, current_doctype = @backend, (attrs = @attributes)['basebackend'], @doctype
if new_backend.start_with? 'xhtml'
attrs['htmlsyntax'] = 'xml'
new_backend = new_backend[1..-1]
elsif new_backend.start_with? 'html'
attrs['htmlsyntax'] = 'html' unless attrs['htmlsyntax'] == 'xml'
end
if (resolved_backend = BACKEND_ALIASES[new_backend])
new_backend = resolved_backend
end
if current_doctype
if current_backend
attrs.delete %(backend-#{current_backend})
attrs.delete %(backend-#{current_backend}-doctype-#{current_doctype})
end
attrs[%(backend-#{new_backend}-doctype-#{current_doctype})] = ''
attrs[%(doctype-#{current_doctype})] = ''
elsif current_backend
attrs.delete %(backend-#{current_backend})
end
attrs[%(backend-#{new_backend})] = ''
@backend = attrs['backend'] = new_backend
if Converter::BackendInfo === (@converter = create_converter)
new_basebackend = @converter.basebackend
attrs['outfilesuffix'] = @converter.outfilesuffix unless attribute_locked? 'outfilesuffix'
new_filetype = @converter.filetype
elsif @converter
new_basebackend = new_backend.sub TrailingDigitsRx, ''
if (new_outfilesuffix = DEFAULT_EXTENSIONS[new_basebackend])
new_filetype = new_outfilesuffix[1..-1]
else
new_outfilesuffix, new_basebackend, new_filetype = '.html', 'html', 'html'
end
attrs['outfilesuffix'] = new_outfilesuffix unless attribute_locked? 'outfilesuffix'
else
raise ::NotImplementedError, %(asciidoctor: FAILED: missing converter for backend '#{new_backend}'. Processing aborted.)
end
if (current_filetype = attrs['filetype'])
attrs.delete %(filetype-#{current_filetype})
end
attrs['filetype'] = new_filetype
attrs[%(filetype-#{new_filetype})] = ''
if (page_width = DEFAULT_PAGE_WIDTHS[new_basebackend])
attrs['pagewidth'] = page_width
else
attrs.delete 'pagewidth'
end
if new_basebackend != current_basebackend
if current_doctype
if current_basebackend
attrs.delete %(basebackend-#{current_basebackend})
attrs.delete %(basebackend-#{current_basebackend}-doctype-#{current_doctype})
end
attrs[%(basebackend-#{new_basebackend}-doctype-#{current_doctype})] = ''
elsif current_basebackend
attrs.delete %(basebackend-#{current_basebackend})
end
attrs[%(basebackend-#{new_basebackend})] = ''
attrs['basebackend'] = new_basebackend
end
return new_backend
end
end