summaryrefslogtreecommitdiff
path: root/lib/uniname/gen-uninames.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/uniname/gen-uninames.lisp')
-rwxr-xr-xlib/uniname/gen-uninames.lisp95
1 files changed, 69 insertions, 26 deletions
diff --git a/lib/uniname/gen-uninames.lisp b/lib/uniname/gen-uninames.lisp
index 937b50e..5ebb921 100755
--- a/lib/uniname/gen-uninames.lisp
+++ b/lib/uniname/gen-uninames.lisp
@@ -1,7 +1,30 @@
#!/usr/local/bin/clisp -C
;;; Creation of gnulib's uninames.h from the UnicodeData.txt table.
-;;; Bruno Haible 2000-12-28
+
+;;; Copyright (C) 2000-2022 Free Software Foundation, Inc.
+;;; Written by Bruno Haible <bruno@clisp.org>, 2000-12-28.
+;;;
+;;; This program is free software.
+;;; It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
+;;; You can redistribute it and/or modify it under either
+;;; - the terms of the GNU Lesser General Public License as published
+;;; by the Free Software Foundation; either version 3, or (at your
+;;; option) any later version, or
+;;; - the terms of the GNU General Public License as published by the
+;;; Free Software Foundation; either version 2, or (at your option)
+;;; any later version, or
+;;; - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;;; Lesser General Public License and the GNU General Public License
+;;; for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License and of the GNU General Public License along with this
+;;; program. If not, see <https://www.gnu.org/licenses/>.
(defparameter add-comments nil)
@@ -58,11 +81,12 @@
(unless (or (<= #xFE00 code #xFE0F) (<= #xE0100 code #xE01EF))
(push (make-unicode-char :index name-index
:name name-string)
- all-chars)
+ all-chars
+ )
(setf (gethash code all-chars-hashed) (car all-chars))
;; Update the contiguous range, or start a new range.
(if (and range (= (1+ (range-end-code range)) code))
- (setf (range-end-code range) code)
+ (setf (range-end-code range) code)
(progn
(when range
(push range all-ranges))
@@ -70,32 +94,33 @@
:start-code code
:end-code code))))
(incf name-index)
- (setq last-code code)
- ) ) ) )
+ ) ) ) )
) ) ) )
(setq all-chars (nreverse all-chars))
(if range
- (push range all-ranges))
+ (push range all-ranges))
(setq all-ranges (nreverse all-ranges))
(when aliasfile
;; Read all characters and names from the alias file.
(with-open-file (istream aliasfile :direction :input)
(loop
- (let ((line (read-line istream nil nil)))
- (unless line (return))
- (let* ((i1 (position #\; line))
- (i2 (position #\; line :start (1+ i1)))
- (code-string (subseq line 0 i1))
- (code (parse-integer code-string :radix 16))
- (name-string (subseq line (1+ i1) i2))
- (uc (gethash code all-chars-hashed)))
- (when uc
- (push (make-unicode-char :index (unicode-char-index uc)
- :name name-string)
- all-aliases)
- ) ) ) ) ) )
+ (let ((line (read-line istream nil nil)))
+ (unless line (return))
+ (unless (or (equal line "") (equal (subseq line 0 1) "#"))
+ (let* ((i1 (position #\; line))
+ (i2 (position #\; line :start (1+ i1)))
+ (code-string (subseq line 0 i1))
+ (code (parse-integer code-string :radix 16))
+ (name-string (subseq line (1+ i1) i2))
+ (uc (gethash code all-chars-hashed)))
+ (when uc
+ (push (make-unicode-char :index (unicode-char-index uc)
+ :name name-string)
+ all-aliases
+ ) ) ) ) ) ) ) )
(setq all-aliases (nreverse all-aliases)
- all-chars-and-aliases (append all-chars all-aliases))
+ all-chars-and-aliases (append all-chars all-aliases)
+ )
;; Split into words.
(let ((words-by-length (make-array 0 :adjustable t)))
(dolist (name (list* "HANGUL SYLLABLE" "CJK COMPATIBILITY" "VARIATION"
@@ -151,6 +176,28 @@
(format ostream " * Unicode character name table.~%")
(format ostream " * Generated automatically by the gen-uninames utility.~%")
(format ostream " */~%")
+ (format ostream "/* Copyright (C) 2000-2022 Free Software Foundation, Inc.~%")
+ (format ostream "~%")
+ (format ostream " This file is free software.~%")
+ (format ostream " It is dual-licensed under \"the GNU LGPLv3+ or the GNU GPLv2+\".~%")
+ (format ostream " You can redistribute it and/or modify it under either~%")
+ (format ostream " - the terms of the GNU Lesser General Public License as published~%")
+ (format ostream " by the Free Software Foundation; either version 3, or (at your~%")
+ (format ostream " option) any later version, or~%")
+ (format ostream " - the terms of the GNU General Public License as published by the~%")
+ (format ostream " Free Software Foundation; either version 2, or (at your option)~%")
+ (format ostream " any later version, or~%")
+ (format ostream " - the same dual license \"the GNU LGPLv3+ or the GNU GPLv2+\".~%")
+ (format ostream "~%")
+ (format ostream " This file is distributed in the hope that it will be useful,~%")
+ (format ostream " but WITHOUT ANY WARRANTY; without even the implied warranty of~%")
+ (format ostream " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU~%")
+ (format ostream " Lesser General Public License and the GNU General Public License~%")
+ (format ostream " for more details.~%")
+ (format ostream "~%")
+ (format ostream " You should have received a copy of the GNU Lesser General Public~%")
+ (format ostream " License and of the GNU General Public License along with this~%")
+ (format ostream " program. If not, see <https://www.gnu.org/licenses/>. */~%")
(format ostream "~%")
(format ostream "static const char unicode_name_words[~D] = {~%"
(let ((sum 0))
@@ -279,9 +326,7 @@
(incf i (length (unicode-char-word-indices uc)))
) )
(format ostream "};~%")
- (format ostream "static const struct { uint16_t index; uint32_t name:24; }~%")
- (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%")
- (format ostream "unicode_name_to_index[~D] = {~%"
+ (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_name_to_index[~D] = {~%"
(length all-chars-and-aliases)
)
(dolist (uc all-chars-and-aliases)
@@ -295,9 +340,7 @@
(format ostream "~%")
)
(format ostream "};~%")
- (format ostream "static const struct { uint16_t index; uint32_t name:24; }~%")
- (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%")
- (format ostream "unicode_index_to_name[~D] = {~%"
+ (format ostream "static const struct { uint16_t index; uint32_t name:24; } ATTRIBUTE_PACKED unicode_index_to_name[~D] = {~%"
(length all-chars)
)
(dolist (uc (sort (copy-list all-chars) #'< :key #'unicode-char-index))