]> granicus.if.org Git - flex/commitdiff
Added list_character_set()
authorVern Paxson <vern@ee.lbl.gov>
Sun, 8 May 1988 19:51:06 +0000 (19:51 +0000)
committerVern Paxson <vern@ee.lbl.gov>
Sun, 8 May 1988 19:51:06 +0000 (19:51 +0000)
ccl.c

diff --git a/ccl.c b/ccl.c
index 41e6d476707a992f042f31a4cc98a7c878252121..48addb3d900b18ff75284c6e58c1e3e58c27007d 100644 (file)
--- a/ccl.c
+++ b/ccl.c
@@ -1,9 +1,5 @@
 /* ccl - routines for character classes */
 
-#ifndef lint
-static char rcsid[] = "@(#) $Header$ (LBL)";
-#endif
-
 /*
  * Copyright (c) 1987, the University of California
  * 
@@ -18,6 +14,11 @@ static char rcsid[] = "@(#) $Header$ (LBL)";
 
 #include "flexdef.h"
 
+#ifndef lint
+static char rcsid[] =
+    "@(#) $Header$ (LBL)";
+#endif
+
 /* ccladd - add a single character to a ccl
  *
  * synopsis
@@ -111,3 +112,48 @@ int cclp;
     {
     cclng[cclp] = 1;
     }
+
+
+/* list_character_set - list the members of a set of characters in CCL form
+ *
+ * synopsis
+ *     int cset[CSIZE + 1];
+ *     list_character_set( cset );
+ *
+ * writes to stderr a character-class representation of those characters
+ * present in the given set.  A character is present if it has a non-zero
+ * value in the set array.
+ */
+
+list_character_set( cset )
+int cset[];
+
+    {
+    register int i;
+    char *readable_form();
+
+    putc( '[', stderr );
+
+    for ( i = 1; i <= CSIZE; ++i )
+       {
+       if ( cset[i] )
+           {
+           register int start_char = i;
+
+           putc( ' ', stderr );
+
+           fputs( readable_form( i ), stderr );
+
+           while ( ++i <= CSIZE && cset[i] )
+               ;
+
+           if ( i - 1 > start_char )
+               /* this was a run */
+               fprintf( stderr, "-%s", readable_form( i - 1 ) );
+
+           putc( ' ', stderr );
+           }
+       }
+
+    putc( ']', stderr );
+    }