Follow-up Comment #19, bug #62776 (group groff):

Another use case:

* Warn when formatting-relevant escape sequences or text appear on an input
line after "interruption", the output line continuation escape sequence `\c`.

Experimentally sticking this in revealed some issues with our own macro files
and documents.


diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp
index f57a97225..8d5deb152 100644
--- a/src/roff/troff/env.cpp
+++ b/src/roff/troff/env.cpp
@@ -297,6 +297,14 @@ void environment::add_char(charinfo *ci)
 {
   int s;
   node *gc_np = 0 /* nullptr */;
+  if (line_interrupted) {
+  // XXX: Add this later once we've cleaned up our own macro packages.
+#if 0
+    warning(WARN_SYNTAX, "ignoring text input on interrupted line");
+    return; // XXX: should we?
+#endif
+    ;
+  }
   if (line_interrupted)
     ;
   // don't allow fields in dummy environments
@@ -492,8 +500,10 @@ void environment::space()
 
 void environment::space(hunits space_width, hunits sentence_space_width)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX, "ignoring space on interrupted line");
     return;
+  }
   if (has_current_field && padding_indicator_char == 0 /* nullptr */) {
     add_padding();
     return;
@@ -532,7 +542,7 @@ static node *do_underline_special(bool
do_underline_spaces)
 bool environment::set_font(symbol nm)
 {
   if (line_interrupted) {
-    warning(WARN_FONT, "ignoring font selection on interrupted line");
+    warning(WARN_SYNTAX, "ignoring font selection on interrupted line");
     return true; // "no operation" is successful
   }
   if (nm == symbol("P") || nm.is_empty()) {
@@ -565,8 +575,10 @@ bool environment::set_font(symbol nm)
 bool environment::set_font(int n)
 {
-  if (line_interrupted)
-    return false;
+  if (line_interrupted) {
+    warning(WARN_SYNTAX, "ignoring font selection on interrupted line");
+    return true; // "no operation" is successful
+  }
   if (is_good_fontno(n)) {
     prev_fontno = fontno;
     fontno = n;
@@ -580,8 +592,15 @@ bool environment::set_font(int n)
 
 void environment::set_family(symbol fam)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+  // XXX: Add this later once we've cleaned up our own documents.
+  // groff_hdtbl.5.man:85 is the culprit here.
+#if 0
+    warning(WARN_SYNTAX,
+           "ignoring family selection on interrupted line");
+#endif
     return;
+  }
   if (fam.is_null() || fam.is_empty()) {
     int previous_mounting_position = prev_family->make_definite(fontno);
     assert(previous_mounting_position >= 0);
@@ -611,8 +630,11 @@ void environment::set_family(symbol fam)
 
 void environment::set_size(int n)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX,
+           "ignoring type size selection on interrupted line");
     return;
+  }
   if (n == 0 /* nullptr */) {
     font_size temp = prev_size;
     prev_size = size;
@@ -631,8 +653,11 @@ void environment::set_size(int n)
 
 void environment::set_char_height(int n)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX,
+           "ignoring font height selection on interrupted line");
     return;
+  }
   if (n == requested_size || n <= 0)
     char_height = 0;
   else
@@ -641,8 +666,11 @@ void environment::set_char_height(int n)
 
 void environment::set_char_slant(int n)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX,
+           "ignoring font slant selection on interrupted line");
     return;
+  }
   char_slant = n;
 }
 
@@ -668,16 +696,22 @@ color *environment::get_fill_color()
 
 void environment::set_glyph_color(color *c)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX,
+           "ignoring stroke color selection on interrupted line");
     return;
+  }
   curenv->prev_glyph_color = curenv->glyph_color;
   curenv->glyph_color = c;
 }
 
 void environment::set_fill_color(color *c)
 {
-  if (line_interrupted)
+  if (line_interrupted) {
+    warning(WARN_SYNTAX,
+           "ignoring fill color selection on interrupted line");
     return;
+  }
   curenv->prev_fill_color = curenv->fill_color;
   curenv->fill_color = c;
 }




    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?62776>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/


Reply via email to