MCPcopy Index your code
hub / github.com/DHTMLX/gantt / drawForLine

Function drawForLine

samples/common/codehighlight/codemirror.js:3194–3247  ·  view source on GitHub ↗
(line, fromArg, toArg)

Source from the content-addressed store, hash-verified

3192 }
3193
3194 function drawForLine(line, fromArg, toArg) {
3195 var lineObj = getLine(doc, line);
3196 var lineLen = lineObj.text.length;
3197 var start, end;
3198 function coords(ch, bias) {
3199 return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
3200 }
3201
3202 function wrapX(pos, dir, side) {
3203 var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
3204 var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
3205 var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
3206 return coords(ch, prop)[prop]
3207 }
3208
3209 var order = getOrder(lineObj, doc.direction);
3210 iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
3211 var ltr = dir == "ltr";
3212 var fromPos = coords(from, ltr ? "left" : "right");
3213 var toPos = coords(to - 1, ltr ? "right" : "left");
3214
3215 var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
3216 var first = i == 0, last = !order || i == order.length - 1;
3217 if (toPos.top - fromPos.top <= 3) { // Single line
3218 var openLeft = (docLTR ? openStart : openEnd) && first;
3219 var openRight = (docLTR ? openEnd : openStart) && last;
3220 var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
3221 var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
3222 add(left, fromPos.top, right - left, fromPos.bottom);
3223 } else { // Multiple lines
3224 var topLeft, topRight, botLeft, botRight;
3225 if (ltr) {
3226 topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
3227 topRight = docLTR ? rightSide : wrapX(from, dir, "before");
3228 botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
3229 botRight = docLTR && openEnd && last ? rightSide : toPos.right;
3230 } else {
3231 topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
3232 topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
3233 botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
3234 botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
3235 }
3236 add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
3237 if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
3238 add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
3239 }
3240
3241 if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
3242 if (cmpCoords(toPos, start) < 0) { start = toPos; }
3243 if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
3244 if (cmpCoords(toPos, end) < 0) { end = toPos; }
3245 });
3246 return {start: start, end: end}
3247 }
3248
3249 var sFrom = range.from(), sTo = range.to();
3250 if (sFrom.line == sTo.line) {

Callers 1

drawSelectionRangeFunction · 0.85

Calls 7

getLineFunction · 0.85
getOrderFunction · 0.85
iterateBidiSectionsFunction · 0.85
coordsFunction · 0.85
wrapXFunction · 0.85
cmpCoordsFunction · 0.85
addFunction · 0.70

Tested by

no test coverage detected