emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master d22ddf5 1/5: Write each generated character propert


From: Glenn Morris
Subject: [Emacs-diffs] master d22ddf5 1/5: Write each generated character property lisp file only once
Date: Tue, 25 Apr 2017 02:07:04 -0400 (EDT)

branch: master
commit d22ddf5944b97ca7f853d034f9e2e812d9bf5552
Author: Glenn Morris <address@hidden>
Commit: Glenn Morris <address@hidden>

    Write each generated character property lisp file only once
    
    * admin/unidata/unidata-gen.el (unidata-file-alist):
    Rename from unidata-prop-alist.  All users changed.
    Use file name rather than property name as the key.
    (unidata-prop-prop): New function.
    (unidata-prop-index, unidata-prop-generator, unidata-prop-docstring)
    (unidata-prop-describer, unidata-prop-default, unidata-prop-val-list):
    Change to parse the argument rather than unidata-prop-alist.
    (unidata-gen-table-character, unidata-gen-table)
    (unidata-gen-table-symbol, unidata-gen-table-integer)
    (unidata-gen-table-numeric, unidata-gen-table-word-list)
    (unidata-gen-table-name, unidata-gen-table-decomposition)
    (unidata-gen-table-special-casing): Pass index as an argument.
    (unidata-check): Adapt to unidata-file-alist.
    Pass index to generator functions.
    (unidata-gen-files): Adapt to unidata-file-alist.
    Write each output file once only.  Overwrite rather than delete.
---
 admin/unidata/unidata-gen.el | 466 ++++++++++++++++++++++---------------------
 1 file changed, 235 insertions(+), 231 deletions(-)

diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index 9ebcbe0..42489b1 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -149,14 +149,14 @@
     (setq unidata-list (cdr table))))
 
 ;; Alist of this form:
-;;   (PROP INDEX GENERATOR FILENAME DOCSTRING DESCRIBER DEFAULT VAL-LIST)
+;;   (FILENAME (PROP INDEX GENERATOR DOCSTRING DESCRIBER DEFAULT VAL-LIST) ...)
+;; FILENAME: filename to store the char-table(s)
 ;; PROP: character property
 ;; INDEX: index to each element of unidata-list for PROP.
 ;;   It may be a function that generates an alist of character codes
 ;;   vs. the corresponding property values.  Currently, only character
 ;;   codepoints or symbol values are supported in this case.
 ;; GENERATOR: function to generate a char-table
-;; FILENAME: filename to store the char-table
 ;; DOCSTRING: docstring for the property
 ;; DESCRIBER: function to call to get a description string of property value
 ;; DEFAULT: the default value of the property.  It may have the form
@@ -166,111 +166,132 @@
 ;;   between FROMn and TOn is VALn.
 ;; VAL-LIST: list of specially ordered property values
 
-(defconst unidata-prop-alist
-  '((name
-     1 unidata-gen-table-name "uni-name.el"
-     "Unicode character name.
+(defconst unidata-file-alist
+  '(("uni-name.el"
+     (name
+      1 unidata-gen-table-name
+      "Unicode character name.
 Property value is a string or nil.
 The value nil stands for the default value \"null string\")."
-     nil
-     nil)
-    (general-category
-     2 unidata-gen-table-symbol "uni-category.el"
-     "Unicode general category.
+      nil
+      nil))
+    ("uni-category.el"
+     (general-category
+      2 unidata-gen-table-symbol
+      "Unicode general category.
 Property value is one of the following symbols:
   Lu, Ll, Lt, Lm, Lo, Mn, Mc, Me, Nd, Nl, No, Pc, Pd, Ps, Pe, Pi, Pf, Po,
   Sm, Sc, Sk, So, Zs, Zl, Zp, Cc, Cf, Cs, Co, Cn"
-     unidata-describe-general-category
-     Cn
-     ;; The order of elements must be in sync with unicode_category_t
-     ;; in src/character.h.
-     (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po
-        Sm Sc Sk So Zs Zl Zp Cc Cf Cs Co Cn))
-    (canonical-combining-class
-     3 unidata-gen-table-integer "uni-combining.el"
-     "Unicode canonical combining class.
+      unidata-describe-general-category
+      Cn
+      ;; The order of elements must be in sync with
+      ;; unicode_category_t in src/character.h.
+      (Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd Ps Pe Pi Pf Po
+         Sm Sc Sk So Zs Zl Zp Cc Cf Cs Co Cn)))
+    ("uni-combining.el"
+     (canonical-combining-class
+      3 unidata-gen-table-integer
+      "Unicode canonical combining class.
 Property value is an integer."
-     unidata-describe-canonical-combining-class
-     0)
-    (bidi-class
-     4 unidata-gen-table-symbol "uni-bidi.el"
-     "Unicode bidi class.
+      unidata-describe-canonical-combining-class
+      0))
+    ("uni-bidi.el"
+     (bidi-class
+      4 unidata-gen-table-symbol
+      "Unicode bidi class.
 Property value is one of the following symbols:
   L, LRE, LRO, LRI, R, AL, RLE, RLO, RLI, FSI, PDF, PDI,
   EN, ES, ET, AN, CS, NSM, BN, B, S, WS, ON"
-     unidata-describe-bidi-class
-     ;; The assignment of default values to blocks of code points
-     ;; follows the file DerivedBidiClass.txt from the Unicode
-     ;; Character Database (UCD).
-     (L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
-       (#x0590 #x05FF R) (#x07C0 #x08FF R)
-       (#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
-     ;; The order of elements must be in sync with bidi_type_t in
-     ;; src/dispextern.h.
-     (L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI
-       ES ET CS NSM S WS ON))
-    (decomposition
-     5 unidata-gen-table-decomposition "uni-decomposition.el"
-     "Unicode decomposition mapping.
+      unidata-describe-bidi-class
+      ;; The assignment of default values to blocks of code points
+      ;; follows the file DerivedBidiClass.txt from the Unicode
+      ;; Character Database (UCD).
+      (L (#x0600 #x06FF AL) (#xFB50 #xFDFF AL) (#xFE70 #xFEFF AL)
+        (#x0590 #x05FF R) (#x07C0 #x08FF R)
+        (#xFB1D #xFB4F R) (#x10800 #x10FFF R) (#x1E800 #x1EFFF R))
+      ;; The order of elements must be in sync with bidi_type_t in
+      ;; src/dispextern.h.
+      (L R EN AN BN B AL LRE LRO RLE RLO PDF LRI RLI FSI PDI
+        ES ET CS NSM S WS ON)))
+    ("uni-decomposition.el"
+     (decomposition
+      5 unidata-gen-table-decomposition
+      "Unicode decomposition mapping.
 Property value is a list of characters.  The first element may be
 one of these symbols representing compatibility formatting tag:
   font, noBreak, initial, medial, final, isolated, circle, super,
   sub, vertical, wide, narrow, small, square, fraction, compat"
-     unidata-describe-decomposition)
-    (decimal-digit-value
-     6 unidata-gen-table-integer "uni-decimal.el"
-     "Unicode numeric value (decimal digit).
+      unidata-describe-decomposition))
+    ("uni-decimal.el"
+     (decimal-digit-value
+      6 unidata-gen-table-integer
+      "Unicode numeric value (decimal digit).
 Property value is an integer 0..9, or nil.
-The value nil stands for NaN \"Numeric_Value\".")
-    (digit-value
-     7 unidata-gen-table-integer "uni-digit.el"
-     "Unicode numeric value (digit).
+The value nil stands for NaN \"Numeric_Value\"."))
+    ("uni-digit.el"
+     (digit-value
+      7 unidata-gen-table-integer
+      "Unicode numeric value (digit).
 Property value is an integer 0..9, or nil.
-The value nil stands for NaN \"Numeric_Value\".")
-    (numeric-value
-     8 unidata-gen-table-numeric "uni-numeric.el"
-     "Unicode numeric value (numeric).
+The value nil stands for NaN \"Numeric_Value\"."))
+    ("uni-numeric.el"
+     (numeric-value
+      8 unidata-gen-table-numeric
+      "Unicode numeric value (numeric).
 Property value is an integer, a floating point, or nil.
-The value nil stands for NaN \"Numeric_Value\".")
-    (mirrored
-     9 unidata-gen-table-symbol "uni-mirrored.el"
-     "Unicode bidi mirrored flag.
+The value nil stands for NaN \"Numeric_Value\"."))
+    ("uni-mirrored.el"
+     (mirrored
+      9 unidata-gen-table-symbol
+      "Unicode bidi mirrored flag.
 Property value is a symbol `Y' or `N'.  See also the property `mirroring'."
-     nil
-     N)
-    (old-name
-     10 unidata-gen-table-name "uni-old-name.el"
-     "Unicode old names as published in Unicode 1.0.
+      nil
+      N)
+     (mirroring
+      unidata-gen-mirroring-list unidata-gen-table-character
+      "Unicode bidi-mirroring characters.
+Property value is a character that has the corresponding mirroring image or 
nil.
+The value nil means that the actual property value of a character
+is the character itself."))
+    ("uni-old-name.el"
+     (old-name
+      10 unidata-gen-table-name
+      "Unicode old names as published in Unicode 1.0.
 Property value is a string or nil.
-The value nil stands for the default value \"null string\").")
-    (iso-10646-comment
-     11 unidata-gen-table-name "uni-comment.el"
-     "Unicode ISO 10646 comment.
-Property value is a string.")
-    (uppercase
-     12 unidata-gen-table-character "uni-uppercase.el"
-     "Unicode simple uppercase mapping.
+The value nil stands for the default value \"null string\")."))
+    ("uni-comment.el"
+     (iso-10646-comment
+      11 unidata-gen-table-name
+      "Unicode ISO 10646 comment.
+Property value is a string."))
+    ("uni-uppercase.el"
+     (uppercase
+      12 unidata-gen-table-character
+      "Unicode simple uppercase mapping.
 Property value is a character or nil.
 The value nil means that the actual property value of a character
 is the character itself."
-     string)
-    (lowercase
-     13 unidata-gen-table-character "uni-lowercase.el"
-     "Unicode simple lowercase mapping.
+      string))
+    ("uni-lowercase.el"
+     (lowercase
+      13 unidata-gen-table-character
+      "Unicode simple lowercase mapping.
 Property value is a character or nil.
 The value nil means that the actual property value of a character
 is the character itself."
-     string)
-    (titlecase
-     14 unidata-gen-table-character "uni-titlecase.el"
-     "Unicode simple titlecase mapping.
+      string))
+    ("uni-titlecase.el"
+     (titlecase
+      14 unidata-gen-table-character
+      "Unicode simple titlecase mapping.
 Property value is a character or nil.
 The value nil means that the actual property value of a character
 is the character itself."
-     string)
-    (special-uppercase
-     2 unidata-gen-table-special-casing "uni-special-uppercase.el"
-     "Unicode unconditional special casing mapping.
+      string))
+    ("uni-special-uppercase.el"
+     (special-uppercase
+      2 unidata-gen-table-special-casing
+      "Unicode unconditional special casing mapping.
 
 Property value is (possibly empty) string or nil.  The value nil denotes that
 `uppercase' property should be consulted instead.  A string denotes what
@@ -279,10 +300,11 @@ sequence of characters given character maps into.
 This mapping includes language- and context-independent special casing rules
 defined by Unicode only.  It also does not include association which would
 duplicate information from `uppercase' property."
-     nil)
-    (special-lowercase
-     0 unidata-gen-table-special-casing "uni-special-lowercase.el"
-     "Unicode unconditional special casing mapping.
+      nil))
+    ("uni-special-lowercase.el"
+     (special-lowercase
+      0 unidata-gen-table-special-casing
+      "Unicode unconditional special casing mapping.
 
 Property value is (possibly empty) string or nil.  The value nil denotes that
 `lowercase' property should be consulted instead.  A string denotes what
@@ -291,10 +313,11 @@ sequence of characters given character maps into.
 This mapping includes language- and context-independent special casing rules
 defined by Unicode only.  It also does not include association which would
 duplicate information from `lowercase' property."
-     nil)
-    (special-titlecase
-     1 unidata-gen-table-special-casing "uni-special-titlecase.el"
-     "Unicode unconditional special casing mapping.
+      nil))
+    ("uni-special-titlecase.el"
+     (special-titlecase
+      1 unidata-gen-table-special-casing
+      "Unicode unconditional special casing mapping.
 
 Property value is (possibly empty) string or nil.  The value nil denotes that
 `titlecase' property should be consulted instead.  A string denotes what
@@ -303,38 +326,33 @@ sequence of characters given character maps into.
 This mapping includes language- and context-independent special casing rules
 defined by Unicode only.  It also does not include association which would
 duplicate information from `titlecase' property."
-     nil)
-    (mirroring
-     unidata-gen-mirroring-list unidata-gen-table-character "uni-mirrored.el"
-     "Unicode bidi-mirroring characters.
-Property value is a character that has the corresponding mirroring image or 
nil.
-The value nil means that the actual property value of a character
-is the character itself.")
-    (paired-bracket
-     unidata-gen-brackets-list unidata-gen-table-character "uni-brackets.el"
-     "Unicode bidi paired-bracket characters.
+      nil))
+    ("uni-brackets.el"
+     (paired-bracket
+      unidata-gen-brackets-list unidata-gen-table-character
+      "Unicode bidi paired-bracket characters.
 Property value is the paired bracket character, or nil.
 The value nil means that the character is neither an opening nor
 a closing paired bracket."
-     string)
-    (bracket-type
-     unidata-gen-bracket-type-list unidata-gen-table-symbol "uni-brackets.el"
-     "Unicode bidi paired-bracket type.
+      string)
+     (bracket-type
+      unidata-gen-bracket-type-list unidata-gen-table-symbol
+      "Unicode bidi paired-bracket type.
 Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
-     unidata-describe-bidi-bracket-type
-     n
-     ;; The order of elements must be in sync with bidi_bracket_type_t
-     ;; in src/dispextern.h.
-     (n o c))))
+      unidata-describe-bidi-bracket-type
+      n
+      ;; The order of elements must be in sync with bidi_bracket_type_t
+      ;; in src/dispextern.h.
+      (n o c)))))
 
 ;; Functions to access the above data.
-(defsubst unidata-prop-index (prop) (nth 1 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-generator (prop) (nth 2 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-file (prop) (nth 3 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-docstring (prop) (nth 4 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-describer (prop) (nth 5 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-default (prop) (nth 6 (assq prop unidata-prop-alist)))
-(defsubst unidata-prop-val-list (prop) (nth 7 (assq prop unidata-prop-alist)))
+(defsubst unidata-prop-prop (proplist) (nth 0 proplist))
+(defsubst unidata-prop-index (proplist) (nth 1 proplist))
+(defsubst unidata-prop-generator (proplist) (nth 2 proplist))
+(defsubst unidata-prop-docstring (proplist) (nth 3 proplist))
+(defsubst unidata-prop-describer (proplist) (nth 4 proplist))
+(defsubst unidata-prop-default (proplist) (nth 5 proplist))
+(defsubst unidata-prop-val-list (proplist) (nth 6 proplist))
 
 
 ;; SIMPLE TABLE
@@ -362,9 +380,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' 
(None)."
 ;;   3rd: 0 (corresponding to uniprop_encode_character in chartab.c)
 ;;   4th to 5th: nil
 
-(defun unidata-gen-table-character (prop &rest ignore)
+(defun unidata-gen-table-character (prop prop-idx &rest ignore)
   (let ((table (make-char-table 'char-code-property-table))
-       (prop-idx (unidata-prop-index prop))
        (vec (make-vector 128 0))
        (tail unidata-list)
        elt range val idx slot)
@@ -469,13 +486,12 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
 
 ;; Generate a char-table for the character property PROP.
 
-(defun unidata-gen-table (prop val-func default-value val-list)
+(defun unidata-gen-table (prop prop-idx val-func default-value val-list)
   (let ((table (make-char-table 'char-code-property-table))
-       (prop-idx (unidata-prop-index prop))
        (vec (make-vector 128 0))
        ;; When this warning is printed, there's a need to make the
        ;; following changes:
-       ;; (1) update unidata-prop-alist with the new bidi-class values;
+       ;; (1) update unidata-file-alist with the new bidi-class values;
        ;; (2) extend bidi_type_t enumeration on src/dispextern.h to
        ;;     include the new classes;
        ;; (3) possibly update the assertion in bidi.c:bidi_check_type; and
@@ -596,8 +612,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' 
(None)."
     (set-char-table-extra-slot table 4 (vconcat (mapcar 'car val-list)))
     table))
 
-(defun unidata-gen-table-symbol (prop default-value val-list)
-  (let ((table (unidata-gen-table prop
+(defun unidata-gen-table-symbol (prop index default-value val-list)
+  (let ((table (unidata-gen-table prop index
                                  #'(lambda (x) (and (> (length x) 0)
                                                     (intern x)))
                                  default-value val-list)))
@@ -605,8 +621,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' 
(None)."
     (set-char-table-extra-slot table 2 1)
     table))
 
-(defun unidata-gen-table-integer (prop default-value val-list)
-  (let ((table (unidata-gen-table prop
+(defun unidata-gen-table-integer (prop index default-value val-list)
+  (let ((table (unidata-gen-table prop index
                                  #'(lambda (x) (and (> (length x) 0)
                                                     (string-to-number x)))
                                  default-value val-list)))
@@ -614,8 +630,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' 
(None)."
     (set-char-table-extra-slot table 2 1)
     table))
 
-(defun unidata-gen-table-numeric (prop default-value val-list)
-  (let ((table (unidata-gen-table prop
+(defun unidata-gen-table-numeric (prop index default-value val-list)
+  (let ((table (unidata-gen-table prop index
                                  #'(lambda (x)
                                      (if (string-match "/" x)
                                          (/ (float (string-to-number x))
@@ -921,9 +937,8 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' 
(None)."
 
 ;; Generate a char-table for character names.
 
-(defun unidata-gen-table-word-list (prop val-func)
+(defun unidata-gen-table-word-list (prop prop-idx val-func)
   (let ((table (make-char-table 'char-code-property-table))
-       (prop-idx (unidata-prop-index prop))
        (word-list (list nil))
        word-table
        block-list block-word-table block-end
@@ -1068,8 +1083,8 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
     (or (byte-code-function-p (symbol-function fun))
        (byte-compile fun))))
 
-(defun unidata-gen-table-name (prop &rest ignore)
-  (let* ((table (unidata-gen-table-word-list prop 'unidata-split-name))
+(defun unidata-gen-table-name (prop index &rest ignore)
+  (let* ((table (unidata-gen-table-word-list prop index 'unidata-split-name))
         (word-tables (char-table-extra-slot table 4)))
     (unidata--ensure-compiled 'unidata-get-name 'unidata-put-name)
     (set-char-table-extra-slot table 1 (symbol-function 'unidata-get-name))
@@ -1106,8 +1121,8 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
        (nreverse l)))))
 
 
-(defun unidata-gen-table-decomposition (prop &rest ignore)
-  (let* ((table (unidata-gen-table-word-list prop 
'unidata-split-decomposition))
+(defun unidata-gen-table-decomposition (prop index &rest ignore)
+  (let* ((table (unidata-gen-table-word-list prop index 
'unidata-split-decomposition))
         (word-tables (char-table-extra-slot table 4)))
     (unidata--ensure-compiled 'unidata-get-decomposition
                              'unidata-put-decomposition)
@@ -1149,9 +1164,8 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
         (forward-line)))
     result))
 
-(defun unidata-gen-table-special-casing (prop &rest ignore)
-  (let ((table (make-char-table 'char-code-property-table))
-        (prop-idx (unidata-prop-index prop)))
+(defun unidata-gen-table-special-casing (prop prop-idx &rest ignore)
+  (let ((table (make-char-table 'char-code-property-table)))
     (set-char-table-extra-slot table 0 prop)
     (mapc (lambda (entry)
             (let ((ch (car entry)) (v (nth prop-idx (cdr entry))))
@@ -1322,56 +1336,57 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
 ;;   (unidata-check))
 
 (defun unidata-check ()
-  (dolist (elt unidata-prop-alist)
-    (let* ((prop (car elt))
-          (index (unidata-prop-index prop))
-          (generator (unidata-prop-generator prop))
-          (default-value (unidata-prop-default prop))
-          (val-list (unidata-prop-val-list prop))
-          (table (progn
-                   (message "Generating %S table..." prop)
-                   (funcall generator prop default-value val-list)))
-          (decoder (char-table-extra-slot table 1))
-          (alist (and (functionp index)
-                      (funcall index)))
-          (check #x400))
-      (dolist (e unidata-list)
-       (let* ((char (car e))
-              (val1
-               (if alist (nth 1 (assoc char alist))
-                 (nth index e)))
-              val2)
-         (if (and (stringp val1) (= (length val1) 0))
-             (setq val1 nil))
-         (unless (or (consp char)
-                     (integerp decoder))
-           (setq val2
-                 (cond ((functionp decoder)
-                        (funcall decoder char (aref table char) table))
-                       (t              ; must be nil
-                        (aref table char))))
-           (if val1
-               (cond ((eq generator 'unidata-gen-table-symbol)
-                      (setq val1 (intern val1)))
-                     ((eq generator 'unidata-gen-table-integer)
-                      (setq val1 (string-to-number val1)))
-                     ((eq generator 'unidata-gen-table-character)
-                      (setq val1 (string-to-number val1 16)))
-                     ((eq generator 'unidata-gen-table-decomposition)
-                      (setq val1 (unidata-split-decomposition val1))))
-             (cond ((eq prop 'decomposition)
-                    (setq val1 (list char)))
-                   ((eq prop 'bracket-type)
-                    (setq val1 'n))))
-           (when (>= char check)
-             (message "%S %04X" prop check)
-             (setq check (+ check #x400)))
-           (or (equal val1 val2)
-               ;; <control> characters get a 'name' property of nil
-               (and (eq prop 'name) (string= val1 "<control>") (null val2))
-               (insert (format "> %04X %S\n< %04X %S\n"
-                               char val1 char val2)))
-           (sit-for 0)))))))
+  (dolist (elt unidata-file-alist)
+    (dolist (proplist (cdr elt))
+      (let* ((prop (unidata-prop-prop proplist))
+            (index (unidata-prop-index proplist))
+            (generator (unidata-prop-generator proplist))
+            (default-value (unidata-prop-default proplist))
+            (val-list (unidata-prop-val-list proplist))
+            (table (progn
+                     (message "Generating %S table..." prop)
+                     (funcall generator prop index default-value val-list)))
+            (decoder (char-table-extra-slot table 1))
+            (alist (and (functionp index)
+                        (funcall index)))
+            (check #x400))
+       (dolist (e unidata-list)
+         (let* ((char (car e))
+                (val1
+                 (if alist (nth 1 (assoc char alist))
+                   (nth index e)))
+                val2)
+           (if (and (stringp val1) (= (length val1) 0))
+               (setq val1 nil))
+           (unless (or (consp char)
+                       (integerp decoder))
+             (setq val2
+                   (cond ((functionp decoder)
+                          (funcall decoder char (aref table char) table))
+                         (t            ; must be nil
+                          (aref table char))))
+             (if val1
+                 (cond ((eq generator 'unidata-gen-table-symbol)
+                        (setq val1 (intern val1)))
+                       ((eq generator 'unidata-gen-table-integer)
+                        (setq val1 (string-to-number val1)))
+                       ((eq generator 'unidata-gen-table-character)
+                        (setq val1 (string-to-number val1 16)))
+                       ((eq generator 'unidata-gen-table-decomposition)
+                        (setq val1 (unidata-split-decomposition val1))))
+               (cond ((eq prop 'decomposition)
+                      (setq val1 (list char)))
+                     ((eq prop 'bracket-type)
+                      (setq val1 'n))))
+             (when (>= char check)
+               (message "%S %04X" prop check)
+               (setq check (+ check #x400)))
+             (or (equal val1 val2)
+                 ;; <control> characters get a 'name' property of nil
+                 (and (eq prop 'name) (string= val1 "<control>") (null val2))
+                 (insert (format "> %04X %S\n< %04X %S\n"
+                                 char val1 char val2)))
+             (sit-for 0))))))))
 
 ;; The entry function.  It generates files described in the header
 ;; comment of this file.
@@ -1389,61 +1404,50 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
         (coding-system-for-read 'utf-8)
        (charprop-file (expand-file-name "charprop.el" dest-dir))
        (unidata-dir data-dir))
-    (dolist (elt unidata-prop-alist)
-      (let* ((prop (car elt))
-            (file (expand-file-name (unidata-prop-file prop) dest-dir)))
-       (if (file-exists-p file)
-           (delete-file file))))
     (unidata-setup-list unidata-text-file)
     (with-temp-file charprop-file
       (insert ";; Automatically generated by unidata-gen.el.\n")
-      (dolist (elt unidata-prop-alist)
-       (let* ((prop (car elt))
-              (generator (unidata-prop-generator prop))
-              (file (expand-file-name (unidata-prop-file prop) dest-dir))
+      (dolist (elt unidata-file-alist)
+       (let* ((file (expand-file-name (car elt) dest-dir))
               (basename (file-name-nondirectory file))
-              (docstring (unidata-prop-docstring prop))
-              (describer (unidata-prop-describer prop))
-              (default-value (unidata-prop-default prop))
-              (val-list (unidata-prop-val-list prop))
-              ;; Avoid creating backup files for those uni-*.el files
-              ;; that hold more than one table.
-              (backup-inhibited t)
-              table)
-         ;; Filename in this comment line is extracted by sed in
-         ;; Makefile.
+              (cbuff (current-buffer)))
+         (or noninteractive (message "Generating %s..." file))
+         ;; Filename in this comment line is extracted by sed in Makefile.
          (insert (format ";; FILE: %s\n" basename))
-         (insert (format "(define-char-code-property '%S %S\n  %S)\n"
-                         prop basename docstring))
          (with-temp-buffer
-           (or noninteractive (message "Generating %s..." file))
-           (when (file-exists-p file)
-             (insert-file-contents file)
-             (goto-char (point-max))
-             (search-backward ";; Local Variables:"))
-           (setq table (funcall generator prop default-value val-list))
-           (when describer
-             (unless (subrp (symbol-function describer))
-               (unidata--ensure-compiled describer)
-               (setq describer (symbol-function describer)))
-             (set-char-table-extra-slot table 3 describer))
-           (if (bobp)
-               (insert ";; Copyright (C) 1991-2014 Unicode, Inc.
+           (insert ";; Copyright (C) 1991-2014 Unicode, Inc.
 ;; This file was generated from the Unicode data files at
 ;; http://www.unicode.org/Public/UNIDATA/.
-;; See lisp/international/README for the copyright and permission notice.\n"))
-           (insert (format "(define-char-code-property '%S\n  %S\n  %S)\n"
-                           prop table docstring))
-           (if (eobp)
-               (insert ";; Local Variables:\n"
-                       ";; coding: utf-8\n"
-                       ";; version-control: never\n"
-                       ";; no-byte-compile: t\n"
-                       ";; no-update-autoloads: t\n"
-                       ";; End:\n\n"
-                       (format ";; %s ends here\n" basename)))
-           (write-file file)
-           (or noninteractive (message "Generating %s...done" file)))))
+;; See lisp/international/README for the copyright and permission notice.\n")
+           (dolist (proplist (cdr elt))
+             (let ((prop (unidata-prop-prop proplist))
+                   (index (unidata-prop-index proplist))
+                   (generator (unidata-prop-generator proplist))
+                   (docstring (unidata-prop-docstring proplist))
+                   (describer (unidata-prop-describer proplist))
+                   (default-value (unidata-prop-default proplist))
+                   (val-list (unidata-prop-val-list proplist))
+                   table)
+               (with-current-buffer cbuff
+                 (insert (format "(define-char-code-property '%S %S\n  %S)\n"
+                                 prop basename docstring)))
+               (setq table (funcall generator prop index default-value 
val-list))
+               (when describer
+                 (unless (subrp (symbol-function describer))
+                   (unidata--ensure-compiled describer)
+                   (setq describer (symbol-function describer)))
+                 (set-char-table-extra-slot table 3 describer))
+               (insert (format "(define-char-code-property '%S\n  %S\n  %S)\n"
+                               prop table docstring))))
+           (insert ";; Local Variables:\n"
+                   ";; coding: utf-8\n"
+                   ";; version-control: never\n"
+                   ";; no-byte-compile: t\n"
+                   ";; no-update-autoloads: t\n"
+                   ";; End:\n\n"
+                   (format ";; %s ends here\n" basename))
+           (write-file file nil))
+         (or noninteractive (message "Generating %s...done" file))))
       (message "Writing %s..." charprop-file)
       (insert ";; Local Variables:\n"
              ";; coding: utf-8\n"



reply via email to

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