regen/unicode_constants.pl: Generate #defines giving which Unicode version
authorKarl Williamson <khw@cpan.org>
Sat, 20 Jun 2015 23:20:46 +0000 (17:20 -0600)
committerKarl Williamson <khw@cpan.org>
Wed, 29 Jul 2015 04:15:52 +0000 (22:15 -0600)
Future commits will want to take different actions depending on which
Unicode version is being used.

regen/unicode_constants.pl
unicode_constants.h

index a1978de..c8ed64a 100644 (file)
@@ -3,6 +3,7 @@ use strict;
 use warnings;
 require 'regen/regen_lib.pl';
 require 'regen/charset_translations.pl';
+use Unicode::UCD;
 use charnames qw(:loose);
 
 my $out_fh = open_new('unicode_constants.h', '>',
@@ -14,10 +15,11 @@ print $out_fh <<END;
 #ifndef H_UNICODE_CONSTANTS   /* Guard against nested #includes */
 #define H_UNICODE_CONSTANTS   1
 
-/* This file contains #defines for various Unicode code points.  The values
- * the macros expand to are the native Unicode code point, or all or portions
- * of the UTF-8 encoding for the code point.  In the former case, the macro
- * name has the suffix "_NATIVE"; otherwise, the suffix "_UTF8".
+/* This file contains #defines for the version of Unicode being used and
+ * various Unicode code points.  The values the code point macros expand to
+ * are the native Unicode code point, or all or portions of the UTF-8 encoding
+ * for the code point.  In the former case, the macro name has the suffix
+ * "_NATIVE"; otherwise, the suffix "_UTF8".
  *
  * The macros that have the suffix "_UTF8" may have further suffixes, as
  * follows:
@@ -28,6 +30,17 @@ print $out_fh <<END;
 
 END
 
+my $version = Unicode::UCD::UnicodeVersion();
+my ($major, $dot, $dotdot) = $version =~ / (.*?) \. (.*?) (?: \. (.*) )? $ /x;
+$dotdot = 0 unless defined $dotdot;
+
+print $out_fh <<END;
+#define UNICODE_MAJOR_VERSION   $major
+#define UNICODE_DOT_VERSION     $dot
+#define UNICODE_DOT_DOT_VERSION $dotdot
+
+END
+
 # The data are at __DATA__  in this file.
 
 my @data = <DATA>;
index 7da4eb3..bf93f54 100644 (file)
@@ -8,10 +8,11 @@
 #ifndef H_UNICODE_CONSTANTS   /* Guard against nested #includes */
 #define H_UNICODE_CONSTANTS   1
 
-/* This file contains #defines for various Unicode code points.  The values
- * the macros expand to are the native Unicode code point, or all or portions
- * of the UTF-8 encoding for the code point.  In the former case, the macro
- * name has the suffix "_NATIVE"; otherwise, the suffix "_UTF8".
+/* This file contains #defines for the version of Unicode being used and
+ * various Unicode code points.  The values the code point macros expand to
+ * are the native Unicode code point, or all or portions of the UTF-8 encoding
+ * for the code point.  In the former case, the macro name has the suffix
+ * "_NATIVE"; otherwise, the suffix "_UTF8".
  *
  * The macros that have the suffix "_UTF8" may have further suffixes, as
  * follows:
  *  "_TAIL"       if instead it represents all but the first byte.  This, and
  *                with no additional suffix are both string constants */
 
+#define UNICODE_MAJOR_VERSION   8
+#define UNICODE_DOT_VERSION     0
+#define UNICODE_DOT_DOT_VERSION 0
+
 
 #if 'A' == 65 /* ASCII/Latin1 */
 #   define LATIN_SMALL_LETTER_LONG_S_UTF8  "\xC5\xBF"    /* U+017F */