1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-28 00:01:33 -08:00

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.
This commit is contained in:
Glenn Morris 2017-04-23 16:31:02 -07:00
parent 46dafe4103
commit d22ddf5944

View file

@ -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"