use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.
the class EditScreen method updateActiveLine.
private void updateActiveLine() {
Pos p = cmEdit.getCursor("end");
cursLine.setInnerText(Integer.toString(p.line() + 1));
cursCol.setInnerText(Integer.toString(p.ch() + 1));
cmEdit.extras().activeLine(cmEdit.getLineHandleVisualStart(p.line()));
}
use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.
the class SideBySideChunkManager method markEdit.
private void markEdit(CodeMirror cm, int startLine, JsArrayString lines, JsArray<Span> edits) {
if (lines == null || edits == null) {
return;
}
EditIterator iter = new EditIterator(lines, startLine);
Configuration bg = Configuration.create().set("className", SideBySideTable.style.intralineBg()).set("readOnly", true);
Configuration diff = Configuration.create().set("className", SideBySideTable.style.diff()).set("readOnly", true);
Pos last = Pos.create(0, 0);
for (Span span : Natives.asList(edits)) {
Pos from = iter.advance(span.skip());
Pos to = iter.advance(span.mark());
if (from.line() == last.line()) {
getMarkers().add(cm.markText(last, from, bg));
} else {
getMarkers().add(cm.markText(Pos.create(from.line(), 0), from, bg));
}
getMarkers().add(cm.markText(from, to, diff));
last = to;
colorLines(cm, LineClassWhere.BACKGROUND, SideBySideTable.style.diff(), from.line(), to.line());
}
}
use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.
the class UnifiedCommentManager method newDraft.
@Override
void newDraft(CodeMirror cm) {
if (cm.somethingSelected()) {
FromTo fromTo = adjustSelection(cm);
Pos from = fromTo.from();
Pos to = fromTo.to();
Unified unified = (Unified) host;
UnifiedChunkManager manager = unified.getChunkManager();
LineRegionInfo fromInfo = unified.getLineRegionInfoFromCmLine(from.line());
LineRegionInfo toInfo = unified.getLineRegionInfoFromCmLine(to.line());
DisplaySide side = toInfo.getSide();
// start line to be on the same side as the end line.
if ((fromInfo.type == RegionType.INSERT || fromInfo.type == RegionType.COMMON) && toInfo.type == RegionType.DELETE) {
LineOnOtherInfo infoOnSideA = manager.lineMapper.lineOnOther(DisplaySide.B, fromInfo.line);
int startLineOnSideA = infoOnSideA.getLine();
if (infoOnSideA.isAligned()) {
from.line(startLineOnSideA);
} else {
from.line(startLineOnSideA + 1);
}
from.ch(0);
to.line(toInfo.line);
} else if (fromInfo.type == RegionType.DELETE && toInfo.type == RegionType.INSERT) {
LineOnOtherInfo infoOnSideB = manager.lineMapper.lineOnOther(DisplaySide.A, fromInfo.line);
int startLineOnSideB = infoOnSideB.getLine();
if (infoOnSideB.isAligned()) {
from.line(startLineOnSideB);
} else {
from.line(startLineOnSideB + 1);
}
from.ch(0);
to.line(toInfo.line);
} else if (fromInfo.type == RegionType.DELETE && toInfo.type == RegionType.COMMON) {
int toLineOnSideA = manager.lineMapper.lineOnOther(DisplaySide.B, toInfo.line).getLine();
from.line(fromInfo.line);
// Force the end line to be on the same side as the start line.
to.line(toLineOnSideA);
side = DisplaySide.A;
} else {
// Common case
from.line(fromInfo.line);
to.line(toInfo.line);
}
addDraftBox(side, CommentInfo.create(getPath(), getStoredSideFromDisplaySide(side), to.line() + 1, CommentRange.create(fromTo), false)).setEdit(true);
cm.setCursor(Pos.create(host.getCmLine(to.line(), side), to.ch()));
cm.setSelection(cm.getCursor());
} else {
int cmLine = cm.getLineNumber(cm.extras().activeLine());
LineRegionInfo info = ((Unified) host).getLineRegionInfoFromCmLine(cmLine);
insertNewDraft(info.getSide(), cmLine + 1);
}
}
use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.
the class CommentRange method create.
public static CommentRange create(FromTo fromTo) {
if (fromTo == null) {
return null;
}
Pos from = fromTo.from();
Pos to = fromTo.to();
return create(from.line() + 1, from.ch(), to.line() + 1, to.ch());
}
use of net.codemirror.lib.Pos in project gerrit by GerritCodeReview.
the class EditIterator method advance.
Pos advance(int numOfChar) {
numOfChar = adjustForNegativeDelta(numOfChar);
while (line < lines.length()) {
// + 1 for LF
int len = lines.get(line).length() - pos + 1;
if (numOfChar < len) {
Pos at = Pos.create(startLine + line, numOfChar + pos);
pos += numOfChar;
return at;
}
numOfChar -= len;
line++;
pos = 0;
if (numOfChar == 0) {
return Pos.create(startLine + line, 0);
}
}
throw new IllegalStateException("EditIterator index out of bounds");
}
Aggregations