/*
 * Private localization support for CUPS.
 *
 * Copyright © 2020-2024 by OpenPrinting.
 * Copyright © 2007-2018 by Apple Inc.
 * Copyright © 1997-2006 by Easy Software Products.
 *
 * Licensed under Apache License v2.0.  See the file "LICENSE" for more
 * information.
 */

#ifndef _CUPS_LANGUAGE_PRIVATE_H_
#  define _CUPS_LANGUAGE_PRIVATE_H_

/*
 * Include necessary headers...
 */

#  include "config.h"
#  include <stdio.h>
#  include <cups/transcode.h>
#  ifdef __APPLE__
#    include <CoreFoundation/CoreFoundation.h>
#  endif /* __APPLE__ */

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


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

#  define _(x) x


/*
 * Constants...
 */

#  define _CUPS_MESSAGE_PO	0	/* Message file is in GNU .po format */
#  define _CUPS_MESSAGE_UNQUOTE	1	/* Unescape \foo in strings? */
#  define _CUPS_MESSAGE_STRINGS	2	/* Message file is in Apple .strings format */
#  define _CUPS_MESSAGE_EMPTY	4	/* Allow empty localized strings */


/*
 * Types...
 */

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


/*
 * Prototypes...
 */

#  ifdef __APPLE__
extern const char	*_cupsAppleLanguage(const char *locale, char *language, size_t langsize) _CUPS_PRIVATE;
extern const char	*_cupsAppleLocale(CFStringRef languageName, char *locale, size_t localesize) _CUPS_PRIVATE;
#  endif /* __APPLE__ */
extern void		_cupsCharmapFlush(void) _CUPS_INTERNAL;
extern const char	*_cupsEncodingName(cups_encoding_t encoding) _CUPS_PRIVATE;
extern void		_cupsLangPrintError(const char *prefix, const char *message) _CUPS_PRIVATE;
extern int		_cupsLangPrintFilter(FILE *fp, const char *prefix, const char *message, ...) _CUPS_FORMAT(3, 4) _CUPS_PRIVATE;
extern int		_cupsLangPrintf(FILE *fp, const char *message, ...) _CUPS_FORMAT(2, 3) _CUPS_PRIVATE;
extern int		_cupsLangPuts(FILE *fp, const char *message) _CUPS_PRIVATE;
extern const char	*_cupsLangString(cups_lang_t *lang, const char *message) _CUPS_PRIVATE;
extern void		_cupsMessageFree(cups_array_t *a) _CUPS_PRIVATE;
extern cups_array_t	*_cupsMessageLoad(const char *filename, int flags) _CUPS_PRIVATE;
extern const char	*_cupsMessageLookup(cups_array_t *a, const char *m) _CUPS_PRIVATE;
extern cups_array_t	*_cupsMessageNew(void *context) _CUPS_PRIVATE;
extern int		_cupsMessageSave(const char *filename, int flags, cups_array_t *a) _CUPS_PRIVATE;
extern void		_cupsSetLocale(char *argv[]) _CUPS_PRIVATE;


#  ifdef __cplusplus
}
#  endif /* __cplusplus */

#endif /* !_CUPS_LANGUAGE_PRIVATE_H_ */
