# File lib/asciidoctor/reader.rb, line 28
  def initialize(data = nil, document = nil, preprocess = false, &block)
    data = [] if data.nil?
    # TODO use Struct to track file/lineno info; track as file changes; offset for sub-readers
    @lineno = 0
    if !preprocess
      @lines = data.is_a?(String) ? data.lines.entries : data.dup
      @preprocess_source = false
    elsif !data.empty?
      # NOTE we assume document is not nil!
      @document = document
      @preprocess_source = true
      @include_block = block_given? ? block : nil
      normalize_data(data.is_a?(String) ? data.lines.entries : data)
    else
      @lines = []
      @preprocess_source = false
    end

    @source = @lines.dup

    @next_line_preprocessed = false
    @unescape_next_line = false

    @conditionals_stack = []
    @skipping = false
    @eof = false
  end