package net.sourceforge.mayfly.parser; public class Location { public static final Location UNKNOWN = new Location(-1, -1, -1, -1, null); public final int startLineNumber; public final int startColumn; public final int endLineNumber; public final int endColumn; public final String command; public Location(int startLineNumber, int startColumn, int endLineNumber, int endColumn, String command) { this.startLineNumber = startLineNumber; this.startColumn = startColumn; this.endLineNumber = endLineNumber; this.endColumn = endColumn; this.command = command; } public Location(int startLineNumber, int startColumn, int endLineNumber, int endColumn) { this(startLineNumber, startColumn, endLineNumber, endColumn, null); } public Location combine(Location right) { return new Location( startLineNumber, startColumn, right.endLineNumber, right.endColumn, command); } public boolean knowStart() { return startLineNumber != -1 && startColumn != -1; } public boolean knowEnd() { return endLineNumber != -1 && endColumn != -1; } public boolean contains(int line, int column) { if (line < startLineNumber) { return false; } else if (line == startLineNumber && column < startColumn) { return false; } else if (line == endLineNumber && column >= endColumn) { return false; } else if (line > endLineNumber) { return false; } return true; } public Location withCommand(String newCommand) { return new Location( startLineNumber, startColumn, endLineNumber, endColumn, newCommand); } }