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
34enum 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. */
45static 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
51FRIBIDI_ENTRY FriBidiCharType
52fribidi_get_bidi_type (
53 /* input */
54 FriBidiChar ch
55)
56{
57 return linear_enum_to_char_type[FRIBIDI_GET_BIDI_TYPE (ch)];
58}
59
60FRIBIDI_ENTRY void
61fribidi_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
77FRIBIDI_ENTRY const char *
78fribidi_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
97char
98fribidi_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 */
120

source code of gtk/subprojects/fribidi/lib/fribidi-bidi-types.c