message: Introduce underlining for error message regions.
[pspp] / src / language / control / repeat.c
index 7341f0760bcf48960a01ca3f378cc18f666c9abe..8876c8fb9e2efeb9bbe9a90a5b284616e83d801c 100644 (file)
@@ -201,10 +201,7 @@ do_parse_commands (struct substring s, enum segmenter_mode mode,
                    struct hmap *dummies,
                    struct string *outputs, size_t n_outputs)
 {
-  struct segmenter segmenter;
-
-  segmenter_init (&segmenter, mode);
-
+  struct segmenter segmenter = segmenter_init (mode, false);
   while (!ss_is_empty (s))
     {
       enum segment_type type;
@@ -252,13 +249,10 @@ do_parse_commands (struct substring s, enum segmenter_mode mode,
 static bool
 parse_commands (struct lexer *lexer, struct hmap *dummies)
 {
-  enum lex_syntax_mode syntax_mode;
-  enum segmenter_mode mode;
   struct string *outputs;
   struct string input;
   size_t n_values;
   char *file_name;
-  int line_number;
   bool ok;
   size_t i;
 
@@ -266,7 +260,7 @@ parse_commands (struct lexer *lexer, struct hmap *dummies)
     file_name = xstrdup (lex_get_file_name (lexer));
   else
     file_name = NULL;
-  line_number = lex_get_first_line_number (lexer, 0);
+  int line_number = lex_ofs_start_point (lexer, lex_ofs (lexer)).line;
 
   ds_init_empty (&input);
   while (lex_is_string (lexer))
@@ -281,16 +275,8 @@ parse_commands (struct lexer *lexer, struct hmap *dummies)
   for (i = 0; i < n_values; i++)
     ds_init_empty (&outputs[i]);
 
-  syntax_mode = lex_get_syntax_mode (lexer);
-  if (syntax_mode == LEX_SYNTAX_AUTO)
-    mode = SEG_MODE_AUTO;
-  else if (syntax_mode == LEX_SYNTAX_INTERACTIVE)
-    mode = SEG_MODE_INTERACTIVE;
-  else if (syntax_mode == LEX_SYNTAX_BATCH)
-    mode = SEG_MODE_BATCH;
-  else
-    NOT_REACHED ();
-  do_parse_commands (ds_ss (&input), mode, dummies, outputs, n_values);
+  do_parse_commands (ds_ss (&input), lex_get_syntax_mode (lexer),
+                     dummies, outputs, n_values);
 
   ds_destroy (&input);