All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.daisy.dotify.common.braille.BrailleNotationConverter Maven / Gradle / Ivy

The newest version!
package org.daisy.dotify.common.braille;

/**
 * Converts braille notation into Unicode braille patterns.
 *  
 * @author Joel Håkansson
 */
public class BrailleNotationConverter {
	private final String separator;
	
	/**
	 * Creates a new converter with the specified braille cell separator.
	 * @param separator the separator string
	 */
	public BrailleNotationConverter(String separator) {
		this.separator = separator;
	}
	
	/**
	 * Parses a string for braille notation and converts it to Unicode braille patterns
	 * @param p the string to parse
	 * @return returns the parsed string
	 */
	public String parseBrailleNotation(String p) {
		String[] s = p.split(separator);
		if (s.length == 0) {
			throw new IllegalArgumentException("Illegal sequence");
		}
		StringBuilder sb = new StringBuilder();
		for (String t : s) {
			if (!"".equals(t)) {
				sb.append(numberStringToUnicode(t));
			}
		}
		return sb.toString();
	}
	
	private static char numberStringToUnicode(String p) {
		int v = 0;
		int prv = 0;
		char prvC = (char) 0;
		for (char c : p.toCharArray()) {
			if (prvC > c) {
				throw new IllegalArgumentException("Illegal format");
			} else {
				prvC = c;
			}
			switch (c) {
				case '0': v |= 0x2800; break;
				case '1': v |= 0x2801; break;
				case '2': v |= 0x2802; break;
				case '3': v |= 0x2804; break;
				case '4': v |= 0x2808; break;
				case '5': v |= 0x2810; break;
				case '6': v |= 0x2820; break;
				case '7': v |= 0x2840; break;
				case '8': v |= 0x2880; break;
				default:
					throw new IllegalArgumentException("Illegal character: " + c);
			}
			if (v == prv) {
				throw new IllegalArgumentException("Illegal format");
			} else {
				prv = v;
			}
		}
		return (char)v;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy