use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess in project xtext-core by eclipse.
the class TextRegionsWithTitleToString method toString.
@Override
public String toString() {
ITextRegionAccess access = getTextRegionAccess();
ITextSegment frame = getFrame();
if (access == null || frame == null)
return "(null)";
ITextRegionRewriter rewriter = access.getRewriter();
StringBuilder builder = new StringBuilder();
List<ITextReplacement> replacements = Lists.newArrayList();
for (int i = 0; i < this.items.size(); i++) {
Item item = this.items.get(i);
ITextSegment region = item.getRegion();
String regionStr = "offset=" + region.getOffset() + " length=" + region.getLength();
String open = i < BRACKETS_OPEN.length ? BRACKETS_OPEN[i] : "[" + i + "[";
String close = i < BRACKETS_CLOSE.length ? BRACKETS_CLOSE[i] : "]" + i + "]";
builder.append(open + close + ": " + item.getTitle() + " at " + regionStr + "\n");
replacements.add(rewriter.createReplacement(region.getOffset(), 0, open));
replacements.add(rewriter.createReplacement(region.getEndOffset(), 0, close));
}
String vizualized = rewriter.renderToString(frame, replacements);
builder.append(box("document snippet", vizualized));
return builder.toString();
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess in project xtext-core by eclipse.
the class MultilineCommentReplacer method createReplacements.
@Override
public ITextReplacerContext createReplacements(ITextReplacerContext context) {
if (!multiline)
return context;
IComment comment = getComment();
ITextRegionAccess access = comment.getTextRegionAccess();
List<ILineRegion> lines = comment.getLineRegions();
String oldIndentation = lines.get(0).getIndentation().getText();
String indentationString = context.getIndentationString();
String newIndentation = indentationString + " " + prefix + " ";
for (int i = 1; i < lines.size() - 1; i++) {
ITextSegment line = lines.get(i);
String text = line.getText();
int prefixOffset = prefixOffset(text);
ITextSegment target;
if (prefixOffset >= 0)
target = access.regionForOffset(line.getOffset(), prefixOffset + 1);
else if (text.startsWith(oldIndentation))
target = access.regionForOffset(line.getOffset(), oldIndentation.length());
else
target = access.regionForOffset(line.getOffset(), 0);
context.addReplacement(target.replaceWith(newIndentation));
}
if (lines.size() > 1) {
ILineRegion line = lines.get(lines.size() - 1);
context.addReplacement(line.getIndentation().replaceWith(indentationString + " "));
}
return context;
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess in project xtext-core by eclipse.
the class TextReplacerContext method isWrapSincePrevious.
@Override
public boolean isWrapSincePrevious() {
ITextRegionAccess access = getDocument().getRequest().getTextRegionAccess();
ITextSegment region = getRegion(0);
ITextSegment previousRegion = getRegion(1);
if (previousRegion != null) {
int offset = previousRegion.getEndOffset();
String between = access.textForOffset(offset, region.getOffset() - offset);
if (between.contains("\n")) {
return true;
}
}
return false;
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess in project xtext-core by eclipse.
the class TextReplacerContext method getLeadingCharsInLineCount.
@Override
public int getLeadingCharsInLineCount() {
ITextRegionAccess access = getDocument().getRequest().getTextRegionAccess();
int lastOffset = replacer.getRegion().getOffset();
ITextReplacerContext current = this;
int count = 0;
while (current != null) {
Iterator<ITextReplacement> localReplacements = current.getLocalReplacementsReverse().iterator();
while (localReplacements.hasNext()) {
ITextReplacement rep = localReplacements.next();
int endOffset = rep.getEndOffset();
if (endOffset > lastOffset) {
// System.out.println("error");
continue;
}
String between = access.textForOffset(endOffset, lastOffset - endOffset);
int idx = between.lastIndexOf('\n');
if (idx >= 0)
return count + logicalLength(between.substring(idx + 1));
count += logicalLength(between);
String text = rep.getReplacementText();
int idx2 = text.lastIndexOf('\n');
if (idx2 >= 0)
return count + logicalLength(text.substring(idx2 + 1));
count += logicalLength(text);
lastOffset = rep.getOffset();
}
current = current.getPreviousContext();
}
String rest = access.textForOffset(0, lastOffset);
int idx = rest.lastIndexOf('\n');
if (idx >= 0)
return count + logicalLength(rest.substring(idx + 1));
count += lastOffset;
return count;
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess in project xtext-core by eclipse.
the class LineRegion method getNextLine.
@Override
public ILineRegion getNextLine() {
ITextRegionAccess access = getTextRegionAccess();
int start = getEndOffset() + 1;
String text = access.regionForDocument().getText();
while (true) {
if (start >= text.length())
return null;
char c = text.charAt(start);
if (c == '\n' || c == '\r')
start++;
else
break;
}
int end = text.indexOf('\n', start);
if (end > 0) {
if (text.charAt(end - 1) == '\r')
end = end - 1;
} else
end = text.length();
return new LineRegion(access, start, end - start);
}
Aggregations