From d4d278b984650b399cc0e653b97c83ce254ddb6d Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke <marijn@haverbeke.nl>
Date: Thu, 2 Feb 2017 13:43:42 +0100
Subject: [PATCH] Factor anon-function-heavy conditional into separate function

---
 src/measurement/position_measurement.js | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/measurement/position_measurement.js b/src/measurement/position_measurement.js
index 10334443..4d24cdf5 100644
--- a/src/measurement/position_measurement.js
+++ b/src/measurement/position_measurement.js
@@ -424,6 +424,14 @@ export function coordsChar(cm, x, y) {
   }
 }
 
+function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+  let measure = ch => intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line")
+  let end = lineObj.text.length - 1
+  let begin = findFirst(ch => measure(ch).bottom < y, end, 0) + 1
+  end = findFirst(ch => measure(ch).top > y, begin, end + 1) - 1
+  return {begin, end}
+}
+
 function coordsCharInner(cm, lineObj, lineNo, x, y) {
   y -= heightAtLine(lineObj)
   let begin = 0, end = lineObj.text.length - 1
@@ -432,9 +440,7 @@ function coordsCharInner(cm, lineObj, lineNo, x, y) {
   let order = getOrder(lineObj)
   if (order) {
     if (cm.options.lineWrapping) {
-      let measure = ch => intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line")
-      begin = findFirst(ch => measure(ch).bottom < y, end, begin - 1) + 1
-      end = findFirst(ch => measure(ch).top > y, begin, end + 1) - 1
+      ;({begin, end} = wrappedLineExtent(cm, lineObj, preparedMeasure, y))
     }
     if (end == lineObj.text.length - 1) ++end
     pos = new Pos(lineNo, begin)
-- 
GitLab