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

src.com.ibm.as400.access.ArabicOptionSet Maven / Gradle / Ivy

The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename:  ArabicOptionSet.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2006 International Business Machines Corporation and
// others.  All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////

package com.ibm.as400.access;

 /**
 *  This class represents an ArabicOptionSet object defining the shaping
 *  attributes to be used during Bidi Layout Transformation process.
 *  It also defines the available values for each option.
 *  

* Arabic text has some special characters that can be converted to different formats, which are characterized * by four Bidi options, these options are stored in four Arabic objects. * These four options constitute an ArabicOptionSet. *

* An ArabicOptionSet object contains a value for each of the four Arabic objects * which represent the Arabic options. The four options are: *

    *
  • Lam-Alef handling (Near, At Begin, At End or Auto) *
  • Seen handling (Near or Auto) *
  • Yeh Hamza handling (Near or Auto) *
  • Tashkeel handling (Keep, Customized At Begin, Customized At End, or Auto) *
* The Arabic options values are pre-defined in this class. Each one represents one * possible value of one Arabic option. *

* For more information on Arabic Shaping options, see: * Bidirectional support in IBM SDK: A user guide * *

Multi-threading considerations: There are no multi-threading * concerns for this class, since it only defines static * final instances. * */ class ArabicOptionSet { /** * Mask to apply on an ArabicOptionSet value to isolate the * Lam-Alef option */ static final int LAMALEF_MASK = 0x0F000000; /** * Value identifying LAMALEF_AUTO */ static final int ILAMALEF_AUTO = 0x01000000; /** * Value identifying LAMALEF_NEAR */ static final int ILAMALEF_NEAR = 0x03000000; /** * Value identifying LAMALEF_ATBEGIN */ static final int ILAMALEF_ATBEGIN = 0x05000000; /** * Value identifying LAMALEF_ATEND */ static final int ILAMALEF_ATEND = 0x07000000; /* * * Value identifying LAMALEF_RESIZE_BUFEER */ static final int ILAMALEF_RESIZE_BUFFER = 0x09000000; //------- /** * Mask to apply on an ArabicOptionSet value to isolate the * Seen option */ static final int SEEN_MASK = 0x00700000; /** * Value identifying SEEN_AUTO */ static final int ISEEN_AUTO = 0x00100000; /* * * Value identifying SEEN_ATBEGIN */ static final int ISEEN_ATBEGIN = 0x00300000; /* * * Value identifying SEEN_ATEND */ static final int ISEEN_ATEND = 0x00500000; /** * Value identifying SEEN_NEAR */ static final int ISEEN_NEAR = 0x00700000; //-------- /** * Mask to apply on an ArabicOptionSet value to isolate the * Yeh Hamza option */ static final int YEHHAMZA_MASK = 0x000F0000; /** * Value identifying YEHHAMZA_AUTO */ static final int IYEHHAMZA_AUTO = 0x00010000; /* * * Value identifying YEHHAMZA_TWO_CELL_ATBEGIN */ static final int IYEHHAMZA_TWO_CELL_ATBEGIN = 0x00030000; /* * * Value identifying YEHHAMZA_TWO_CELL_ATEND */ static final int IYEHHAMZA_TWO_CELL_ATEND = 0x00050000; /** * Value identifying YEHHAMZA_TWO_CELL_NEAR */ static final int IYEHHAMZA_TWO_CELL_NEAR = 0x00070000; /* * * Value identifying YEHHAMZA_ONE_CELL */ static final int IYEHHAMZA_ONE_CELL = 0x00090000; //-------- /** * Mask to apply on an ArabicOptionSet value to isolate the * Tashkeel option */ static final int TASHKEEL_MASK = 0x00000F00; /** * Value identifying TASHKEEL_AUTO */ static final int ITASHKEEL_AUTO = 0x00000100; /* * * Value identifying TASHKEEL_CUSTOMIZED_WITHZEROWIDTH */ static final int ITASHKEEL_CUSTOMIZED_WITHZEROWIDTH = 0x00000300; /* * * Value identifying TASHKEEL_CUSTOMIZED_WITHWIDTH */ static final int ITASHKEEL_CUSTOMIZED_WITHWIDTH = 0x00000500; /** * Value identifying TASHKEEL_CUSTOMIZED_ATBEGIN */ static final int ITASHKEEL_CUSTOMIZED_ATBEGIN = 0x00000700; /** * Value identifying TASHKEEL_CUSTOMIZED_ATEND */ static final int ITASHKEEL_CUSTOMIZED_ATEND = 0x00000900; /** * Value identifying TASHKEEL_KEEP */ static final int ITASHKEEL_KEEP = 0x00000B00; // This is the default value for uninitialized ArabicOptionSet. static final int DEFAULT = ILAMALEF_AUTO | ISEEN_AUTO | IYEHHAMZA_AUTO | ITASHKEEL_AUTO; int value; /** * Constructs an ArabicOptionSet with the default value. * The default is: *

 *  Auto for all options
 *  
*/ public ArabicOptionSet() { this.value = DEFAULT; } /** * Constructs an ArabicOptionSet based on an existing ArabicOptionSet. * @param set The ArabicOptionSet which is copied. */ public ArabicOptionSet(ArabicOptionSet set) { this.value = set.value; } /** * Constructs an ArabicOptionSet from one ArabicOption. The other Arabic * Options are set to their default. *

Example: *

 *  ArabicOptionset bdOpts = new ArabicOptionSet(LAMALEF_NEAR);
 *  
* * @param option The ArabicOption which is explicitly specified. */ public ArabicOptionSet(ArabicOption option) { this.value = option.value | DEFAULT; } /** * Constructs an ArabicOptionSet from two ArabicOptions. The other Arabic * options are set to their default. *

Example: *

 *  ArabicOptionset bdOpts = new ArabicOptionSet(LAMALEF_NEAR, SEEN_NEAR);
 *  
* * @param option1 The first ArabicOption which is explicitly specified. * @param option2 The second ArabicOption which is explicitly specified. * * @exception IllegalArgumentException If the arguments conflict or are duplicates. */ public ArabicOptionSet(ArabicOption option1, ArabicOption option2) { this.value = option1.value; if ((this.value & option2.value) != 0) throw new IllegalArgumentException(); this.value |= option2.value | DEFAULT; } /** * Constructs an ArabicOptionSet from three ArabicOptions. The other Arabic * option is set to its default. *

Example: *

 *  ArabicOptionset bdOpts = new ArabicOptionSet(LAMALEF_NEAR, SEEN_NEAR, YEHHAMZA_TWO_CELL_NEAR);
 *  
* * * @param option1 The first ArabicOption which is explicitly specified. * @param option2 The second ArabicOption which is explicitly specified. * @param option3 The third ArabicOption which is explicitly specified. * * @exception IllegalArgumentException If the arguments conflict or are duplicates. */ public ArabicOptionSet(ArabicOption option1, ArabicOption option2, ArabicOption option3) { this.value = option1.value; if ((this.value & option2.value) != 0) throw new IllegalArgumentException(); this.value |= option2.value; if ((this.value & option3.value) != 0) throw new IllegalArgumentException(); this.value |= option3.value | DEFAULT; } /** * Constructs an ArabicOptionSet from four ArabicOptions. * * @param option1 The first ArabicOption which is explicitly specified. * @param option2 The second ArabicOption which is explicitly specified. * @param option3 The third ArabicOption which is explicitly specified. * @param option4 The fourth ArabicOption which is explicitly specified. * * @exception IllegalArgumentException If the arguments conflict or are duplicates. */ public ArabicOptionSet(ArabicOption option1, ArabicOption option2, ArabicOption option3, ArabicOption option4) { this.value = option1.value; if ((this.value & option2.value) != 0) throw new IllegalArgumentException(); this.value |= option2.value; if ((this.value & option3.value) != 0) throw new IllegalArgumentException(); this.value |= option3.value; if ((this.value & option4.value) != 0) throw new IllegalArgumentException(); this.value |= option4.value; } /** * Constructs an ArabicOptionSet from a char array. * The content of the array must follow the specification for the "S" and * "U parts of the BIDI environment variable, as follows: *
    *
  • character 1: type of text = I (Implicit) or V (Visual) *
  • character 2: orientation = L (LTR), R (RTL), C (Contextual LTR) or D (Contextual RTL) *
  • character 3: swapping = Y (Swapping ON) or N (Swapping OFF) *
  • character 4: text shaping = N (Nominal), S (Shaped), I (Initial), M (Middle), F (Final) or B (Isolated) *
  • character 5: numeral shaping = N (Nominal), H (National) or C (Contextual) *
  • character 6: bidi algorithm = U (Unicode) or R (Roundtrip) *
  • character 7: Lamalef mode = N (Near), B (At Begin), E (At End) or A (Auto) *
  • character 8: SeenTail mode = N (Near) or A (Auto) *
  • character 9: Yeh Hamza mode = N (Near) or A (Auto) *
  • character 10:Tashkeel mode = K (Keep), B (Customized at Begin), E (Customized at End) or A (Auto) *
*

Only characters 7 to 10 are used to build the ArabicOptionSet. *

* @param chars character array in Convert parms format. It contains the output options specified in the Bidi * environment variable */ public ArabicOptionSet(char chars[]) { int newValue = DEFAULT; int len = chars.length; while (len > 6) { if ('R' == chars[6]) newValue = (newValue & (~LAMALEF_MASK)) | ILAMALEF_RESIZE_BUFFER; else if ('N' == chars[6]) newValue = (newValue & (~LAMALEF_MASK)) | ILAMALEF_NEAR; else if ('B' == chars[6]) newValue = (newValue & (~LAMALEF_MASK)) | ILAMALEF_ATBEGIN; else if ('E' == chars[6]) newValue = (newValue & (~LAMALEF_MASK)) | ILAMALEF_ATEND; else if ('A' == chars[6]) newValue = (newValue & (~LAMALEF_MASK)) | ILAMALEF_AUTO; if (len <= 7) break; if ('N' == chars[7]) newValue = (newValue & (~SEEN_MASK)) | ISEEN_NEAR; else if ('B' == chars[7]) newValue = (newValue & (~SEEN_MASK)) | ISEEN_ATBEGIN; else if ('E' == chars[7]) newValue = (newValue & (~SEEN_MASK)) | ISEEN_ATEND; else if ('A' == chars[7]) newValue = (newValue & (~SEEN_MASK)) | ISEEN_AUTO; if (len <= 8) break; if ('O' == chars[8]) newValue = (newValue & (~YEHHAMZA_MASK)) | IYEHHAMZA_ONE_CELL; else if ('N' == chars[8]) newValue = (newValue & (~YEHHAMZA_MASK)) | IYEHHAMZA_TWO_CELL_NEAR; else if ('B' == chars[8]) newValue = (newValue & (~YEHHAMZA_MASK)) | IYEHHAMZA_TWO_CELL_ATBEGIN; else if ('E' == chars[8]) newValue = (newValue & (~YEHHAMZA_MASK)) | IYEHHAMZA_TWO_CELL_ATEND; else if ('A' == chars[8]) newValue = (newValue & (~YEHHAMZA_MASK)) | IYEHHAMZA_AUTO; if (len <= 9) break; if ('K' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_KEEP; else if ('Z' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_CUSTOMIZED_WITHZEROWIDTH; else if ('W' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_CUSTOMIZED_WITHWIDTH; else if ('B' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_CUSTOMIZED_ATBEGIN; else if ('E' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_CUSTOMIZED_ATEND; else if ('A' == chars[9]) newValue = (newValue & (~TASHKEEL_MASK)) | ITASHKEEL_AUTO; break; } this.value = newValue; } /** * Compares two ArabicOptionSets. * Two ArabicOptionSets are considered equal if they represent the same values * for the four Arabic options. * @param obj The ArabicOptionSet to compare to this. * @return true if the ArabicOptionSets are equal, false otherwise. */ public boolean equals(Object obj) { if (obj == null) return false; if (obj instanceof ArabicOptionSet) { ArabicOptionSet other = (ArabicOptionSet) obj; return ((this.getLamAlefMode() == other.getLamAlefMode()) && (this.getSeenMode() == other.getSeenMode()) && (this.getYehHamzaMode() == other.getYehHamzaMode()) && (this.getTashkeelMode() == other.getTashkeelMode())); } else { return false; } } /** * Returns the Lam Alef option from an ArabicOptionSet. * @return The value of the Lam Alef option. *

The expected value is one of LAMALEF_NEAR, LAMALEF_ATBEGIN, LAMALEF_ATEND or LAMALEF_AUTO */ public ArabicOption getLamAlefMode() { switch(this.value & LAMALEF_MASK) { case ILAMALEF_RESIZE_BUFFER: return ArabicOption.LAMALEF_RESIZE_BUFFER; case ILAMALEF_NEAR: return ArabicOption.LAMALEF_NEAR; case ILAMALEF_ATBEGIN: return ArabicOption.LAMALEF_ATBEGIN; case ILAMALEF_ATEND: return ArabicOption.LAMALEF_ATEND; case ILAMALEF_AUTO: return ArabicOption.LAMALEF_AUTO; } return ArabicOption.LAMALEF_ATBEGIN; } /** * Returns the Seen option from an ArabicOptionSet. * @return The value of the Seen option. *

The expected value is one of SEEN_NEAR or SEEN_AUTO. */ public ArabicOption getSeenMode() { switch(this.value & SEEN_MASK) { case ISEEN_NEAR: return ArabicOption.SEEN_NEAR; case ISEEN_ATBEGIN: return ArabicOption.SEEN_ATBEGIN; case ISEEN_ATEND: return ArabicOption.SEEN_ATEND; case ISEEN_AUTO: return ArabicOption.SEEN_AUTO; } return ArabicOption.SEEN_NEAR; } /** * Returns the Yeh Hamza option from an ArabicOptionSet. * @return The value of the Yeh Hamza option. *

The expected value is one of YEHHAMZA_TWO_CELL_NEAR or YEHHAMZA_AUTO. */ public ArabicOption getYehHamzaMode() { switch(this.value & YEHHAMZA_MASK) { case IYEHHAMZA_TWO_CELL_NEAR: return ArabicOption.YEHHAMZA_TWO_CELL_NEAR; case IYEHHAMZA_TWO_CELL_ATBEGIN: return ArabicOption.YEHHAMZA_TWO_CELL_ATBEGIN; case IYEHHAMZA_TWO_CELL_ATEND: return ArabicOption.YEHHAMZA_TWO_CELL_ATEND; case IYEHHAMZA_ONE_CELL: return ArabicOption.YEHHAMZA_ONE_CELL; case IYEHHAMZA_AUTO: return ArabicOption.YEHHAMZA_AUTO; } return ArabicOption.YEHHAMZA_TWO_CELL_NEAR; } /** * Returns the Tashkeel option from an ArabicOptionSet. * @return The value of the Tashkeel option. *

The expected value is one of TASHKEEL_KEEP, TASHKEEL_CUSTOMIZED_ATBEGIN, * TASHKEEL_CUSTOMIZED_ATEND or TASHKEEL_AUTO. */ public ArabicOption getTashkeelMode() { switch(this.value & TASHKEEL_MASK) { case ITASHKEEL_KEEP: return ArabicOption.TASHKEEL_KEEP; case ITASHKEEL_CUSTOMIZED_WITHZEROWIDTH:return ArabicOption.TASHKEEL_CUSTOMIZED_WITHZEROWIDTH; case ITASHKEEL_CUSTOMIZED_WITHWIDTH: return ArabicOption.TASHKEEL_CUSTOMIZED_WITHWIDTH; case ITASHKEEL_CUSTOMIZED_ATBEGIN: return ArabicOption.TASHKEEL_CUSTOMIZED_ATBEGIN; case ITASHKEEL_CUSTOMIZED_ATEND: return ArabicOption.TASHKEEL_CUSTOMIZED_ATEND; case ITASHKEEL_AUTO: return ArabicOption.TASHKEEL_AUTO; } return ArabicOption.TASHKEEL_KEEP; } /** * Returns a hashcode for an ArabicOptionSet. * The hashcode of a ArabicOptionSet is the same as the hashcode of its * value. * @return A hashcode value. */ public int hashCode() { return this.value; } /** * Sets all Arabic options based on another ArabicOptionSet. * @param set The ArabicOptionSet which is copied. */ public void setAllOptions(ArabicOptionSet set) { this.value = set.value; } /** * Sets a new value for one of the Bidi Options in a set without changing * the other Arabic Options. *

The new value must be one of the pre-defined values for ArabicOption. * * @param newoption The new value requested for one of the options. */ public void setOneOption(ArabicOption newoption) { this.value = (this.value & (~newoption.mask)) | newoption.value; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy