       (.encode (java.nio.CharBuffer/wrap (char-array [char])))
       (.limit)))
 
-;; A δposition is a difference in position from a block of text.
-(def null-δposition
+;; A delta-position is a difference in position from a block of text.
+(def null-delta-position
   {:byte 0 :char 0 :line 0 :column 0 :tab-lead nil
    :starts-with-newline? false :ends-with-return? false })
 
-(defn %normal-char-δposition [length]
+(defn %normal-char-delta-position [length]
   {:byte length :char 1 :line 0 :column 1 :tab-lead nil
    :starts-with-newline? false :ends-with-return? false })
 
-(def %normal-char-δposition-vec
-  (into [] (for [i (range 1 7)] (%normal-char-δposition i))))
+(def %normal-char-delta-position-vec
+  (into [] (for [i (range 1 7)] (%normal-char-delta-position i))))
 
-(def %normal-char-δposition-1
-  (%normal-char-δposition-vec 0))
+(def %normal-char-delta-position-1
+  (%normal-char-delta-position-vec 0))
 
-(defn normal-char-δposition
-  ([l] (%normal-char-δposition-vec (dec l)))
-  ([] %normal-char-δposition-1))
+(defn normal-char-delta-position
+  ([l] (%normal-char-delta-position-vec (dec l)))
+  ([] %normal-char-delta-position-1))
 
-(def return-δposition
+(def return-delta-position
   {:byte 1 :char 1 :line 1 :column 0 :tab-lead nil
    :starts-with-newline? false :ends-with-return? true})
 
-(def newline-δposition
+(def newline-delta-position
   {:byte 1 :char 1 :line 1 :column 0 :tab-lead nil
    :starts-with-newline? true :ends-with-return? false})
 
-(def formfeed-δposition
+(def formfeed-delta-position
   ;; hack: formfeed has zero width.
   ;; Maybe add state so it resets the column?
   {:byte 1 :char 1 :line 0 :column 0 :tab-lead nil
    :starts-with-newline? true :ends-with-return? false})
 
-(def tab-δposition
+(def tab-delta-position
   {:byte 1 :char 1 :line 0 :column 0 :tab-lead 0
    :starts-with-newline? false :ends-with-return? false})
 
-(defn combine-δposition
-  ([] null-δposition)
+(defn combine-delta-position
+  ([] null-delta-position)
   ([x] x)
   ([x y] (let [{xb :byte xc :char xln :line xco :column xt :tab-lead
                 xn :starts-with-newline? xr :ends-with-return?} x

   (instance? String s) (java.io.StringReader. s)
   :else (throw (Exception. (format "can't turn %s into a Reader" s)))))

(defn- %positioned-stream [reader δposition encoder line-offset column-offset]
  (lazy-seq
   (if-let [char (read-char reader)]
     (cons [char (+ line-offset (:line δposition)) (+ column-offset (:column δposition))]
           (%positioned-stream
            reader (inc-δposition δposition char encoder) encoder line-offset column-offset)))))

(defn positioned-stream
  ([input]

  ([input options]
     (%positioned-stream
      (ensure-reader input)
      (or (:delta-position options) null-delta-position)
      (or (:encoder options) utf8-encoder)
      (or (:line-offset options) 0)
      (or (:column-offset options) 0))))
