www.pudn.com > mmi.rar > BIDIParaRules.c


/***************************************************************************** 
*  Copyright Statement: 
*  -------------------- 
*  This software is protected by Copyright and the information contained 
*  herein is confidential. The software may not be copied and the information 
*  contained herein may not be used or disclosed except with the written 
*  permission of MediaTek Inc. (C) 2005 
* 
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES 
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") 
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON 
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, 
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF 
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. 
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE 
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR 
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH 
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO 
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S 
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. 
* 
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE 
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, 
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, 
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO 
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.  
* 
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE 
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF 
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND 
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER 
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC). 
* 
*****************************************************************************/ 
 
/***************************************************************************** 
 * 
 * Filename: 
 * --------- 
 *    bidipararules.c 
 * 
 * Project: 
 * -------- 
 *   Maui_Software 
 * 
 * Description: 
 * ------------ 
 *   bidirectional algorithm engine  
 * 
 * 
 * Author: 
 * ------- 
 * ------- 
 * 
 *============================================================================ 
 *             HISTORY 
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *------------------------------------------------------------------------------ 
 * removed! 
 * 
 *------------------------------------------------------------------------------ 
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
 *============================================================================ 
 *****************************************************************************/ 
 
/* 
 * Copyright Notice 
 * ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W., 
 * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved. 
 *  (It is illegal to remove this copyright notice from this software or any 
 *  portion of it) 
 */ 
 
/************************************************************** 
 
   FILENAME : BIDIParaRules.c 
 
   PURPOSE     : Main functions of Rule L1 to L4 of BIDI Algorithm 
 
   REMARKS     : nil 
 
   AUTHOR      : Vijay/Bilal 
 
   DATE     : Aug-23-2004 
 
**************************************************************/ 
#include "BidiDef.h" 
#include "BidiProt.h" 
 
/* START TARUN PMT 20041015 */ 
extern U8 input_types[];    /* source array for storing the direction codes of the input string */ 
extern U8 input_levels[];   /* This global contains all the embedding levels */ 
extern U8 dest_levels[];    /* destitnation array for processed levels */ 
extern U8 dest_types[];     /* Destination array for storing the direction codes of the input string */ 
 
//END TARUN PMT 
//START Added by Yogesh 20050831 
#ifdef __BIDI_CONSOLE__ 
#include "CommonProts.h" 
#else /* __BIDI_CONSOLE__ */  
#include "Unicodexdcl.h" 
#include "DebugInitDef.h" 
#endif /* __BIDI_CONSOLE__ */  
/* END Added by Yogesh 20050831 */ 
/********************************************************************* 
   This function will take the unicode character array as input, 
   outputs the directional code array and returns the string len. 
********************************************************************/ 
 
 
/***************************************************************************** 
 * FUNCTION 
 *  get_direction_codes 
 * DESCRIPTION 
 *   
 * PARAMETERS 
 *  inputTypes      [?]          
 *  inputString     [?]          
 *  sLen            [IN]         
 * RETURNS 
 *   
 *****************************************************************************/ 
U16 get_direction_codes(U8 *inputTypes, U8 *inputString, S16 sLen) 
{ 
    /*----------------------------------------------------------------*/ 
    /* Local Variables                                                */ 
    /*----------------------------------------------------------------*/ 
    S16 iCount = 0; 
 
    /* START Added by Yogesh 20050831 */ 
    U16 charInput = 0; 
 
    /*----------------------------------------------------------------*/ 
    /* Code Body                                                      */ 
    /*----------------------------------------------------------------*/ 
    pfnEncodingSchemeToUnicode((U16*) & charInput, (U8*) (&inputString[iCount * BIDI_ENCODING_LENGTH])); 
    /* END Added by Yogesh 20050831 */ 
 
    /* START Added by Yogesh 20041224 */ 
    if (sLen) 
        //START Changed by Yogesh 20050831 
        //      while( inputString[iCount*BIDI_ENCODING_LENGTH] !=0 && iCount 0) && (presentEmbeddingLevel != MAX_LEVEL_EMBEDDING)) 
                { 
                    stackAboutToFullIndicator--; 
                } 
                else 
                { 
                    stackIndex--; 
                } 
 
                /* pop up the embedding value from the stack */ 
                presentEmbeddingValue = pushedEmbeddingValues[stackIndex]; 
                /* get the overriding status */ 
                presentEmbeddingLevel = presentEmbeddingValue & 0x7f; 
            }   /* if( token == PDF ) */ 
            else 
            { 
                if (token == BIDI_B) 
                { 
                    /* Reset all the variables as 'BIDI_B' is the last token processed */ 
                    presentEmbeddingLevel = paraEmbeddingLevel; 
                    presentEmbeddingValue = paraEmbeddingLevel; 
                    stackIndex = 0; 
                    stackAboutToFullIndicator = 0; 
                    pushedEmbeddingValues[iCount] = paraEmbeddingLevel; 
                }   /* if(token==BIDI_B) */ 
            }       /* if( token == PDF ) */ 
        } 
        iCount++; 
    }   /* End of while loop */ 
} 
 
 
/***************************************************************************** 
 * FUNCTION 
 *  set_dest_levels 
 * DESCRIPTION 
 *   
 * PARAMETERS 
 *  nSCount             [IN]         
 *  nECount             [IN]         
 *  paraEmbedLevel      [IN]         
 *  pDestLevels         [?]          
 * RETURNS 
 *  void 
 *****************************************************************************/ 
void set_dest_levels(U16 nSCount, U16 nECount, U8 paraEmbedLevel, U8 *pDestLevels) 
{ 
    /*----------------------------------------------------------------*/ 
    /* Local Variables                                                */ 
    /*----------------------------------------------------------------*/ 
 
    /*----------------------------------------------------------------*/ 
    /* Code Body                                                      */ 
    /*----------------------------------------------------------------*/ 
    //      while (startCount<=endCount) 
    //              dest_levels[startCount++] = paraEmbedLevel; 
    while (nSCount < nECount) 
    { 
        pDestLevels[nSCount++] = paraEmbedLevel; 
    } 
} 
 
 
/***************************************************************************** 
 * FUNCTION 
 *  copy_direction_codes 
 * DESCRIPTION 
 *   
 * PARAMETERS 
 *  dTypes      [?]          
 *  sTypes      [?]          
 *  nCount      [IN]         
 * RETURNS 
 *  void 
 *****************************************************************************/ 
void copy_direction_codes(U8 *dTypes, U8 *sTypes, U16 nCount) 
{ 
    /*----------------------------------------------------------------*/ 
    /* Local Variables                                                */ 
    /*----------------------------------------------------------------*/ 
    S16 iCount; 
 
    /*----------------------------------------------------------------*/ 
    /* Code Body                                                      */ 
    /*----------------------------------------------------------------*/ 
    for (iCount = 0; iCount < nCount; iCount++) 
    { 
        dTypes[iCount] = sTypes[iCount]; 
    } 
}