29#ifndef RWSTD_UTIL_DEF_H_INCLUDED
30#define RWSTD_UTIL_DEF_H_INCLUDED
56 Def(
const char* filename,
58 Charmap& charmap,
bool no_position);
118 unsigned int weight[256];
127 std::list<collate_elem_t> ce_list_;
128 std::list<collate_section_t> section_list_;
131 void preprocess_collate ();
132 void preprocess_order ();
133 void preprocess_reorder ();
134 void preprocess_reorder_section ();
135 void preprocess_collation_definitions();
138 unsigned int,
unsigned int);
139 unsigned int process_order_stmt (collate_section_t&);
143 void list_collate ();
150 void copy_category(
int cat, std::string
name);
153 void copy_file(
const std::string &
name,
const std::string &outname);
157 std::ctype_base::mask);
161 std::size_t process_sym_ellipsis (
const std::string&,
164 std::ctype_base::mask);
167 void parse_era (
const token_t&);
171 void process_mask (std::ctype_base::mask,
const char*);
177 void process_ctype();
180 void process_xlit ();
182 void process_xlit_statement (std::size_t&);
185 void process_collate ();
189 unsigned int&,
unsigned int);
193 void process_order (collate_section_t&,
unsigned int&);
200 bool get_weight (
token_t&, Weights_t*,
int);
203 void add_to_coll (
const wchar_t val,
204 const Weights_t* weight_template,
205 const unsigned int coll_value,
206 const std::vector<bool>& ordinal_weights,
207 bool undefined_value);
211 void add_missing_values (
const std::vector<bool> &ordinal_weights,
212 const Weights_t* weights_template,
213 unsigned int &coll_value,
bool give_warning);
216 void process_monetary();
219 void create_format (
char [4],
char,
char,
char,
bool);
222 void process_numeric();
227 extract_string_array (std::string*, std::wstring*, std::size_t);
234 void process_messages();
236 std::string convert_string (
const std::string&);
237 std::wstring convert_wstring (
const token_t&);
238 std::wstring convert_wstring (
const std::vector<std::string>&);
240 void strip_pair(
const std::string&, std::string&, std::string&);
243 std::string utf8_encode (
wchar_t ch);
246 std::string convert_to_ext (
wchar_t val);
252 void init_coll_map();
254 void gen_n_to_w_coll_tables (
const std::string &charp,
255 unsigned int tab_num);
257 void gen_w_to_n_coll_tables (
const std::string &charp,
258 unsigned int tab_num);
261 unsigned int next_offset_;
266 std::string output_name_;
275 std::string ctype_filename_;
279 std::map<wchar_t, unsigned int> mask_;
282 std::map<wchar_t, wchar_t> lower_;
285 std::map<wchar_t, wchar_t> upper_;
287 typedef std::map<std::string, unsigned int>::iterator mb_char_off_map_iter;
289 struct codecvt_offset_tab_t {
293 void create_wchar_utf8_table ();
294 std::map<std::string, std::string> wchar_utf8_to_ext_;
295 typedef std::map<std::string, std::string>::iterator wchar_utf8_iter;
297 void gen_valid_coll_wchar_set ();
299 std::set<std::string> valid_coll_wchar_set_;
300 typedef std::set<std::string>::iterator valid_coll_wchar_set_iter;
301 std::set<std::string> valid_codecvt_wchar_set_;
302 typedef std::set<std::string>::iterator valid_codecvt_wchar_set_iter;
304 typedef std::map<unsigned, const codecvt_offset_tab_t*>
305 codecvt_offsets_map_t;
311 gen_mbchar_tables (codecvt_offsets_map_t&,
312 std::map<std::string, unsigned>&,
313 const std::string& =
"",
317 gen_wchar_tables (codecvt_offsets_map_t&,
318 const std::string& =
"",
322 gen_utf8_tables (codecvt_offsets_map_t&,
323 std::map<std::string, unsigned>&,
324 const std::string& =
"",
327 std::set<std::string> valid_coll_mb_set_;
329 void gen_valid_coll_mb_set();
332 void gen_xlit_data ();
336 bool ctype_written_, codecvt_written_, collate_written_, time_written_,
337 num_written_, mon_written_, messages_written_;
338 bool ctype_def_found_, collate_def_found_,
339 time_def_found_, num_def_found_, mon_def_found_, messages_def_found_;
342 bool undefined_keyword_found_;
350 struct offset_tab_t {
355 std::map<unsigned int, offset_tab_t> char_offs_;
356 typedef std::map<unsigned int, offset_tab_t>::iterator char_offs_iter;
358 std::map<unsigned int, offset_tab_t> w_to_n_coll_;
359 typedef std::map<unsigned int, offset_tab_t>::iterator w_to_n_coll_iter;
361 unsigned int next_tab_num_;
362 unsigned int next_wchar_coll_tab_num_;
365 struct ce_offset_tab_t {
370 std::map<unsigned int, ce_offset_tab_t> n_ce_offs_;
371 typedef std::map<unsigned int, ce_offset_tab_t>::iterator n_ce_offs_iter;
373 std::map<unsigned int, ce_offset_tab_t> w_ce_offs_;
374 typedef std::map<unsigned int, ce_offset_tab_t>::iterator w_ce_offs_iter;
376 std::set<std::string> valid_n_ce_set;
377 typedef std::set<std::string>::iterator valid_n_ce_set_iter;
379 void gen_n_ce_tables (
const std::set<std::string>,
380 unsigned int,
unsigned int);
381 unsigned int next_n_ce_tab_num_;
382 void gen_w_ce_tables (
const std::set<std::string>,
383 unsigned int,
unsigned int);
384 unsigned int next_w_ce_tab_num_;
386 std::map<std::string, std::string>ce_sym_map_;
387 std::map<std::string, std::string>ce_wsym_map_;
388 typedef std::map<std::string, std::string>::iterator ce_sym_map_iter;
390 std::map<unsigned int, std::string> off_mapr_;
393 std::map<std::string, unsigned int> cs_map_;
394 typedef std::map<std::string, unsigned int>::iterator cs_map_iter;
397 struct xlit_offset_table {
398 unsigned int offset_table [
UCHAR_MAX + 1];
400 typedef struct xlit_offset_table xlit_offset_table_t;
401 typedef std::map<wchar_t,std::list<std::string> > xlit_map_t;
402 typedef std::map<wchar_t, unsigned int> xlit_data_offset_map_t;
403 typedef std::map<unsigned int,xlit_offset_table_t> xlit_table_map_t;
404 xlit_map_t xlit_map_;
405 xlit_data_offset_map_t xlit_data_offset_map_;
406 xlit_table_map_t xlit_table_map_;
412 unsigned int coll_val;
427 unsigned int coll_val;
430 std::wstring ce_wstr;
435 std::map<wchar_t, collate_info_t> coll_map_;
436 typedef std::map<wchar_t, collate_info_t>::iterator coll_map_iter;
440 std::map <std::string, ce_info_t> ce_map_;
441 typedef std::map <std::string, ce_info_t>::iterator ce_map_iter;
444 typedef std::map<wchar_t, unsigned int>::iterator mask_iter;
445 typedef std::map<wchar_t, wchar_t>::iterator upper_iter;
446 typedef std::map<wchar_t, wchar_t>::iterator lower_iter;
447 typedef std::map< std::string, unsigned char >::const_iterator n_cmap_iter;
448 typedef std::map<std::string, wchar_t>::const_iterator mb_cmap_iter;
449 typedef std::map<wchar_t, std::string>::const_iterator rmb_cmap_iter;
450 typedef std::map<std::string, wchar_t >::const_iterator w_cmap_iter;
451 typedef std::map<wchar_t, std::string >::const_iterator rw_cmap_iter;
452 typedef std::map<unsigned int, std::string>::iterator off_mapr_iter;
453 typedef std::map<std::string, wchar_t>::const_iterator ucs4_cmap_iter;
455 typedef std::list<std::string>::const_iterator symnames_list_iter;
459 _RW::__rw_punct_t num_punct_out_;
460 _RW::__rw_ctype_t ctype_out_;
461 _RW::__rw_time_t time_out_;
462 _RW::__rw_collate_t collate_out_;
463 _RW::__rw_mon_t mon_out_;
464 _RW::__rw_num_t num_out_;
465 _RW::__rw_messages_t messages_out_;
498 _RW::__rw_time_t::era_t era_out;
501 std::list<era_st> era_list_;
502 typedef std::list<era_st>::iterator era_list_iter;
512 std::string int_curr_symbol;
513 std::string currency_symbol;
514 std::string mon_decimal_point;
515 std::string mon_thousands_sep;
516 std::string mon_grouping;
517 std::string positive_sign;
518 std::string negative_sign;
519 std::wstring wint_curr_symbol;
520 std::wstring wcurrency_symbol;
521 std::wstring wmon_decimal_point;
522 std::wstring wmon_thousands_sep;
523 std::wstring wpositive_sign;
524 std::wstring wnegative_sign;
531 std::string decimal_point;
532 std::string thousands_sep;
533 std::string grouping;
534 std::string truename;
535 std::string falsename;
537 std::wstring wdecimal_point;
538 std::wstring wthousands_sep;
539 std::wstring wtruename;
540 std::wstring wfalsename;
545 std::string n_alt_digit;
546 std::wstring w_alt_digit;
547 unsigned int n_offset;
548 unsigned int w_offset;
550 std::list<alt_digit_t> alt_digits_;
551 typedef std::list<alt_digit_t>::iterator alt_digits_iter;
555 std::string abday[7];
557 std::string abmon[12];
559 std::string am_pm[2];
563 std::string t_fmt_ampm;
564 std::string era_d_t_fmt;
565 std::string era_d_fmt;
566 std::string era_t_fmt;
570 std::wstring wabday[7];
571 std::wstring wday[7];
572 std::wstring wabmon[12];
573 std::wstring wmon[12];
574 std::wstring wam_pm[2];
575 std::wstring wd_t_fmt;
578 std::wstring wt_fmt_ampm;
579 std::wstring wera_d_t_fmt;
580 std::wstring wera_d_fmt;
581 std::wstring wera_t_fmt;
589 std::wstring wyesexpr;
590 std::wstring wnoexpr;
593 messages_t messages_st_;
598 collate_t collate_st_;
610 return std::string (
str, 1,
str.rfind (
'\"') - 1);
void write_time(std::string dir_name)
std::pair< token_t, token_t > token_pair_t
std::pair< token_t, token_list_t > collate_entry_t
void write_collate(std::string dir_name)
std::list< collate_entry_t > collate_entry_list_t
void write_monetary(std::string dir_name)
void write_messages(std::string dir_name)
std::pair< token_t, token_list_t > collate_elem_t
void write_codecvt(std::string dir_name)
friend struct collate_info_t
void write_numeric(std::string dir_name)
std::list< token_t > token_list_t
void write_ctype(std::string dir_name)
std::string strip_quotes(const std::string &str)
collate_entry_list_t entries