298 lines
5.8 KiB
C
298 lines
5.8 KiB
C
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these librararies and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/*
|
|
* @OSF_COPYRIGHT@
|
|
* COPYRIGHT NOTICE
|
|
* Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
|
|
* ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
|
|
* the full copyright text.
|
|
*/
|
|
/*
|
|
* HISTORY
|
|
*/
|
|
#ifdef REV_INFO
|
|
#ifndef lint
|
|
static char rcsid[] = "$TOG: UilSemCSet.c /main/10 1997/03/12 15:21:53 dbl $"
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
|
|
/*
|
|
**++
|
|
** FACILITY:
|
|
**
|
|
** User Interface Language Compiler (UIL)
|
|
**
|
|
** ABSTRACT:
|
|
**
|
|
** This file contains and routines related to the semantics of
|
|
** character sets.
|
|
** semantic validation.
|
|
**
|
|
**--
|
|
**/
|
|
|
|
|
|
/*
|
|
**
|
|
** INCLUDE FILES
|
|
**
|
|
**/
|
|
|
|
#include <Xm/Xm.h>
|
|
|
|
#include "UilDefI.h"
|
|
|
|
/*
|
|
**
|
|
** DEFINE and MACRO DEFINITIONS
|
|
**
|
|
**/
|
|
|
|
|
|
|
|
/*
|
|
**
|
|
** EXTERNAL VARIABLE DECLARATIONS
|
|
**
|
|
**/
|
|
|
|
|
|
/*
|
|
**
|
|
** GLOBAL VARIABLE DECLARATIONS
|
|
**
|
|
**/
|
|
|
|
|
|
|
|
/*
|
|
**
|
|
** OWN VARIABLE DECLARATIONS
|
|
**
|
|
**/
|
|
|
|
|
|
|
|
/*
|
|
**++
|
|
** FUNCTIONAL DESCRIPTION:
|
|
**
|
|
** This function returns a pointer to a character set name given
|
|
** its sym_k_..._charset code and possibly a userdefined charset
|
|
** value entry.
|
|
**
|
|
** FORMAL PARAMETERS:
|
|
**
|
|
** l_charset charset of the string (token value)
|
|
** az_charset_entry charset of the string (symbol table value entry)
|
|
**
|
|
** IMPLICIT INPUTS:
|
|
**
|
|
** charset data tables
|
|
**
|
|
** IMPLICIT OUTPUTS:
|
|
**
|
|
** none
|
|
**
|
|
** FUNCTION VALUE:
|
|
**
|
|
** pointer to name (must NOT be freed)
|
|
**
|
|
** SIDE EFFECTS:
|
|
**
|
|
** error messages may be issued for objects that are still undefined
|
|
** or of the wrong type
|
|
**
|
|
**--
|
|
**/
|
|
|
|
char *sem_charset_name (l_charset, az_charset_entry)
|
|
int l_charset;
|
|
sym_value_entry_type *az_charset_entry;
|
|
|
|
{
|
|
|
|
int charset; /* mapped character set */
|
|
|
|
charset = sem_map_subclass_to_charset (l_charset);
|
|
switch ( charset )
|
|
{
|
|
case sym_k_fontlist_default_tag:
|
|
return XmFONTLIST_DEFAULT_TAG;
|
|
case sym_k_userdefined_charset:
|
|
/*
|
|
** If the charset is user-defined, then fetch info from the symbol
|
|
** table entry for it.
|
|
*/
|
|
_assert (az_charset_entry!=NULL, "null userdefined charset entry");
|
|
return az_charset_entry->value.c_value;
|
|
default:
|
|
return charset_xmstring_names_table[charset];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
**++
|
|
** FUNCTIONAL DESCRIPTION:
|
|
**
|
|
** This function returns information about the character set specified
|
|
** (writing direction and sixteen_bit properties).
|
|
**
|
|
** FORMAL PARAMETERS:
|
|
**
|
|
** l_charset charset of the string (token value)
|
|
** az_charset_entry charset of the string (symbol table value entry)
|
|
** direction string writing direction
|
|
** sixteen_bit Boolean return value
|
|
**
|
|
** IMPLICIT INPUTS:
|
|
**
|
|
** none
|
|
**
|
|
** IMPLICIT OUTPUTS:
|
|
**
|
|
** none
|
|
**
|
|
** FUNCTION VALUE:
|
|
**
|
|
** none
|
|
**
|
|
** SIDE EFFECTS:
|
|
**
|
|
** none
|
|
**
|
|
**--
|
|
**/
|
|
|
|
void sem_charset_info
|
|
(l_charset, az_charset_entry, write_direction, parse_direction, sixteen_bit)
|
|
|
|
int l_charset;
|
|
sym_value_entry_type *az_charset_entry;
|
|
int *write_direction;
|
|
int *parse_direction;
|
|
int *sixteen_bit;
|
|
|
|
{
|
|
|
|
int charset; /* mapped character set */
|
|
|
|
charset = sem_map_subclass_to_charset (l_charset);
|
|
switch (charset)
|
|
{
|
|
/*
|
|
** If the charset is user-defined, then fetch info from the symbol
|
|
** table entry for it.
|
|
*/
|
|
case sym_k_userdefined_charset:
|
|
{
|
|
*write_direction = az_charset_entry->b_direction;
|
|
*parse_direction = az_charset_entry->b_direction;
|
|
*sixteen_bit = (az_charset_entry->b_aux_flags &
|
|
sym_m_sixteen_bit) != 0;
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
*write_direction = charset_writing_direction_table[charset];
|
|
*parse_direction = charset_parsing_direction_table[charset];
|
|
if ( charset_character_size_table[charset] != sym_k_onebyte_charsize )
|
|
*sixteen_bit = TRUE;
|
|
else
|
|
*sixteen_bit = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
**++
|
|
** FUNCTIONAL DESCRIPTION:
|
|
**
|
|
** This function returns the charset id corresponding to the
|
|
** charset specified in a $LANG variable. User-defined character
|
|
** sets are not recognized - it must be one available in the
|
|
** the compiler tables.
|
|
**
|
|
** The name match is case-insensitive.
|
|
**
|
|
** FORMAL PARAMETERS:
|
|
**
|
|
** lang_charset string naming a character set
|
|
**
|
|
** IMPLICIT INPUTS:
|
|
**
|
|
** none
|
|
**
|
|
** IMPLICIT OUTPUTS:
|
|
**
|
|
** none
|
|
**
|
|
** FUNCTION VALUE:
|
|
**
|
|
** 0 no match - character set not found
|
|
** >0 character set code from sym_k_..._charset.
|
|
** sym_k_userdefined_charset is never returned.
|
|
**
|
|
**
|
|
** SIDE EFFECTS:
|
|
**
|
|
** none
|
|
**
|
|
**--
|
|
**/
|
|
|
|
int sem_charset_lang_name (lang_charset)
|
|
char *lang_charset;
|
|
|
|
{
|
|
|
|
char uname[200]; /* upper-case character set name */
|
|
int ndx; /* loop index */
|
|
|
|
|
|
/*
|
|
* Convert name to upper case, then search table (which is already in
|
|
* upper case).
|
|
*/
|
|
strcpy (uname, lang_charset);
|
|
for ( ndx=0 ; ndx<(int)strlen(uname) ; ndx++ )
|
|
uname[ndx] = _upper (uname[ndx]);
|
|
|
|
for ( ndx=0 ; ndx<(int)charset_lang_table_max ; ndx++ )
|
|
if ( strcmp(uname,charset_lang_names_table[ndx]) == 0 )
|
|
return (int)charset_lang_codes_table[ndx];
|
|
return 0;
|
|
|
|
}
|
|
|
|
|