handle_copy (ldfile, charmap, repertoire, tok_lc_time, LC_TIME, "LC_TIME", ignore_content);
handle_copy (ldfile, charmap, repertoire, result, tok_lc_time, LC_TIME, "LC_TIME", ignore_content);
time_read (struct linereader *ldfile, struct localedef_t *result,	   struct charmap_t *charmap, const char *repertoire_name,	   int ignore_content){  struct repertoire_t *repertoire = NULL;  struct locale_time_t *time;  struct token *now;  enum token_t nowtok;  size_t cnt;  /* Get the repertoire we have to use.  */  if (repertoire_name != NULL)    repertoire = repertoire_read (repertoire_name);  /* The rest of the line containing `LC_TIME' must be free.  */  lr_ignore_rest (ldfile, 1);  do    {      now = lr_token (ldfile, charmap, NULL);      nowtok = now->tok;    }  while (nowtok == tok_eol);  /* If we see `copy' now we are almost done.  */  if (nowtok == tok_copy)    {      handle_copy (ldfile, charmap, repertoire, tok_lc_time, LC_TIME,		   "LC_TIME", ignore_content);      return;    }  /* Prepare the data structures.  */  time_startup (ldfile, result, ignore_content);  time = result->categories[LC_TIME].time;  while (1)    {      /* Of course we don't proceed beyond the end of file.  */      if (nowtok == tok_eof)	break;      /* Ingore empty lines.  */      if (nowtok == tok_eol)	{	  now = lr_token (ldfile, charmap, NULL);	  nowtok = now->tok;	  continue;	}      switch (nowtok)	{#define STRARR_ELEM(cat, min, max) \	case tok_##cat:							      \	  for (cnt = 0; cnt < max; ++cnt)				      \	    {								      \	      now = lr_token (ldfile, charmap, repertoire);		      \	      if (now->tok == tok_eol)					      \		{							      \		  if (cnt < min)					      \		    lr_error (ldfile, _("%s: too few values for field `%s'"), \			      "LC_TIME", #cat);				      \		  if (!ignore_content)					      \		    do							      \		      {							      \			time->cat[cnt] = "";				      \			time->w##cat[cnt] = empty_wstr;			      \		      }							      \		    while (++cnt < max);				      \		  break;						      \		}							      \	      else if (now->tok != tok_string)				      \		goto err_label;						      \	      else if (!ignore_content && (now->val.str.startmb == NULL	      \					   || now->val.str.startwc == NULL))  \		{							      \		  lr_error (ldfile, _("%s: unknown character in field `%s'"), \			    "LC_TIME", #cat);				      \		  time->cat[cnt] = "";					      \		  time->w##cat[cnt] = empty_wstr;			      \		}							      \	      else if (!ignore_content)					      \		{							      \		  time->cat[cnt] = now->val.str.startmb;		      \		  time->w##cat[cnt] = now->val.str.startwc;		      \		}							      \									      \	      /* Match the semicolon.  */				      \	      now = lr_token (ldfile, charmap, NULL);			      \	      if (now->tok != tok_semicolon && now->tok != tok_eol)	      \		break;							      \	    }								      \	  if (now->tok != tok_eol)					      \	    {								      \	      while (!ignore_content && cnt < min)			      \		{							      \		  time->cat[cnt] = "";					      \		  time->w##cat[cnt++] = empty_wstr;			      \		}							      \	      								      \	      if (now->tok == tok_semicolon)				      \		{							      \		  now = lr_token (ldfile, charmap, NULL);		      \		  if (now->tok == tok_eol)				      \		    lr_error (ldfile, _("extra trailing semicolon"));	      \		  else if (now->tok == tok_string)			      \		    {							      \		      lr_error (ldfile, _("\%s: too many values for field `%s'"),					      \				"LC_TIME", #cat);			      \		      lr_ignore_rest (ldfile, 0);			      \		    }							      \		  else							      \		    goto err_label;					      \		}							      \	      else							      \		goto err_label;						      \	    }								      \	  time->cat##_defined = 1;					      \	  break	  STRARR_ELEM (abday, 7, 7);	  STRARR_ELEM (day, 7, 7);	  STRARR_ELEM (abmon, 12, 12);	  STRARR_ELEM (mon, 12, 12);	  STRARR_ELEM (am_pm, 2, 2);	  STRARR_ELEM (alt_digits, 0, 100);	case tok_era:	  do	    {	      now = lr_token (ldfile, charmap, NULL);	      if (now->tok != tok_string)		goto err_label;	      if (!ignore_content && (now->val.str.startmb == NULL				      || now->val.str.startwc == NULL))		{		  lr_error (ldfile, _("%s: unknown character in field `%s'"),			    "LC_TIME", "era");		  lr_ignore_rest (ldfile, 0);		  break;		}	      if (!ignore_content)		{		  time->era = xrealloc (time->era,					(time->num_era + 1) * sizeof (char *));		  time->era[time->num_era] = now->val.str.startmb;		  time->wera = xrealloc (time->wera,					 (time->num_era + 1)					 * sizeof (char *));		  time->wera[time->num_era++] = now->val.str.startwc;		}	      now = lr_token (ldfile, charmap, NULL);	      if (now->tok != tok_eof && now->tok != tok_semicolon)		goto err_label;	    }	  while (now->tok == tok_semicolon);	  break;#define STR_ELEM(cat) \	case tok_##cat:							      \	  now = lr_token (ldfile, charmap, NULL);			      \	  if (now->tok != tok_string)					      \	    goto err_label;						      \	  else if (time->cat != NULL)					      \	    lr_error (ldfile, _("\%s: field `%s' declared more than once"), "LC_TIME", #cat);		      \	  else if (!ignore_content && (now->val.str.startmb == NULL	      \				       || now->val.str.startwc == NULL))      \	    {								      \	      lr_error (ldfile, _("%s: unknown character in field `%s'"),     \			"LC_TIME", #cat);				      \	      time->cat = "";						      \	      time->w##cat = empty_wstr;				      \	    }								      \	  else if (!ignore_content)					      \	    {								      \	      time->cat = now->val.str.startmb;				      \	      time->w##cat = now->val.str.startwc;			      \	    }								      \	  break	  STR_ELEM (d_t_fmt);	  STR_ELEM (d_fmt);	  STR_ELEM (t_fmt);	  STR_ELEM (t_fmt_ampm);	  STR_ELEM (era_year);	  STR_ELEM (era_d_t_fmt);	  STR_ELEM (era_d_fmt);	  STR_ELEM (era_t_fmt);	  STR_ELEM (timezone);#define INT_ELEM(cat) \	case tok_##cat:							      \	  now = lr_token (ldfile, charmap, NULL);			      \	  if (now->tok != tok_number)					      \	    goto err_label;						      \	  else if (time->cat != 0)					      \	    lr_error (ldfile, _("%s: field `%s' declared more than once"),    \		      "LC_TIME", #cat);					      \	  else if (!ignore_content)					      \	    time->cat = now->val.num;					      \	  break	  INT_ELEM (first_weekday);	  INT_ELEM (first_workday);	  INT_ELEM (cal_direction);	case tok_week:	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok != tok_number)	    goto err_label;	  time->week_ndays = now->val.num;	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok != tok_semicolon)	    goto err_label;	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok != tok_number)	    goto err_label;	  time->week_1stday = now->val.num;	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok != tok_semicolon)	    goto err_label;	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok != tok_number)	    goto err_label;	  time->week_1stweek = now->val.num;	  lr_ignore_rest (ldfile,  1);	  break;	case tok_end:	  /* Next we assume `LC_TIME'.  */	  now = lr_token (ldfile, charmap, NULL);	  if (now->tok == tok_eof)	    break;	  if (now->tok == tok_eol)	    lr_error (ldfile, _("%s: incomplete `END' line"), "LC_TIME");	  else if (now->tok != tok_lc_time)	    lr_error (ldfile, _("\%1$s: definition does not end with `END %1$s'"), "LC_TIME");	  lr_ignore_rest (ldfile, now->tok == tok_lc_time);	  return;	default:	err_label:	  SYNTAX_ERROR (_("%s: syntax error"), "LC_TIME");	}      /* Prepare for the next round.  */      now = lr_token (ldfile, charmap, NULL);      nowtok = now->tok;    }  /* When we come here we reached the end of the file.  */  lr_error (ldfile, _("%s: premature end of file"), "LC_TIME");}