/*
 * "$Id: i18n.h 5926 2006-09-05 20:45:47Z mike $"
 *
 *   (Private) localization support for the Common UNIX Printing System (CUPS).
 *
 *   Copyright 1997-2006 by Easy Software Products.
 *
 *   These coded instructions, statements, and computer programs are the
 *   property of Easy Software Products and are protected by Federal
 *   copyright law.  Distribution and use rights are outlined in the file
 *   "LICENSE.txt" which should have been included with this file.  If this
 *   file is missing or damaged please contact Easy Software Products
 *   at:
 *
 *       Attn: CUPS Licensing Information
 *       Easy Software Products
 *       44141 Airport View Drive, Suite 204
 *       Hollywood, Maryland 20636 USA
 *
 *       Voice: (301) 373-9600
 *       EMail: cups-info@cups.org
 *         WWW: http://www.cups.org
 *
 *   This file is subject to the Apple OS-Developed Software exception.
 */

#ifndef _CUPS_I18N_H_
#  define _CUPS_I18N_H_

/*
 * Include necessary headers...
 */

#  include <stdio.h>
#  include "transcode.h"

#  ifdef __cplusplus
extern "C" {
#  endif /* __cplusplus */


/*
 * Macro for localized text...
 */

#  define _(x) x


/*
 * Types...
 */

typedef struct _cups_message_s		/**** Message catalog entry ****/
{
  char	*id,				/* Original string */
	*str;				/* Localized string */
} _cups_message_t;

typedef struct _cups_cmap_s		/**** SBCS Charmap Struct ****/
{
  struct _cups_cmap_s	*next;		/* Next charmap in cache */
  int			used;		/* Number of times entry used */
  cups_encoding_t	encoding;	/* Legacy charset encoding */
  cups_ucs2_t		char2uni[256];	/* Map Legacy SBCS -> UCS-2 */
  cups_sbcs_t		*uni2char[256]; /* Map UCS-2 -> Legacy SBCS */
} _cups_cmap_t;

typedef struct _cups_wide2uni_s		/**** Wide to Unicode ****/
{
  cups_vbcs_t		widechar;	/* VBCS 32-bit Char (EUC) */
  cups_ucs2_t		unichar;	/* UCS-2 Char */
} _cups_wide2uni_t;

typedef struct _cups_vmap_s		/**** VBCS Charmap Struct ****/
{
  struct _cups_vmap_s	*next;		/* Next charmap in cache */
  int			used;		/* Number of times entry used */
  cups_encoding_t	encoding;	/* Legacy charset encoding */
  cups_ucs2_t		*char2uni[256]; /* Map 16-bit Char -> UCS-2 */
  int			charcount;	/* Count of 16-bit VBCS Chars */
  _cups_wide2uni_t	*wide2uni;	/* Map 32-bit Char -> UCS-2 */
  int			widecount;	/* Count of 32-bit VBCS Chars */
  cups_vbcs_t		*uni2char[256]; /* Map UCS-2 -> 32-bit VBCS */
  cups_sbcs_t		lead2char[256]; /* Legacy Lead Char - 2-byte */
  cups_sbcs_t		lead3char[256]; /* Legacy Lead Char - 3-byte */
  cups_sbcs_t		lead4char[256]; /* Legacy Lead Char - 4-byte */
} _cups_vmap_t;


/*
 * Prototypes...
 */

extern void		_cupsCharmapFlush(void);
extern void		_cupsCharmapFree(const cups_encoding_t encoding);
extern void		*_cupsCharmapGet(const cups_encoding_t encoding);
extern const char	*_cupsEncodingName(cups_encoding_t encoding);
extern int		_cupsLangPrintf(FILE *fp, const char *message, ...)
#    ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 2, 3)))
#    endif /* __GNUC__ */
;
extern int		_cupsLangPuts(FILE *fp, const char *message);
extern const char	*_cupsLangString(cups_lang_t *lang, const char *message);
extern void		_cupsMessageFree(cups_array_t *a);
extern cups_array_t	*_cupsMessageLoad(const char *filename);
extern const char	*_cupsMessageLookup(cups_array_t *a, const char *m);
extern void		_cupsSetLocale(char *argv[]);

#  ifdef __cplusplus
}
#  endif /* __cplusplus */

#endif /* !_CUPS_I18N_H_ */

/*
 * End of "$Id: i18n.h 5926 2006-09-05 20:45:47Z mike $".
 */
