Mercurial > emacs
diff admin/unidata/biditype.awk @ 108983:7e588bac2220
Use BidiMirroring.txt for mirroring characters in bidi context.
admin/unidata/bidimirror.awk: New file.
admin/unidata/BidiMirroring.txt: New file from
http://www.unicode.org/Public/6.0.0/ucd/BidiMirroring-6.0.0d1.txt.
admin/unidata/Makefile.in: (../../src/bidimirror.h): New target.
(all): Depend on ../../src/biditype.h and ../../src/bidimirror.h.
admin/unidata/makefile.w32-in (../../src/bidimirror.h): New target.
(all): Depend on ../../src/biditype.h and ../../src/bidimirror.h.
src/makefile.w32-in ($(BLD)/bidi.$(O)): Depend on biditype.h and
bidimirror.h.
src/deps.mk (bidi.o): Depend on biditype.h and bidimirror.h.
src/bidi.c (bidi_initialize): Initialize bidi_mirror_table.
(bidi_mirror_char): Use bidi_mirror_table.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 12 Jun 2010 18:52:43 +0300 |
parents | |
children | 6378d1b57038 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/admin/unidata/biditype.awk Sat Jun 12 18:52:43 2010 +0300 @@ -0,0 +1,93 @@ +# Generate data for filling bidi_type_table, see src/bidi.c:bidi_initialize. + +# Copyright (C) 2010, Free Software Foundation, Inc. + +# 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/>. + +# Written by Eli Zaretskii <eliz@gnu.org> + +function trtype(type) +{ + # Types are listed in the order of decresing use in UnicodeData.txt: + if (type == "ON") + return "NEUTRAL_ON"; + else if (type == "NSM") + return "WEAK_NSM"; + else if (type == "AL") + return "STRONG_AL"; + else if (type == "R") + return "STRONG_R"; + else if (type == "BN") + return "WEAK_BN"; + else if (type == "EN") + return "WEAK_EN"; + else if (type == "ET") + return "WEAK_ET"; + else if (type == "AN") + return "WEAK_AN"; + else if (type == "WS") + return "NEUTRAL_WS"; + else if (type == "CS") + return "WEAK_CS"; + else if (type == "ES") + return "WEAK_ES"; + else if (type == "B") + return "NEUTRAL_B"; + else if (type == "S") + return "NEUTRAL_S"; + else if (type == "LRE" || type == "RLE" || type == "LRO" || type == "RLO" || type == "PDF") + return type; + else if (type == "L") + return "STRONG_L"; + else + { + printf "Unknown type: %s\n", type > "/dev/stderr"; + exit 1; + } +} + +BEGIN { + otype = ""; + startcode = ""; + endcode = ""; + printf " struct {\n int from, to;\n bidi_type_t type;\n } bidi_type[] = {\n"; + first = 1; + } + + { code = $1; + ntype = $5; + if (ntype != otype) + { + # Don't output data for L, as that's the default value, see bidi.c. + if (otype != "L" && startcode != "") + { + if (!first) + printf ",\n"; + else + first = 0; + printf "\t{ 0x%s, 0x%s, %s }", startcode, endcode, trtype(otype); + } + otype = ntype; + startcode = code; + endcode = code; + } + else + endcode = code; + } + +END { + printf " };\n"; + }