/** * Does this specification result in the need to paint an horizontal bar at row,column? */ /*default*/ char horizontals(int row, int column) { boolean result = (match & TOP) == TOP && row == row1; result |= (match & INNER_HORIZONTAL) == INNER_HORIZONTAL && row > row1 && row < row2; result |= (match & BOTTOM) == BOTTOM && row == row2; result &= column >= column1; result &= column < column2; return result ? style.horizontalGlyph() : BorderStyle.NONE; }
private static void registerCorner(char above, char below, char left, char right, char corner) { long key = key(above, below, left, right); CORNERS.put(key, corner); }
private static void registerMixedWithAirCombinations(char vertical, char horizontal) { registerCorner(vertical, vertical, ' ', NONE, vertical); registerCorner(vertical, vertical, NONE, ' ', vertical); registerCorner(vertical, vertical, ' ', ' ', vertical); registerCorner(' ', NONE, horizontal, horizontal, horizontal); registerCorner(NONE, ' ', horizontal, horizontal, horizontal); registerCorner(' ', ' ', horizontal, horizontal, horizontal); }
/** * Does this specification result in the need to paint a vertical bar at row,column? */ /*default*/ char verticals(int row, int column) { boolean result = (match & LEFT) == LEFT && column == column1; result |= (match & INNER_VERTICAL) == INNER_VERTICAL && column > column1 && column < column2; result |= (match & RIGHT) == RIGHT && column == column2; result &= row >= row1; result &= row < row2; return result ? style.verticalGlyph() : BorderStyle.NONE; }
char above = (row - 1 >= 0) ? verticals[row - 1][column] : NONE; char below = (row < rows) ? verticals[row][column] : NONE; corners[row][column] = BorderStyle.intersection(above, below, left, right);
public static char intersection(char above, char below, char left, char right) { above = EQUIVALENTS.get(above) != null ? EQUIVALENTS.get(above) : above; below = EQUIVALENTS.get(below) != null ? EQUIVALENTS.get(below) : below; left = EQUIVALENTS.get(left) != null ? EQUIVALENTS.get(left) : left; right = EQUIVALENTS.get(right) != null ? EQUIVALENTS.get(right) : right; Character character = CORNERS.get(key(above, below, left, right)); return character != null ? character : NONE; }
/** * Register corner glyphs for a given set, not taking care of mixed style intersections. */ private static void registerCorners(String list) { char horizontal = list.charAt(0); char vertical = list.charAt(1); registerCorner(NONE, vertical, NONE, horizontal, list.charAt(2)); registerCorner(NONE, vertical, horizontal, NONE, list.charAt(3)); registerCorner(vertical, NONE, NONE, horizontal, list.charAt(4)); registerCorner(vertical, NONE, horizontal, NONE, list.charAt(5)); registerCorner(vertical, vertical, NONE, horizontal, list.charAt(6)); registerCorner(vertical, vertical, horizontal, NONE, list.charAt(7)); registerCorner(NONE, vertical, horizontal, horizontal, list.charAt(8)); registerCorner(vertical, NONE, horizontal, horizontal, list.charAt(9)); registerCorner(vertical, vertical, horizontal, horizontal, list.charAt(10)); }