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

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

There is a newer version: 1.0.7
Show 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 - 2024 Weber Informatics LLC | Privacy Policy