gbranden pushed a commit to branch master
in repository groff.

commit 025d6604839dafe2d80cde94429d20edde0100a2
Author: G. Branden Robinson <g.branden.robin...@gmail.com>
AuthorDate: Fri Feb 21 03:56:49 2025 -0600

    [troff]: Add member functions to `token` class.
    
    ...to assist with runtime character analysis.
    
    * src/roff/troff/token.h (class charinfo): Declare new public member
      functions `is_character()`, `is_indexed_character()`, and
      `character_index()`.
    
      (token::is_character): New function returns whether the object has
      `type` of `TOKEN_CHAR`, `TOKEN_SPECIAL_CHAR`, or `TOKEN_INDEXED_CHAR`.
    
      (token::is_indexed_character): New function returns whether the object
      has `type` of `TOKEN_INDEXED_CHAR`.
    
      (token::character_index): New function returns value of `val` private
      member variable.  Throws assertion if token's `type` is not
      `TOKEN_INDEXED_CHAR`.
---
 ChangeLog              | 17 +++++++++++++++++
 src/roff/troff/token.h | 25 +++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 87278eaeb..afad02463 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2025-02-21  G. Branden Robinson <g.branden.robin...@gmail.com>
+
+       [troff]: Add member functions to `token` class to assist with
+       runtime character analysis.
+
+       * src/roff/troff/token.h (class charinfo): Declare new public
+       member functions `is_character()`, `is_indexed_character()`, and
+       `character_index()`.
+       (token::is_character): New function returns whether the object
+       has `type` of `TOKEN_CHAR`, `TOKEN_SPECIAL_CHAR`, or
+       `TOKEN_INDEXED_CHAR`.
+       (token::is_indexed_character): New function returns whether the
+       object has `type` of `TOKEN_INDEXED_CHAR`.
+       (token::character_index): New function returns value of `val`
+       private member variable.  Throws assertion if token's `type` is
+       not `TOKEN_INDEXED_CHAR`.
+
 2025-02-21  G. Branden Robinson <g.branden.robin...@gmail.com>
 
        [libgroff]: Validate character indices in font description files
diff --git a/src/roff/troff/token.h b/src/roff/troff/token.h
index f6709e7e4..796d2b1bf 100644
--- a/src/roff/troff/token.h
+++ b/src/roff/troff/token.h
@@ -16,6 +16,11 @@ for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
 
 class charinfo;
 struct node;
@@ -74,7 +79,9 @@ public:
   bool is_unstretchable_space();
   bool is_horizontal_space();
   bool is_white_space();
+  bool is_character();
   bool is_special_character();
+  bool is_indexed_character();
   bool is_newline();
   bool is_tab();
   bool is_leader();
@@ -91,6 +98,7 @@ public:
   bool operator==(const token &); // for delimiters & conditional exprs
   bool operator!=(const token &); // ditto
   unsigned char ch();
+  int character_index();
   charinfo *get_char(bool /* required */ = false);
   bool add_to_zero_width_node_list(node **);
   void make_space();
@@ -192,6 +200,23 @@ inline unsigned char token::ch()
   return type == TOKEN_CHAR ? c : '\0';
 }
 
+inline bool token::is_character()
+{
+  return (TOKEN_CHAR == type) || (TOKEN_SPECIAL_CHAR == type)
+         || (TOKEN_INDEXED_CHAR == type);
+}
+
+inline bool token::is_indexed_character()
+{
+  return TOKEN_INDEXED_CHAR == type;
+}
+
+inline int token::character_index()
+{
+  assert(TOKEN_INDEXED_CHAR == type);
+  return val;
+}
+
 inline bool token::is_eof()
 {
   return type == TOKEN_EOF;

_______________________________________________
groff-commit mailing list
groff-commit@gnu.org
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to