blob: acc0e0c377c05a7a50646d5c099ce568775cb935 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* i18n.cc
*
* Deal with internationalization conversions
*/
/*
* Included files
*/
#include <mksh/i18n.h>
#include <mksh/misc.h> /* setup_char_semantics() */
/*
* get_char_semantics_value(ch)
*
* Return value:
* The character semantics of ch.
*
* Parameters:
* ch character we want semantics for.
*
*/
char
get_char_semantics_value(wchar_t ch)
{
static Boolean char_semantics_setup;
if (!char_semantics_setup) {
setup_char_semantics();
char_semantics_setup = true;
}
return char_semantics[get_char_semantics_entry(ch)];
}
/*
* get_char_semantics_entry(ch)
*
* Return value:
* The slot number in the array for special make chars,
* else the slot number of the last array entry.
*
* Parameters:
* ch The wide character
*
* Global variables used:
* char_semantics_char[] array of special wchar_t chars
* "&*@`\\|[]:$=!>-\n#()%?;^<'\""
*/
int
get_char_semantics_entry(wchar_t ch)
{
wchar_t *char_sem_char;
char_sem_char = (wchar_t *) wcschr(char_semantics_char, ch);
if (char_sem_char == NULL) {
/*
* Return the integer entry for the last slot,
* whose content is empty.
*/
return (CHAR_SEMANTICS_ENTRIES - 1);
} else {
return (char_sem_char - char_semantics_char);
}
}
|