# File lib/asciidoctor/reader.rb, line 1162
  def resolve_expr_val val
    if ((val.start_with? '"') && (val.end_with? '"')) ||
        ((val.start_with? '\'') && (val.end_with? '\''))
      quoted = true
      val = val[1...-1]
    else
      quoted = false
    end

    # QUESTION should we substitute first?
    # QUESTION should we also require string to be single quoted (like block attribute values?)
    if val.include? '{'
      val = @document.sub_attributes val, :attribute_missing => 'drop'
    end

    if quoted
      val
    else
      if val.empty?
        nil
      elsif val == 'true'
        true
      elsif val == 'false'
        false
      elsif val.rstrip.empty?
        ' '
      elsif val.include? '.'
        val.to_f
      else
        # fallback to coercing to integer, since we
        # require string values to be explicitly quoted
        val.to_i
      end
    end
  end