/* * Copyright 2013-2016 consulo.io * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package consulo.spash; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; /** * @author VISTALL * @since 11-Dec-16. */ class Alphabet { final static Map<Character, AlphabetDraw> validCharacters = new HashMap<>(); final static Character[] alphabet; static { validCharacters.put('A', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 4); horizonalTop(data, offset); horizontal(data, 3, offset); } }); validCharacters.put('B', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); data[offset + 1][1] = 1; data[offset + 2][1] = 1; data[offset + 3][1] = 1; data[offset + 3][2] = 1; data[offset + 4][4] = 1; horizontal(data, 3, offset); horizonalDown(data, offset); } }); validCharacters.put('C', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalTop(data, offset); horizonalDown(data, offset); } }); validCharacters.put('D', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 4, 2, 5); horizontal(data, 1, offset, 3); horizonalDown(data, offset); } }); validCharacters.put('E', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalTop(data, offset); horizontal(data, 3, offset); horizonalDown(data, offset); } }); validCharacters.put('F', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalTop(data, offset); horizontal(data, 3, offset); } }); validCharacters.put('O', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 4); horizonalTop(data, offset); horizonalDown(data, offset); } }); validCharacters.put('N', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); data[offset + 1][2] = 1; data[offset + 2][3] = 1; data[offset + 3][4] = 1; vertical(data, offset + 4); } }); validCharacters.put('K', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); data[offset + 3][1] = 1; data[offset + 2][2] = 1; data[offset + 1][3] = 1; data[offset + 2][4] = 1; data[offset + 3][5] = 1; } }); validCharacters.put('M', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); data[offset + 1][2] = 1; data[offset + 2][3] = 1; data[offset + 3][2] = 1; vertical(data, offset + 4); } }); validCharacters.put('P', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalTop(data, offset); horizontal(data, 3, offset); data[offset + 4][2] = 1; } }); validCharacters.put('R', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalTop(data, offset); horizontal(data, 3, offset); data[offset + 4][2] = 1; data[offset + 3][4] = 1; data[offset + 3][5] = 1; data[offset + 4][5] = 1; } }); validCharacters.put('H', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizontal(data, 3, offset); vertical(data, offset + 4); } }); validCharacters.put('S', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalTop(data, offset); horizonalDown(data, offset); horizontal(data, 3, offset); data[offset][2] = 1; data[offset + 4][4] = 1; } }); validCharacters.put('T', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalTop(data, offset); vertical(data, offset + 2); } }); validCharacters.put('I', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { data[offset + 1][1] = 1; data[offset + 3][1] = 1; vertical(data, offset + 2); data[offset + 1][5] = 1; data[offset + 3][5] = 1; } }); validCharacters.put('J', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalTop(data, offset); vertical(data, offset + 3); data[offset][4] = 1; data[offset][5] = 1; data[offset + 1][5] = 1; data[offset + 2][5] = 1; data[offset + 3][5] = 1; } }); validCharacters.put('U', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalDown(data, offset); vertical(data, offset); vertical(data, offset + 4); } }); validCharacters.put('L', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); horizonalDown(data, offset); } }); validCharacters.put('Q', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 4); horizonalTop(data, offset); horizonalDown(data, offset); data[offset + 3][4] = 1; data[offset + 4][5] = 0; } }); validCharacters.put('G', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 4); horizonalTop(data, offset); horizonalDown(data, offset); data[offset + 4][2] = 0; data[offset + 2][3] = 1; data[offset + 3][3] = 1; } }); validCharacters.put('Z', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalTop(data, offset); data[offset + 3][2] = 1; data[offset + 2][3] = 1; data[offset + 1][4] = 1; horizonalDown(data, offset); } }); validCharacters.put('Y', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { data[offset][1] = 1; data[offset][2] = 1; data[offset + 4][1] = 1; data[offset + 4][2] = 1; horizontal(data, 3, offset); data[offset + 2][4] = 1; data[offset + 2][5] = 1; } }); validCharacters.put('X', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { data[offset][1] = 1; data[offset + 1][2] = 1; data[offset + 2][3] = 1; data[offset + 3][2] = 1; data[offset + 4][1] = 1; data[offset][5] = 1; data[offset + 1][4] = 1; data[offset + 3][4] = 1; data[offset + 4][5] = 1; } }); validCharacters.put('V', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalDown(data, offset); vertical(data, offset); vertical(data, offset + 4); data[offset][4] = 0; data[offset + 1][4] = 1; data[offset][5] = 0; data[offset + 3][4] = 1; data[offset + 4][4] = 0; data[offset + 4][5] = 0; } }); validCharacters.put('W', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); data[offset + 1][4] = 1; data[offset + 2][3] = 1; data[offset + 3][4] = 1; vertical(data, offset + 4); } }); validCharacters.put('_', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { horizonalDown(data, offset); } }); validCharacters.put('.', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { data[offset + 2][5] = 1; } }); // dummy validCharacters.put(' ', new AlphabetDraw() { @Override void draw(int offset, int[][] data) { vertical(data, offset); vertical(data, offset + 1); vertical(data, offset + 2); vertical(data, offset + 3); vertical(data, offset + 4); } }); Set<Character> list = new TreeSet<>(validCharacters.keySet()); list.remove('_'); list.remove('.'); list.remove(' '); alphabet = list.toArray(new Character[list.size()]); } }