summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--admin/unidata/Blocks.txt298
-rw-r--r--admin/unidata/Makefile.in16
-rw-r--r--admin/unidata/README4
-rwxr-xr-xadmin/unidata/blocks.awk225
-rw-r--r--lisp/international/characters.el234
-rw-r--r--src/Makefile.in8
7 files changed, 554 insertions, 232 deletions
diff --git a/.gitignore b/.gitignore
index 092fd03fb64..1e2f2065581 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 00000000000..0a4a5807635
--- /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 6c81d32484a..954e9faacae 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 e0d0e00417f..8ad0a12d728 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 00000000000..892ac58c927
--- /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 <rgm@gnu.org>
+
+## 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 c4c9060d842..310384aa969 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 172fa8e47cd..e5c5ddbcbc6 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)