emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master d67d49c: Generate char-script-table from Unicode so


From: Glenn Morris
Subject: [Emacs-diffs] master d67d49c: Generate char-script-table from Unicode source. (Bug#20789)
Date: Wed, 17 Jun 2015 06:44:13 +0000

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

    Generate char-script-table from Unicode source.  (Bug#20789)
    
    * admin/unidata/Makefile.in (AWK): New, set by configure.
    (all): Add charscript.el.
    (blocks): New variable.
    (charscript.el, ${unidir}/charscript.el): New targets.
    (extraclean): Also remove generated charscript.el.
    
    * admin/unidata/blocks.awk: New script.
    
    * admin/unidata/Blocks.txt: New data file, from unicode.org.
    
    * lisp/international/characters.el: Load charscript.
    
    * src/Makefile.in (charscript): New variable.
    (${charscript}): New target.
    (${lispintdir}/characters.elc): Depend on charscript.elc.
    (temacs$(EXEEXT)): Depend on charscript.
    
    ; * admin/unidata/README: Mention Blocks.txt.
    
    ; * .gitignore: Add lisp/international/charscript.el.
---
 .gitignore                       |    1 +
 admin/unidata/Blocks.txt         |  298 ++++++++++++++++++++++++++++++++++++++
 admin/unidata/Makefile.in        |   16 ++-
 admin/unidata/README             |    4 +
 admin/unidata/blocks.awk         |  225 ++++++++++++++++++++++++++++
 lisp/international/characters.el |  234 +-----------------------------
 src/Makefile.in                  |    8 +-
 7 files changed, 554 insertions(+), 232 deletions(-)

diff --git a/.gitignore b/.gitignore
index 092fd03..1e2f206 100644
--- a/.gitignore
+++ b/.gitignore
@@ -195,6 +195,7 @@ admin/charsets/jisx2131-filter
 admin/unidata/unidata.txt
 etc/charsets/*.map
 lisp/international/charprop.el
+lisp/international/charscript.el
 lisp/international/cp51932.el
 lisp/international/eucjp-ms.el
 lisp/international/uni-*.el
diff --git a/admin/unidata/Blocks.txt b/admin/unidata/Blocks.txt
new file mode 100644
index 0000000..0a4a580
--- /dev/null
+++ b/admin/unidata/Blocks.txt
@@ -0,0 +1,298 @@
+# Blocks-8.0.0.txt
+# Date: 2014-11-10, 23:04:00 GMT [KW]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2014 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+#
+# Format:
+# Start Code..End Code; Block Name
+
+# ================================================
+
+# Note:   When comparing block names, casing, whitespace, hyphens,
+#         and underbars are ignored.
+#         For example, "Latin Extended-A" and "latin extended a" are 
equivalent.
+#         For more information on the comparison of property values, 
+#            see UAX #44: http://www.unicode.org/reports/tr44/
+#
+#  All block ranges start with a value where (cp MOD 16) = 0,
+#  and end with a value where (cp MOD 16) = 15. In other words,
+#  the last hexadecimal digit of the start of range is ...0 
+#  and the last hexadecimal digit of the end of range is ...F.
+#  This constraint on block ranges guarantees that allocations
+#  are done in terms of whole columns, and that code chart display
+#  never involves splitting columns in the charts.
+#
+#  All code points not explicitly listed for Block
+#  have the value No_Block.
+
+# Property:    Block
+#
+# @missing: 0000..10FFFF; No_Block
+
+0000..007F; Basic Latin
+0080..00FF; Latin-1 Supplement
+0100..017F; Latin Extended-A
+0180..024F; Latin Extended-B
+0250..02AF; IPA Extensions
+02B0..02FF; Spacing Modifier Letters
+0300..036F; Combining Diacritical Marks
+0370..03FF; Greek and Coptic
+0400..04FF; Cyrillic
+0500..052F; Cyrillic Supplement
+0530..058F; Armenian
+0590..05FF; Hebrew
+0600..06FF; Arabic
+0700..074F; Syriac
+0750..077F; Arabic Supplement
+0780..07BF; Thaana
+07C0..07FF; NKo
+0800..083F; Samaritan
+0840..085F; Mandaic
+08A0..08FF; Arabic Extended-A
+0900..097F; Devanagari
+0980..09FF; Bengali
+0A00..0A7F; Gurmukhi
+0A80..0AFF; Gujarati
+0B00..0B7F; Oriya
+0B80..0BFF; Tamil
+0C00..0C7F; Telugu
+0C80..0CFF; Kannada
+0D00..0D7F; Malayalam
+0D80..0DFF; Sinhala
+0E00..0E7F; Thai
+0E80..0EFF; Lao
+0F00..0FFF; Tibetan
+1000..109F; Myanmar
+10A0..10FF; Georgian
+1100..11FF; Hangul Jamo
+1200..137F; Ethiopic
+1380..139F; Ethiopic Supplement
+13A0..13FF; Cherokee
+1400..167F; Unified Canadian Aboriginal Syllabics
+1680..169F; Ogham
+16A0..16FF; Runic
+1700..171F; Tagalog
+1720..173F; Hanunoo
+1740..175F; Buhid
+1760..177F; Tagbanwa
+1780..17FF; Khmer
+1800..18AF; Mongolian
+18B0..18FF; Unified Canadian Aboriginal Syllabics Extended
+1900..194F; Limbu
+1950..197F; Tai Le
+1980..19DF; New Tai Lue
+19E0..19FF; Khmer Symbols
+1A00..1A1F; Buginese
+1A20..1AAF; Tai Tham
+1AB0..1AFF; Combining Diacritical Marks Extended
+1B00..1B7F; Balinese
+1B80..1BBF; Sundanese
+1BC0..1BFF; Batak
+1C00..1C4F; Lepcha
+1C50..1C7F; Ol Chiki
+1CC0..1CCF; Sundanese Supplement
+1CD0..1CFF; Vedic Extensions
+1D00..1D7F; Phonetic Extensions
+1D80..1DBF; Phonetic Extensions Supplement
+1DC0..1DFF; Combining Diacritical Marks Supplement
+1E00..1EFF; Latin Extended Additional
+1F00..1FFF; Greek Extended
+2000..206F; General Punctuation
+2070..209F; Superscripts and Subscripts
+20A0..20CF; Currency Symbols
+20D0..20FF; Combining Diacritical Marks for Symbols
+2100..214F; Letterlike Symbols
+2150..218F; Number Forms
+2190..21FF; Arrows
+2200..22FF; Mathematical Operators
+2300..23FF; Miscellaneous Technical
+2400..243F; Control Pictures
+2440..245F; Optical Character Recognition
+2460..24FF; Enclosed Alphanumerics
+2500..257F; Box Drawing
+2580..259F; Block Elements
+25A0..25FF; Geometric Shapes
+2600..26FF; Miscellaneous Symbols
+2700..27BF; Dingbats
+27C0..27EF; Miscellaneous Mathematical Symbols-A
+27F0..27FF; Supplemental Arrows-A
+2800..28FF; Braille Patterns
+2900..297F; Supplemental Arrows-B
+2980..29FF; Miscellaneous Mathematical Symbols-B
+2A00..2AFF; Supplemental Mathematical Operators
+2B00..2BFF; Miscellaneous Symbols and Arrows
+2C00..2C5F; Glagolitic
+2C60..2C7F; Latin Extended-C
+2C80..2CFF; Coptic
+2D00..2D2F; Georgian Supplement
+2D30..2D7F; Tifinagh
+2D80..2DDF; Ethiopic Extended
+2DE0..2DFF; Cyrillic Extended-A
+2E00..2E7F; Supplemental Punctuation
+2E80..2EFF; CJK Radicals Supplement
+2F00..2FDF; Kangxi Radicals
+2FF0..2FFF; Ideographic Description Characters
+3000..303F; CJK Symbols and Punctuation
+3040..309F; Hiragana
+30A0..30FF; Katakana
+3100..312F; Bopomofo
+3130..318F; Hangul Compatibility Jamo
+3190..319F; Kanbun
+31A0..31BF; Bopomofo Extended
+31C0..31EF; CJK Strokes
+31F0..31FF; Katakana Phonetic Extensions
+3200..32FF; Enclosed CJK Letters and Months
+3300..33FF; CJK Compatibility
+3400..4DBF; CJK Unified Ideographs Extension A
+4DC0..4DFF; Yijing Hexagram Symbols
+4E00..9FFF; CJK Unified Ideographs
+A000..A48F; Yi Syllables
+A490..A4CF; Yi Radicals
+A4D0..A4FF; Lisu
+A500..A63F; Vai
+A640..A69F; Cyrillic Extended-B
+A6A0..A6FF; Bamum
+A700..A71F; Modifier Tone Letters
+A720..A7FF; Latin Extended-D
+A800..A82F; Syloti Nagri
+A830..A83F; Common Indic Number Forms
+A840..A87F; Phags-pa
+A880..A8DF; Saurashtra
+A8E0..A8FF; Devanagari Extended
+A900..A92F; Kayah Li
+A930..A95F; Rejang
+A960..A97F; Hangul Jamo Extended-A
+A980..A9DF; Javanese
+A9E0..A9FF; Myanmar Extended-B
+AA00..AA5F; Cham
+AA60..AA7F; Myanmar Extended-A
+AA80..AADF; Tai Viet
+AAE0..AAFF; Meetei Mayek Extensions
+AB00..AB2F; Ethiopic Extended-A
+AB30..AB6F; Latin Extended-E
+AB70..ABBF; Cherokee Supplement
+ABC0..ABFF; Meetei Mayek
+AC00..D7AF; Hangul Syllables
+D7B0..D7FF; Hangul Jamo Extended-B
+D800..DB7F; High Surrogates
+DB80..DBFF; High Private Use Surrogates
+DC00..DFFF; Low Surrogates
+E000..F8FF; Private Use Area
+F900..FAFF; CJK Compatibility Ideographs
+FB00..FB4F; Alphabetic Presentation Forms
+FB50..FDFF; Arabic Presentation Forms-A
+FE00..FE0F; Variation Selectors
+FE10..FE1F; Vertical Forms
+FE20..FE2F; Combining Half Marks
+FE30..FE4F; CJK Compatibility Forms
+FE50..FE6F; Small Form Variants
+FE70..FEFF; Arabic Presentation Forms-B
+FF00..FFEF; Halfwidth and Fullwidth Forms
+FFF0..FFFF; Specials
+10000..1007F; Linear B Syllabary
+10080..100FF; Linear B Ideograms
+10100..1013F; Aegean Numbers
+10140..1018F; Ancient Greek Numbers
+10190..101CF; Ancient Symbols
+101D0..101FF; Phaistos Disc
+10280..1029F; Lycian
+102A0..102DF; Carian
+102E0..102FF; Coptic Epact Numbers
+10300..1032F; Old Italic
+10330..1034F; Gothic
+10350..1037F; Old Permic
+10380..1039F; Ugaritic
+103A0..103DF; Old Persian
+10400..1044F; Deseret
+10450..1047F; Shavian
+10480..104AF; Osmanya
+10500..1052F; Elbasan
+10530..1056F; Caucasian Albanian
+10600..1077F; Linear A
+10800..1083F; Cypriot Syllabary
+10840..1085F; Imperial Aramaic
+10860..1087F; Palmyrene
+10880..108AF; Nabataean
+108E0..108FF; Hatran
+10900..1091F; Phoenician
+10920..1093F; Lydian
+10980..1099F; Meroitic Hieroglyphs
+109A0..109FF; Meroitic Cursive
+10A00..10A5F; Kharoshthi
+10A60..10A7F; Old South Arabian
+10A80..10A9F; Old North Arabian
+10AC0..10AFF; Manichaean
+10B00..10B3F; Avestan
+10B40..10B5F; Inscriptional Parthian
+10B60..10B7F; Inscriptional Pahlavi
+10B80..10BAF; Psalter Pahlavi
+10C00..10C4F; Old Turkic
+10C80..10CFF; Old Hungarian
+10E60..10E7F; Rumi Numeral Symbols
+11000..1107F; Brahmi
+11080..110CF; Kaithi
+110D0..110FF; Sora Sompeng
+11100..1114F; Chakma
+11150..1117F; Mahajani
+11180..111DF; Sharada
+111E0..111FF; Sinhala Archaic Numbers
+11200..1124F; Khojki
+11280..112AF; Multani
+112B0..112FF; Khudawadi
+11300..1137F; Grantha
+11480..114DF; Tirhuta
+11580..115FF; Siddham
+11600..1165F; Modi
+11680..116CF; Takri
+11700..1173F; Ahom
+118A0..118FF; Warang Citi
+11AC0..11AFF; Pau Cin Hau
+12000..123FF; Cuneiform
+12400..1247F; Cuneiform Numbers and Punctuation
+12480..1254F; Early Dynastic Cuneiform
+13000..1342F; Egyptian Hieroglyphs
+14400..1467F; Anatolian Hieroglyphs
+16800..16A3F; Bamum Supplement
+16A40..16A6F; Mro
+16AD0..16AFF; Bassa Vah
+16B00..16B8F; Pahawh Hmong
+16F00..16F9F; Miao
+1B000..1B0FF; Kana Supplement
+1BC00..1BC9F; Duployan
+1BCA0..1BCAF; Shorthand Format Controls
+1D000..1D0FF; Byzantine Musical Symbols
+1D100..1D1FF; Musical Symbols
+1D200..1D24F; Ancient Greek Musical Notation
+1D300..1D35F; Tai Xuan Jing Symbols
+1D360..1D37F; Counting Rod Numerals
+1D400..1D7FF; Mathematical Alphanumeric Symbols
+1D800..1DAAF; Sutton SignWriting
+1E800..1E8DF; Mende Kikakui
+1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
+1F000..1F02F; Mahjong Tiles
+1F030..1F09F; Domino Tiles
+1F0A0..1F0FF; Playing Cards
+1F100..1F1FF; Enclosed Alphanumeric Supplement
+1F200..1F2FF; Enclosed Ideographic Supplement
+1F300..1F5FF; Miscellaneous Symbols and Pictographs
+1F600..1F64F; Emoticons
+1F650..1F67F; Ornamental Dingbats
+1F680..1F6FF; Transport and Map Symbols
+1F700..1F77F; Alchemical Symbols
+1F780..1F7FF; Geometric Shapes Extended
+1F800..1F8FF; Supplemental Arrows-C
+1F900..1F9FF; Supplemental Symbols and Pictographs
+20000..2A6DF; CJK Unified Ideographs Extension B
+2A700..2B73F; CJK Unified Ideographs Extension C
+2B740..2B81F; CJK Unified Ideographs Extension D
+2B820..2CEAF; CJK Unified Ideographs Extension E
+2F800..2FA1F; CJK Compatibility Ideographs Supplement
+E0000..E007F; Tags
+E0100..E01EF; Variation Selectors Supplement
+F0000..FFFFF; Supplementary Private Use Area-A
+100000..10FFFF; Supplementary Private Use Area-B
+
+# EOF
diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in
index 6c81d32..954e9fa 100644
--- a/admin/unidata/Makefile.in
+++ b/admin/unidata/Makefile.in
@@ -23,6 +23,8 @@
 
 SHELL = @SHELL@
 
+AWK = @AWK@
+
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 top_builddir = @top_builddir@
@@ -51,7 +53,7 @@ am__v_at_1 =
 
 .PHONY: all unifiles
 
-all: ${top_srcdir}/src/macuvs.h unifiles
+all: ${top_srcdir}/src/macuvs.h unifiles ${unidir}/charscript.el
 
 ## Specify .elc as an order-only prereq so as to not needlessly rebuild
 ## target just because the .elc is missing.
@@ -94,6 +96,16 @@ unifiles: ${unidir}/charprop.el
          [ -f $(unidir)/$$f ] || exec $(MAKE) PHONY_EXTRAS=$< $<; \
        done
 
+
+.PHONY: charscript.el
+charscript.el: ${unidir}/charscript.el
+
+blocks = ${srcdir}/blocks.awk
+
+${unidir}/charscript.el: ${srcdir}/Blocks.txt ${blocks}
+       $(AM_V_GEN)$(AWK) -f ${blocks} < $< > $@
+
+
 .PHONY: clean bootstrap-clean distclean maintainer-clean extraclean
 
 clean:
@@ -110,7 +122,7 @@ maintainer-clean: distclean
 ## change and it slows down bootstrap (a tiny bit).
 ## Cf leim/ja-dic (which is much slower).
 extraclean:
-       rm -f ${top_srcdir}/src/macuvs.h
+       rm -f ${top_srcdir}/src/macuvs.h ${unidir}/charscript.el*
   ifneq (,$(wildcard $(unidir)/charprop.el))
        cd $(unidir) && \
          rm -f `sed -n 's/^;; FILE: //p' < charprop.el` charprop.el
diff --git a/admin/unidata/README b/admin/unidata/README
index e0d0e00..8ad0a12 100644
--- a/admin/unidata/README
+++ b/admin/unidata/README
@@ -16,3 +16,7 @@ http://www.unicode.org/ivd/data/2014-05-16/IVD_Sequences.txt
 UnicodeData.txt
 http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
 2014-03-10
+
+Blocks.txt
+http://www.unicode.org/Public/8.0.0/ucd/Blocks.txt
+2014-11-10
diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk
new file mode 100755
index 0000000..892ac58
--- /dev/null
+++ b/admin/unidata/blocks.awk
@@ -0,0 +1,225 @@
+#!/usr/bin/awk -f
+
+## Copyright (C) 2015 Free Software Foundation, Inc.
+
+## Author: Glenn Morris <address@hidden>
+
+## This file is part of GNU Emacs.
+
+## GNU Emacs is free software: you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+
+## GNU Emacs 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 General Public License for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+## This script takes as input Unicode's Blocks.txt
+## (http://www.unicode.org/Public/UNIDATA/Blocks.txt)
+## and produces output for Emacs's lisp/international/charscript.el.
+
+## It lumps together all the blocks belonging to the same language.
+## E.g., "Basic Latin", "Latin-1 Supplement", "Latin Extended-A",
+## etc. are all lumped together under "latin".
+
+## The Unicode blocks actually extend past some of these ranges with
+## undefined codepoints.
+
+## For additional details, see <http://debbugs.gnu.org/20789#11>.
+
+## Things to do after installing a new version of Blocks.txt:
+## Check the output against the old output.
+## Adjust the alias array, and the name2alias function for any new
+## entries, if necessary.
+## Check fix_start (and fix_end) to see if entries need adding/removing.
+## Review the hard-coded splits at the end of the main body.
+
+### Code:
+
+BEGIN {
+    ## Hard-coded names.  See name2alias for the rest.
+    alias["ipa extensions"] = "phonetic"
+    alias["letterlike symbols"] = "symbol"
+    alias["number forms"] = "symbol"
+    alias["miscellaneous technical"] = "symbol"
+    alias["control pictures"] = "symbol"
+    alias["optical character recognition"] = "symbol"
+    alias["enclosed alphanumerics"] = "symbol"
+    alias["box drawing"] = "symbol"
+    alias["block elements"] = "symbol"
+    alias["miscellaneous symbols"] = "symbol"
+    alias["cjk strokes"] = "cjk-misc"
+    alias["cjk symbols and punctuation"] = "cjk-misc"
+    alias["halfwidth and fullwidth forms"] = "cjk-misc"
+    alias["common indic number forms"] = "north-indic-number"
+
+    tohex["a"] = 10
+    tohex["b"] = 11
+    tohex["c"] = 12
+    tohex["d"] = 13
+    tohex["e"] = 14
+    tohex["f"] = 15
+
+    fix_start["0080"] = "00A0"
+    ## Define fix_end here if you need it.
+}
+
+## From admin/charsets/.
+## With gawk's --non-decimal-data switch we wouldn't need this.
+function decode_hex(str   , n, len, i, c) {
+  n = 0
+  len = length(str)
+  for (i = 1; i <= len; i++)
+    {
+      c = substr (str, i, 1)
+      if (c >= "0" && c <= "9")
+       n = n * 16 + (c - "0")
+      else
+       n = n * 16 + tohex[tolower(c)]
+    }
+  return n
+}
+
+function name2alias(name   , w, w2) {
+    name = tolower(name)
+    if (alias[name]) return alias[name]
+    else if (name ~ /for symbols/) return "symbol"
+    else if (name ~ /latin|combining .* marks|spacing modifier|tone 
letters|alphabetic presentation/) return "latin"
+    else if (name ~ /cjk|yijing|enclosed ideograph|kangxi/) return "han"
+    else if (name ~ /arabic/) return "arabic"
+    else if (name ~ /^greek/) return "greek"
+    else if (name ~ /^coptic/) return "coptic"
+    else if (name ~ /cuneiform number/) return 
"cuneiform-numbers-and-punctuation"
+    else if (name ~ /cuneiform/) return "cuneiform"
+    else if (name ~ /mathematical alphanumeric symbol/) return "mathematical"
+    else if (name ~ 
/punctuation|mathematical|arrows|currency|superscript|small form 
variants|geometric|dingbats|enclosed|alchemical|pictograph|emoticon|transport/) 
return "symbol"
+    else if (name ~ /canadian aboriginal/) return "canadian-aboriginal"
+    else if (name ~ /katakana|hiragana/) return "kana"
+    else if (name ~ /myanmar/) return "burmese"
+    else if (name ~ /hangul/) return "hangul"
+    else if (name ~ /khmer/) return "khmer"
+    else if (name ~ /braille/) return "braille"
+    else if (name ~ /^yi /) return "yi"
+    else if (name ~ /surrogates|private use|variation selectors/) return 0
+    else if (name ~/^(specials|tags)$/) return 0
+    else if (name ~ /linear b/) return "linear-b"
+    else if (name ~ /aramaic/) return "aramaic"
+    else if (name ~ /rumi num/) return "rumi-number"
+    else if (name ~ /duployan|shorthand/) return "duployan-shorthand"
+    else if (name ~ /sutton signwriting/) return "sutton-sign-writing"
+
+    sub(/ (extended|extensions|supplement).*/, "", name)
+    sub(/numbers/, "number", name)
+    sub(/numerals/, "numeral", name)
+    sub(/symbols/, "symbol", name)
+    sub(/forms$/, "form", name)
+    sub(/tiles$/, "tile", name)
+    sub(/^new /, "", name)
+    sub(/ (characters|hieroglyphs|cursive)$/, "", name)
+    gsub(/ /, "-", name)
+
+    return name
+}
+
+/^[0-9A-F]/ {
+    sep = index($1, "..")
+    len = length($1)
+    s = substr($1,1,sep-1)
+    e = substr($1,sep+2,len-sep-2)
+    $1 = ""
+    sub(/^ */, "", $0)
+    i++
+    start[i] = fix_start[s] ? fix_start[s] : s
+    end[i] = fix_end[e] ? fix_end[e]: e
+    name[i] = $0
+
+    alt[i] = name2alias(name[i])
+
+    if (!alt[i])
+    {
+        i--
+        next
+    }
+
+    ## Combine adjacent ranges with the same name.
+    if (alt[i] == alt[i-1] && decode_hex(start[i]) == 1 + decode_hex(end[i-1]))
+    {
+        end[i-1] = end[i]
+        name[i-1] = (name[i-1] ", " name[i])
+        i--
+    }
+
+    ## Some hard-coded splits.
+    if (start[i] == "0370")
+    {
+        end[i] = "03E1"
+        i++
+        start[i] = "03E2"
+        end[i] = "03EF"
+        alt[i] = "coptic"
+        i++
+        start[i] = "03F0"
+        end[i] = "03FF"
+        alt[i] = "greek"
+    }
+    else if (start[i] == "FB00")
+    {
+        end[i] = "FB06"
+        i++
+        start[i] = "FB13"
+        end[i] = "FB17"
+        alt[i] = "armenian"
+        i++
+        start[i] = "FB1D"
+        end[i] = "FB4F"
+        alt[i] = "hebrew"
+    }
+    else if (start[i] == "FF00")
+    {
+        end[i] = "FF60"
+        i++
+        start[i] = "FF61"
+        end[i] = "FF9F"
+        alt[i] = "kana"
+        i++
+        start[i] = "FFA0"
+        end[i] = "FFDF"
+        alt[i] = "hangul"
+        i++
+        start[i] = "FFE0"
+        end[i] = "FFEF"
+        alt[i] = "cjk-misc"
+    }
+}
+
+END {
+    print ";;; charscript.el --- character script table"
+    print ";;; Automatically generated from admin/unidata/Blocks.txt"
+    print "(let (script-list)"
+    print "  (dolist (elt '("
+
+    for (j=1;j<=i;j++)
+    {
+        printf("    (#x%s #x%s %s)", start[j], end[j], alt[j])
+        ## Fuzz to decide whether worth printing original name as a comment.
+        if (name[j] && alt[j] != tolower(name[j]) && alt[j] !~ /-/)
+            printf(" ; %s", name[j])
+        printf("\n")
+    }
+
+    print "    ))"
+    print "    (set-char-table-range char-script-table"
+    print "                      (cons (car elt) (nth 1 elt)) (nth 2 elt))"
+    print "    (or (memq (nth 2 elt) script-list)"
+    print "    (setq script-list (cons (nth 2 elt) script-list))))"
+    print "  (set-char-table-extra-slot char-script-table 0 (nreverse 
script-list)))"
+    print ""
+    print "(provide 'charscript)"
+}
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index c4c9060..310384a 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -1163,235 +1163,11 @@ Setup char-width-table appropriate for non-CJK 
language environment."
 
 
 ;; Setting char-script-table.
-
-;; The data is compiled from Blocks.txt and Scripts.txt in the
-;; "Unicode Character Database", simplified to lump together all the
-;; blocks belonging to the same language.  E.g., "Basic Latin",
-;; "Latin-1 Supplement", "Latin Extended-A", etc. are all lumped
-;; together under "latin".
-;;
-;; The Unicode blocks actually extend past some of these ranges with
-;; undefined codepoints.
-;;
-;; Last update: http://www.unicode.org/Public/8.0.0/ucd/Blocks-8.0.0d3.txt
-(let ((script-list nil))
-  (dolist
-      (elt
-       '((#x0000 #x007F latin)
-        (#x00A0 #x024F latin)
-        (#x0250 #x02AF phonetic)       ; IPA Extensions
-        (#x02B0 #x036F latin)          ; Spacing Modifiers and Diacriticals
-        (#x0370 #x03E1 greek)
-        (#x03E2 #x03EF coptic)
-        (#x03F0 #x03FF greek)
-        (#x0400 #x052F cyrillic)
-        (#x0530 #x058F armenian)
-        (#x0590 #x05FF hebrew)
-        (#x0600 #x06FF arabic)
-        (#x0700 #x074F syriac)
-        (#x0750 #x077F arabic)         ; Arabic Supplement
-        (#x0780 #x07BF thaana)
-        (#x07C0 #x07FF nko)
-        (#x0800 #x083F samaritan)
-        (#x0840 #x085F mandaic)
-        (#x08A0 #x08FF arabic)         ; Arabic Extended-A
-        (#x0900 #x097F devanagari)
-        (#x0980 #x09FF bengali)
-        (#x0A00 #x0A7F gurmukhi)
-        (#x0A80 #x0AFF gujarati)
-        (#x0B00 #x0B7F oriya)
-        (#x0B80 #x0BFF tamil)
-        (#x0C00 #x0C7F telugu)
-        (#x0C80 #x0CFF kannada)
-        (#x0D00 #x0D7F malayalam)
-        (#x0D80 #x0DFF sinhala)
-        (#x0E00 #x0E7F thai)
-        (#x0E80 #x0EFF lao)
-        (#x0F00 #x0FFF tibetan)
-        (#x1000 #x109F burmese)        ; Myanmar
-        (#x10A0 #x10FF georgian)
-        (#x1100 #x11FF hangul)
-        (#x1200 #x139F ethiopic)       ; Ethiopic and Ethiopic Supplement
-        (#x13A0 #x13FF cherokee)
-        (#x1400 #x167F canadian-aboriginal)
-        (#x1680 #x169F ogham)
-        (#x16A0 #x16FF runic)
-        (#x1700 #x171F tagalog)
-        (#x1720 #x173F hanunoo)
-        (#x1740 #x175F buhid)
-        (#x1760 #x177F tagbanwa)
-        (#x1780 #x17FF khmer)
-        (#x1800 #x18AF mongolian)
-        (#x18B0 #x18FF canadian-aboriginal) ; Canadian Aboriginal Syllabics 
Extended
-        (#x1900 #x194F limbu)
-        (#x1950 #x197F tai-le)
-        (#x1980 #x19DF tai-lue)        ; New Tai Lue
-        (#x19E0 #x19FF khmer)          ; Khmer Symbols
-        (#x1A00 #x1A1F buginese)
-        (#x1A20 #x1AAF tai-tham)
-        (#x1AB0 #x1AFF latin)          ; Combining Diacritical Marks Extended
-        (#x1B00 #x1B7F balinese)
-        (#x1B80 #x1BBF sundanese)
-        (#x1BC0 #x1BFF batak)
-        (#x1C00 #x1C4F lepcha)
-        (#x1C50 #x1C7F ol-chiki)
-        (#x1CC0 #x1CCF sundanese)
-        (#x1CD0 #x1CFF vedic)
-        (#x1D00 #x1DBF phonetic)       ; Phonetic Extensions & Supplement
-        (#x1DC0 #x1EFF latin)          ; Latin Extended Additional
-        (#x1F00 #x1FFF greek)          ; Greek Extended
-        (#x2000 #x27FF symbol)
-        (#x2800 #x28FF braille)
-        (#x2900 #x2BFF symbol)
-        (#x2C00 #x2C5F glagolitic)
-        (#x2C60 #x2C7F latin)          ; Latin Extended-C
-        (#x2C80 #x2CFF coptic)
-        (#x2D00 #x2D2F georgian)       ; Georgian Supplement
-        (#x2D30 #x2D7F tifinagh)
-        (#x2D80 #x2DDF ethiopic)       ; Ethiopic Extended
-        (#x2DE0 #x2DFF cyrillic)       ; Cyrillic Extended-A
-        (#x2E00 #x2E7F symbol)
-        (#x2E80 #x2FDF han)
-        (#x2FF0 #x2FFF ideographic-description)
-        (#x3000 #x303F cjk-misc)
-        (#x3040 #x30FF kana)           ; Hiragana and Katakana
-        (#x3100 #x312F bopomofo)
-        (#x3130 #x318F hangul)         ; Hangul Compatibility Jamo
-        (#x3190 #x319F kanbun)
-        (#x31A0 #x31BF bopomofo)       ; Bopomofo Extended
-        (#x31C0 #x31EF cjk-misc)       ; CJK Strokes
-        (#x31F0 #x31FF kana)           ; Katakana Phonetic Extensions
-        (#x3200 #x9FFF han)
-        (#xA000 #xA4CF yi)
-        (#xA4D0 #xA4FF lisu)
-        (#xA500 #xA63F vai)
-        (#xA640 #xA69F cyrillic)       ; Cyrillic Extended-B
-        (#xA6A0 #xA6FF bamum)
-        (#xA700 #xA7FF latin)
-        (#xA800 #xA82F syloti-nagri)
-        (#xA830 #xA83F north-indic-number)
-        (#xA840 #xA87F phags-pa)
-        (#xA880 #xA8DF saurashtra)
-        (#xA8E0 #xA8FF devanagari)     ; Devanagari Extended
-        (#xA900 #xA92F kayah-li)
-        (#xA930 #xA95F rejang)
-        (#xA960 #xA97F hangul)         ; Hangul Jamo Extended
-        (#xA980 #xA9DF javanese)
-        (#xA9E0 #xA9FF burmese)        ; Myanmar Extended-B
-        (#xAA00 #xAA5F cham)
-        (#xAA60 #xAA7F burmese)        ; Myanmar Extended-A
-        (#xAA80 #xAADF tai-viet)
-        (#xAAE0 #xAAFF meetei-mayek)   ; Meetei Mayek Extensions
-        (#xAB00 #xAB2F ethiopic)       ; Ethiopic Extended-A
-        (#xAB30 #xAB6F latin)          ; Latin Extended-E
-         (#xAB70 #xABBF cherokee)       ; Cherokee Supplement
-        (#xABC0 #xABFF meetei-mayek)
-        (#xAC00 #xD7FF hangul)
-        (#xF900 #xFAFF han)
-        (#xFB00 #xFB06 latin)          ; Latin ligatures
-        (#xFB13 #xFB17 armenian)       ; Armenian ligatures
-        (#xFB1D #xFB4F hebrew)         ; Alphabetic Presentation Forms
-        (#xFB50 #xFDFF arabic)         ; Arabic Presentation Forms-A
-         (#xFE10 #xFE1F vertical-form)
-        (#xFE20 #xFE2F latin)          ; Combining Half Marks
-        (#xFE30 #xFE4F han)
-         (#xFE50 #xFE6F symbol)         ; Small Form Variants
-        (#xFE70 #xFEFF arabic)         ; Arabic Presentation Forms-B
-        (#xFF00 #xFF60 cjk-misc)
-        (#xFF61 #xFF9F kana)
-        (#xFFA0 #xFFDF hangul)
-        (#xFFE0 #xFFEF cjk-misc)
-        (#x10000 #x100FF linear-b)
-        (#x10100 #x1013F aegean-number)
-        (#x10140 #x1018F ancient-greek-number)
-        (#x10190 #x101CF ancient-symbol)
-        (#x101D0 #x101FF phaistos-disc)
-        (#x10280 #x1029F lycian)
-        (#x102A0 #x102DF carian)
-        (#x102E0 #x102FF coptic)       ; Coptic Epact Numbers
-        (#x10300 #x1032F old-italic)
-        (#x10330 #x1034F gothic)
-        (#x10350 #x1037F old-permic)
-        (#x10380 #x1039F ugaritic)
-        (#x103A0 #x103DF old-persian)
-        (#x10400 #x1044F deseret)
-        (#x10450 #x1047F shavian)
-        (#x10480 #x104AF osmanya)
-        (#x10500 #x1052F elbasan)
-        (#x10530 #x1056F caucasian-albanian)
-        (#x10600 #x1077F linear-a)
-        (#x10800 #x1083F cypriot-syllabary)
-        (#x10840 #x1085F aramaic)
-        (#x10860 #x1087F palmyrene)
-        (#x10880 #x108AF nabataean)
-         (#x108E0 #x108FF hatran)
-        (#x10900 #x1091F phoenician)
-        (#x10920 #x1093F lydian)
-        (#x10980 #x109FF meroitic)
-        (#x10A00 #x10A5F kharoshthi)
-        (#x10A60 #x10A7F old-south-arabian)
-        (#x10A80 #x10A9F old-north-arabian)
-        (#x10AC0 #x10AFF manichaean)
-        (#x10B00 #x10B3F avestan)
-        (#x10B40 #x10B5F inscriptional-parthian)
-        (#x10B60 #x10B7F inscriptional-pahlavi)
-        (#x10B80 #x10BAF psalter-pahlavi)
-        (#x10C00 #x10C4F old-turkic)
-         (#x10C80 #x10CFF old-hungarian)
-        (#x10E60 #x10E7F rumi-number)
-        (#x11000 #x1107F brahmi)
-        (#x11080 #x110CF kaithi)
-        (#x110D0 #x110FF sora-sompeng)
-        (#x11100 #x1114F chakma)
-        (#x11150 #x1117F mahajani)
-        (#x11180 #x111DF sharada)
-        (#x111E0 #x111FF sinhala-archaic-number)
-        (#x11200 #x1124F khojki)
-         (#x11280 #x112AF multani)
-        (#x112B0 #x112FF khudawadi)
-        (#x11300 #x1137F grantha)
-        (#x11480 #x114DF tirhuta)
-        (#x11580 #x115FF siddham)
-        (#x11600 #x1165F modi)
-        (#x11680 #x116CF takri)
-         (#x11700 #x1173F ahom)
-        (#x118A0 #x118FF warang-citi)
-        (#x11AC0 #x11AFF pau-cin-hau)
-        (#x12000 #x123FF cuneiform)
-        (#x12400 #x1247F cuneiform-numbers-and-punctuation)
-        (#x12480 #x1254F cuneiform)    ; Early Dynastic Cuneiform
-        (#x13000 #x1342F egyptian)
-        (#x14400 #x1467F anatolian)
-        (#x16800 #x16A3F bamum)
-        (#x16A40 #x16A6F mro)
-        (#x16AD0 #x16AFF bassa-vah)
-        (#x16B00 #x16B8F pahawh-hmong)
-        (#x16F00 #x16F9F miao)
-        (#x1B000 #x1B0FF kana)         ; Kana Supplement
-        (#x1BC00 #x1BCAF duployan-shorthand)
-        (#x1D000 #x1D0FF byzantine-musical-symbol)
-        (#x1D100 #x1D1FF musical-symbol)
-        (#x1D200 #x1D24F ancient-greek-musical-notation)
-        (#x1D300 #x1D35F tai-xuan-jing-symbol)
-        (#x1D360 #x1D37F counting-rod-numeral)
-        (#x1D400 #x1D7FF mathematical)
-         (#x1D800 #x1DAAF sutton-sign-writing)
-        (#x1E800 #x1E8DF mende-kikakui)
-        (#x1EE00 #x1EEFF arabic)       ; Arabic Mathematical Alphabetic Symbols
-        (#x1F000 #x1F02F mahjong-tile)
-        (#x1F030 #x1F09F domino-tile)
-        (#x1F0A0 #x1F0FF playing-cards)
-        (#x1F100 #x1F1FF symbol)       ; Enclosed Alphanumeric Supplement
-        (#x1F200 #x1F2FF han)          ; Enclosed Ideographic Supplement
-        (#x1F300 #x1F9FF symbol)
-        (#x20000 #x2A6DF han)
-        (#x2A700 #x2CEAF han)
-        (#x2F800 #x2FA1F han)))
-    (set-char-table-range char-script-table
-                         (cons (car elt) (nth 1 elt)) (nth 2 elt))
-    (or (memq (nth 2 elt) script-list)
-       (setq script-list (cons (nth 2 elt) script-list))))
-  (set-char-table-extra-slot char-script-table 0 (nreverse script-list)))
+(if purify-flag
+    ;; While dumping, we can't use require, and international is not
+    ;; in load-path.
+    (load "international/charscript")
+  (require 'charscript))
 
 (map-charset-chars
  #'(lambda (range _ignore)
diff --git a/src/Makefile.in b/src/Makefile.in
index 172fa8e..e5c5ddb 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -488,6 +488,12 @@ charsets = ${top_srcdir}/admin/charsets/charsets.stamp
 ${charsets}: FORCE
        ${MAKE} -C ../admin/charsets all
 
+charscript = ${lispintdir}/charscript.el
+${charscript}: FORCE
+       $(MAKE) -C ../admin/unidata $(notdir $@)
+
+${lispintdir}/characters.elc: ${charscript:.el=.elc}
+
 ## The dumped Emacs is as functional and more efficient than
 ## bootstrap-emacs, so we replace the latter with the former.
 ## Strictly speaking, emacs does not depend directly on all of $lisp,
@@ -557,7 +563,7 @@ $(lib)/libgnu.a: $(config_h)
 ## This goes on to affect various things, and the emacs binary fails
 ## to start if Vinstallation_directory has the wrong value.
 temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \
-                $(lib)/libgnu.a $(EMACSRES) ${charsets}
+                $(lib)/libgnu.a $(EMACSRES) ${charsets} ${charscript}
        $(AM_V_CCLD)$(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
          -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
        $(MKDIR_P) $(etc)



reply via email to

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