ThaiCharacterClasses.java :  » Internationalization-Localization » icu4j » com » ibm » icu » dev » tool » layout » Java Open Source

Java Open Source » Internationalization Localization » icu4j 
icu4j » com » ibm » icu » dev » tool » layout » ThaiCharacterClasses.java
/*
 *******************************************************************************
 * Copyright (C) 1998-2004, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 *
 * Created on Dec 09, 2003
 *
 *******************************************************************************
 */
package com.ibm.icu.dev.tool.layout;

import com.ibm.icu.impl.Utility;
import java.io.PrintStream;

public class ThaiCharacterClasses
{
    public static final int NON    =  0;
    public static final int CON    =  1;
    public static final int COA    =  2;
    public static final int COD    =  3;
    public static final int LVO =  4;
    public static final int FV1    =  5;
    public static final int FV2    =  6;
    public static final int FV3    =  7;
    public static final int BV1    =  8;
    public static final int BV2    =  9;
    public static final int BDI = 10;
    public static final int TON    = 11;
    public static final int AD1    = 12;
    public static final int AD2    = 13;
    public static final int AD3    = 14;
    public static final int NIK    = 15;
    public static final int AV1    = 16;
    public static final int AV2    = 17;
    public static final int AV3    = 18;
    public static final int cCount = 19;

    // Indexed by unicode - '\u0E00'
    // FIXME: MS Fonts - Should 0E2E has no ascender (it does in WT font)
    // FIXME: MS Fonts - 0E47 (MAITAIKHU) and 0E4D (NIKHAHIT) only have vowel forms
    // FIXME: MS Fonts - 0E4E (YAMAKKAN) only has one form
    private static final int classTable[] = {
    //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    //       -------------------------------------------------------------------------------
    /*0E00*/ NON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COD, COD, COD, 
    /*0E10*/ COD, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COA, CON, COA, CON, COA, 
    /*0E20*/ CON, CON, CON, CON, FV3, CON, FV3, CON, CON, CON, CON, CON, CON, CON, CON, NON, 
    /*0E30*/ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, BV1, BV2, BDI, NON, NON, NON, NON, NON, 
    /*0E40*/ LVO, LVO, LVO, LVO, LVO, FV2, NON, AD2, TON, TON, TON, TON, AD1, NIK, AD3, NON, 
    /*0E50*/ NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON
    };

    private static String[] classNames =
    {
        "NON",
        "CON",
        "COA",
        "COD",
        "LVO",
        "FV1",
        "FV2",
        "FV3",
        "BV1",
        "BV2",
        "BDI",
        "TON",
        "AD1",
        "AD2",
        "AD3",
        "NIK",
        "AV1",
        "AV2",
        "AV3"
    };

    private static final char pairTable[][] = {
      //------------------------------------------------------------------------------------------------
      //  N    C    C    C    L    F    F    F    B    B    B    T    A    A    A    N    A    A    A
      //  O    O    O    O    V    V    V    V    V    V    D    O    D    D    D    I    V    V    V
      //  N    N    A    D    O    1    2    3    1    2    I    N    1    2    3    K    1    2    3
      //------------------------------------------------------------------------------------------------
/*NON*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*CON*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'C', 'C', 'C', 'E', 'E', 'E', 'C', 'E', 'C', 'C', 'C'},
/*COA*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'C', 'C', 'C', 'F', 'F', 'F', 'D', 'F', 'D', 'D', 'D'},
/*COD*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'H', 'H', 'H', 'E', 'E', 'E', 'C', 'E', 'C', 'C', 'C'},
/*LVO*/ {'S', 'A', 'A', 'A', 'S', 'S', 'S', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*FV1*/ {'S', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*FV2*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*FV3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'A', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*BV1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'E', 'E', 'R', 'R', 'E', 'R', 'R', 'R'},
/*BV2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'E', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*BDI*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*TON*/ {'A', 'A', 'A', 'A', 'A', 'I', 'A', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*AD1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*AD2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*AD3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*NIK*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'G', 'R', 'R', 'R', 'R', 'R', 'R'},
/*AV1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'G', 'R', 'R', 'G', 'R', 'R', 'R'},
/*AV2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},
/*AV3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'R', 'G', 'R', 'R', 'R', 'R', 'R'}
    };

    public static int getCharClass(char ch)
    {
        int charClass = NON;
        
        if (ch >= '\u0E00' && ch <= '\u0E5B') {
            charClass = classTable[ch - '\u0E00'];
        }
        
        return charClass;
    }
    
    public static String getClassName(int classID)
    {
        if (classID < 0 || classID >= cCount) {
            return "***";
        }
        
        return classNames[classID];
    }
    
    public static char getPairAction(int prevClass, int currClass)
    {
        if (prevClass < 0 || prevClass >= cCount |
            currClass < 0 || currClass >= cCount) {
            return 'A';
        }
            
        return pairTable[prevClass][currClass];
    }
    
    private static String classTableHeader =
"const le_uint8 ThaiShaping::classTable[] = {\n" +
"    //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F\n" +
"    //       -------------------------------------------------------------------------------";
    
    public static void writeClassTable(PrintStream output)
    {
        System.out.print("Writing class table...");
        
        output.print(classTableHeader);
        
        for (char ch = '\u0E00'; ch <= '\u0E5B'; ch += 1) {
            int charClass = getCharClass(ch);
            
            if ((ch & 0x000F) == 0) {
                output.print("\n    /*" + Utility.hex(ch, 4) + "*/ ");
            }
            
            output.print(getClassName(charClass));
            
            if (ch < '\u0E5B') {
                output.print(", ");
            } else {
                output.print("\n};\n\n");
            }
        }
        
        System.out.println(" done.");
    }
    
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.