|
|
@@ -33,30 +33,31 @@
|
|
|
;; (find-position "** hello _w_" "hello w")
|
|
|
(defn find-position
|
|
|
[markup text]
|
|
|
- (try
|
|
|
- (let [pos (loop [t1 (-> markup string/lower-case seq)
|
|
|
- t2 (-> text string/lower-case seq)
|
|
|
- i1 0
|
|
|
- i2 0]
|
|
|
- (let [[h1 & r1] t1
|
|
|
- [h2 & r2] t2]
|
|
|
- (cond
|
|
|
- (or (empty? t1) (empty? t2))
|
|
|
- i1
|
|
|
-
|
|
|
- (= h1 h2)
|
|
|
- (recur r1 r2 (inc i1) (inc i2))
|
|
|
-
|
|
|
- (#{\[ \space \]} h2)
|
|
|
- (recur t1 r2 i1 (inc i2))
|
|
|
-
|
|
|
- :else
|
|
|
- (recur r1 t2 (inc i1) i2))))]
|
|
|
- (if (and (= (util/nth-safe markup pos)
|
|
|
- (util/nth-safe markup (inc pos))
|
|
|
- "]"))
|
|
|
- (+ pos 2)
|
|
|
- pos))
|
|
|
- (catch js/Error e
|
|
|
- (log/error :diff/find-position {:error e})
|
|
|
- (count markup))))
|
|
|
+ (when (and (string? markup) (string? text))
|
|
|
+ (try
|
|
|
+ (let [pos (loop [t1 (-> markup string/lower-case seq)
|
|
|
+ t2 (-> text string/lower-case seq)
|
|
|
+ i1 0
|
|
|
+ i2 0]
|
|
|
+ (let [[h1 & r1] t1
|
|
|
+ [h2 & r2] t2]
|
|
|
+ (cond
|
|
|
+ (or (empty? t1) (empty? t2))
|
|
|
+ i1
|
|
|
+
|
|
|
+ (= h1 h2)
|
|
|
+ (recur r1 r2 (inc i1) (inc i2))
|
|
|
+
|
|
|
+ (#{\[ \space \]} h2)
|
|
|
+ (recur t1 r2 i1 (inc i2))
|
|
|
+
|
|
|
+ :else
|
|
|
+ (recur r1 t2 (inc i1) i2))))]
|
|
|
+ (if (and (= (util/nth-safe markup pos)
|
|
|
+ (util/nth-safe markup (inc pos))
|
|
|
+ "]"))
|
|
|
+ (+ pos 2)
|
|
|
+ pos))
|
|
|
+ (catch js/Error e
|
|
|
+ (log/error :diff/find-position {:error e})
|
|
|
+ (count markup)))))
|