package com.mobilesorcery.sdk.html5.debug; import java.util.Map.Entry; import java.util.TreeMap; public class LineMap { private final TreeMap<Integer, Integer> lines = new TreeMap<Integer, Integer>(); public LineMap(String text) { char[] chars = text.toCharArray(); int startOfLine = 0; int line = 1; for (int i = 0; i < chars.length; i++) { char ch = chars[i]; char peek = i < chars.length - 1 ? chars[i + 1] : '\0'; if (ch == '\r' || ch == '\n') { line = addLine(startOfLine, line); if (peek == '\n' && ch == '\r') { i++; } startOfLine = i + 1; } } } private int addLine(int startIx, int line) { lines.put(startIx, line); return line + 1; } public int getLine(int pos) { Integer line = lines.floorKey(pos); if (line == null) { return 1; } return lines.get(line); } public int getColumn(int pos) { Entry<Integer, Integer> entry = lines.floorEntry(pos); if (entry == null) { return pos; } return lines.get(entry.getKey()) - pos; } public int getLineCount() { return lines.size() + 1; } }