groff-commit
[Top][All Lists]
Advanced

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

[groff] 107/115: [tbl]: Refactor type size, vert spacing handling.


From: G. Branden Robinson
Subject: [groff] 107/115: [tbl]: Refactor type size, vert spacing handling.
Date: Thu, 1 Jun 2023 10:46:18 -0400 (EDT)

gbranden pushed a commit to branch branden-2022-06-01
in repository groff.

commit f0bb681c56ae7adaca01c91ac0e3c9a3cdd8a446
Author: G. Branden Robinson <g.branden.robinson@gmail.com>
AuthorDate: Fri May 19 04:29:29 2023 -0500

    [tbl]: Refactor type size, vert spacing handling.
    
    * src/preproc/tbl/table.h (struct inc_number): Rename this...
      (struct size_expression): ...to this, and change its member types.
      The `inc` `short` becomes a `relativity` enum because it only ever
      takes 3 values.  The `val` short becomes an `int`, undoing what I
      suspect to be premature optimization.
    
    * src/preproc/tbl/main.cpp (entry_modifier::entry_modifier)
      (entry_format::debug_print, process_format):
    * src/preproc/tbl/table.cpp (set_modifier, set_inline_modifier)
      (restore_inline_modifier): Update to reflect new types and enum
      literals.
---
 ChangeLog                 | 15 ++++++++++
 src/preproc/tbl/main.cpp  | 75 ++++++++++++++++++++++++++---------------------
 src/preproc/tbl/table.cpp | 27 +++++++++--------
 src/preproc/tbl/table.h   | 10 +++----
 4 files changed, 76 insertions(+), 51 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 86583fec8..ee3abc65d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2023-05-19  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       [tbl]: Refactor handling of type size and vertical spacing.
+
+       * src/preproc/tbl/table.h (struct inc_number): Rename this...
+       (struct size_expression): ...to this, and change its member
+       types.  The `inc` `short` becomes a `relativity` enum
+       because it only ever takes 3 values.  The `val` short becomes an
+       `int`, undoing what I suspect to be premature optimization.
+       * src/preproc/tbl/main.cpp (entry_modifier::entry_modifier)
+       (entry_format::debug_print, process_format):
+       * src/preproc/tbl/table.cpp (set_modifier, set_inline_modifier)
+       (restore_inline_modifier): Update to reflect new types and
+       enum literals.
+
 2023-05-19  G. Branden Robinson <g.branden.robinson@gmail.com>
 
        * src/preproc/tbl/main.cpp (process_format): Check for EOF after
diff --git a/src/preproc/tbl/main.cpp b/src/preproc/tbl/main.cpp
index 8ebb04b65..fbb2b2a23 100644
--- a/src/preproc/tbl/main.cpp
+++ b/src/preproc/tbl/main.cpp
@@ -535,8 +535,10 @@ options *process_options(table_input &in)
 entry_modifier::entry_modifier()
 : vertical_alignment(CENTER), zero_width(0), stagger(0)
 {
-  vertical_spacing.inc = vertical_spacing.val = 0;
-  point_size.inc = point_size.val = 0;
+  vertical_spacing.relativity = size_expression::ABSOLUTE;
+  vertical_spacing.whole = 0;
+  type_size.relativity = size_expression::ABSOLUTE;
+  type_size.whole = 0;
 }
 
 entry_modifier::~entry_modifier()
@@ -585,21 +587,21 @@ void entry_format::debug_print() const
     assert(0 == "invalid column classifier in switch");
     break;
   }
-  if (point_size.val != 0) {
+  if (type_size.whole != 0) {
     putc('p', stderr);
-    if (point_size.inc > 0)
+    if (type_size.relativity == size_expression::INCREMENT)
       putc('+', stderr);
-    else if (point_size.inc < 0)
+    else if (type_size.relativity == size_expression::DECREMENT)
       putc('-', stderr);
-    fprintf(stderr, "%d ", point_size.val);
+    fprintf(stderr, "%d ", type_size.whole);
   }
-  if (vertical_spacing.val != 0) {
+  if (vertical_spacing.whole != 0) {
     putc('v', stderr);
-    if (vertical_spacing.inc > 0)
+    if (vertical_spacing.relativity == size_expression::INCREMENT)
       putc('+', stderr);
-    else if (vertical_spacing.inc < 0)
+    else if (vertical_spacing.relativity == size_expression::DECREMENT)
       putc('-', stderr);
-    fprintf(stderr, "%d ", vertical_spacing.val);
+    fprintf(stderr, "%d ", vertical_spacing.whole);
   }
   if (!font.empty()) {
     putc('f', stderr);
@@ -988,9 +990,9 @@ format *process_format(table_input &in, options *opt,
       case 'p':
       case 'P':
        {
-         inc_number &ps = list->point_size;
-         ps.val = 0;
-         ps.inc = 0;
+         size_expression &ps = list->type_size;
+         ps.relativity = size_expression::ABSOLUTE;
+         ps.whole = 0;
          c = in.get();
          do {
            c = in.get();
@@ -1000,27 +1002,30 @@ format *process_format(table_input &in, options *opt,
            break;
          }
          if (c == '+' || c == '-') {
-           ps.inc = (c == '+' ? 1 : -1);
+           if (c == '+')
+             ps.relativity = size_expression::INCREMENT;
+           else if (c == '-')
+             ps.relativity = size_expression::DECREMENT;
            c = in.get();
          }
          if (c == EOF || !csdigit(c)) {
            warning("'p' column modifier must be followed by"
                    " (optionally signed) integer; ignoring");
-           ps.inc = 0;
+           ps.relativity = size_expression::ABSOLUTE;
          }
          else {
            do {
-             ps.val *= 10;
-             ps.val += c - '0';
+             ps.whole *= 10;
+             ps.whole += c - '0';
              c = in.get();
            } while (c != EOF && csdigit(c));
          }
-         if (ps.val > MAX_POINT_SIZE || ps.val < -MAX_POINT_SIZE) {
+         if (ps.whole > MAX_POINT_SIZE || ps.whole < -MAX_POINT_SIZE) {
            warning("'p' column modifier argument magnitude of %1"
-                   " points out of range (> %2); ignoring", ps.val,
+                   " points out of range (> %2); ignoring", ps.whole,
                    MAX_POINT_SIZE);
-           ps.val = 0;
-           ps.inc = 0;
+           ps.whole = 0;
+           ps.relativity = size_expression::ABSOLUTE;
          }
          break;
        }
@@ -1037,9 +1042,9 @@ format *process_format(table_input &in, options *opt,
       case 'v':
       case 'V':
        {
-         inc_number &vs = list->vertical_spacing;
-         vs.val = 0;
-         vs.inc = 0;
+         size_expression &vs = list->vertical_spacing;
+         vs.whole = 0;
+         vs.relativity = size_expression::ABSOLUTE;
          c = in.get();
          do {
            c = in.get();
@@ -1050,28 +1055,32 @@ format *process_format(table_input &in, options *opt,
            break;
          }
          if (c == '+' || c == '-') {
-           vs.inc = (c == '+' ? 1 : -1);
+           if (c == '+')
+             vs.relativity = size_expression::INCREMENT;
+           else if (c == '-')
+             vs.relativity = size_expression::DECREMENT;
            c = in.get();
          }
          if (c == EOF || !csdigit(c)) {
            warning("'v' column modifier must be followed by"
                    " (optionally signed) integer; ignoring");
-           vs.inc = 0;
+           vs.whole = 0;
+           vs.relativity = size_expression::ABSOLUTE;
          }
          else {
            do {
-             vs.val *= 10;
-             vs.val += c - '0';
+             vs.whole *= 10;
+             vs.whole += c - '0';
              c = in.get();
            } while (c != EOF && csdigit(c));
          }
-         if (vs.val > MAX_VERTICAL_SPACING
-             || vs.val < -MAX_VERTICAL_SPACING) {
+         if (vs.whole > MAX_VERTICAL_SPACING
+             || vs.whole < -MAX_VERTICAL_SPACING) {
            warning("'v' column modifier argument magnitude of %1"
-                   " points out of range (> %2); ignoring", vs.val,
+                   " points out of range (> %2); ignoring", vs.whole,
                    MAX_VERTICAL_SPACING);
-           vs.val = 0;
-           vs.inc = 0;
+           vs.whole = 0;
+           vs.relativity = size_expression::ABSOLUTE;
          }
          break;
        }
diff --git a/src/preproc/tbl/table.cpp b/src/preproc/tbl/table.cpp
index 9e9a371dc..bf4167303 100644
--- a/src/preproc/tbl/table.cpp
+++ b/src/preproc/tbl/table.cpp
@@ -1000,21 +1000,22 @@ void set_modifier(const entry_modifier *m)
 {
   if (!m->font.empty())
     printfs(".ft %1\n", m->font);
-  if (m->point_size.val != 0) {
+  if (m->type_size.whole != 0) {
     prints(".ps ");
-    if (m->point_size.inc > 0)
+    if (m->type_size.relativity == size_expression::INCREMENT)
       prints('+');
-    else if (m->point_size.inc < 0)
+    else if (m->type_size.relativity == size_expression::DECREMENT)
       prints('-');
-    printfs("%1\n", as_string(m->point_size.val));
+    printfs("%1\n", as_string(m->type_size.whole));
   }
-  if (m->vertical_spacing.val != 0) {
+  if (m->vertical_spacing.whole != 0) {
     prints(".vs ");
-    if (m->vertical_spacing.inc > 0)
+    if (m->vertical_spacing.relativity == size_expression::INCREMENT)
       prints('+');
-    else if (m->vertical_spacing.inc < 0)
+    else if (m->vertical_spacing.relativity
+            == size_expression::DECREMENT)
       prints('-');
-    printfs("%1\n", as_string(m->vertical_spacing.val));
+    printfs("%1\n", as_string(m->vertical_spacing.whole));
   }
   if (!m->macro.empty())
     printfs(".%1\n", m->macro);
@@ -1024,13 +1025,13 @@ void set_inline_modifier(const entry_modifier *m)
 {
   if (!m->font.empty())
     printfs("\\f[%1]", m->font);
-  if (m->point_size.val != 0) {
+  if (m->type_size.whole != 0) {
     prints("\\s[");
-    if (m->point_size.inc > 0)
+    if (m->type_size.relativity == size_expression::INCREMENT)
       prints('+');
-    else if (m->point_size.inc < 0)
+    else if (m->type_size.relativity == size_expression::DECREMENT)
       prints('-');
-    printfs("%1]", as_string(m->point_size.val));
+    printfs("%1]", as_string(m->type_size.whole));
   }
   if (m->stagger)
     prints("\\v'-.5v'");
@@ -1040,7 +1041,7 @@ void restore_inline_modifier(const entry_modifier *m)
 {
   if (!m->font.empty())
     prints("\\f[\\n[" SAVED_FONT_REG "]]");
-  if (m->point_size.val != 0)
+  if (m->type_size.whole != 0)
     prints("\\s[\\n[" SAVED_SIZE_REG "]]");
   if (m->stagger)
     prints("\\v'.5v'");
diff --git a/src/preproc/tbl/table.h b/src/preproc/tbl/table.h
index cacdcfe22..b4f4062cb 100644
--- a/src/preproc/tbl/table.h
+++ b/src/preproc/tbl/table.h
@@ -37,14 +37,14 @@ along with this program.  If not, see 
<http://www.gnu.org/licenses/>. */
 #define LEADER "a"
 #define LEADER_CHAR 'a'
 
-struct inc_number {
-  short inc;
-  short val;
+struct size_expression {
+  enum { DECREMENT = -1, ABSOLUTE, INCREMENT } relativity;
+  int whole;
 };
 
 struct entry_modifier {
-  inc_number point_size;
-  inc_number vertical_spacing;
+  size_expression type_size;
+  size_expression vertical_spacing;
   string font;
   string macro;
   enum { CENTER, TOP, BOTTOM } vertical_alignment;



reply via email to

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