# File lib/asciidoctor/reader.rb, line 39
  def initialize data = nil, cursor = nil, opts = {:normalize => false}
    if !cursor
      @file = @dir = nil
      @path = '<stdin>'
      @lineno = 1 # IMPORTANT lineno assignment must proceed prepare_lines call!
    elsif cursor.is_a? ::String
      @file = cursor
      @dir, @path = ::File.split @file
      @lineno = 1 # IMPORTANT lineno assignment must proceed prepare_lines call!
    else
      @file = cursor.file
      @dir = cursor.dir
      @path = cursor.path || '<stdin>'
      if @file
        unless @dir
          # REVIEW might to look at this assignment closer
          @dir = ::File.dirname @file
          @dir = nil if @dir == '.' # right?
        end

        unless cursor.path
          @path = ::File.basename @file
        end
      end
      @lineno = cursor.lineno || 1 # IMPORTANT lineno assignment must proceed prepare_lines call!
    end
    @lines = data ? (prepare_lines data, opts) : []
    @source_lines = @lines.dup
    @eof = @lines.empty?
    @look_ahead = 0
    @process_lines = true
    @unescape_next_line = false
  end