groff-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[groff] 03/08: src/roff/troff/input.cpp: Improve diagnostics.


From: G. Branden Robinson
Subject: [groff] 03/08: src/roff/troff/input.cpp: Improve diagnostics.
Date: Sat, 31 Oct 2020 23:48:22 -0400 (EDT)

gbranden pushed a commit to branch master
in repository groff.

commit 473931df108409d46f39ed74f3165d0d81ebb3cb
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Sat Oct 31 23:09:49 2020 +1100

    src/roff/troff/input.cpp: Improve diagnostics.
    
    * src/roff/troff/input.cpp (do_overstrike, do_bracket, do_name_test,
      do_expr_test, do_zero_width, do_width, do_special, do_if_request,
      read_color_draw_note): Improve diagnostic messages for missing closing
      delimiters by describing the incomplete structure and the problem
      token.
    
      (read_rgb, read_cmy, read_cmyk, read_gray): Improve English syntax of
      diagnostic message when color definition missing.
---
 ChangeLog                | 10 +++++++
 src/roff/troff/input.cpp | 75 ++++++++++++++++++++++++++++--------------------
 2 files changed, 54 insertions(+), 31 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8a5d89e..42202c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2020-10-31  G. Branden Robinson <g.branden.robinson@gmail.com>
 
+       * src/roff/troff/input.cpp (do_overstrike, do_bracket,
+       do_name_test, do_expr_test, do_zero_width, do_width, do_special,
+       do_if_request, read_color_draw_note): Improve diagnostic
+       messages for missing closing delimiters by describing the
+       incomplete structure and the problem token.
+       (read_rgb, read_cmy, read_cmyk, read_gray): Improve English
+       syntax of diagnostic message when color definition missing.
+
+2020-10-31  G. Branden Robinson <g.branden.robinson@gmail.com>
+
        * tmac/mdoc/doc-ditroff-u:
        * tmac/mdoc/doc-nroff-u: Recognize but ignore the groff_man(7)
        string HF and registers FT, IN, P, SN, and X (by initializing
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index ccf5ac0..4e38daf 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -1276,7 +1276,8 @@ static color *read_rgb(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_rgb(s)) {
-      warning(WARN_COLOR, "expecting rgb color definition not '%1'", s);
+      warning(WARN_COLOR, "expecting rgb color definition,"
+             " not '%1'", s);
       delete col;
       return 0;
     }
@@ -1305,7 +1306,8 @@ static color *read_cmy(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_cmy(s)) {
-      warning(WARN_COLOR, "expecting cmy color definition not '%1'", s);
+      warning(WARN_COLOR, "expecting cmy color definition,"
+             " not '%1'", s);
       delete col;
       return 0;
     }
@@ -1334,7 +1336,8 @@ static color *read_cmyk(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_cmyk(s)) {
-      warning(WARN_COLOR, "expecting a cmyk color definition not '%1'", s);
+      warning(WARN_COLOR, "expecting cmyk color definition,"
+             " not '%1'", s);
       delete col;
       return 0;
     }
@@ -1364,7 +1367,8 @@ static color *read_gray(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_gray(s)) {
-      warning(WARN_COLOR, "expecting a gray definition not '%1'", s);
+      warning(WARN_COLOR, "expecting gray definition,"
+             " not '%1'", s);
       delete col;
       return 0;
     }
@@ -1441,7 +1445,8 @@ node *do_overstrike()
   for (;;) {
     tok.next();
     if (tok.newline() || tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " overstrike escape (got %1)", tok.description());
       input_stack::push(make_temp_iterator("\n"));
       break;
     }
@@ -1476,13 +1481,14 @@ static node *do_bracket()
   int start_level = input_stack::get_level();
   for (;;) {
     tok.next();
-    if (tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
-      break;
-    }
-    if (tok.newline()) {
-      warning(WARN_DELIM, "missing closing delimiter");
-      input_stack::push(make_temp_iterator("\n"));
+    if (tok.eof() || tok.newline()) {
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " bracket-building escape (got %1)", tok.description());
+      // XXX: Most other places we miss a closing delimiter, we push a
+      // temp iterator for the EOF case too.  What's special about \b?
+      // Exceptions: \w, \X are like this too.
+      if (tok.newline())
+       input_stack::push(make_temp_iterator("\n"));
       break;
     }
     if (tok == start
@@ -1508,7 +1514,8 @@ static int do_name_test()
   for (;;) {
     tok.next();
     if (tok.newline() || tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " name test escape (got %1)", tok.description());
       input_stack::push(make_temp_iterator("\n"));
       break;
     }
@@ -1545,7 +1552,8 @@ static int do_expr_test()
   for (;;) {
     tok.next();
     if (tok.newline() || tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " expression test escape (got %1)", tok.description());
       input_stack::push(make_temp_iterator("\n"));
       break;
     }
@@ -1601,7 +1609,8 @@ static node *do_zero_width()
   for (;;) {
     tok.next();
     if (tok.newline() || tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " zero-width escape (got %1)", tok.description());
       input_stack::push(make_temp_iterator("\n"));
       break;
     }
@@ -5246,13 +5255,14 @@ static void do_width()
   curenv = &env;
   for (;;) {
     tok.next();
-    if (tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
-      break;
-    }
-    if (tok.newline()) {
-      warning(WARN_DELIM, "missing closing delimiter");
-      input_stack::push(make_temp_iterator("\n"));
+    if (tok.eof() || tok.newline()) {
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " width escape (got %1)", tok.description());
+      // XXX: Most other places we miss a closing delimiter, we push a
+      // temp iterator for the EOF case too.  What's special about \w?
+      // Exception: \b, \X are like this too.
+      if (tok.newline())
+       input_stack::push(make_temp_iterator("\n"));
       break;
     }
     if (tok == start
@@ -5433,13 +5443,14 @@ node *do_special()
   for (tok.next();
        tok != start || input_stack::get_level() != start_level;
        tok.next()) {
-    if (tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
-      return 0;
-    }
-    if (tok.newline()) {
-      input_stack::push(make_temp_iterator("\n"));
-      warning(WARN_DELIM, "missing closing delimiter");
+    if (tok.eof() || tok.newline()) {
+      warning(WARN_DELIM, "missing closing delimiter in"
+             " device special escape (got %1)", tok.description());
+      // XXX: Most other places we miss a closing delimiter, we push a
+      // temp iterator for the EOF case too.  What's special about \X?
+      // Exceptions: \b, \w are like this too.
+      if (tok.newline())
+       input_stack::push(make_temp_iterator("\n"));
       break;
     }
     unsigned char c;
@@ -5790,7 +5801,8 @@ int do_if_request()
       for (;;) {
        tok.next();
        if (tok.newline() || tok.eof()) {
-         warning(WARN_DELIM, "missing closing delimiter");
+         warning(WARN_DELIM, "missing closing delimiter in conditional"
+                 " expression (got %1)", tok.description());
          tok.next();
          curenv = oldenv;
          return 0;
@@ -8556,7 +8568,8 @@ static void read_color_draw_node(token &start)
     curenv->set_fill_color(col);
   while (tok != start) {
     if (tok.newline() || tok.eof()) {
-      warning(WARN_DELIM, "missing closing delimiter");
+      warning(WARN_DELIM, "missing closing delimiter in color drawing"
+             " device command (got %1)", tok.description());
       input_stack::push(make_temp_iterator("\n"));
       break;
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]