class SassC::Engine

def render

def render
  return @template.dup if @template.empty?
  base_importer = import_handler.setup(nil)
  sass = ::Sass::Embedded.new
  result = sass.compile_string(
    @template,
    importer: base_importer,
    load_paths: load_paths,
    syntax: syntax,
    url: file_url,
    charset: @options.fetch(:charset, true),
    source_map: source_map_embed? || !source_map_file.nil?,
    source_map_include_sources: source_map_contents?,
    style: output_style,
    functions: functions_handler.setup(nil, functions: @functions),
    importers: (base_importer.nil? ? [] : [base_importer]).concat(@options.fetch(:importers, [])),
    alert_ascii: @options.fetch(:alert_ascii, false),
    alert_color: @options.fetch(:alert_color, nil),
    logger: @options.fetch(:logger, nil),
    quiet_deps: @options.fetch(:quiet_deps, false),
    verbose: @options.fetch(:verbose, false)
  )
  @loaded_urls = result.loaded_urls
  @source_map = result.source_map
  return if quiet?
  css = result.css
  css += "\n" unless css.empty?
  unless @source_map.nil? || omit_source_map_url?
    url = URL.parse(output_url || file_url)
    source_mapping_url = if source_map_embed?
                           "data:application/json;base64,#{[@source_map].pack('m0')}"
                         else
                           URL.file_urls_to_relative_url(source_map_file_url, url)
                         end
    css += "\n/*# sourceMappingURL=#{source_mapping_url} */"
  end
  css
rescue ::Sass::CompileError => e
  @loaded_urls = e.loaded_urls
  line = e.span&.start&.line
  line += 1 unless line.nil?
  url = e.span&.url
  path = if url&.start_with?(Protocol::FILE)
           URL.file_urls_to_relative_path(url, URL.path_to_file_url("#{Dir.pwd}/"))
         end
  raise SyntaxError.new(e.full_message, filename: path, line: line)
ensure
  sass&.close
end