blob: 9ef2da76f4dd4b0a0da34d50f6b54c6b3ffa7b0e [file] [log] [blame]
/* Keeping track of the encoding of strings to be extracted.
Copyright (C) 2001-2019 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#ifndef _XGETTEXT_ENCODING_H
#define _XGETTEXT_ENCODING_H
#include <stddef.h>
#if HAVE_ICONV
#include <iconv.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Context while building up lexical tokens. */
typedef enum
{
lc_outside, /* Initial context: outside of comments and strings. */
lc_comment, /* Inside a comment. */
lc_string, /* Inside a string literal. */
/* For embedded XML in programming code, like E4X in JavaScript. */
lc_xml_open_tag, /* Inside an opening tag of an XML element. */
lc_xml_close_tag, /* Inside a closing tag of an XML element. */
lc_xml_content /* Inside an XML text node. */
}
lexical_context_ty;
/* Error message about non-ASCII character in a specific lexical context. */
extern char *non_ascii_error_message (lexical_context_ty lcontext,
const char *file_name,
size_t line_number);
/* Canonicalized encoding name for all input files.
It can be NULL when the --from-code option has not been specified. In this
case, the default (ASCII or UTF-8) depends on the programming language. */
extern const char *xgettext_global_source_encoding;
#if HAVE_ICONV
/* Converter from xgettext_global_source_encoding to UTF-8 (except from
ASCII or UTF-8, when this conversion is a no-op). */
extern iconv_t xgettext_global_source_iconv;
#endif
/* Canonicalized encoding name for the current input file. */
extern const char *xgettext_current_source_encoding;
#if HAVE_ICONV
/* Converter from xgettext_current_source_encoding to UTF-8 (except from
ASCII or UTF-8, when this conversion is a no-op). */
extern iconv_t xgettext_current_source_iconv;
#endif
/* Convert the given string from xgettext_current_source_encoding to
the output file encoding (i.e. ASCII or UTF-8).
The resulting string is either the argument string, or freshly allocated.
The lcontext, file_name and line_number are only used for error message
purposes. */
extern char *from_current_source_encoding (const char *string,
lexical_context_ty lcontext,
const char *file_name,
size_t line_number);
#ifdef __cplusplus
}
#endif
#endif /* _XGETTEXT_ENCODING_H */