DEFINE command can now be parsed.
[pspp] / src / language / lexer / lexer.c
1 /* PSPP - a program for statistical analysis.
2    Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011, 2013, 2016 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #include <config.h>
18
19 #include "language/lexer/lexer.h"
20
21 #include <errno.h>
22 #include <fcntl.h>
23 #include <limits.h>
24 #include <math.h>
25 #include <stdarg.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include <unictype.h>
29 #include <unistd.h>
30 #include <unistr.h>
31 #include <uniwidth.h>
32
33 #include "language/command.h"
34 #include "language/lexer/scan.h"
35 #include "language/lexer/segment.h"
36 #include "language/lexer/token.h"
37 #include "libpspp/assertion.h"
38 #include "libpspp/cast.h"
39 #include "libpspp/deque.h"
40 #include "libpspp/i18n.h"
41 #include "libpspp/ll.h"
42 #include "libpspp/message.h"
43 #include "libpspp/misc.h"
44 #include "libpspp/str.h"
45 #include "libpspp/u8-istream.h"
46 #include "output/journal.h"
47 #include "output/output-item.h"
48
49 #include "gl/c-ctype.h"
50 #include "gl/minmax.h"
51 #include "gl/xalloc.h"
52 #include "gl/xmemdup0.h"
53
54 #include "gettext.h"
55 #define _(msgid) gettext (msgid)
56 #define N_(msgid) msgid
57
58 /* A token within a lex_source. */
59 struct lex_token
60   {
61     /* The regular token information. */
62     struct token token;
63
64     /* Location of token in terms of the lex_source's buffer.
65        src->tail <= line_pos <= token_pos <= src->head. */
66     size_t token_pos;           /* Start of token. */
67     size_t token_len;           /* Length of source for token in bytes. */
68     size_t line_pos;            /* Start of line containing token_pos. */
69     int first_line;             /* Line number at token_pos. */
70   };
71
72 /* A source of tokens, corresponding to a syntax file.
73
74    This is conceptually a lex_reader wrapped with everything needed to convert
75    its UTF-8 bytes into tokens. */
76 struct lex_source
77   {
78     struct ll ll;               /* In lexer's list of sources. */
79     struct lex_reader *reader;
80     struct segmenter segmenter;
81     bool eof;                   /* True if T_STOP was read from 'reader'. */
82
83     /* Buffer of UTF-8 bytes. */
84     char *buffer;
85     size_t allocated;           /* Number of bytes allocated. */
86     size_t tail;                /* &buffer[0] offset into UTF-8 source. */
87     size_t head;                /* &buffer[head - tail] offset into source. */
88
89     /* Positions in source file, tail <= pos <= head for each member here. */
90     size_t journal_pos;         /* First byte not yet output to journal. */
91     size_t seg_pos;             /* First byte not yet scanned as token. */
92     size_t line_pos;            /* First byte of line containing seg_pos. */
93
94     int n_newlines;             /* Number of new-lines up to seg_pos. */
95     bool suppress_next_newline;
96
97     /* Tokens. */
98     struct deque deque;         /* Indexes into 'tokens'. */
99     struct lex_token *tokens;   /* Lookahead tokens for parser. */
100   };
101
102 static struct lex_source *lex_source_create (struct lex_reader *);
103 static void lex_source_destroy (struct lex_source *);
104
105 /* Lexer. */
106 struct lexer
107   {
108     struct ll_list sources;     /* Contains "struct lex_source"s. */
109   };
110
111 static struct lex_source *lex_source__ (const struct lexer *);
112 static const struct lex_token *lex_next__ (const struct lexer *, int n);
113 static void lex_source_push_endcmd__ (struct lex_source *);
114
115 static void lex_source_pop__ (struct lex_source *);
116 static bool lex_source_get__ (const struct lex_source *);
117 static void lex_source_error_valist (struct lex_source *, int n0, int n1,
118                                      const char *format, va_list)
119    PRINTF_FORMAT (4, 0);
120 static const struct lex_token *lex_source_next__ (const struct lex_source *,
121                                                   int n);
122 \f
123 /* Initializes READER with the specified CLASS and otherwise some reasonable
124    defaults.  The caller should fill in the others members as desired. */
125 void
126 lex_reader_init (struct lex_reader *reader,
127                  const struct lex_reader_class *class)
128 {
129   reader->class = class;
130   reader->syntax = SEG_MODE_AUTO;
131   reader->error = LEX_ERROR_CONTINUE;
132   reader->file_name = NULL;
133   reader->encoding = NULL;
134   reader->line_number = 0;
135   reader->eof = false;
136 }
137
138 /* Frees any file name already in READER and replaces it by a copy of
139    FILE_NAME, or if FILE_NAME is null then clears any existing name. */
140 void
141 lex_reader_set_file_name (struct lex_reader *reader, const char *file_name)
142 {
143   free (reader->file_name);
144   reader->file_name = xstrdup_if_nonnull (file_name);
145 }
146 \f
147 /* Creates and returns a new lexer. */
148 struct lexer *
149 lex_create (void)
150 {
151   struct lexer *lexer = xzalloc (sizeof *lexer);
152   ll_init (&lexer->sources);
153   return lexer;
154 }
155
156 /* Destroys LEXER. */
157 void
158 lex_destroy (struct lexer *lexer)
159 {
160   if (lexer != NULL)
161     {
162       struct lex_source *source, *next;
163
164       ll_for_each_safe (source, next, struct lex_source, ll, &lexer->sources)
165         lex_source_destroy (source);
166       free (lexer);
167     }
168 }
169
170 /* Inserts READER into LEXER so that the next token read by LEXER comes from
171    READER.  Before the caller, LEXER must either be empty or at a T_ENDCMD
172    token. */
173 void
174 lex_include (struct lexer *lexer, struct lex_reader *reader)
175 {
176   assert (ll_is_empty (&lexer->sources) || lex_token (lexer) == T_ENDCMD);
177   ll_push_head (&lexer->sources, &lex_source_create (reader)->ll);
178 }
179
180 /* Appends READER to LEXER, so that it will be read after all other current
181    readers have already been read. */
182 void
183 lex_append (struct lexer *lexer, struct lex_reader *reader)
184 {
185   ll_push_tail (&lexer->sources, &lex_source_create (reader)->ll);
186 }
187 \f
188 /* Advancing. */
189
190 static struct lex_token *
191 lex_push_token__ (struct lex_source *src)
192 {
193   struct lex_token *token;
194
195   if (deque_is_full (&src->deque))
196     src->tokens = deque_expand (&src->deque, src->tokens, sizeof *src->tokens);
197
198   token = &src->tokens[deque_push_front (&src->deque)];
199   token->token = (struct token) { .type = T_STOP };
200   return token;
201 }
202
203 static void
204 lex_source_pop__ (struct lex_source *src)
205 {
206   token_uninit (&src->tokens[deque_pop_back (&src->deque)].token);
207 }
208
209 static void
210 lex_source_pop_front (struct lex_source *src)
211 {
212   token_uninit (&src->tokens[deque_pop_front (&src->deque)].token);
213 }
214
215 /* Advances LEXER to the next token, consuming the current token. */
216 void
217 lex_get (struct lexer *lexer)
218 {
219   struct lex_source *src;
220
221   src = lex_source__ (lexer);
222   if (src == NULL)
223     return;
224
225   if (!deque_is_empty (&src->deque))
226     lex_source_pop__ (src);
227
228   while (deque_is_empty (&src->deque))
229     if (!lex_source_get__ (src))
230       {
231         lex_source_destroy (src);
232         src = lex_source__ (lexer);
233         if (src == NULL)
234           return;
235       }
236 }
237 \f
238 /* Issuing errors. */
239
240 /* Prints a syntax error message containing the current token and
241    given message MESSAGE (if non-null). */
242 void
243 lex_error (struct lexer *lexer, const char *format, ...)
244 {
245   va_list args;
246
247   va_start (args, format);
248   lex_next_error_valist (lexer, 0, 0, format, args);
249   va_end (args);
250 }
251
252 /* Prints a syntax error message containing the current token and
253    given message MESSAGE (if non-null). */
254 void
255 lex_error_valist (struct lexer *lexer, const char *format, va_list args)
256 {
257   lex_next_error_valist (lexer, 0, 0, format, args);
258 }
259
260 /* Prints a syntax error message containing the current token and
261    given message MESSAGE (if non-null). */
262 void
263 lex_next_error (struct lexer *lexer, int n0, int n1, const char *format, ...)
264 {
265   va_list args;
266
267   va_start (args, format);
268   lex_next_error_valist (lexer, n0, n1, format, args);
269   va_end (args);
270 }
271
272 /* Prints a syntax error message saying that one of the strings provided as
273    varargs, up to the first NULL, is expected. */
274 void
275 (lex_error_expecting) (struct lexer *lexer, ...)
276 {
277   va_list args;
278
279   va_start (args, lexer);
280   lex_error_expecting_valist (lexer, args);
281   va_end (args);
282 }
283
284 /* Prints a syntax error message saying that one of the options provided in
285    ARGS, up to the first NULL, is expected. */
286 void
287 lex_error_expecting_valist (struct lexer *lexer, va_list args)
288 {
289   enum { MAX_OPTIONS = 9 };
290   const char *options[MAX_OPTIONS];
291   int n = 0;
292   while (n < MAX_OPTIONS)
293     {
294       const char *option = va_arg (args, const char *);
295       if (!option)
296         break;
297
298       options[n++] = option;
299     }
300   lex_error_expecting_array (lexer, options, n);
301 }
302
303 void
304 lex_error_expecting_array (struct lexer *lexer, const char **options, size_t n)
305 {
306   switch (n)
307     {
308     case 0:
309       lex_error (lexer, NULL);
310       break;
311
312     case 1:
313       lex_error (lexer, _("expecting %s"), options[0]);
314       break;
315
316     case 2:
317       lex_error (lexer, _("expecting %s or %s"), options[0], options[1]);
318       break;
319
320     case 3:
321       lex_error (lexer, _("expecting %s, %s, or %s"), options[0], options[1],
322                  options[2]);
323       break;
324
325     case 4:
326       lex_error (lexer, _("expecting %s, %s, %s, or %s"),
327                  options[0], options[1], options[2], options[3]);
328       break;
329
330     case 5:
331       lex_error (lexer, _("expecting %s, %s, %s, %s, or %s"),
332                  options[0], options[1], options[2], options[3], options[4]);
333       break;
334
335     case 6:
336       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, or %s"),
337                  options[0], options[1], options[2], options[3], options[4],
338                  options[5]);
339       break;
340
341     case 7:
342       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, %s, or %s"),
343                  options[0], options[1], options[2], options[3], options[4],
344                  options[5], options[6]);
345       break;
346
347     case 8:
348       lex_error (lexer, _("expecting %s, %s, %s, %s, %s, %s, %s, or %s"),
349                  options[0], options[1], options[2], options[3], options[4],
350                  options[5], options[6], options[7]);
351       break;
352
353     default:
354       lex_error (lexer, NULL);
355     }
356 }
357
358 /* Reports an error to the effect that subcommand SBC may only be specified
359    once.
360
361    This function does not take a lexer as an argument or use lex_error(),
362    because the result would ordinarily just be redundant: "Syntax error at
363    SUBCOMMAND: Subcommand SUBCOMMAND may only be specified once.", which does
364    not help the user find the error. */
365 void
366 lex_sbc_only_once (const char *sbc)
367 {
368   msg (SE, _("Subcommand %s may only be specified once."), sbc);
369 }
370
371 /* Reports an error to the effect that subcommand SBC is missing.
372
373    This function does not take a lexer as an argument or use lex_error(),
374    because a missing subcommand can normally be detected only after the whole
375    command has been parsed, and so lex_error() would always report "Syntax
376    error at end of command", which does not help the user find the error. */
377 void
378 lex_sbc_missing (const char *sbc)
379 {
380   msg (SE, _("Required subcommand %s was not specified."), sbc);
381 }
382
383 /* Reports an error to the effect that specification SPEC may only be specified
384    once within subcommand SBC. */
385 void
386 lex_spec_only_once (struct lexer *lexer, const char *sbc, const char *spec)
387 {
388   lex_error (lexer, _("%s may only be specified once within subcommand %s"),
389              spec, sbc);
390 }
391
392 /* Reports an error to the effect that specification SPEC is missing within
393    subcommand SBC. */
394 void
395 lex_spec_missing (struct lexer *lexer, const char *sbc, const char *spec)
396 {
397   lex_error (lexer, _("Required %s specification missing from %s subcommand"),
398              sbc, spec);
399 }
400
401 /* Prints a syntax error message containing the current token and
402    given message MESSAGE (if non-null). */
403 void
404 lex_next_error_valist (struct lexer *lexer, int n0, int n1,
405                        const char *format, va_list args)
406 {
407   struct lex_source *src = lex_source__ (lexer);
408
409   if (src != NULL)
410     lex_source_error_valist (src, n0, n1, format, args);
411   else
412     {
413       struct string s;
414
415       ds_init_empty (&s);
416       ds_put_format (&s, _("Syntax error at end of input"));
417       if (format != NULL)
418         {
419           ds_put_cstr (&s, ": ");
420           ds_put_vformat (&s, format, args);
421         }
422       ds_put_byte (&s, '.');
423       msg (SE, "%s", ds_cstr (&s));
424       ds_destroy (&s);
425     }
426 }
427
428 /* Checks that we're at end of command.
429    If so, returns a successful command completion code.
430    If not, flags a syntax error and returns an error command
431    completion code. */
432 int
433 lex_end_of_command (struct lexer *lexer)
434 {
435   if (lex_token (lexer) != T_ENDCMD && lex_token (lexer) != T_STOP)
436     {
437       lex_error (lexer, _("expecting end of command"));
438       return CMD_FAILURE;
439     }
440   else
441     return CMD_SUCCESS;
442 }
443 \f
444 /* Token testing functions. */
445
446 /* Returns true if the current token is a number. */
447 bool
448 lex_is_number (const struct lexer *lexer)
449 {
450   return lex_next_is_number (lexer, 0);
451 }
452
453 /* Returns true if the current token is a string. */
454 bool
455 lex_is_string (const struct lexer *lexer)
456 {
457   return lex_next_is_string (lexer, 0);
458 }
459
460 /* Returns the value of the current token, which must be a
461    floating point number. */
462 double
463 lex_number (const struct lexer *lexer)
464 {
465   return lex_next_number (lexer, 0);
466 }
467
468 /* Returns true iff the current token is an integer. */
469 bool
470 lex_is_integer (const struct lexer *lexer)
471 {
472   return lex_next_is_integer (lexer, 0);
473 }
474
475 /* Returns the value of the current token, which must be an
476    integer. */
477 long
478 lex_integer (const struct lexer *lexer)
479 {
480   return lex_next_integer (lexer, 0);
481 }
482 \f
483 /* Token testing functions with lookahead.
484
485    A value of 0 for N as an argument to any of these functions refers to the
486    current token.  Lookahead is limited to the current command.  Any N greater
487    than the number of tokens remaining in the current command will be treated
488    as referring to a T_ENDCMD token. */
489
490 /* Returns true if the token N ahead of the current token is a number. */
491 bool
492 lex_next_is_number (const struct lexer *lexer, int n)
493 {
494   enum token_type next_token = lex_next_token (lexer, n);
495   return next_token == T_POS_NUM || next_token == T_NEG_NUM;
496 }
497
498 /* Returns true if the token N ahead of the current token is a string. */
499 bool
500 lex_next_is_string (const struct lexer *lexer, int n)
501 {
502   return lex_next_token (lexer, n) == T_STRING;
503 }
504
505 /* Returns the value of the token N ahead of the current token, which must be a
506    floating point number. */
507 double
508 lex_next_number (const struct lexer *lexer, int n)
509 {
510   assert (lex_next_is_number (lexer, n));
511   return lex_next_tokval (lexer, n);
512 }
513
514 /* Returns true if the token N ahead of the current token is an integer. */
515 bool
516 lex_next_is_integer (const struct lexer *lexer, int n)
517 {
518   double value;
519
520   if (!lex_next_is_number (lexer, n))
521     return false;
522
523   value = lex_next_tokval (lexer, n);
524   return value > LONG_MIN && value <= LONG_MAX && floor (value) == value;
525 }
526
527 /* Returns the value of the token N ahead of the current token, which must be
528    an integer. */
529 long
530 lex_next_integer (const struct lexer *lexer, int n)
531 {
532   assert (lex_next_is_integer (lexer, n));
533   return lex_next_tokval (lexer, n);
534 }
535 \f
536 /* Token matching functions. */
537
538 /* If the current token has the specified TYPE, skips it and returns true.
539    Otherwise, returns false. */
540 bool
541 lex_match (struct lexer *lexer, enum token_type type)
542 {
543   if (lex_token (lexer) == type)
544     {
545       lex_get (lexer);
546       return true;
547     }
548   else
549     return false;
550 }
551
552 /* If the current token matches IDENTIFIER, skips it and returns true.
553    IDENTIFIER may be abbreviated to its first three letters.  Otherwise,
554    returns false.
555
556    IDENTIFIER must be an ASCII string. */
557 bool
558 lex_match_id (struct lexer *lexer, const char *identifier)
559 {
560   return lex_match_id_n (lexer, identifier, 3);
561 }
562
563 /* If the current token is IDENTIFIER, skips it and returns true.  IDENTIFIER
564    may be abbreviated to its first N letters.  Otherwise, returns false.
565
566    IDENTIFIER must be an ASCII string. */
567 bool
568 lex_match_id_n (struct lexer *lexer, const char *identifier, size_t n)
569 {
570   if (lex_token (lexer) == T_ID
571       && lex_id_match_n (ss_cstr (identifier), lex_tokss (lexer), n))
572     {
573       lex_get (lexer);
574       return true;
575     }
576   else
577     return false;
578 }
579
580 /* If the current token is integer X, skips it and returns true.  Otherwise,
581    returns false. */
582 bool
583 lex_match_int (struct lexer *lexer, int x)
584 {
585   if (lex_is_integer (lexer) && lex_integer (lexer) == x)
586     {
587       lex_get (lexer);
588       return true;
589     }
590   else
591     return false;
592 }
593 \f
594 /* Forced matches. */
595
596 /* If this token is IDENTIFIER, skips it and returns true.  IDENTIFIER may be
597    abbreviated to its first 3 letters.  Otherwise, reports an error and returns
598    false.
599
600    IDENTIFIER must be an ASCII string. */
601 bool
602 lex_force_match_id (struct lexer *lexer, const char *identifier)
603 {
604   if (lex_match_id (lexer, identifier))
605     return true;
606   else
607     {
608       lex_error_expecting (lexer, identifier);
609       return false;
610     }
611 }
612
613 /* If the current token has the specified TYPE, skips it and returns true.
614    Otherwise, reports an error and returns false. */
615 bool
616 lex_force_match (struct lexer *lexer, enum token_type type)
617 {
618   if (lex_token (lexer) == type)
619     {
620       lex_get (lexer);
621       return true;
622     }
623   else
624     {
625       const char *type_string = token_type_to_string (type);
626       if (type_string)
627         {
628           char *s = xasprintf ("`%s'", type_string);
629           lex_error_expecting (lexer, s);
630           free (s);
631         }
632       else
633         lex_error_expecting (lexer, token_type_to_name (type));
634
635       return false;
636     }
637 }
638
639 /* If the current token is a string, does nothing and returns true.
640    Otherwise, reports an error and returns false. */
641 bool
642 lex_force_string (struct lexer *lexer)
643 {
644   if (lex_is_string (lexer))
645     return true;
646   else
647     {
648       lex_error (lexer, _("expecting string"));
649       return false;
650     }
651 }
652
653 /* If the current token is a string or an identifier, does nothing and returns
654    true.  Otherwise, reports an error and returns false.
655
656    This is meant for use in syntactic situations where we want to encourage the
657    user to supply a quoted string, but for compatibility we also accept
658    identifiers.  (One example of such a situation is file names.)  Therefore,
659    the error message issued when the current token is wrong only says that a
660    string is expected and doesn't mention that an identifier would also be
661    accepted. */
662 bool
663 lex_force_string_or_id (struct lexer *lexer)
664 {
665   return lex_token (lexer) == T_ID || lex_force_string (lexer);
666 }
667
668 /* If the current token is an integer, does nothing and returns true.
669    Otherwise, reports an error and returns false. */
670 bool
671 lex_force_int (struct lexer *lexer)
672 {
673   if (lex_is_integer (lexer))
674     return true;
675   else
676     {
677       lex_error (lexer, _("expecting integer"));
678       return false;
679     }
680 }
681
682 /* If the current token is an integer in the range MIN...MAX (inclusive), does
683    nothing and returns true.  Otherwise, reports an error and returns false.
684    If NAME is nonnull, then it is used in the error message. */
685 bool
686 lex_force_int_range (struct lexer *lexer, const char *name, long min, long max)
687 {
688   bool is_integer = lex_is_integer (lexer);
689   bool too_small = is_integer && lex_integer (lexer) < min;
690   bool too_big = is_integer && lex_integer (lexer) > max;
691   if (is_integer && !too_small && !too_big)
692     return true;
693
694   if (min > max)
695     {
696       /* Weird, maybe a bug in the caller.  Just report that we needed an
697          integer. */
698       if (name)
699         lex_error (lexer, _("Integer expected for %s."), name);
700       else
701         lex_error (lexer, _("Integer expected."));
702     }
703   else if (min == max)
704     {
705       if (name)
706         lex_error (lexer, _("Expected %ld for %s."), min, name);
707       else
708         lex_error (lexer, _("Expected %ld."), min);
709     }
710   else if (min + 1 == max)
711     {
712       if (name)
713         lex_error (lexer, _("Expected %ld or %ld for %s."), min, min + 1, name);
714       else
715         lex_error (lexer, _("Expected %ld or %ld."), min, min + 1);
716     }
717   else
718     {
719       bool report_lower_bound = (min > INT_MIN / 2) || too_small;
720       bool report_upper_bound = (max < INT_MAX / 2) || too_big;
721
722       if (report_lower_bound && report_upper_bound)
723         {
724           if (name)
725             lex_error (lexer,
726                        _("Expected integer between %ld and %ld for %s."),
727                        min, max, name);
728           else
729             lex_error (lexer, _("Expected integer between %ld and %ld."),
730                        min, max);
731         }
732       else if (report_lower_bound)
733         {
734           if (min == 0)
735             {
736               if (name)
737                 lex_error (lexer, _("Expected non-negative integer for %s."),
738                            name);
739               else
740                 lex_error (lexer, _("Expected non-negative integer."));
741             }
742           else if (min == 1)
743             {
744               if (name)
745                 lex_error (lexer, _("Expected positive integer for %s."),
746                            name);
747               else
748                 lex_error (lexer, _("Expected positive integer."));
749             }
750         }
751       else if (report_upper_bound)
752         {
753           if (name)
754             lex_error (lexer,
755                        _("Expected integer less than or equal to %ld for %s."),
756                        max, name);
757           else
758             lex_error (lexer, _("Expected integer less than or equal to %ld."),
759                        max);
760         }
761       else
762         {
763           if (name)
764             lex_error (lexer, _("Integer expected for %s."), name);
765           else
766             lex_error (lexer, _("Integer expected."));
767         }
768     }
769   return false;
770 }
771
772 /* If the current token is a number, does nothing and returns true.
773    Otherwise, reports an error and returns false. */
774 bool
775 lex_force_num (struct lexer *lexer)
776 {
777   if (lex_is_number (lexer))
778     return true;
779
780   lex_error (lexer, _("expecting number"));
781   return false;
782 }
783
784 /* If the current token is an identifier, does nothing and returns true.
785    Otherwise, reports an error and returns false. */
786 bool
787 lex_force_id (struct lexer *lexer)
788 {
789   if (lex_token (lexer) == T_ID)
790     return true;
791
792   lex_error (lexer, _("expecting identifier"));
793   return false;
794 }
795 \f
796 /* Token accessors. */
797
798 /* Returns the type of LEXER's current token. */
799 enum token_type
800 lex_token (const struct lexer *lexer)
801 {
802   return lex_next_token (lexer, 0);
803 }
804
805 /* Returns the number in LEXER's current token.
806
807    Only T_NEG_NUM and T_POS_NUM tokens have meaningful values.  For other
808    tokens this function will always return zero. */
809 double
810 lex_tokval (const struct lexer *lexer)
811 {
812   return lex_next_tokval (lexer, 0);
813 }
814
815 /* Returns the null-terminated string in LEXER's current token, UTF-8 encoded.
816
817    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
818    this functions this function will always return NULL.
819
820    The UTF-8 encoding of the returned string is correct for variable names and
821    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
822    data_in() to use it in a "union value".  */
823 const char *
824 lex_tokcstr (const struct lexer *lexer)
825 {
826   return lex_next_tokcstr (lexer, 0);
827 }
828
829 /* Returns the string in LEXER's current token, UTF-8 encoded.  The string is
830    null-terminated (but the null terminator is not included in the returned
831    substring's 'length').
832
833    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
834    this functions this function will always return NULL.
835
836    The UTF-8 encoding of the returned string is correct for variable names and
837    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
838    data_in() to use it in a "union value".  */
839 struct substring
840 lex_tokss (const struct lexer *lexer)
841 {
842   return lex_next_tokss (lexer, 0);
843 }
844 \f
845 /* Looking ahead.
846
847    A value of 0 for N as an argument to any of these functions refers to the
848    current token.  Lookahead is limited to the current command.  Any N greater
849    than the number of tokens remaining in the current command will be treated
850    as referring to a T_ENDCMD token. */
851
852 static const struct lex_token *
853 lex_next__ (const struct lexer *lexer_, int n)
854 {
855   struct lexer *lexer = CONST_CAST (struct lexer *, lexer_);
856   struct lex_source *src = lex_source__ (lexer);
857
858   if (src != NULL)
859     return lex_source_next__ (src, n);
860   else
861     {
862       static const struct lex_token stop_token = { .token = { .type = T_STOP } };
863       return &stop_token;
864     }
865 }
866
867 static const struct lex_token *
868 lex_source_next__ (const struct lex_source *src, int n)
869 {
870   while (deque_count (&src->deque) <= n)
871     {
872       if (!deque_is_empty (&src->deque))
873         {
874           struct lex_token *front;
875
876           front = &src->tokens[deque_front (&src->deque, 0)];
877           if (front->token.type == T_STOP || front->token.type == T_ENDCMD)
878             return front;
879         }
880
881       lex_source_get__ (src);
882     }
883
884   return &src->tokens[deque_back (&src->deque, n)];
885 }
886
887 /* Returns the "struct token" of the token N after the current one in LEXER.
888    The returned pointer can be invalidated by pretty much any succeeding call
889    into the lexer, although the string pointer within the returned token is
890    only invalidated by consuming the token (e.g. with lex_get()). */
891 const struct token *
892 lex_next (const struct lexer *lexer, int n)
893 {
894   return &lex_next__ (lexer, n)->token;
895 }
896
897 /* Returns the type of the token N after the current one in LEXER. */
898 enum token_type
899 lex_next_token (const struct lexer *lexer, int n)
900 {
901   return lex_next (lexer, n)->type;
902 }
903
904 /* Returns the number in the tokn N after the current one in LEXER.
905
906    Only T_NEG_NUM and T_POS_NUM tokens have meaningful values.  For other
907    tokens this function will always return zero. */
908 double
909 lex_next_tokval (const struct lexer *lexer, int n)
910 {
911   const struct token *token = lex_next (lexer, n);
912   return token->number;
913 }
914
915 /* Returns the null-terminated string in the token N after the current one, in
916    UTF-8 encoding.
917
918    Only T_ID and T_STRING tokens have meaningful strings.  For other tokens
919    this functions this function will always return NULL.
920
921    The UTF-8 encoding of the returned string is correct for variable names and
922    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
923    data_in() to use it in a "union value".  */
924 const char *
925 lex_next_tokcstr (const struct lexer *lexer, int n)
926 {
927   return lex_next_tokss (lexer, n).string;
928 }
929
930 /* Returns the string in the token N after the current one, in UTF-8 encoding.
931    The string is null-terminated (but the null terminator is not included in
932    the returned substring's 'length').
933
934    Only T_ID, T_MACRO_ID, T_STRING tokens have meaningful strings.  For other
935    tokens this functions this function will always return NULL.
936
937    The UTF-8 encoding of the returned string is correct for variable names and
938    other identifiers.  Use filename_to_utf8() to use it as a filename.  Use
939    data_in() to use it in a "union value".  */
940 struct substring
941 lex_next_tokss (const struct lexer *lexer, int n)
942 {
943   return lex_next (lexer, n)->string;
944 }
945
946 static bool
947 lex_tokens_match (const struct token *actual, const struct token *expected)
948 {
949   if (actual->type != expected->type)
950     return false;
951
952   switch (actual->type)
953     {
954     case T_POS_NUM:
955     case T_NEG_NUM:
956       return actual->number == expected->number;
957
958     case T_ID:
959       return lex_id_match (expected->string, actual->string);
960
961     case T_STRING:
962       return (actual->string.length == expected->string.length
963               && !memcmp (actual->string.string, expected->string.string,
964                           actual->string.length));
965
966     default:
967       return true;
968     }
969 }
970
971 /* If LEXER is positioned at the sequence of tokens that may be parsed from S,
972    skips it and returns true.  Otherwise, returns false.
973
974    S may consist of an arbitrary sequence of tokens, e.g. "KRUSKAL-WALLIS",
975    "2SLS", or "END INPUT PROGRAM".  Identifiers may be abbreviated to their
976    first three letters. */
977 bool
978 lex_match_phrase (struct lexer *lexer, const char *s)
979 {
980   struct string_lexer slex;
981   struct token token;
982   int i;
983
984   i = 0;
985   string_lexer_init (&slex, s, strlen (s), SEG_MODE_INTERACTIVE);
986   while (string_lexer_next (&slex, &token))
987     if (token.type != SCAN_SKIP)
988       {
989         bool match = lex_tokens_match (lex_next (lexer, i++), &token);
990         token_uninit (&token);
991         if (!match)
992           return false;
993       }
994
995   while (i-- > 0)
996     lex_get (lexer);
997   return true;
998 }
999
1000 static int
1001 lex_source_get_first_line_number (const struct lex_source *src, int n)
1002 {
1003   return lex_source_next__ (src, n)->first_line;
1004 }
1005
1006 static int
1007 count_newlines (char *s, size_t length)
1008 {
1009   int n_newlines = 0;
1010   char *newline;
1011
1012   while ((newline = memchr (s, '\n', length)) != NULL)
1013     {
1014       n_newlines++;
1015       length -= (newline + 1) - s;
1016       s = newline + 1;
1017     }
1018
1019   return n_newlines;
1020 }
1021
1022 static int
1023 lex_source_get_last_line_number (const struct lex_source *src, int n)
1024 {
1025   const struct lex_token *token = lex_source_next__ (src, n);
1026
1027   if (token->first_line == 0)
1028     return 0;
1029   else
1030     {
1031       char *token_str = &src->buffer[token->token_pos - src->tail];
1032       return token->first_line + count_newlines (token_str, token->token_len) + 1;
1033     }
1034 }
1035
1036 static int
1037 count_columns (const char *s_, size_t length)
1038 {
1039   const uint8_t *s = CHAR_CAST (const uint8_t *, s_);
1040   int columns;
1041   size_t ofs;
1042   int mblen;
1043
1044   columns = 0;
1045   for (ofs = 0; ofs < length; ofs += mblen)
1046     {
1047       ucs4_t uc;
1048
1049       mblen = u8_mbtouc (&uc, s + ofs, length - ofs);
1050       if (uc != '\t')
1051         {
1052           int width = uc_width (uc, "UTF-8");
1053           if (width > 0)
1054             columns += width;
1055         }
1056       else
1057         columns = ROUND_UP (columns + 1, 8);
1058     }
1059
1060   return columns + 1;
1061 }
1062
1063 static int
1064 lex_source_get_first_column (const struct lex_source *src, int n)
1065 {
1066   const struct lex_token *token = lex_source_next__ (src, n);
1067   return count_columns (&src->buffer[token->line_pos - src->tail],
1068                         token->token_pos - token->line_pos);
1069 }
1070
1071 static int
1072 lex_source_get_last_column (const struct lex_source *src, int n)
1073 {
1074   const struct lex_token *token = lex_source_next__ (src, n);
1075   char *start, *end, *newline;
1076
1077   start = &src->buffer[token->line_pos - src->tail];
1078   end = &src->buffer[(token->token_pos + token->token_len) - src->tail];
1079   newline = memrchr (start, '\n', end - start);
1080   if (newline != NULL)
1081     start = newline + 1;
1082   return count_columns (start, end - start);
1083 }
1084
1085 /* Returns the 1-based line number of the start of the syntax that represents
1086    the token N after the current one in LEXER.  Returns 0 for a T_STOP token or
1087    if the token is drawn from a source that does not have line numbers. */
1088 int
1089 lex_get_first_line_number (const struct lexer *lexer, int n)
1090 {
1091   const struct lex_source *src = lex_source__ (lexer);
1092   return src != NULL ? lex_source_get_first_line_number (src, n) : 0;
1093 }
1094
1095 /* Returns the 1-based line number of the end of the syntax that represents the
1096    token N after the current one in LEXER, plus 1.  Returns 0 for a T_STOP
1097    token or if the token is drawn from a source that does not have line
1098    numbers.
1099
1100    Most of the time, a single token is wholly within a single line of syntax,
1101    but there are two exceptions: a T_STRING token can be made up of multiple
1102    segments on adjacent lines connected with "+" punctuators, and a T_NEG_NUM
1103    token can consist of a "-" on one line followed by the number on the next.
1104  */
1105 int
1106 lex_get_last_line_number (const struct lexer *lexer, int n)
1107 {
1108   const struct lex_source *src = lex_source__ (lexer);
1109   return src != NULL ? lex_source_get_last_line_number (src, n) : 0;
1110 }
1111
1112 /* Returns the 1-based column number of the start of the syntax that represents
1113    the token N after the current one in LEXER.  Returns 0 for a T_STOP
1114    token.
1115
1116    Column numbers are measured according to the width of characters as shown in
1117    a typical fixed-width font, in which CJK characters have width 2 and
1118    combining characters have width 0.  */
1119 int
1120 lex_get_first_column (const struct lexer *lexer, int n)
1121 {
1122   const struct lex_source *src = lex_source__ (lexer);
1123   return src != NULL ? lex_source_get_first_column (src, n) : 0;
1124 }
1125
1126 /* Returns the 1-based column number of the end of the syntax that represents
1127    the token N after the current one in LEXER, plus 1.  Returns 0 for a T_STOP
1128    token.
1129
1130    Column numbers are measured according to the width of characters as shown in
1131    a typical fixed-width font, in which CJK characters have width 2 and
1132    combining characters have width 0.  */
1133 int
1134 lex_get_last_column (const struct lexer *lexer, int n)
1135 {
1136   const struct lex_source *src = lex_source__ (lexer);
1137   return src != NULL ? lex_source_get_last_column (src, n) : 0;
1138 }
1139
1140 /* Returns the name of the syntax file from which the current command is drawn.
1141    Returns NULL for a T_STOP token or if the command's source does not have
1142    line numbers.
1143
1144    There is no version of this function that takes an N argument because
1145    lookahead only works to the end of a command and any given command is always
1146    within a single syntax file. */
1147 const char *
1148 lex_get_file_name (const struct lexer *lexer)
1149 {
1150   struct lex_source *src = lex_source__ (lexer);
1151   return src == NULL ? NULL : src->reader->file_name;
1152 }
1153
1154 const char *
1155 lex_get_encoding (const struct lexer *lexer)
1156 {
1157   struct lex_source *src = lex_source__ (lexer);
1158   return src == NULL ? NULL : src->reader->encoding;
1159 }
1160
1161
1162 /* Returns the syntax mode for the syntax file from which the current drawn is
1163    drawn.  Returns SEG_MODE_AUTO for a T_STOP token or if the command's source
1164    does not have line numbers.
1165
1166    There is no version of this function that takes an N argument because
1167    lookahead only works to the end of a command and any given command is always
1168    within a single syntax file. */
1169 enum segmenter_mode
1170 lex_get_syntax_mode (const struct lexer *lexer)
1171 {
1172   struct lex_source *src = lex_source__ (lexer);
1173   return src == NULL ? SEG_MODE_AUTO : src->reader->syntax;
1174 }
1175
1176 /* Returns the error mode for the syntax file from which the current drawn is
1177    drawn.  Returns LEX_ERROR_TERMINAL for a T_STOP token or if the command's
1178    source does not have line numbers.
1179
1180    There is no version of this function that takes an N argument because
1181    lookahead only works to the end of a command and any given command is always
1182    within a single syntax file. */
1183 enum lex_error_mode
1184 lex_get_error_mode (const struct lexer *lexer)
1185 {
1186   struct lex_source *src = lex_source__ (lexer);
1187   return src == NULL ? LEX_ERROR_TERMINAL : src->reader->error;
1188 }
1189
1190 /* If the source that LEXER is currently reading has error mode
1191    LEX_ERROR_TERMINAL, discards all buffered input and tokens, so that the next
1192    token to be read comes directly from whatever is next read from the stream.
1193
1194    It makes sense to call this function after encountering an error in a
1195    command entered on the console, because usually the user would prefer not to
1196    have cascading errors. */
1197 void
1198 lex_interactive_reset (struct lexer *lexer)
1199 {
1200   struct lex_source *src = lex_source__ (lexer);
1201   if (src != NULL && src->reader->error == LEX_ERROR_TERMINAL)
1202     {
1203       src->head = src->tail = 0;
1204       src->journal_pos = src->seg_pos = src->line_pos = 0;
1205       src->n_newlines = 0;
1206       src->suppress_next_newline = false;
1207       segmenter_init (&src->segmenter, segmenter_get_mode (&src->segmenter));
1208       while (!deque_is_empty (&src->deque))
1209         lex_source_pop__ (src);
1210       lex_source_push_endcmd__ (src);
1211     }
1212 }
1213
1214 /* Advances past any tokens in LEXER up to a T_ENDCMD or T_STOP. */
1215 void
1216 lex_discard_rest_of_command (struct lexer *lexer)
1217 {
1218   while (lex_token (lexer) != T_STOP && lex_token (lexer) != T_ENDCMD)
1219     lex_get (lexer);
1220 }
1221
1222 /* Discards all lookahead tokens in LEXER, then discards all input sources
1223    until it encounters one with error mode LEX_ERROR_TERMINAL or until it
1224    runs out of input sources. */
1225 void
1226 lex_discard_noninteractive (struct lexer *lexer)
1227 {
1228   struct lex_source *src = lex_source__ (lexer);
1229
1230   if (src != NULL)
1231     {
1232       while (!deque_is_empty (&src->deque))
1233         lex_source_pop__ (src);
1234
1235       for (; src != NULL && src->reader->error != LEX_ERROR_TERMINAL;
1236            src = lex_source__ (lexer))
1237         lex_source_destroy (src);
1238     }
1239 }
1240 \f
1241 static size_t
1242 lex_source_max_tail__ (const struct lex_source *src)
1243 {
1244   const struct lex_token *token;
1245   size_t max_tail;
1246
1247   assert (src->seg_pos >= src->line_pos);
1248   max_tail = MIN (src->journal_pos, src->line_pos);
1249
1250   /* Use the oldest token also.  (We know that src->deque cannot be empty
1251      because we are in the process of adding a new token, which is already
1252      initialized enough to use here.) */
1253   token = &src->tokens[deque_back (&src->deque, 0)];
1254   assert (token->token_pos >= token->line_pos);
1255   max_tail = MIN (max_tail, token->line_pos);
1256
1257   return max_tail;
1258 }
1259
1260 static void
1261 lex_source_expand__ (struct lex_source *src)
1262 {
1263   if (src->head - src->tail >= src->allocated)
1264     {
1265       size_t max_tail = lex_source_max_tail__ (src);
1266       if (max_tail > src->tail)
1267         {
1268           /* Advance the tail, freeing up room at the head. */
1269           memmove (src->buffer, src->buffer + (max_tail - src->tail),
1270                    src->head - max_tail);
1271           src->tail = max_tail;
1272         }
1273       else
1274         {
1275           /* Buffer is completely full.  Expand it. */
1276           src->buffer = x2realloc (src->buffer, &src->allocated);
1277         }
1278     }
1279   else
1280     {
1281       /* There's space available at the head of the buffer.  Nothing to do. */
1282     }
1283 }
1284
1285 static void
1286 lex_source_read__ (struct lex_source *src)
1287 {
1288   do
1289     {
1290       lex_source_expand__ (src);
1291
1292       size_t head_ofs = src->head - src->tail;
1293       size_t space = src->allocated - head_ofs;
1294       enum prompt_style prompt = segmenter_get_prompt (&src->segmenter);
1295       size_t n = src->reader->class->read (src->reader, &src->buffer[head_ofs],
1296                                            space, prompt);
1297       assert (n <= space);
1298
1299       if (n == 0)
1300         {
1301           /* End of input. */
1302           src->reader->eof = true;
1303           lex_source_expand__ (src);
1304           return;
1305         }
1306
1307       src->head += n;
1308     }
1309   while (!memchr (&src->buffer[src->seg_pos - src->tail], '\n',
1310                   src->head - src->seg_pos));
1311 }
1312
1313 static struct lex_source *
1314 lex_source__ (const struct lexer *lexer)
1315 {
1316   return (ll_is_empty (&lexer->sources) ? NULL
1317           : ll_data (ll_head (&lexer->sources), struct lex_source, ll));
1318 }
1319
1320 static struct substring
1321 lex_source_get_syntax__ (const struct lex_source *src, int n0, int n1)
1322 {
1323   const struct lex_token *token0 = lex_source_next__ (src, n0);
1324   const struct lex_token *token1 = lex_source_next__ (src, MAX (n0, n1));
1325   size_t start = token0->token_pos;
1326   size_t end = token1->token_pos + token1->token_len;
1327
1328   return ss_buffer (&src->buffer[start - src->tail], end - start);
1329 }
1330
1331 static void
1332 lex_ellipsize__ (struct substring in, char *out, size_t out_size)
1333 {
1334   size_t out_maxlen;
1335   size_t out_len;
1336   int mblen;
1337
1338   assert (out_size >= 16);
1339   out_maxlen = out_size - 1;
1340   if (in.length > out_maxlen - 3)
1341     out_maxlen -= 3;
1342
1343   for (out_len = 0; out_len < in.length; out_len += mblen)
1344     {
1345       if (in.string[out_len] == '\n'
1346           || in.string[out_len] == '\0'
1347           || (in.string[out_len] == '\r'
1348               && out_len + 1 < in.length
1349               && in.string[out_len + 1] == '\n'))
1350         break;
1351
1352       mblen = u8_mblen (CHAR_CAST (const uint8_t *, in.string + out_len),
1353                         in.length - out_len);
1354
1355       if (mblen < 0)
1356         break;
1357
1358       if (out_len + mblen > out_maxlen)
1359         break;
1360     }
1361
1362   memcpy (out, in.string, out_len);
1363   strcpy (&out[out_len], out_len < in.length ? "..." : "");
1364 }
1365
1366 static void
1367 lex_source_error_valist (struct lex_source *src, int n0, int n1,
1368                          const char *format, va_list args)
1369 {
1370   const struct lex_token *token;
1371   struct string s;
1372
1373   ds_init_empty (&s);
1374
1375   token = lex_source_next__ (src, n0);
1376   if (token->token.type == T_ENDCMD)
1377     ds_put_cstr (&s, _("Syntax error at end of command"));
1378   else
1379     {
1380       struct substring syntax = lex_source_get_syntax__ (src, n0, n1);
1381       if (!ss_is_empty (syntax))
1382         {
1383           char syntax_cstr[64];
1384
1385           lex_ellipsize__ (syntax, syntax_cstr, sizeof syntax_cstr);
1386           ds_put_format (&s, _("Syntax error at `%s'"), syntax_cstr);
1387         }
1388       else
1389         ds_put_cstr (&s, _("Syntax error"));
1390     }
1391
1392   if (format)
1393     {
1394       ds_put_cstr (&s, ": ");
1395       ds_put_vformat (&s, format, args);
1396     }
1397   if (ds_last (&s) != '.')
1398     ds_put_byte (&s, '.');
1399
1400   struct msg m = {
1401     .category = MSG_C_SYNTAX,
1402     .severity = MSG_S_ERROR,
1403     .file_name = src->reader->file_name,
1404     .first_line = lex_source_get_first_line_number (src, n0),
1405     .last_line = lex_source_get_last_line_number (src, n1),
1406     .first_column = lex_source_get_first_column (src, n0),
1407     .last_column = lex_source_get_last_column (src, n1),
1408     .text = ds_steal_cstr (&s),
1409   };
1410   msg_emit (&m);
1411 }
1412
1413 static void PRINTF_FORMAT (2, 3)
1414 lex_get_error (struct lex_source *src, const char *format, ...)
1415 {
1416   va_list args;
1417   int n;
1418
1419   va_start (args, format);
1420
1421   n = deque_count (&src->deque) - 1;
1422   lex_source_error_valist (src, n, n, format, args);
1423   lex_source_pop_front (src);
1424
1425   va_end (args);
1426 }
1427
1428 /* Attempts to append an additional token into SRC's deque, reading more from
1429    the underlying lex_reader if necessary.  Returns true if successful, false
1430    if the deque already represents (a suffix of) the whole lex_reader's
1431    contents, */
1432 static bool
1433 lex_source_get__ (const struct lex_source *src_)
1434 {
1435   struct lex_source *src = CONST_CAST (struct lex_source *, src_);
1436   if (src->eof)
1437     return false;
1438
1439   /* State maintained while scanning tokens.  Usually we only need a single
1440      state, but scanner_push() can return SCAN_SAVE to indicate that the state
1441      needs to be saved and possibly restored later with SCAN_BACK. */
1442   struct state
1443     {
1444       struct segmenter segmenter;
1445       enum segment_type last_segment;
1446       int newlines;             /* Number of newlines encountered so far. */
1447       /* Maintained here so we can update lex_source's similar members when we
1448          finish. */
1449       size_t line_pos;
1450       size_t seg_pos;
1451     };
1452
1453   /* Initialize state. */
1454   struct state state =
1455     {
1456       .segmenter = src->segmenter,
1457       .newlines = 0,
1458       .seg_pos = src->seg_pos,
1459       .line_pos = src->line_pos,
1460     };
1461   struct state saved = state;
1462
1463   /* Append a new token to SRC and initialize it. */
1464   struct lex_token *token = lex_push_token__ (src);
1465   struct scanner scanner;
1466   scanner_init (&scanner, &token->token);
1467   token->line_pos = src->line_pos;
1468   token->token_pos = src->seg_pos;
1469   if (src->reader->line_number > 0)
1470     token->first_line = src->reader->line_number + src->n_newlines;
1471   else
1472     token->first_line = 0;
1473
1474   /* Extract segments and pass them through the scanner until we obtain a
1475      token. */
1476   for (;;)
1477     {
1478       /* Extract a segment. */
1479       const char *segment = &src->buffer[state.seg_pos - src->tail];
1480       size_t seg_maxlen = src->head - state.seg_pos;
1481       enum segment_type type;
1482       int seg_len = segmenter_push (&state.segmenter, segment, seg_maxlen,
1483                                     src->reader->eof, &type);
1484       if (seg_len < 0)
1485         {
1486           /* The segmenter needs more input to produce a segment. */
1487           assert (!src->reader->eof);
1488           lex_source_read__ (src);
1489           continue;
1490         }
1491
1492       /* Update state based on the segment. */
1493       state.last_segment = type;
1494       state.seg_pos += seg_len;
1495       if (type == SEG_NEWLINE)
1496         {
1497           state.newlines++;
1498           state.line_pos = state.seg_pos;
1499         }
1500
1501       /* Pass the segment into the scanner and try to get a token out. */
1502       enum scan_result result = scanner_push (&scanner, type,
1503                                               ss_buffer (segment, seg_len),
1504                                               &token->token);
1505       if (result == SCAN_SAVE)
1506         saved = state;
1507       else if (result == SCAN_BACK)
1508         {
1509           state = saved;
1510           break;
1511         }
1512       else if (result == SCAN_DONE)
1513         break;
1514     }
1515
1516   /* If we've reached the end of a line, or the end of a command, then pass
1517      the line to the output engine as a syntax text item.  */
1518   int n_lines = state.newlines;
1519   if (state.last_segment == SEG_END_COMMAND && !src->suppress_next_newline)
1520     {
1521       n_lines++;
1522       src->suppress_next_newline = true;
1523     }
1524   else if (n_lines > 0 && src->suppress_next_newline)
1525     {
1526       n_lines--;
1527       src->suppress_next_newline = false;
1528     }
1529   for (int i = 0; i < n_lines; i++)
1530     {
1531       /* Beginning of line. */
1532       const char *line = &src->buffer[src->journal_pos - src->tail];
1533
1534       /* Calculate line length, including \n or \r\n end-of-line if present.
1535
1536          We use src->head even though that may be beyond what we've actually
1537          converted to tokens (which is only through state.line_pos).  That's
1538          because, if we're emitting the line due to SEG_END_COMMAND, we want to
1539          take the whole line through the newline, not just through the '.'. */
1540       size_t max_len = src->head - src->journal_pos;
1541       const char *newline = memchr (line, '\n', max_len);
1542       size_t line_len = newline ? newline - line + 1 : max_len;
1543
1544       /* Calculate line length excluding end-of-line. */
1545       size_t copy_len = line_len;
1546       if (copy_len > 0 && line[copy_len - 1] == '\n')
1547         copy_len--;
1548       if (copy_len > 0 && line[copy_len - 1] == '\r')
1549         copy_len--;
1550
1551       /* Submit the line as syntax. */
1552       output_item_submit (text_item_create_nocopy (TEXT_ITEM_SYNTAX,
1553                                                    xmemdup0 (line, copy_len),
1554                                                    NULL));
1555
1556       src->journal_pos += line_len;
1557     }
1558
1559   token->token_len = state.seg_pos - src->seg_pos;
1560
1561   src->segmenter = state.segmenter;
1562   src->seg_pos = state.seg_pos;
1563   src->line_pos = state.line_pos;
1564   src->n_newlines += state.newlines;
1565
1566   switch (token->token.type)
1567     {
1568     default:
1569       break;
1570
1571     case T_STOP:
1572       token->token.type = T_ENDCMD;
1573       src->eof = true;
1574       break;
1575
1576     case SCAN_BAD_HEX_LENGTH:
1577       lex_get_error (src, _("String of hex digits has %d characters, which "
1578                             "is not a multiple of 2"),
1579                      (int) token->token.number);
1580       break;
1581
1582     case SCAN_BAD_HEX_DIGIT:
1583     case SCAN_BAD_UNICODE_DIGIT:
1584       lex_get_error (src, _("`%c' is not a valid hex digit"),
1585                      (int) token->token.number);
1586       break;
1587
1588     case SCAN_BAD_UNICODE_LENGTH:
1589       lex_get_error (src, _("Unicode string contains %d bytes, which is "
1590                             "not in the valid range of 1 to 8 bytes"),
1591                      (int) token->token.number);
1592       break;
1593
1594     case SCAN_BAD_UNICODE_CODE_POINT:
1595       lex_get_error (src, _("U+%04X is not a valid Unicode code point"),
1596                      (int) token->token.number);
1597       break;
1598
1599     case SCAN_EXPECTED_QUOTE:
1600       lex_get_error (src, _("Unterminated string constant"));
1601       break;
1602
1603     case SCAN_EXPECTED_EXPONENT:
1604       lex_get_error (src, _("Missing exponent following `%s'"),
1605                      token->token.string.string);
1606       break;
1607
1608     case SCAN_UNEXPECTED_CHAR:
1609       {
1610         char c_name[16];
1611         lex_get_error (src, _("Bad character %s in input"),
1612                        uc_name (token->token.number, c_name));
1613       }
1614       break;
1615
1616     case SCAN_SKIP:
1617       lex_source_pop_front (src);
1618       break;
1619     }
1620
1621   return true;
1622 }
1623 \f
1624 static void
1625 lex_source_push_endcmd__ (struct lex_source *src)
1626 {
1627   struct lex_token *token = lex_push_token__ (src);
1628   token->token.type = T_ENDCMD;
1629   token->token_pos = 0;
1630   token->token_len = 0;
1631   token->line_pos = 0;
1632   token->first_line = 0;
1633 }
1634
1635 static struct lex_source *
1636 lex_source_create (struct lex_reader *reader)
1637 {
1638   struct lex_source *src;
1639
1640   src = xzalloc (sizeof *src);
1641   src->reader = reader;
1642   segmenter_init (&src->segmenter, reader->syntax);
1643   src->tokens = deque_init (&src->deque, 4, sizeof *src->tokens);
1644
1645   lex_source_push_endcmd__ (src);
1646
1647   return src;
1648 }
1649
1650 static void
1651 lex_source_destroy (struct lex_source *src)
1652 {
1653   char *file_name = src->reader->file_name;
1654   char *encoding = src->reader->encoding;
1655   if (src->reader->class->destroy != NULL)
1656     src->reader->class->destroy (src->reader);
1657   free (file_name);
1658   free (encoding);
1659   free (src->buffer);
1660   while (!deque_is_empty (&src->deque))
1661     lex_source_pop__ (src);
1662   free (src->tokens);
1663   ll_remove (&src->ll);
1664   free (src);
1665 }
1666 \f
1667 struct lex_file_reader
1668   {
1669     struct lex_reader reader;
1670     struct u8_istream *istream;
1671   };
1672
1673 static struct lex_reader_class lex_file_reader_class;
1674
1675 /* Creates and returns a new lex_reader that will read from file FILE_NAME (or
1676    from stdin if FILE_NAME is "-").  The file is expected to be encoded with
1677    ENCODING, which should take one of the forms accepted by
1678    u8_istream_for_file().  SYNTAX and ERROR become the syntax mode and error
1679    mode of the new reader, respectively.
1680
1681    Returns a null pointer if FILE_NAME cannot be opened. */
1682 struct lex_reader *
1683 lex_reader_for_file (const char *file_name, const char *encoding,
1684                      enum segmenter_mode syntax,
1685                      enum lex_error_mode error)
1686 {
1687   struct lex_file_reader *r;
1688   struct u8_istream *istream;
1689
1690   istream = (!strcmp(file_name, "-")
1691              ? u8_istream_for_fd (encoding, STDIN_FILENO)
1692              : u8_istream_for_file (encoding, file_name, O_RDONLY));
1693   if (istream == NULL)
1694     {
1695       msg (ME, _("Opening `%s': %s."), file_name, strerror (errno));
1696       return NULL;
1697     }
1698
1699   r = xmalloc (sizeof *r);
1700   lex_reader_init (&r->reader, &lex_file_reader_class);
1701   r->reader.syntax = syntax;
1702   r->reader.error = error;
1703   r->reader.file_name = xstrdup (file_name);
1704   r->reader.encoding = xstrdup_if_nonnull (encoding);
1705   r->reader.line_number = 1;
1706   r->istream = istream;
1707
1708   return &r->reader;
1709 }
1710
1711 static struct lex_file_reader *
1712 lex_file_reader_cast (struct lex_reader *r)
1713 {
1714   return UP_CAST (r, struct lex_file_reader, reader);
1715 }
1716
1717 static size_t
1718 lex_file_read (struct lex_reader *r_, char *buf, size_t n,
1719                enum prompt_style prompt_style UNUSED)
1720 {
1721   struct lex_file_reader *r = lex_file_reader_cast (r_);
1722   ssize_t n_read = u8_istream_read (r->istream, buf, n);
1723   if (n_read < 0)
1724     {
1725       msg (ME, _("Error reading `%s': %s."), r_->file_name, strerror (errno));
1726       return 0;
1727     }
1728   return n_read;
1729 }
1730
1731 static void
1732 lex_file_close (struct lex_reader *r_)
1733 {
1734   struct lex_file_reader *r = lex_file_reader_cast (r_);
1735
1736   if (u8_istream_fileno (r->istream) != STDIN_FILENO)
1737     {
1738       if (u8_istream_close (r->istream) != 0)
1739         msg (ME, _("Error closing `%s': %s."), r_->file_name, strerror (errno));
1740     }
1741   else
1742     u8_istream_free (r->istream);
1743
1744   free (r);
1745 }
1746
1747 static struct lex_reader_class lex_file_reader_class =
1748   {
1749     lex_file_read,
1750     lex_file_close
1751   };
1752 \f
1753 struct lex_string_reader
1754   {
1755     struct lex_reader reader;
1756     struct substring s;
1757     size_t offset;
1758   };
1759
1760 static struct lex_reader_class lex_string_reader_class;
1761
1762 /* Creates and returns a new lex_reader for the contents of S, which must be
1763    encoded in the given ENCODING.  The new reader takes ownership of S and will free it
1764    with ss_dealloc() when it is closed. */
1765 struct lex_reader *
1766 lex_reader_for_substring_nocopy (struct substring s, const char *encoding)
1767 {
1768   struct lex_string_reader *r;
1769
1770   r = xmalloc (sizeof *r);
1771   lex_reader_init (&r->reader, &lex_string_reader_class);
1772   r->reader.syntax = SEG_MODE_AUTO;
1773   r->reader.encoding = xstrdup_if_nonnull (encoding);
1774   r->s = s;
1775   r->offset = 0;
1776
1777   return &r->reader;
1778 }
1779
1780 /* Creates and returns a new lex_reader for a copy of null-terminated string S,
1781    which must be encoded in ENCODING.  The caller retains ownership of S. */
1782 struct lex_reader *
1783 lex_reader_for_string (const char *s, const char *encoding)
1784 {
1785   struct substring ss;
1786   ss_alloc_substring (&ss, ss_cstr (s));
1787   return lex_reader_for_substring_nocopy (ss, encoding);
1788 }
1789
1790 /* Formats FORMAT as a printf()-like format string and creates and returns a
1791    new lex_reader for the formatted result.  */
1792 struct lex_reader *
1793 lex_reader_for_format (const char *format, const char *encoding, ...)
1794 {
1795   struct lex_reader *r;
1796   va_list args;
1797
1798   va_start (args, encoding);
1799   r = lex_reader_for_substring_nocopy (ss_cstr (xvasprintf (format, args)), encoding);
1800   va_end (args);
1801
1802   return r;
1803 }
1804
1805 static struct lex_string_reader *
1806 lex_string_reader_cast (struct lex_reader *r)
1807 {
1808   return UP_CAST (r, struct lex_string_reader, reader);
1809 }
1810
1811 static size_t
1812 lex_string_read (struct lex_reader *r_, char *buf, size_t n,
1813                  enum prompt_style prompt_style UNUSED)
1814 {
1815   struct lex_string_reader *r = lex_string_reader_cast (r_);
1816   size_t chunk;
1817
1818   chunk = MIN (n, r->s.length - r->offset);
1819   memcpy (buf, r->s.string + r->offset, chunk);
1820   r->offset += chunk;
1821
1822   return chunk;
1823 }
1824
1825 static void
1826 lex_string_close (struct lex_reader *r_)
1827 {
1828   struct lex_string_reader *r = lex_string_reader_cast (r_);
1829
1830   ss_dealloc (&r->s);
1831   free (r);
1832 }
1833
1834 static struct lex_reader_class lex_string_reader_class =
1835   {
1836     lex_string_read,
1837     lex_string_close
1838   };