This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regen/utf8_strings.pl: Allow explicit default on input
[perl5.git] / regen / utf8_strings.pl
index d6d4c76..b868e59 100644 (file)
@@ -9,6 +9,10 @@ my $out_fh = open_new('utf8_strings.h', '>',
                       from => "Unicode data"});
 
 print $out_fh <<END;
+
+#ifndef H_UTF8_STRINGS   /* Guard against nested #includes */
+#define H_UTF8_STRINGS   1
+
 /* This file contains #defines for various Unicode code points.  The values
  * for the macros are all or portions of the UTF-8 encoding for the code
  * point.  Note that the names all have the suffix "_UTF8".
@@ -22,17 +26,19 @@ print $out_fh <<END;
 
 END
 
-# The data are at the end of this file.  Each line represents one #define.
-# Each line begins with either a Unicode character name with the blanks in it
-# squeezed out or replaced by underscores; or it may be a hexadecimal code
-# point.  In the latter case, the name will be looked-up to use as the name
-# of the macro.  In either case, the macro name will have suffixes as
-# listed above, and all blanks will be replaced by underscores.
+# The data are at the end of this file.  A blank line is output as-is.
+# Otherwise, each line represents one #define, and begins with either a
+# Unicode character name with the blanks in it squeezed out or replaced by
+# underscores; or it may be a hexadecimal Unicode code point.  In the latter
+# case, the name will be looked-up to use as the name of the macro.  In either
+# case, the macro name will have suffixes as listed above, and all blanks will
+# be replaced by underscores.
 #
 # Each line may optionally have one of the following flags on it, separated by
 # white space from the initial token.
-#   first   indicates that the output is to be of the FIRST_BYTE form
+#   string  indicates that the output is to be of the string form
 #           described in the comments above that are placed in the file.
+#   first   indicates that the output is to be of the FIRST_BYTE form.
 #   tail    indicates that the output is of the _TAIL form.
 #
 # This program is used to make it convenient to create compile time constants
@@ -40,6 +46,11 @@ END
 # having to figure things out.
 
 while ( <DATA> ) {
+    if ($_ !~ /\S/) {
+        print $out_fh "\n";
+        next;
+    }
+
     chomp;
     unless ($_ =~ m/ ^ ( [^\ ]* )           # Name or code point token
                        (?: [\ ]+ ( .* ) )?  # optional flag
@@ -74,7 +85,7 @@ while ( <DATA> ) {
                        unpack("U0C*", pack("U", hex $cp));
 
     my $suffix = '_UTF8';
-    if (! defined $flag) {
+    if (! defined $flag  || $flag eq 'string') {
         $str = "\"$str\"";  # Will be a string constant
     } elsif ($flag eq 'tail') {
             $str =~ s/\\x..//;  # Remove the first byte
@@ -92,17 +103,22 @@ while ( <DATA> ) {
     print $out_fh "#define ${name}$suffix $str    /* U+$cp */\n";
 }
 
+print $out_fh "\n#endif /* H_UTF8_STRINGS */\n";
+
 read_only_bottom_close_and_rename($out_fh);
 
 __DATA__
-0300
-0301
-0308
-03B9 tail
-03C5 tail
+0300 string
+0301 string
+0308 string
+
 03B9 first
+03B9 tail
+
 03C5 first
+03C5 tail
+
 1100
 1160
 11A8
-2010
+2010 string