(root)/
fribidi-1.0.13/
lib/
fribidi-joining-types.c
       1  /* FriBidi
       2   * fribidi-joining-types.c - character joining types
       3   *
       4   * Authors:
       5   *   Behdad Esfahbod, 2001, 2002, 2004
       6   *
       7   * Copyright (C) 2004 Sharif FarsiWeb, Inc.
       8   * Copyright (C) 2001,2002 Behdad Esfahbod
       9   * 
      10   * This library is free software; you can redistribute it and/or
      11   * modify it under the terms of the GNU Lesser General Public
      12   * License as published by the Free Software Foundation; either
      13   * version 2.1 of the License, or (at your option) any later version.
      14   * 
      15   * This library is distributed in the hope that it will be useful,
      16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      18   * Lesser General Public License for more details.
      19   * 
      20   * You should have received a copy of the GNU Lesser General Public License
      21   * along with this library, in a file named COPYING; if not, write to the
      22   * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
      23   * Boston, MA 02110-1301, USA
      24   *
      25   * For licensing issues, contact <fribidi.license@gmail.com>.
      26   */
      27  
      28  #include "common.h"
      29  
      30  #include <fribidi-joining-types.h>
      31  
      32  #include "joining-types.h"
      33  
      34  enum FriBidiJoiningTypeShortEnum
      35  {
      36  # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) TYPE = FRIBIDI_JOINING_TYPE_##TYPE,
      37  # include "fribidi-joining-types-list.h"
      38  # undef _FRIBIDI_ADD_TYPE
      39    _FRIBIDI_NUM_TYPES
      40  };
      41  
      42  #include "joining-type.tab.i"
      43  
      44  FRIBIDI_ENTRY FriBidiJoiningType
      45  fribidi_get_joining_type (
      46    /* input */
      47    FriBidiChar ch
      48  )
      49  {
      50    return FRIBIDI_GET_JOINING_TYPE (ch);
      51  }
      52  
      53  FRIBIDI_ENTRY void
      54  fribidi_get_joining_types (
      55    /* input */
      56    const FriBidiChar *str,
      57    const FriBidiStrIndex len,
      58    /* output */
      59    FriBidiJoiningType *jtypes
      60  )
      61  {
      62    register FriBidiStrIndex i = len;
      63    for (; i; i--)
      64      {
      65        *jtypes++ = FRIBIDI_GET_JOINING_TYPE (*str);
      66        str++;
      67      }
      68  }
      69  
      70  FRIBIDI_ENTRY const char *
      71  fribidi_get_joining_type_name (
      72    /* input */
      73    FriBidiJoiningType j
      74  )
      75  {
      76    switch (j)
      77      {
      78  #   define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_JOINING_TYPE_##TYPE: return STRINGIZE(TYPE);
      79  #   include "fribidi-joining-types-list.h"
      80  #   undef _FRIBIDI_ADD_TYPE
      81      default:
      82        return "?";
      83      }
      84  }
      85  
      86  #ifdef DEBUG
      87  
      88  char
      89  fribidi_char_from_joining_type (
      90    /* input */
      91    FriBidiJoiningType j,
      92    fribidi_boolean visual
      93  )
      94  {
      95    /* switch left and right if on visual run */
      96    if (visual & ((FRIBIDI_JOINS_RIGHT (j) && !FRIBIDI_JOINS_LEFT (j)) |
      97  		(!FRIBIDI_JOINS_RIGHT (j) && FRIBIDI_JOINS_LEFT (j))))
      98      j ^= FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT;
      99  
     100  #   define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL)	\
     101  	if (FRIBIDI_IS_JOINING_TYPE_##TYPE(j)) return SYMBOL;
     102  #   include "fribidi-joining-types-list.h"
     103  #   undef _FRIBIDI_ADD_TYPE
     104  
     105    return '?';
     106  }
     107  
     108  #endif /* DEBUG */
     109  
     110  /* Editor directions:
     111   * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
     112   */