diff options
Diffstat (limited to 'REORG.TODO/locale/programs/locfile.h')
-rw-r--r-- | REORG.TODO/locale/programs/locfile.h | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/REORG.TODO/locale/programs/locfile.h b/REORG.TODO/locale/programs/locfile.h new file mode 100644 index 0000000000..3407e13c13 --- /dev/null +++ b/REORG.TODO/locale/programs/locfile.h @@ -0,0 +1,279 @@ +/* Copyright (C) 1996-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. + + 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; version 2 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 <http://www.gnu.org/licenses/>. */ + +#ifndef _LOCFILE_H +#define _LOCFILE_H 1 + +#include <byteswap.h> +#include <stdbool.h> +#include <stdint.h> +#include <sys/uio.h> + +#include "obstack.h" +#include "linereader.h" +#include "localedef.h" + +/* Structure for storing the contents of a category file. */ +struct locale_file +{ + size_t n_elements, next_element; + uint32_t *offsets; + struct obstack data; + int structure_stage; +}; + + +/* Macros used in the parser. */ +#define SYNTAX_ERROR(string, args...) \ + do \ + { \ + lr_error (ldfile, string, ## args); \ + lr_ignore_rest (ldfile, 0); \ + } \ + while (0) + + +/* General handling of `copy'. */ +extern void handle_copy (struct linereader *ldfile, + const struct charmap_t *charmap, + const char *repertoire_name, + struct localedef_t *result, enum token_t token, + int locale, const char *locale_name, + int ignore_content); + +/* Found in locfile.c. */ +extern int locfile_read (struct localedef_t *result, + const struct charmap_t *charmap); + +/* Check validity of all the locale data. */ +extern void check_all_categories (struct localedef_t *definitions, + const struct charmap_t *charmap); + +/* Write out all locale categories. */ +extern void write_all_categories (struct localedef_t *definitions, + const struct charmap_t *charmap, + const char *locname, + const char *output_path); + +extern bool swap_endianness_p; + +/* Change the output to be big-endian if BIG_ENDIAN is true and + little-endian otherwise. */ +static inline void +set_big_endian (bool big_endian) +{ + swap_endianness_p = (big_endian != (__BYTE_ORDER == __BIG_ENDIAN)); +} + +/* Munge VALUE so that, when stored, it has the correct byte order + for the output files. */ +static uint32_t +__attribute__ ((unused)) +maybe_swap_uint32 (uint32_t value) +{ + return swap_endianness_p ? bswap_32 (value) : value; +} + +/* Likewise, but munge an array of N uint32_ts starting at ARRAY. */ +static inline void +maybe_swap_uint32_array (uint32_t *array, size_t n) +{ + if (swap_endianness_p) + while (n-- > 0) + array[n] = bswap_32 (array[n]); +} + +/* Like maybe_swap_uint32_array, but the array of N elements is at + the end of OBSTACK's current object. */ +static inline void +maybe_swap_uint32_obstack (struct obstack *obstack, size_t n) +{ + maybe_swap_uint32_array ((uint32_t *) obstack_next_free (obstack) - n, n); +} + +/* Write out the data. */ +extern void init_locale_data (struct locale_file *file, size_t n_elements); +extern void align_locale_data (struct locale_file *file, size_t boundary); +extern void add_locale_empty (struct locale_file *file); +extern void add_locale_raw_data (struct locale_file *file, const void *data, + size_t size); +extern void add_locale_raw_obstack (struct locale_file *file, + struct obstack *obstack); +extern void add_locale_string (struct locale_file *file, const char *string); +extern void add_locale_wstring (struct locale_file *file, + const uint32_t *string); +extern void add_locale_uint32 (struct locale_file *file, uint32_t value); +extern void add_locale_uint32_array (struct locale_file *file, + const uint32_t *data, size_t n_elems); +extern void add_locale_char (struct locale_file *file, char value); +extern void start_locale_structure (struct locale_file *file); +extern void end_locale_structure (struct locale_file *file); +extern void start_locale_prelude (struct locale_file *file); +extern void end_locale_prelude (struct locale_file *file); +extern void write_locale_data (const char *output_path, int catidx, + const char *category, struct locale_file *file); + + +/* Entrypoints for the parsers of the individual categories. */ + +/* Handle LC_CTYPE category. */ +extern void ctype_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void ctype_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void ctype_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); +extern uint32_t *find_translit (struct localedef_t *locale, + const struct charmap_t *charmap, uint32_t wch); + +/* Handle LC_COLLATE category. */ +extern void collate_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void collate_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void collate_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_MONETARY category. */ +extern void monetary_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void monetary_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void monetary_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_NUMERIC category. */ +extern void numeric_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void numeric_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void numeric_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_MESSAGES category. */ +extern void messages_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void messages_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void messages_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_TIME category. */ +extern void time_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void time_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void time_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_PAPER category. */ +extern void paper_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void paper_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void paper_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_NAME category. */ +extern void name_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void name_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void name_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_ADDRESS category. */ +extern void address_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void address_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void address_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_TELEPHONE category. */ +extern void telephone_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void telephone_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void telephone_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_MEASUREMENT category. */ +extern void measurement_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void measurement_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void measurement_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +/* Handle LC_IDENTIFICATION category. */ +extern void identification_read (struct linereader *ldfile, + struct localedef_t *result, + const struct charmap_t *charmap, + const char *repertoire_name, + int ignore_content); +extern void identification_finish (struct localedef_t *locale, + const struct charmap_t *charmap); +extern void identification_output (struct localedef_t *locale, + const struct charmap_t *charmap, + const char *output_path); + +#endif /* locfile.h */ |