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

com.itextpdf.kernel.numbering.GreekAlphabetNumbering Maven / Gradle / Ivy

There is a newer version: 9.0.0
Show newest version
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    This program is offered under a commercial and under the AGPL license.
    For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

    AGPL licensing:
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see .
 */
package com.itextpdf.kernel.numbering;

/**
 * This class is responsible for converting integer numbers to their
 * Greek alphabet letter representations.
 * We are aware of the fact that the original Greek numbering is different.
 * See http://www.cogsci.indiana.edu/farg/harry/lan/grknum.htm#ancient
 * but this isn't implemented yet; the main reason being the fact that we
 * need a font that has the obsolete Greek characters qoppa and sampi.
 * So we use standard 24 letter Greek alphabet
 */
public class GreekAlphabetNumbering {

    protected static final char[] ALPHABET_LOWERCASE;
    protected static final char[] ALPHABET_UPPERCASE;
    protected static final int ALPHABET_LENGTH = 24;

    static {
        ALPHABET_LOWERCASE = new char[ALPHABET_LENGTH];
        ALPHABET_UPPERCASE = new char[ALPHABET_LENGTH];
        for (int i = 0; i < ALPHABET_LENGTH; i++) {
            ALPHABET_LOWERCASE[i] = (char) (945 + i + (i > 16 ? 1 : 0));
            ALPHABET_UPPERCASE[i] = (char) (913 + i + (i > 16 ? 1 : 0));
        }
    }

    /**
     * Converts the given number to its Greek alphabet lowercase string representation.
     * E.g. 1 will be converted to a string consisting of a unicode character for greek small letter alpha,
     * 2 - a string consisting of a unicode character for greek small letter beta,
     * 25 - a string consisting of two unicode characters for greek small letter alpha, and so on.
     *
     * @param number the number greater than zero to be converted
     * @return Greek alphabet lowercase string representation of an integer.
     */
    public static String toGreekAlphabetNumberLowerCase(int number) {
        return AlphabetNumbering.toAlphabetNumber(number, ALPHABET_LOWERCASE);
    }

    /**
     * Converts the given number to its Greek alphabet uppercase string representation.
     * E.g. 1 will be converted to a string consisting of a unicode character for greek capital letter alpha,
     * 2 - a string consisting of a unicode character for greek capital letter beta,
     * 25 - a string consisting of two unicode characters for greek capital letter alpha, and so on.
     *
     * @param number the number greater than zero to be converted
     * @return Greek alphabet uppercase string representation of an integer.
     */
    public static String toGreekAlphabetNumberUpperCase(int number) {
        return AlphabetNumbering.toAlphabetNumber(number, ALPHABET_UPPERCASE);
    }

    /**
     * Converts the given number to its Greek alphabet string representation.
     * E.g. for upperCase set to false,
     * 1 will be converted to a string consisting of a unicode character for greek small letter alpha,
     * 2 - a string consisting of a unicode character for greek small letter beta,
     * 25 - a string consisting of two unicode characters for greek small letter alpha, and so on.
     *
     * @param number    the number greater than zero to be converted
     * @param upperCase whether to use uppercase or lowercase alphabet
     * @return Greek alphabet string representation of an integer.
     */
    public static String toGreekAlphabetNumber(int number, boolean upperCase) {
        return toGreekAlphabetNumber(number, upperCase, false);
    }

    /**
     * Converts the given number to its Greek alphabet string representation.
     * E.g. for upperCase set to false,
     * 1 will be converted to a string consisting of a unicode character for greek small letter alpha
     * if symbolFont is set to false,
     * otherwise - a string consisting of the corresponding symbol code in Symbol standard font;
     * 26 will be converted to a string consisting of two unicode characters:
     * greek small letter alpha followed by greek small letter beta
     * if symbolFont is set to false,
     * otherwise - a string consisting of the corresponding sequence of symbol codes in Symbol standard font.
     *
     * @param number     the number greater than zero to be converted
     * @param upperCase  whether to use uppercase or lowercase alphabet
     * @param symbolFont if true, then the string representation will be returned ready to write it in Symbol font
     * @return Greek alphabet string representation of an integer.
     */
    public static String toGreekAlphabetNumber(int number, boolean upperCase, boolean symbolFont) {
        String result = upperCase ? toGreekAlphabetNumberUpperCase(number) : toGreekAlphabetNumberLowerCase(number);
        if (symbolFont) {
            StringBuilder symbolFontStr = new StringBuilder();
            for (int i = 0; i < result.length(); i++) {
                symbolFontStr.append(getSymbolFontChar(result.charAt(i)));
            }
            return symbolFontStr.toString();
        } else {
            return result;
        }
    }

    /**
     * Converts a given greek unicode character code into the code of the corresponding char Symbol font.
     *
     * @param unicodeChar original unicode char
     * @return the corresponding symbol code in Symbol standard font
     */
    private static char getSymbolFontChar(char unicodeChar) {
        switch (unicodeChar) {
            case (char) 913:
                // ALFA
                return 'A';
            case (char) 914:
                // BETA
                return 'B';
            case (char) 915:
                // GAMMA
                return 'G';
            case (char) 916:
                // DELTA
                return 'D';
            case (char) 917:
                // EPSILON
                return 'E';
            case (char) 918:
                // ZETA
                return 'Z';
            case (char) 919:
                // ETA
                return 'H';
            case (char) 920:
                // THETA
                return 'Q';
            case (char) 921:
                // IOTA
                return 'I';
            case (char) 922:
                // KAPPA
                return 'K';
            case (char) 923:
                // LAMBDA
                return 'L';
            case (char) 924:
                // MU
                return 'M';
            case (char) 925:
                // NU
                return 'N';
            case (char) 926:
                // XI
                return 'X';
            case (char) 927:
                // OMICRON
                return 'O';
            case (char) 928:
                // PI
                return 'P';
            case (char) 929:
                // RHO
                return 'R';
            case (char) 931:
                // SIGMA
                return 'S';
            case (char) 932:
                // TAU
                return 'T';
            case (char) 933:
                // UPSILON
                return 'U';
            case (char) 934:
                // PHI
                return 'F';
            case (char) 935:
                // CHI
                return 'C';
            case (char) 936:
                // PSI
                return 'Y';
            case (char) 937:
                // OMEGA
                return 'W';
            case (char) 945:
                // alfa
                return 'a';
            case (char) 946:
                // beta
                return 'b';
            case (char) 947:
                // gamma
                return 'g';
            case (char) 948:
                // delta
                return 'd';
            case (char) 949:
                // epsilon
                return 'e';
            case (char) 950:
                // zeta
                return 'z';
            case (char) 951:
                // eta
                return 'h';
            case (char) 952:
                // theta
                return 'q';
            case (char) 953:
                // iota
                return 'i';
            case (char) 954:
                // kappa
                return 'k';
            case (char) 955:
                // lambda
                return 'l';
            case (char) 956:
                // mu
                return 'm';
            case (char) 957:
                // nu
                return 'n';
            case (char) 958:
                // xi
                return 'x';
            case (char) 959:
                // omicron
                return 'o';
            case (char) 960:
                // pi
                return 'p';
            case (char) 961:
                // rho
                return 'r';
            case (char) 962:
                // sigma
                return 'V';
            case (char) 963:
                // sigma
                return 's';
            case (char) 964:
                // tau
                return 't';
            case (char) 965:
                // upsilon
                return 'u';
            case (char) 966:
                // phi
                return 'f';
            case (char) 967:
                // chi
                return 'c';
            case (char) 968:
                // psi
                return 'y';
            case (char) 969:
                // omega
                return 'w';
            default:
                return ' ';
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy