(root)/
fribidi-1.0.13/
lib/
fribidi-bidi-types.c
       1  /* FriBidi
       2   * fribidi-bidi-types.c - character bidi 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-bidi-types.h>
      31  
      32  #include "bidi-types.h"
      33  
      34  enum FriBidiCharTypeLinearEnum
      35  {
      36  # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) TYPE,
      37  # include "fribidi-bidi-types-list.h"
      38  # undef _FRIBIDI_ADD_TYPE
      39    _FRIBIDI_NUM_TYPES
      40  };
      41  
      42  #include "bidi-type.tab.i"
      43  
      44  /* Map FriBidiCharTypeLinearEnum to FriBidiCharType. */
      45  static const FriBidiCharType linear_enum_to_char_type[] = {
      46  # define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) FRIBIDI_TYPE_##TYPE,
      47  # include "fribidi-bidi-types-list.h"
      48  # undef _FRIBIDI_ADD_TYPE
      49  };
      50  
      51  FRIBIDI_ENTRY FriBidiCharType
      52  fribidi_get_bidi_type (
      53    /* input */
      54    FriBidiChar ch
      55  )
      56  {
      57    return linear_enum_to_char_type[FRIBIDI_GET_BIDI_TYPE (ch)];
      58  }
      59  
      60  FRIBIDI_ENTRY void
      61  fribidi_get_bidi_types (
      62    /* input */
      63    const FriBidiChar *str,
      64    const FriBidiStrIndex len,
      65    /* output */
      66    FriBidiCharType *btypes
      67  )
      68  {
      69    register FriBidiStrIndex i = len;
      70    for (; i; i--)
      71      {
      72        *btypes++ = linear_enum_to_char_type[FRIBIDI_GET_BIDI_TYPE (*str)];
      73        str++;
      74      }
      75  }
      76  
      77  FRIBIDI_ENTRY const char *
      78  fribidi_get_bidi_type_name (
      79    /* input */
      80    FriBidiCharType t
      81  )
      82  {
      83    switch ((int)t)
      84      {
      85  #   define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return STRINGIZE(TYPE);
      86  #   define _FRIBIDI_ALL_TYPES
      87  #   include "fribidi-bidi-types-list.h"
      88  #   undef _FRIBIDI_ALL_TYPES
      89  #   undef _FRIBIDI_ADD_TYPE
      90      default:
      91        return "?";
      92      }
      93  }
      94  
      95  #ifdef DEBUG
      96  
      97  char
      98  fribidi_char_from_bidi_type (
      99    /* input */
     100    FriBidiCharType t
     101  )
     102  {
     103    switch ((int)t)
     104      {
     105  #   define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return SYMBOL;
     106  #   define _FRIBIDI_ALL_TYPES
     107  #   include "fribidi-bidi-types-list.h"
     108  #   undef _FRIBIDI_ALL_TYPES
     109  #   undef _FRIBIDI_ADD_TYPE
     110      default:
     111        return '?';
     112      }
     113  }
     114  
     115  #endif /* DEBUG */
     116  
     117  /* Editor directions:
     118   * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
     119   */