aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-02-22 09:17:57 +0100
committermarha <marha@users.sourceforge.net>2012-02-22 09:17:57 +0100
commit6baac61e6ca9cd314e689dfe7f84771aad08c66e (patch)
tree2a8a059fc83d3f7acc1034071ed3a9f7ff3c0027
parent0ae7710db53515dab4a35c33ba9a030bbfc2ac5b (diff)
downloadvcxsrv-6baac61e6ca9cd314e689dfe7f84771aad08c66e.tar.gz
vcxsrv-6baac61e6ca9cd314e689dfe7f84771aad08c66e.tar.bz2
vcxsrv-6baac61e6ca9cd314e689dfe7f84771aad08c66e.zip
fontconfig libX11 libxcb mesa pixman xserver git update 22 Feb 2012
-rw-r--r--fontconfig/conf.d/30-metric-aliases.conf36
-rw-r--r--fontconfig/conf.d/40-nonlatin.conf143
-rw-r--r--fontconfig/conf.d/45-latin.conf96
-rw-r--r--fontconfig/conf.d/65-nonlatin.conf27
-rw-r--r--fontconfig/fc-cat/fc-cat.c2
-rw-r--r--fontconfig/fc-lang/Makefile.am3
-rw-r--r--fontconfig/fc-lang/ast.orth4
-rw-r--r--fontconfig/fc-lang/ks.orth10
-rw-r--r--fontconfig/fc-lang/nqo.orth31
-rw-r--r--fontconfig/fc-lang/ur.orth7
-rw-r--r--fontconfig/fc-list/fc-list.c20
-rw-r--r--fontconfig/fc-match/fc-match.c27
-rw-r--r--fontconfig/fontconfig/fontconfig.h4
-rw-r--r--fontconfig/src/fcarch.h5
-rw-r--r--fontconfig/src/fccache.c10
-rw-r--r--fontconfig/src/fcdir.c17
-rw-r--r--fontconfig/src/fcformat.c5
-rw-r--r--fontconfig/src/fcfreetype.c263
-rw-r--r--fontconfig/src/fcint.h2
-rw-r--r--fontconfig/src/fcmatch.c29
-rw-r--r--fontconfig/src/fcname.c8
-rw-r--r--fontconfig/src/fcstr.c8
-rw-r--r--fontconfig/src/makealias18
-rw-r--r--libX11/nls/en_US.UTF-8/Compose.pre8
-rw-r--r--libX11/nls/fi_FI.UTF-8/Compose.pre854
-rw-r--r--libX11/nls/pt_BR.UTF-8/Compose.pre8
-rw-r--r--libX11/src/xlibi18n/imKStoUCS.c2
-rw-r--r--libxcb/src/xcb_util.c5
-rw-r--r--mesalib/docs/news.html7
-rw-r--r--mesalib/docs/relnotes.html1
-rw-r--r--mesalib/docs/repository.html2
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_simple_screen.h180
-rw-r--r--mesalib/src/mapi/glapi/glapi_priv.h10
-rw-r--r--mesalib/src/mesa/drivers/common/meta.c10
-rw-r--r--mesalib/src/mesa/main/attrib.c24
-rw-r--r--mesalib/src/mesa/main/fbobject.c11
-rw-r--r--mesalib/src/mesa/main/format_pack.c36
-rw-r--r--mesalib/src/mesa/main/format_unpack.c20
-rw-r--r--mesalib/src/mesa/main/image.c9
-rw-r--r--mesalib/src/mesa/main/mtypes.h2
-rw-r--r--mesalib/src/mesa/main/shared.c8
-rw-r--r--mesalib/src/mesa/main/teximage.c81
-rw-r--r--mesalib/src/mesa/main/texobj.c126
-rw-r--r--mesalib/src/mesa/main/texobj.h4
-rw-r--r--mesalib/src/mesa/main/texstate.c10
-rw-r--r--mesalib/src/mesa/main/varray.c42
-rw-r--r--mesalib/src/mesa/main/version.h2
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_sampler.c3
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_texture.c7
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_clear.c10
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawpixels.c57
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_fbo.c64
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_fbo.h2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_texture.c77
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_texture.h106
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.c18
-rw-r--r--mesalib/src/mesa/state_tracker/st_format.h3
-rw-r--r--mesalib/src/mesa/state_tracker/st_gen_mipmap.c10
-rw-r--r--mesalib/src/mesa/state_tracker/st_manager.c4
-rw-r--r--mesalib/src/mesa/state_tracker/st_texture.h31
-rw-r--r--mesalib/src/mesa/swrast/s_fragprog.c3
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_array.c85
-rw-r--r--pixman/configure.ac24
-rw-r--r--pixman/pixman/pixman-mmx.c103
-rw-r--r--pixman/pixman/pixman-sse2.c2
-rw-r--r--xorg-server/Xi/exevents.c30
-rw-r--r--xorg-server/dix/getevents.c2
-rw-r--r--xorg-server/hw/xquartz/GL/capabilities.c7
-rw-r--r--xorg-server/xkeyboard-config/symbols/no2
-rw-r--r--xorg-server/xkeyboard-config/symbols/ru8
70 files changed, 1414 insertions, 1481 deletions
diff --git a/fontconfig/conf.d/30-metric-aliases.conf b/fontconfig/conf.d/30-metric-aliases.conf
index 702a495ea..4202ae92e 100644
--- a/fontconfig/conf.d/30-metric-aliases.conf
+++ b/fontconfig/conf.d/30-metric-aliases.conf
@@ -76,7 +76,19 @@
<!-- Microsoft -->
<alias binding="same">
<family>Liberation Sans</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Albany</family>
+ <default>
+ <family>Arial</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Albany AMT</family>
<default>
<family>Arial</family>
@@ -85,7 +97,19 @@
<alias binding="same">
<family>Liberation Serif</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Thorndale</family>
+ <default>
+ <family>Times New Roman</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Thorndale AMT</family>
<default>
<family>Times New Roman</family>
@@ -94,7 +118,19 @@
<alias binding="same">
<family>Liberation Mono</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Cumberland</family>
+ <default>
+ <family>Courier New</family>
+ </default>
+ </alias>
+
+ <alias binding="same">
<family>Cumberland AMT</family>
<default>
<family>Courier New</family>
diff --git a/fontconfig/conf.d/40-nonlatin.conf b/fontconfig/conf.d/40-nonlatin.conf
index a875db08c..1208a6ebf 100644
--- a/fontconfig/conf.d/40-nonlatin.conf
+++ b/fontconfig/conf.d/40-nonlatin.conf
@@ -11,23 +11,81 @@
-->
<alias>
<family>Nazli</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Lotoos</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Mitra</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Ferdosi</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Badr</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Zar</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Titr</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Jadid</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Kochi Mincho</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>AR PL SungtiL GB</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>AR PL Mingti2L Big5</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>MS 明朝</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>NanumMyeongjo</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>UnBatang</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Baekmuk Batang</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>MgOpen Canonica</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Sazanami Mincho</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>AR PL ZenKai Uni</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>ZYSong18030</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>FreeSerif</family>
<default><family>serif</family></default>
</alias>
@@ -36,33 +94,104 @@
-->
<alias>
<family>Arshia</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Elham</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Farnaz</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Nasim</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Sina</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Roya</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Koodak</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Terafik</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Kochi Gothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>AR PL KaitiM GB</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>AR PL KaitiM Big5</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>MS ゴシック</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>NanumGothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>UnDotum</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Baekmuk Dotum</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>SimSun</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>MgOpen Modata</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Sazanami Gothic</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>AR PL ShanHeiSun Uni</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>ZYSong18030</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>FreeSans</family>
<default><family>sans-serif</family></default>
</alias>
<!--
Monospace faces
-->
- <alias>
+ <alias>
<family>NSimSun</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>ZYSong18030</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
+ <family>NanumGothicCoding</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>FreeMono</family>
<default><family>monospace</family></default>
</alias>
@@ -72,8 +201,17 @@
-->
<alias>
<family>Homa</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Kamran</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Fantezi</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Tabassom</family>
<default><family>fantasy</family></default>
</alias>
@@ -83,6 +221,9 @@
-->
<alias>
<family>IranNastaliq</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
<family>Nafees Nastaleeq</family>
<default><family>cursive</family></default>
</alias>
diff --git a/fontconfig/conf.d/45-latin.conf b/fontconfig/conf.d/45-latin.conf
index 7e4126468..09fd52652 100644
--- a/fontconfig/conf.d/45-latin.conf
+++ b/fontconfig/conf.d/45-latin.conf
@@ -11,13 +11,37 @@
-->
<alias>
<family>Bitstream Vera Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>DejaVu Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Liberation Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Times New Roman</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Times</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Nimbus Roman No9 L</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Luxi Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Thorndale AMT</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
<family>Thorndale</family>
<default><family>serif</family></default>
</alias>
@@ -26,14 +50,41 @@
-->
<alias>
<family>Bitstream Vera Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>DejaVu Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Liberation Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Arial</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Helvetica</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Verdana</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Albany AMT</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Albany</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Nimbus Sans L</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
<family>Luxi Sans</family>
<default><family>sans-serif</family></default>
</alias>
@@ -42,15 +93,45 @@
-->
<alias>
<family>Bitstream Vera Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>DejaVu Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Liberation Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Inconsolata</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Courier New</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Courier</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Andale Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Luxi Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Cumberland AMT</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Cumberland</family>
+ <default><family>monospace</family></default>
+ </alias>
+ <alias>
<family>Nimbus Mono L</family>
<default><family>monospace</family></default>
</alias>
@@ -59,8 +140,17 @@
-->
<alias>
<family>Impact</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Copperplate Gothic Std</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Cooper Std</family>
+ <default><family>fantasy</family></default>
+ </alias>
+ <alias>
<family>Bauhaus Std</family>
<default><family>fantasy</family></default>
</alias>
@@ -69,7 +159,13 @@
-->
<alias>
<family>ITC Zapf Chancery Std</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
<family>Zapfino</family>
+ <default><family>cursive</family></default>
+ </alias>
+ <alias>
<family>Comic Sans MS</family>
<default><family>cursive</family></default>
</alias>
diff --git a/fontconfig/conf.d/65-nonlatin.conf b/fontconfig/conf.d/65-nonlatin.conf
index 53ac064b0..36aa3e518 100644
--- a/fontconfig/conf.d/65-nonlatin.conf
+++ b/fontconfig/conf.d/65-nonlatin.conf
@@ -23,8 +23,7 @@
<family>Sampige</family> <!-- kannada -->
<family>padmaa</family> <!-- gujarati -->
<family>Hapax Berbère</family> <!-- tifinagh -->
- <family>MS Gothic</family> <!-- han (ja) -->
- <family>UmePlus P Gothic</family> <!-- han (ja) -->
+ <family>MS Mincho</family> <!-- han (ja) -->
<family>SimSun</family> <!-- han (zh-cn,zh-tw) -->
<family>PMingLiu</family> <!-- han (zh-tw) -->
<family>WenQuanYi Zen Hei</family> <!-- han (zh-cn,zh-tw) -->
@@ -43,8 +42,9 @@
<family>AR PL Zenkai Uni</family>
<family>MS 明朝</family>
<family>ZYSong18030</family>
- <family>UnBatang</family>
- <family>Baekmuk Batang</family>
+ <family>NanumMyeongjo</family> <!-- hangul (ko) -->
+ <family>UnBatang</family> <!-- hangul (ko) -->
+ <family>Baekmuk Batang</family> <!-- hangul (ko) -->
<family>KacstQura</family>
<family>Frank Ruehl CLM</family>
<family>Lohit Bengali</family>
@@ -117,9 +117,10 @@
<family>MS ゴシック</family>
<family>ZYSong18030</family> <!-- han (zh-cn,zh-tw) -->
<family>TSCu_Paranar</family> <!-- tamil -->
- <family>UnDotum</family>
- <family>Baekmuk Dotum</family>
- <family>Baekmuk Gulim</family>
+ <family>NanumGothic</family> <!-- hangul (ko) -->
+ <family>UnDotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Dotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Gulim</family> <!-- hangul (ko) -->
<family>KacstQura</family>
<family>Lohit Bengali</family>
<family>Lohit Gujarati</family>
@@ -160,11 +161,13 @@
<family>AR PL SungtiL GB</family>
<family>AR PL Mingti2L Big5</family>
<family>ZYSong18030</family> <!-- han (zh-cn,zh-tw) -->
- <family>UnBatang</family>
- <family>UnDotum</family>
- <family>Baekmuk Batang</family> <!-- hangul -->
- <family>Baekmuk Dotum</family>
- <family>Baekmuk Gulim</family>
+ <family>NanumGothicCoding</family> <!-- hangul (ko) -->
+ <family>NanumGothic</family> <!-- hangul (ko) -->
+ <family>UnDotum</family> <!-- hangul (ko) -->
+ <family>UnBatang</family> <!-- hangul (ko) -->
+ <family>Baekmuk Dotum</family> <!-- hangul (ko) -->
+ <family>Baekmuk Gulim</family> <!-- hangul (ko) -->
+ <family>Baekmuk Batang</family> <!-- hangul (ko) -->
<family>TlwgTypo</family> <!-- thai -->
<family>TlwgTypist</family> <!-- thai -->
<family>TlwgTypewriter</family> <!-- thai -->
diff --git a/fontconfig/fc-cat/fc-cat.c b/fontconfig/fc-cat/fc-cat.c
index 5ee947ec2..c3d68296b 100644
--- a/fontconfig/fc-cat/fc-cat.c
+++ b/fontconfig/fc-cat/fc-cat.c
@@ -227,7 +227,7 @@ cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBoo
FcPattern *font = set->fonts[n];
FcChar8 *s;
- s = FcPatternFormat (font, "%{=fccat}\n");
+ s = FcPatternFormat (font, (const FcChar8 *) "%{=fccat}\n");
if (s)
{
printf ("%s", s);
diff --git a/fontconfig/fc-lang/Makefile.am b/fontconfig/fc-lang/Makefile.am
index 29cee5934..628796054 100644
--- a/fontconfig/fc-lang/Makefile.am
+++ b/fontconfig/fc-lang/Makefile.am
@@ -299,5 +299,6 @@ ORTH = \
ty.orth \
wal.orth \
za.orth \
- lah.orth
+ lah.orth \
+ nqo.orth
# ^-------------- Add new orth files here
diff --git a/fontconfig/fc-lang/ast.orth b/fontconfig/fc-lang/ast.orth
index 634f07910..55aaed512 100644
--- a/fontconfig/fc-lang/ast.orth
+++ b/fontconfig/fc-lang/ast.orth
@@ -41,3 +41,7 @@
00f3
00fa
00fc
+1e24
+1e25
+1e36
+1e37
diff --git a/fontconfig/fc-lang/ks.orth b/fontconfig/fc-lang/ks.orth
index e86ba0df0..6697e1521 100644
--- a/fontconfig/fc-lang/ks.orth
+++ b/fontconfig/fc-lang/ks.orth
@@ -23,8 +23,10 @@
#
# Kashmiri (ks)
#
-# Kashmiri is written in Arabic in both India and Pakistan. The problem is,
-# Unicode 5.1 does not contain all the letters required in the orthography,
-# including Wavy Hamza Below and the Alef Maksura With Ring Below. We'll
-# just include Urdu for now.
include ur.orth
+0620
+0657
+065f
+0672
+0673
+06c4
diff --git a/fontconfig/fc-lang/nqo.orth b/fontconfig/fc-lang/nqo.orth
new file mode 100644
index 000000000..285e1d79c
--- /dev/null
+++ b/fontconfig/fc-lang/nqo.orth
@@ -0,0 +1,31 @@
+#
+# fontconfig/fc-lang/nqo.orth
+#
+# Copyright © 2011 Akira TAGOH
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of the author(s) not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. The authors make no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# N'Ko (nqo)
+#
+# See:
+# http://www.unicode.org/charts/PDF/U07C0.pdf
+# http://en.wikipedia.org/wiki/N'Ko_alphabet
+#
+07c0-07ff
+
diff --git a/fontconfig/fc-lang/ur.orth b/fontconfig/fc-lang/ur.orth
index 57f724d10..5b39a50cb 100644
--- a/fontconfig/fc-lang/ur.orth
+++ b/fontconfig/fc-lang/ur.orth
@@ -34,9 +34,11 @@
#
# General forms:
0621-0624
-0626-063a
+0626-0628
+063a
0641-0642
-0644-0648
+0644-0646
+0648
0679
067e
0686
@@ -47,6 +49,7 @@
06af
06ba
06be
+06c3
06cc
06d2
# Presentations forms:
diff --git a/fontconfig/fc-list/fc-list.c b/fontconfig/fc-list/fc-list.c
index ad383328e..0149b0c53 100644
--- a/fontconfig/fc-list/fc-list.c
+++ b/fontconfig/fc-list/fc-list.c
@@ -94,16 +94,16 @@ usage (char *program, int error)
int
main (int argc, char **argv)
{
- int verbose = 0;
- int quiet = 0;
- FcChar8 *format = NULL;
- int nfont = 0;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
+ int verbose = 0;
+ int quiet = 0;
+ const FcChar8 *format = NULL;
+ int nfont = 0;
+ int i;
+ FcObjectSet *os = 0;
+ FcFontSet *fs;
+ FcPattern *pat;
#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
+ int c;
#if HAVE_GETOPT_LONG
while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1)
@@ -158,7 +158,7 @@ main (int argc, char **argv)
if (!verbose && !format && !os)
os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0);
if (!format)
- format = "%{=fclist}\n";
+ format = (const FcChar8 *) "%{=fclist}\n";
fs = FcFontList (0, pat, os);
if (os)
FcObjectSetDestroy (os);
diff --git a/fontconfig/fc-match/fc-match.c b/fontconfig/fc-match/fc-match.c
index e64b4bcdd..4642c8dee 100644
--- a/fontconfig/fc-match/fc-match.c
+++ b/fontconfig/fc-match/fc-match.c
@@ -98,16 +98,16 @@ usage (char *program, int error)
int
main (int argc, char **argv)
{
- int verbose = 0;
- int sort = 0, all = 0;
- FcChar8 *format = NULL;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
- FcResult result;
+ int verbose = 0;
+ int sort = 0, all = 0;
+ const FcChar8 *format = NULL;
+ int i;
+ FcObjectSet *os = 0;
+ FcFontSet *fs;
+ FcPattern *pat;
+ FcResult result;
#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
+ int c;
#if HAVE_GETOPT_LONG
while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1)
@@ -175,6 +175,11 @@ main (int argc, char **argv)
int j;
font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result);
+ if (!font_patterns || font_patterns->nfont == 0)
+ {
+ fputs("No fonts installed on the system\n", stderr);
+ return 1;
+ }
for (j = 0; j < font_patterns->nfont; j++)
{
FcPattern *font_pattern;
@@ -198,9 +203,9 @@ main (int argc, char **argv)
if (!format)
{
if (os)
- format = "%{=unparse}\n";
+ format = (const FcChar8 *) "%{=unparse}\n";
else
- format = "%{=fcmatch}\n";
+ format = (const FcChar8 *) "%{=fcmatch}\n";
}
if (fs)
diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h
index db26b97f8..23ea222ca 100644
--- a/fontconfig/fontconfig/fontconfig.h
+++ b/fontconfig/fontconfig/fontconfig.h
@@ -739,10 +739,10 @@ FcPublic FcBool
FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
FcPublic const FcConstant *
-FcNameGetConstant (FcChar8 *string);
+FcNameGetConstant (const FcChar8 *string);
FcPublic FcBool
-FcNameConstant (FcChar8 *string, int *result);
+FcNameConstant (const FcChar8 *string, int *result);
FcPublic FcPattern *
FcNameParse (const FcChar8 *name);
diff --git a/fontconfig/src/fcarch.h b/fontconfig/src/fcarch.h
index 0c8cd053f..9cabf0450 100644
--- a/fontconfig/src/fcarch.h
+++ b/fontconfig/src/fcarch.h
@@ -62,9 +62,8 @@
# define FC_ARCH_SIZE_ALIGN "64"
#endif
-#ifdef ARCHITECTURE
-# define ARCHITECTURE FC_ARCHITECTURE
-#else
+/* config.h might override this */
+#ifndef FC_ARCHITECTURE
# define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN
#endif
diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c
index 2d4a4377b..c38a7050e 100644
--- a/fontconfig/src/fccache.c
+++ b/fontconfig/src/fccache.c
@@ -87,7 +87,7 @@ typedef __int64 INT64;
*/
int
-FcStat (const char *file, struct stat *statb)
+FcStat (const FcChar8 *file, struct stat *statb)
{
WIN32_FILE_ATTRIBUTE_DATA wfad;
char full_path_name[MAX_PATH];
@@ -136,7 +136,7 @@ FcStat (const char *file, struct stat *statb)
#else
int
-FcStat (const char *file, struct stat *statb)
+FcStat (const FcChar8 *file, struct stat *statb)
{
return stat ((char *) file, statb);
}
@@ -727,8 +727,6 @@ FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcSt
FcSerialize *serialize = FcSerializeCreate ();
FcCache *cache;
int i;
- intptr_t cache_offset;
- intptr_t dirs_offset;
FcChar8 *dir_serialize;
intptr_t *dirs_serialize;
FcFontSet *set_serialize;
@@ -738,7 +736,7 @@ FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcSt
/*
* Space for cache structure
*/
- cache_offset = FcSerializeReserve (serialize, sizeof (FcCache));
+ FcSerializeReserve (serialize, sizeof (FcCache));
/*
* Directory name
*/
@@ -747,7 +745,7 @@ FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcSt
/*
* Subdirs
*/
- dirs_offset = FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *));
+ FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *));
for (i = 0; i < dirs->num; i++)
if (!FcStrSerializeAlloc (serialize, dirs->strs[i]))
goto bail1;
diff --git a/fontconfig/src/fcdir.c b/fontconfig/src/fcdir.c
index 8a2b97625..d8b094fbc 100644
--- a/fontconfig/src/fcdir.c
+++ b/fontconfig/src/fcdir.c
@@ -235,7 +235,6 @@ FcCache *
FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
{
FcStrSet *dirs;
- FcBool ret = FcTrue;
FcFontSet *set;
FcCache *cache = NULL;
struct stat dir_stat;
@@ -244,44 +243,28 @@ FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
printf ("cache scan dir %s\n", dir);
if (FcStat (dir, &dir_stat) < 0)
- {
- if (errno != ENOENT)
- ret = FcFalse;
goto bail;
- }
set = FcFontSetCreate();
if (!set)
- {
- ret = FcFalse;
goto bail;
- }
dirs = FcStrSetCreate ();
if (!dirs)
- {
- ret = FcFalse;
goto bail1;
- }
/*
* Scan the dir
*/
if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
- {
- ret = FcFalse;
goto bail2;
- }
/*
* Build the cache object
*/
cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
if (!cache)
- {
- ret = FcFalse;
goto bail2;
- }
/*
* Write out the cache file, ignoring any troubles
diff --git a/fontconfig/src/fcformat.c b/fontconfig/src/fcformat.c
index d8518f458..0e63d5d7c 100644
--- a/fontconfig/src/fcformat.c
+++ b/fontconfig/src/fcformat.c
@@ -353,13 +353,12 @@ skip_subexpr (FcFormatContext *c);
static FcBool
skip_percent (FcFormatContext *c)
{
- int width;
-
if (!expect_char (c, '%'))
return FcFalse;
/* skip an optional width specifier */
- width = strtol ((const char *) c->format, (char **) &c->format, 10);
+ if (strtol ((const char *) c->format, (char **) &c->format, 10))
+ /* don't care */;
if (!expect_char (c, '{'))
return FcFalse;
diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c
index d37af2d0e..e322e8ca4 100644
--- a/fontconfig/src/fcfreetype.c
+++ b/fontconfig/src/fcfreetype.c
@@ -696,34 +696,6 @@ FcSfntNameTranscode (FT_SfntName *sname)
*u8 = '\0';
goto done;
}
- if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
- {
- FcChar8 *u8;
- const FcCharMap *map = FcFreeTypeGetPrivateMap (ft_encoding_apple_roman);
- FcChar8 *src = (FcChar8 *) sname->string;
- int src_len = sname->string_len;
-
- /*
- * Convert AppleRoman to Utf8
- */
- if (!map)
- return 0;
-
- utf8 = malloc (sname->string_len * 3 + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
- while (src_len > 0)
- {
- FcChar32 ucs4 = FcFreeTypePrivateToUcs4 (*src++, map);
- int olen = FcUcs4ToUtf8 (ucs4, u8);
- src_len--;
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
#if USE_ICONV
cd = iconv_open ("UTF-8", fromcode);
if (cd && cd != (iconv_t) (-1))
@@ -1794,237 +1766,6 @@ typedef struct _FcFontDecode {
FcChar32 max;
} FcFontDecode;
-static const FcCharEnt AppleRomanEnt[] = {
- { 0x0020, 0x20 }, /* SPACE */
- { 0x0021, 0x21 }, /* EXCLAMATION MARK */
- { 0x0022, 0x22 }, /* QUOTATION MARK */
- { 0x0023, 0x23 }, /* NUMBER SIGN */
- { 0x0024, 0x24 }, /* DOLLAR SIGN */
- { 0x0025, 0x25 }, /* PERCENT SIGN */
- { 0x0026, 0x26 }, /* AMPERSAND */
- { 0x0027, 0x27 }, /* APOSTROPHE */
- { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
- { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
- { 0x002A, 0x2A }, /* ASTERISK */
- { 0x002B, 0x2B }, /* PLUS SIGN */
- { 0x002C, 0x2C }, /* COMMA */
- { 0x002D, 0x2D }, /* HYPHEN-MINUS */
- { 0x002E, 0x2E }, /* FULL STOP */
- { 0x002F, 0x2F }, /* SOLIDUS */
- { 0x0030, 0x30 }, /* DIGIT ZERO */
- { 0x0031, 0x31 }, /* DIGIT ONE */
- { 0x0032, 0x32 }, /* DIGIT TWO */
- { 0x0033, 0x33 }, /* DIGIT THREE */
- { 0x0034, 0x34 }, /* DIGIT FOUR */
- { 0x0035, 0x35 }, /* DIGIT FIVE */
- { 0x0036, 0x36 }, /* DIGIT SIX */
- { 0x0037, 0x37 }, /* DIGIT SEVEN */
- { 0x0038, 0x38 }, /* DIGIT EIGHT */
- { 0x0039, 0x39 }, /* DIGIT NINE */
- { 0x003A, 0x3A }, /* COLON */
- { 0x003B, 0x3B }, /* SEMICOLON */
- { 0x003C, 0x3C }, /* LESS-THAN SIGN */
- { 0x003D, 0x3D }, /* EQUALS SIGN */
- { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
- { 0x003F, 0x3F }, /* QUESTION MARK */
- { 0x0040, 0x40 }, /* COMMERCIAL AT */
- { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
- { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
- { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
- { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
- { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
- { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
- { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
- { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
- { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
- { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
- { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
- { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
- { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
- { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
- { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
- { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
- { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
- { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
- { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
- { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
- { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
- { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
- { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
- { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
- { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
- { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
- { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
- { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
- { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
- { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
- { 0x005F, 0x5F }, /* LOW LINE */
- { 0x0060, 0x60 }, /* GRAVE ACCENT */
- { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
- { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
- { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
- { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
- { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
- { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
- { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
- { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
- { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
- { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
- { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
- { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
- { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
- { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
- { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
- { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
- { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
- { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
- { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
- { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
- { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
- { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
- { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
- { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
- { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
- { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
- { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
- { 0x007C, 0x7C }, /* VERTICAL LINE */
- { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
- { 0x007E, 0x7E }, /* TILDE */
- { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
- { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
- { 0x00A2, 0xA2 }, /* CENT SIGN */
- { 0x00A3, 0xA3 }, /* POUND SIGN */
- { 0x00A5, 0xB4 }, /* YEN SIGN */
- { 0x00A7, 0xA4 }, /* SECTION SIGN */
- { 0x00A8, 0xAC }, /* DIAERESIS */
- { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
- { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
- { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00AC, 0xC2 }, /* NOT SIGN */
- { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
- { 0x00AF, 0xF8 }, /* MACRON */
- { 0x00B0, 0xA1 }, /* DEGREE SIGN */
- { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
- { 0x00B4, 0xAB }, /* ACUTE ACCENT */
- { 0x00B5, 0xB5 }, /* MICRO SIGN */
- { 0x00B6, 0xA6 }, /* PILCROW SIGN */
- { 0x00B7, 0xE1 }, /* MIDDLE DOT */
- { 0x00B8, 0xFC }, /* CEDILLA */
- { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
- { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
- { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
- { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
- { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
- { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
- { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
- { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
- { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
- { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
- { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
- { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
- { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
- { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
- { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
- { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
- { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
- { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
- { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
- { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
- { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
- { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
- { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
- { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
- { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
- { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
- { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
- { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
- { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
- { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
- { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
- { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
- { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
- { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
- { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
- { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
- { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
- { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
- { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
- { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
- { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
- { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
- { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
- { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
- { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
- { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
- { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
- { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
- { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
- { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
- { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
- { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
- { 0x00F7, 0xD6 }, /* DIVISION SIGN */
- { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
- { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
- { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
- { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
- { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
- { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
- { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
- { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
- { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
- { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
- { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
- { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
- { 0x02C7, 0xFF }, /* CARON */
- { 0x02D8, 0xF9 }, /* BREVE */
- { 0x02D9, 0xFA }, /* DOT ABOVE */
- { 0x02DA, 0xFB }, /* RING ABOVE */
- { 0x02DB, 0xFE }, /* OGONEK */
- { 0x02DC, 0xF7 }, /* SMALL TILDE */
- { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
- { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
- { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
- { 0x2013, 0xD0 }, /* EN DASH */
- { 0x2014, 0xD1 }, /* EM DASH */
- { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
- { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
- { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
- { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
- { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
- { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
- { 0x2020, 0xA0 }, /* DAGGER */
- { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
- { 0x2022, 0xA5 }, /* BULLET */
- { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
- { 0x2030, 0xE4 }, /* PER MILLE SIGN */
- { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
- { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
- { 0x2044, 0xDA }, /* FRACTION SLASH */
- { 0x20AC, 0xDB }, /* EURO SIGN */
- { 0x2122, 0xAA }, /* TRADE MARK SIGN */
- { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
- { 0x2206, 0xC6 }, /* INCREMENT */
- { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
- { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
- { 0x221A, 0xC3 }, /* SQUARE ROOT */
- { 0x221E, 0xB0 }, /* INFINITY */
- { 0x222B, 0xBA }, /* INTEGRAL */
- { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
- { 0x2260, 0xAD }, /* NOT EQUAL TO */
- { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
- { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
- { 0x25CA, 0xD7 }, /* LOZENGE */
- { 0xF8FF, 0xF0 }, /* Apple logo */
- { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
- { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
-};
-
-static const FcCharMap AppleRoman = {
- AppleRomanEnt,
- sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
-};
-
static const FcCharEnt AdobeSymbolEnt[] = {
{ 0x0020, 0x20 }, /* SPACE # space */
{ 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */
@@ -2230,7 +1971,6 @@ static const FcCharMap AdobeSymbol = {
static const FcFontDecode fcFontDecoders[] = {
{ ft_encoding_unicode, 0, (1 << 21) - 1 },
{ ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 },
- { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 },
};
#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
@@ -2869,14 +2609,11 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
FT_Stream stream = face->stream;
FT_Error error;
FT_UShort n, p;
- FT_Memory memory;
int script_count;
if (!stream)
return 0;
- memory = stream->memory;
-
if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
return 0;
diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h
index 83a7a435b..8179195fc 100644
--- a/fontconfig/src/fcint.h
+++ b/fontconfig/src/fcint.h
@@ -545,7 +545,7 @@ FcPrivate void
FcDirCacheReference (FcCache *cache, int nref);
FcPrivate int
-FcStat (const char *file, struct stat *statb);
+FcStat (const FcChar8 *file, struct stat *statb);
/* fccfg.c */
diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c
index 1b9162b46..422bc384d 100644
--- a/fontconfig/src/fcmatch.c
+++ b/fontconfig/src/fcmatch.c
@@ -23,6 +23,7 @@
*/
#include "fcint.h"
+#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
@@ -395,6 +396,9 @@ FcFontRenderPrepare (FcConfig *config,
FcValue v;
FcResult result;
+ assert (pat != NULL);
+ assert (font != NULL);
+
new = FcPatternCreate ();
if (!new)
return 0;
@@ -514,6 +518,10 @@ FcFontSetMatch (FcConfig *config,
{
FcPattern *best;
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
@@ -536,6 +544,9 @@ FcFontMatch (FcConfig *config,
int nsets;
FcPattern *best;
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
@@ -672,6 +683,19 @@ FcFontSetSort (FcConfig *config,
FcBool *patternLangSat;
FcValue patternLang;
+ assert (sets != NULL);
+ assert (p != NULL);
+ assert (result != NULL);
+
+ /* There are some implementation that relying on the result of
+ * "result" to check if the return value of FcFontSetSort
+ * is valid or not.
+ * So we should initialize it to the conservative way since
+ * this function doesn't return NULL anymore.
+ */
+ if (result)
+ *result = FcResultNoMatch;
+
if (FcDebug () & FC_DBG_MATCH)
{
printf ("Sort ");
@@ -686,7 +710,7 @@ FcFontSetSort (FcConfig *config,
nnodes += s->nfont;
}
if (!nnodes)
- goto bail0;
+ return FcFontSetCreate ();
for (nPatternLang = 0;
FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
@@ -822,6 +846,9 @@ FcFontSort (FcConfig *config,
FcFontSet *sets[2];
int nsets;
+ assert (p != NULL);
+ assert (result != NULL);
+
if (!config)
{
config = FcConfigGetCurrent ();
diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c
index d77eff6f7..1b32b0ff6 100644
--- a/fontconfig/src/fcname.c
+++ b/fontconfig/src/fcname.c
@@ -296,8 +296,6 @@ FcObjectValidType (FcObject object, FcType type)
if (t) {
switch (t->type) {
- case -1:
- return FcTrue;
case FcTypeDouble:
case FcTypeInteger:
if (type == FcTypeDouble || type == FcTypeInteger)
@@ -308,7 +306,7 @@ FcObjectValidType (FcObject object, FcType type)
return FcTrue;
break;
default:
- if (type == t->type)
+ if (t->type == -1 || type == t->type)
return FcTrue;
break;
}
@@ -511,7 +509,7 @@ FcNameUnregisterConstants (const FcConstant *consts, int nconsts)
}
const FcConstant *
-FcNameGetConstant (FcChar8 *string)
+FcNameGetConstant (const FcChar8 *string)
{
const FcConstantList *l;
int i;
@@ -526,7 +524,7 @@ FcNameGetConstant (FcChar8 *string)
}
FcBool
-FcNameConstant (FcChar8 *string, int *result)
+FcNameConstant (const FcChar8 *string, int *result)
{
const FcConstant *c;
diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c
index 8b94ecba5..b712e5daf 100644
--- a/fontconfig/src/fcstr.c
+++ b/fontconfig/src/fcstr.c
@@ -50,14 +50,16 @@ FcStrCopy (const FcChar8 *s)
FcChar8 *
FcStrPlus (const FcChar8 *s1, const FcChar8 *s2)
{
- int l = strlen ((char *)s1) + strlen ((char *) s2) + 1;
+ int s1l = strlen ((char *) s1);
+ int s2l = strlen ((char *) s2);
+ int l = s1l + s2l + 1;
FcChar8 *s = malloc (l);
if (!s)
return 0;
FcMemAlloc (FC_MEM_STRING, l);
- strcpy ((char *) s, (char *) s1);
- strcat ((char *) s, (char *) s2);
+ memcpy (s, s1, s1l);
+ memcpy (s + s1l, s2, s2l + 1);
return s;
}
diff --git a/fontconfig/src/makealias b/fontconfig/src/makealias
index fd9c3fd1f..fca94d4a2 100644
--- a/fontconfig/src/makealias
+++ b/fontconfig/src/makealias
@@ -17,12 +17,22 @@ while read name; do
hattr='__attribute((visibility("hidden")))'
echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
echo "#define $name $alias" >> $HEAD
- grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/#ifdef __\1__/' >> $TAIL
- echo "#undef $name" >> $TAIL
+ ifdef=$(grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/__\1__/')
+ if [ -z "$ifdef" ] ; then
+ echo "error: could not locate $name in src/*.c" 1>&2
+ exit 1
+ fi
+ if [ "$ifdef" != "$last" ] ; then
+ [ -n "$last" ] && echo "#endif /* $last */" >> $TAIL
+ echo "#ifdef $ifdef" >> $TAIL
+ last=$ifdef
+ fi
+ echo "# undef $name" >> $TAIL
cattr='__attribute((alias("'$alias'"), visibility("default")))'
echo "extern __typeof ($name) $name $cattr;" >> $TAIL
- echo "#endif" >> $TAIL
;;
esac
done
-echo "#endif" >> $TAIL
+[ $? -ne 0 ] && exit 1
+echo "#endif /* $ifdef */" >> $TAIL
+echo "#endif /* HAVE_GNUC_ATTRIBUTE */" >> $TAIL
diff --git a/libX11/nls/en_US.UTF-8/Compose.pre b/libX11/nls/en_US.UTF-8/Compose.pre
index de1e10403..b8cb4f7cd 100644
--- a/libX11/nls/en_US.UTF-8/Compose.pre
+++ b/libX11/nls/en_US.UTF-8/Compose.pre
@@ -1119,10 +1119,10 @@ XCOMM Part 3
<Multi_key> <macron> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
<Multi_key> <underscore> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
<Multi_key> <underscore> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
-<dead_caron> <U01B7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
-<Multi_key> <c> <U01B7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
-<dead_caron> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
-<Multi_key> <c> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<dead_caron> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<Multi_key> <c> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<dead_caron> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<Multi_key> <c> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
<dead_caron> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
<Multi_key> <c> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
<dead_acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
diff --git a/libX11/nls/fi_FI.UTF-8/Compose.pre b/libX11/nls/fi_FI.UTF-8/Compose.pre
index 2a43f34dc..fbe859721 100644
--- a/libX11/nls/fi_FI.UTF-8/Compose.pre
+++ b/libX11/nls/fi_FI.UTF-8/Compose.pre
@@ -1,427 +1,427 @@
-XCOMM
-XCOMM Official compose sequences for Finland based on SFS 5966 standard
-XCOMM
-XCOMM This compose sequence map implements all the functionality of Annex 3
-XCOMM and Annex 4 of the standard and additionally defines the sequences
-XCOMM provided in en_US.UTF-8/Compose. SFS 5966 sequences override any
-XCOMM conflicting rules from en_US.UTF-8/Compose.
-XCOMM
-XCOMM Annex 1 of the standard is implemented in the keymap symbols/fi
-XCOMM
-XCOMM Complete rewrite by Marko Myllynen
-XCOMM Original version by Troy Korjuslommi
-XCOMM
-
-XCOMM Use en_US.UTF-8/Compose as the base compose sequence definition set
-include "X11_LOCALEDATADIR/en_US.UTF-8/Compose"
-
-XCOMM Define all the sequences of the standard overriding any sequence
-XCOMM from en_US.UTF-8/Compose if such a sequence was provided already
-
-XCOMM Sequences from Annex 3
-
-XCOMM Sequences with COMBINING ACUTE ACCENT / <dead_acute>
-<dead_acute> <space> : "´" # ACUTE ACCENT
-<dead_acute> <a> : "á" # LATIN CAPITAL LETTER A WITH ACUTE
-<dead_acute> <A> : "Á" # LATIN CAPITAL LETTER A WITH ACUTE
-<dead_acute> <c> : "ć" # LATIN SMALL LETTER C WITH ACUTE
-<dead_acute> <C> : "Ć" # LATIN CAPITAL LETTER C WITH ACUTE
-<dead_acute> <e> : "é" # LATIN SMALL LETTER E WITH ACUTE
-<dead_acute> <E> : "É" # LATIN CAPITAL LETTER E WITH ACUTE
-<dead_acute> <i> : "í" # LATIN SMALL LETTER I WITH ACUTE
-<dead_acute> <I> : "Í" # LATIN CAPITAL LETTER I WITH ACUTE
-<dead_acute> <l> : "ĺ" # LATIN SMALL LETTER L WITH ACUTE
-<dead_acute> <L> : "Ĺ" # LATIN CAPITAL LETTER L WITH ACUTE
-<dead_acute> <n> : "ń" # LATIN SMALL LETTER N WITH ACUTE
-<dead_acute> <N> : "Ń" # LATIN CAPITAL LETTER N WITH ACUTE
-<dead_acute> <o> : "ó" # LATIN SMALL LETTER O WITH ACUTE
-<dead_acute> <O> : "Ó" # LATIN CAPITAL LETTER O WITH ACUTE
-<dead_acute> <r> : "ŕ" # LATIN SMALL LETTER R WITH ACUTE
-<dead_acute> <R> : "Ŕ" # LATIN CAPITAL LETTER R WITH ACUTE
-<dead_acute> <s> : "ś" # LATIN SMALL LETTER S WITH ACUTE
-<dead_acute> <S> : "Ś" # LATIN CAPITAL LETTER S WITH ACUTE
-<dead_acute> <u> : "ú" # LATIN SMALL LETTER U WITH ACUTE
-<dead_acute> <U> : "Ú" # LATIN CAPITAL LETTER U WITH ACUTE
-<dead_acute> <w> : "ẃ" # LATIN SMALL LETTER W WITH ACUTE
-<dead_acute> <W> : "Ẃ" # LATIN CAPITAL LETTER W WITH ACUTE
-<dead_acute> <y> : "ý" # LATIN SMALL LETTER Y WITH ACUTE
-<dead_acute> <Y> : "Ý" # LATIN CAPITAL LETTER Y WITH ACUTE
-<dead_acute> <z> : "ź" # LATIN SMALL LETTER Z WITH ACUTE
-<dead_acute> <Z> : "Ź" # LATIN CAPITAL LETTER Z WITH ACUTE
-<dead_acute> <ae> : "ǽ" # LATIN SMALL LETTER AE WITH ACUTE
-<dead_acute> <AE> : "Ǽ" # LATIN CAPITAL LETTER AE WITH ACUTE
-<dead_acute> <oslash> : "ǿ" # LATIN SMALL LETTER O WITH STROKE AND ACUTE
-<dead_acute> <Oslash> : "Ǿ" # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-<dead_acute> <aring> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-<dead_acute> <Aring> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-
-XCOMM Sequences with COMBINING BREVE / <dead_breve>
-<dead_breve> <space> : "˘" # BREVE
-<dead_breve> <a> : "ă" # LATIN SMALL LETTER A WITH BREVE
-<dead_breve> <A> : "Ă" # LATIN CAPITAL LETTER A WITH BREVE
-<dead_breve> <e> : "ĕ" # LATIN SMALL LETTER E WITH BREVE
-<dead_breve> <E> : "Ĕ" # LATIN CAPITAL LETTER E WITH BREVE
-<dead_breve> <g> : "ğ" # LATIN SMALL LETTER G WITH BREVE
-<dead_breve> <G> : "Ğ" # LATIN CAPITAL LETTER G WITH BREVE
-<dead_breve> <i> : "ĭ" # LATIN SMALL LETTER I WITH BREVE
-<dead_breve> <I> : "Ĭ" # LATIN CAPITAL LETTER I WITH BREVE
-<dead_breve> <o> : "ŏ" # LATIN SMALL LETTER O WITH BREVE
-<dead_breve> <O> : "Ŏ" # LATIN CAPITAL LETTER O WITH BREVE
-<dead_breve> <u> : "ŭ" # LATIN SMALL LETTER U WITH BREVE
-<dead_breve> <U> : "Ŭ" # LATIN CAPITAL LETTER U WITH BREVE
-
-XCOMM Sequences with COMBINING CARON / <dead_caron>
-<dead_caron> <space> : "ˇ" # CARON
-<dead_caron> <a> : "ǎ" # LATIN SMALL LETTER A WITH CARON
-<dead_caron> <A> : "Ǎ" # LATIN CAPITAL LETTER A WITH CARON
-<dead_caron> <c> : "č" # LATIN SMALL LETTER C WITH CARON
-<dead_caron> <C> : "Č" # LATIN CAPITAL LETTER C WITH CARON
-<dead_caron> <d> : "ď" # LATIN SMALL LETTER D WITH CARON
-<dead_caron> <D> : "Ď" # LATIN CAPITAL LETTER D WITH CARON
-<dead_caron> <e> : "ě" # LATIN SMALL LETTER E WITH CARON
-<dead_caron> <E> : "Ě" # LATIN CAPITAL LETTER E WITH CARON
-<dead_caron> <g> : "ǧ" # LATIN SMALL LETTER G WITH CARON
-<dead_caron> <G> : "Ǧ" # LATIN CAPITAL LETTER G WITH CARON
-<dead_caron> <h> : "ȟ" # LATIN SMALL LETTER H WITH CARON
-<dead_caron> <H> : "Ȟ" # LATIN CAPITAL LETTER H WITH CARON
-<dead_caron> <i> : "ǐ" # LATIN SMALL LETTER I WITH CARON
-<dead_caron> <I> : "Ǐ" # LATIN CAPITAL LETTER I WITH CARON
-<dead_caron> <k> : "ǩ" # LATIN SMALL LETTER K WITH CARON
-<dead_caron> <K> : "Ǩ" # LATIN CAPITAL LETTER K WITH CARON
-<dead_caron> <l> : "ľ" # LATIN SMALL LETTER L WITH CARON
-<dead_caron> <L> : "Ľ" # LATIN CAPITAL LETTER L WITH CARON
-<dead_caron> <n> : "ň" # LATIN SMALL LETTER N WITH CARON
-<dead_caron> <N> : "Ň" # LATIN CAPITAL LETTER N WITH CARON
-<dead_caron> <o> : "ǒ" # LATIN SMALL LETTER O WITH CARON
-<dead_caron> <O> : "Ǒ" # LATIN CAPITAL LETTER O WITH CARON
-<dead_caron> <r> : "ř" # LATIN SMALL LETTER R WITH CARON
-<dead_caron> <R> : "Ř" # LATIN CAPITAL LETTER R WITH CARON
-<dead_caron> <s> : "š" # LATIN SMALL LETTER S WITH CARON
-<dead_caron> <S> : "Š" # LATIN CAPITAL LETTER S WITH CARON
-<dead_caron> <t> : "ť" # LATIN SMALL LETTER T WITH CARON
-<dead_caron> <T> : "Ť" # LATIN CAPITAL LETTER T WITH CARON
-<dead_caron> <u> : "ǔ" # LATIN SMALL LETTER U WITH CARON
-<dead_caron> <U> : "Ǔ" # LATIN CAPITAL LETTER U WITH CARON
-<dead_caron> <z> : "ž" # LATIN SMALL LETTER Z WITH CARON
-<dead_caron> <Z> : "Ž" # LATIN CAPITAL LETTER Z WITH CARON
-<dead_caron> <U0292> : "ǯ" # LATIN SMALL LETTER EZH WITH CARON
-<dead_caron> <U01B7> : "Ǯ" # LATIN CAPITAL LETTER EZH WITH CARON
-
-XCOMM Sequences with COMBINING CEDILLA / <dead_cedilla>
-<dead_cedilla> <space> : "¸" # CEDILLA
-<dead_cedilla> <c> : "ç" # LATIN SMALL LETTER C WITH CEDILLA
-<dead_cedilla> <C> : "Ç" # LATIN CAPITAL LETTER C WITH CEDILLA
-<dead_cedilla> <g> : "ģ" # LATIN SMALL LETTER G WITH CEDILLA
-<dead_cedilla> <G> : "Ģ" # LATIN CAPITAL LETTER G WITH CEDILLA
-<dead_cedilla> <k> : "ķ" # LATIN SMALL LETTER K WITH CEDILLA
-<dead_cedilla> <K> : "Ķ" # LATIN CAPITAL LETTER K WITH CEDILLA
-<dead_cedilla> <l> : "ļ" # LATIN SMALL LETTER L WITH CEDILLA
-<dead_cedilla> <L> : "Ļ" # LATIN CAPITAL LETTER L WITH CEDILLA
-<dead_cedilla> <n> : "ņ" # LATIN SMALL LETTER N WITH CEDILLA
-<dead_cedilla> <N> : "Ņ" # LATIN CAPITAL LETTER N WITH CEDILLA
-<dead_cedilla> <r> : "ŗ" # LATIN SMALL LETTER R WITH CEDILLA
-<dead_cedilla> <R> : "Ŗ" # LATIN CAPITAL LETTER R WITH CEDILLA
-<dead_cedilla> <s> : "ş" # LATIN SMALL LETTER S WITH CEDILLA
-<dead_cedilla> <S> : "Ş" # LATIN CAPITAL LETTER S WITH CEDILLA
-<dead_cedilla> <t> : "ţ" # LATIN SMALL LETTER T WITH CEDILLA
-<dead_cedilla> <T> : "Ţ" # LATIN CAPITAL LETTER T WITH CEDILLA
-
-XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
-<dead_circumflex> <space> : "^" # CIRCUMFLEX
-<dead_circumflex> <a> : "â" # LATIN SMALL LETTER A WITH CIRCUMFLEX
-<dead_circumflex> <A> : "Â" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-<dead_circumflex> <c> : "ĉ" # LATIN SMALL LETTER C WITH CIRCUMFLEX
-<dead_circumflex> <C> : "Ĉ" # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-<dead_circumflex> <e> : "ê" # LATIN SMALL LETTER E WITH CIRCUMFLEX
-<dead_circumflex> <E> : "Ê" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-<dead_circumflex> <g> : "ĝ" # LATIN SMALL LETTER G WITH CIRCUMFLEX
-<dead_circumflex> <G> : "Ĝ" # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-<dead_circumflex> <h> : "ĥ" # LATIN SMALL LETTER H WITH CIRCUMFLEX
-<dead_circumflex> <H> : "Ĥ" # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-<dead_circumflex> <i> : "î" # LATIN SMALL LETTER I WITH CIRCUMFLEX
-<dead_circumflex> <I> : "Î" # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-<dead_circumflex> <j> : "ĵ" # LATIN SMALL LETTER J WITH CIRCUMFLEX
-<dead_circumflex> <J> : "Ĵ" # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-<dead_circumflex> <o> : "ô" # LATIN SMALL LETTER O WITH CIRCUMFLEX
-<dead_circumflex> <O> : "Ô" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-<dead_circumflex> <s> : "ŝ" # LATIN SMALL LETTER S WITH CIRCUMFLEX
-<dead_circumflex> <S> : "Ŝ" # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-<dead_circumflex> <u> : "û" # LATIN SMALL LETTER U WITH CIRCUMFLEX
-<dead_circumflex> <U> : "Û" # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-<dead_circumflex> <w> : "ŵ" # LATIN SMALL LETTER W WITH CIRCUMFLEX
-<dead_circumflex> <W> : "Ŵ" # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-<dead_circumflex> <y> : "ŷ" # LATIN SMALL LETTER Y WITH CIRCUMFLEX
-<dead_circumflex> <Y> : "Ŷ" # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-
-XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
-<dead_diaeresis> <space> : "¨" # DIAERESIS
-<dead_diaeresis> <a> : "ä" # LATIN SMALL LETTER A WITH DIAERESIS
-<dead_diaeresis> <A> : "Ä" # LATIN CAPITAL LETTER A WITH DIAERESIS
-<dead_diaeresis> <e> : "ë" # LATIN SMALL LETTER E WITH DIAERESIS
-<dead_diaeresis> <E> : "Ë" # LATIN CAPITAL LETTER E WITH DIAERESIS
-<dead_diaeresis> <i> : "ï" # LATIN SMALL LETTER I WITH DIAERESIS
-<dead_diaeresis> <I> : "Ï" # LATIN CAPITAL LETTER I WITH DIAERESIS
-<dead_diaeresis> <o> : "ö" # LATIN SMALL LETTER O WITH DIAERESIS
-<dead_diaeresis> <O> : "Ö" # LATIN CAPITAL LETTER O WITH DIAERESIS
-<dead_diaeresis> <u> : "ü" # LATIN SMALL LETTER U WITH DIAERESIS
-<dead_diaeresis> <U> : "Ü" # LATIN CAPITAL LETTER U WITH DIAERESIS
-<dead_diaeresis> <w> : "ẅ" # LATIN SMALL LETTER W WITH DIAERESIS
-<dead_diaeresis> <W> : "Ẅ" # LATIN CAPITAL LETTER W WITH DIAERESIS
-<dead_diaeresis> <y> : "ÿ" # LATIN SMALL LETTER Y WITH DIAERESIS
-<dead_diaeresis> <Y> : "Ÿ" # LATIN CAPITAL LETTER Y WITH DIAERESIS
-
-XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
-<dead_abovedot> <space> : "˙" # DOT ABOVE
-<dead_abovedot> <b> : "ḃ" # LATIN SMALL LETTER B WITH DOT ABOVE
-<dead_abovedot> <B> : "Ḃ" # LATIN CAPITAL LETTER B WITH DOT ABOVE
-<dead_abovedot> <c> : "ċ" # LATIN SMALL LETTER C WITH DOT ABOVE
-<dead_abovedot> <C> : "Ċ" # LATIN CAPITAL LETTER C WITH DOT ABOVE
-<dead_abovedot> <d> : "ḋ" # LATIN SMALL LETTER D WITH DOT ABOVE
-<dead_abovedot> <D> : "Ḋ" # LATIN CAPITAL LETTER D WITH DOT ABOVE
-<dead_abovedot> <e> : "ė" # LATIN SMALL LETTER E WITH DOT ABOVE
-<dead_abovedot> <E> : "Ė" # LATIN CAPITAL LETTER E WITH DOT ABOVE
-<dead_abovedot> <f> : "ḟ" # LATIN SMALL LETTER F WITH DOT ABOVE
-<dead_abovedot> <F> : "Ḟ" # LATIN CAPITAL LETTER F WITH DOT ABOVE
-<dead_abovedot> <g> : "ġ" # LATIN SMALL LETTER G WITH DOT ABOVE
-<dead_abovedot> <G> : "Ġ" # LATIN CAPITAL LETTER G WITH DOT ABOVE
-<dead_abovedot> <I> : "İ" # LATIN CAPITAL LETTER I WITH DOT ABOVE
-<dead_abovedot> <m> : "ṁ" # LATIN SMALL LETTER M WITH DOT ABOVE
-<dead_abovedot> <M> : "Ṁ" # LATIN CAPITAL LETTER M WITH DOT ABOVE
-<dead_abovedot> <p> : "ṗ" # LATIN SMALL LETTER P WITH DOT ABOVE
-<dead_abovedot> <P> : "Ṗ" # LATIN CAPITAL LETTER P WITH DOT ABOVE
-<dead_abovedot> <s> : "ṡ" # LATIN SMALL LETTER S WITH DOT ABOVE
-<dead_abovedot> <S> : "Ṡ" # LATIN CAPITAL LETTER S WITH DOT ABOVE
-<dead_abovedot> <t> : "ṫ" # LATIN SMALL LETTER T WITH DOT ABOVE
-<dead_abovedot> <T> : "Ṫ" # LATIN CAPITAL LETTER T WITH DOT ABOVE
-<dead_abovedot> <z> : "ż" # LATIN SMALL LETTER Z WITH DOT ABOVE
-<dead_abovedot> <Z> : "Ż" # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-
-XCOMM Sequences with COMBINING DOT BELOW / <dead_belowdot>
-XCOMM <dead_belowdot> <space> : " " # DOT BELOW
-<dead_belowdot> <a> : "ạ" # LATIN SMALL LETTER A WITH DOT BELOW
-<dead_belowdot> <A> : "Ạ" # LATIN CAPITAL LETTER A WITH DOT BELOW
-<dead_belowdot> <e> : "ẹ" # LATIN SMALL LETTER E WITH DOT BELOW
-<dead_belowdot> <E> : "Ẹ" # LATIN CAPITAL LETTER E WITH DOT BELOW
-<dead_belowdot> <i> : "ị" # LATIN SMALL LETTER I WITH DOT BELOW
-<dead_belowdot> <I> : "Ị" # LATIN CAPITAL LETTER I WITH DOT BELOW
-<dead_belowdot> <o> : "ọ" # LATIN SMALL LETTER O WITH DOT BELOW
-<dead_belowdot> <O> : "Ọ" # LATIN CAPITAL LETTER O WITH DOT BELOW
-<dead_belowdot> <u> : "ụ" # LATIN SMALL LETTER U WITH DOT BELOW
-<dead_belowdot> <U> : "Ụ" # LATIN CAPITAL LETTER U WITH DOT BELOW
-<dead_belowdot> <y> : "ỵ" # LATIN SMALL LETTER Y WITH DOT BELOW
-<dead_belowdot> <Y> : "Ỵ" # LATIN CAPITAL LETTER Y WITH DOT BELOW
-
-XCOMM Sequences with COMBINING DOUBLE ACUTE ACCENT / <dead_doubleacute>
-<dead_doubleacute> <space> : "˝" # DOUBLE ACUTE ACCENT
-<dead_doubleacute> <o> : "ő" # LATIN SMALL LETTER O WITH DOUBLE ACUTE
-<dead_doubleacute> <O> : "Ő" # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-<dead_doubleacute> <u> : "ű" # LATIN SMALL LETTER U WITH DOUBLE ACUTE
-<dead_doubleacute> <U> : "Ű" # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-
-XCOMM Sequences with COMBINING GRAVE ACCENT / <dead_grave>
-<dead_grave> <space> : "`" # GRAVE ACCENT
-<dead_grave> <a> : "à" # LATIN SMALL LETTER A WITH GRAVE
-<dead_grave> <A> : "À" # LATIN CAPITAL LETTER A WITH GRAVE
-<dead_grave> <e> : "è" # LATIN SMALL LETTER E WITH GRAVE
-<dead_grave> <E> : "È" # LATIN CAPITAL LETTER E WITH GRAVE
-<dead_grave> <i> : "ì" # LATIN SMALL LETTER I WITH GRAVE
-<dead_grave> <I> : "Ì" # LATIN CAPITAL LETTER I WITH GRAVE
-<dead_grave> <o> : "ò" # LATIN SMALL LETTER O WITH GRAVE
-<dead_grave> <O> : "Ò" # LATIN CAPITAL LETTER O WITH GRAVE
-<dead_grave> <u> : "ù" # LATIN SMALL LETTER U WITH GRAVE
-<dead_grave> <U> : "Ù" # LATIN CAPITAL LETTER U WITH GRAVE
-<dead_grave> <w> : "ẁ" # LATIN SMALL LETTER W WITH GRAVE
-<dead_grave> <W> : "Ẁ" # LATIN CAPITAL LETTER W WITH GRAVE
-<dead_grave> <y> : "ỳ" # LATIN SMALL LETTER Y WITH GRAVE
-<dead_grave> <Y> : "Ỳ" # LATIN CAPITAL LETTER Y WITH GRAVE
-
-XCOMM Sequences with COMBINING MACRON / <dead_macron>
-<dead_macron> <space> : "¯" # MACRON
-<dead_macron> <a> : "ā" # LATIN SMALL LETTER A WITH MACRON
-<dead_macron> <A> : "Ā" # LATIN CAPITAL LETTER A WITH MACRON
-<dead_macron> <e> : "ē" # LATIN SMALL LETTER E WITH MACRON
-<dead_macron> <E> : "Ē" # LATIN CAPITAL LETTER E WITH MACRON
-<dead_macron> <i> : "ī" # LATIN SMALL LETTER I WITH MACRON
-<dead_macron> <I> : "Ī" # LATIN CAPITAL LETTER I WITH MACRON
-<dead_macron> <o> : "ō" # LATIN SMALL LETTER O WITH MACRON
-<dead_macron> <O> : "Ō" # LATIN CAPITAL LETTER O WITH MACRON
-<dead_macron> <u> : "ū" # LATIN SMALL LETTER U WITH MACRON
-<dead_macron> <U> : "Ū" # LATIN CAPITAL LETTER U WITH MACRON
-<dead_macron> <ae> : "ǣ" # LATIN SMALL LETTER AE WITH MACRON
-<dead_macron> <AE> : "Ǣ" # LATIN CAPITAL LETTER AE WITH MACRON
-<dead_macron> <adiaeresis> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-<dead_macron> <Adiaeresis> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-
-XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
-<dead_ogonek> <space> : "˛" # OGONEK
-<dead_ogonek> <a> : "ą" # LATIN SMALL LETTER A WITH OGONEK
-<dead_ogonek> <A> : "Ą" # LATIN CAPITAL LETTER A WITH OGONEK
-<dead_ogonek> <e> : "ę" # LATIN SMALL LETTER E WITH OGONEK
-<dead_ogonek> <E> : "Ę" # LATIN CAPITAL LETTER E WITH OGONEK
-<dead_ogonek> <i> : "į" # LATIN SMALL LETTER I WITH OGONEK
-<dead_ogonek> <I> : "Į" # LATIN CAPITAL LETTER I WITH OGONEK
-<dead_ogonek> <o> : "ǫ" # LATIN SMALL LETTER O WITH OGONEK
-<dead_ogonek> <O> : "Ǫ" # LATIN CAPITAL LETTER O WITH OGONEK
-<dead_ogonek> <u> : "ų" # LATIN SMALL LETTER U WITH OGONEK
-<dead_ogonek> <U> : "Ų" # LATIN CAPITAL LETTER U WITH OGONEK
-
-XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
-<dead_abovering> <space> : "°" # RING ABOVE
-<dead_abovering> <a> : "å" # LATIN SMALL LETTER A WITH RING ABOVE
-<dead_abovering> <A> : "Å" # LATIN CAPITAL LETTER A WITH RING ABOVE
-<dead_abovering> <u> : "ů" # LATIN SMALL LETTER U WITH RING ABOVE
-<dead_abovering> <U> : "Ů" # LATIN CAPITAL LETTER U WITH RING ABOVE
-
-XCOMM Sequences with COMBINING TILDE / <dead_tilde>
-<dead_tilde> <space> : "~" # TILDE
-<dead_tilde> <a> : "ã" # LATIN SMALL LETTER A WITH TILDE
-<dead_tilde> <A> : "Ã" # LATIN CAPITAL LETTER A WITH TILDE
-<dead_tilde> <e> : "ẽ" # LATIN SMALL LETTER E WITH TILDE
-<dead_tilde> <E> : "Ẽ" # LATIN CAPITAL LETTER E WITH TILDE
-<dead_tilde> <i> : "ĩ" # LATIN SMALL LETTER I WITH TILDE
-<dead_tilde> <I> : "Ĩ" # LATIN CAPITAL LETTER I WITH TILDE
-<dead_tilde> <n> : "ñ" # LATIN SMALL LETTER N WITH TILDE
-<dead_tilde> <N> : "Ñ" # LATIN CAPITAL LETTER N WITH TILDE
-<dead_tilde> <o> : "õ" # LATIN SMALL LETTER O WITH TILDE
-<dead_tilde> <O> : "Õ" # LATIN CAPITAL LETTER O WITH TILDE
-<dead_tilde> <u> : "ũ" # LATIN SMALL LETTER U WITH TILDE
-<dead_tilde> <U> : "Ũ" # LATIN CAPITAL LETTER U WITH TILDE
-<dead_tilde> <y> : "ỹ" # LATIN SMALL LETTER Y WITH TILDE
-<dead_tilde> <Y> : "Ỹ" # LATIN CAPITAL LETTER Y WITH TILDE
-
-XCOMM Sequences with AUXILIARY STROKE / <dead_stroke>
-<dead_stroke> <d> : "đ" # LATIN SMALL LETTER D WITH STROKE
-<dead_stroke> <D> : "Đ" # LATIN CAPITAL LETTER D WITH STROKE
-<dead_stroke> <g> : "ǥ" # LATIN SMALL LETTER G WITH STROKE
-<dead_stroke> <G> : "Ǥ" # LATIN CAPITAL LETTER G WITH STROKE
-<dead_stroke> <h> : "ħ" # LATIN SMALL LETTER H WITH STROKE
-<dead_stroke> <H> : "Ħ" # LATIN CAPITAL LETTER H WITH STROKE
-<dead_stroke> <l> : "ł" # LATIN SMALL LETTER L WITH STROKE
-<dead_stroke> <L> : "Ł" # LATIN CAPITAL LETTER L WITH STROKE
-<dead_stroke> <o> : "ø" # LATIN SMALL LETTER O WITH STROKE
-<dead_stroke> <O> : "Ø" # LATIN CAPITAL LETTER O WITH STROKE
-<dead_stroke> <t> : "ŧ" # LATIN SMALL LETTER T WITH STROKE
-<dead_stroke> <T> : "Ŧ" # LATIN CAPITAL LETTER T WITH STROKE
-
-XCOMM Sequences from Annex 4
-
-XCOMM Sequences with COMBINING BREVE / <dead_breve>
-<dead_acute> <dead_breve> <a> : "ắ" # LATIN SMALL LETTER A WITH BREVE AND ACUTE
-<dead_belowdot> <dead_breve> <a> : "ặ" # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-<dead_grave> <dead_breve> <a> : "ằ" # LATIN SMALL LETTER A WITH BREVE AND GRAVE
-<dead_hook> <dead_breve> <a> : "ẳ" # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-<dead_tilde> <dead_breve> <a> : "ẵ" # LATIN SMALL LETTER A WITH BREVE AND TILDE
-<dead_acute> <dead_breve> <A> : "Ắ" # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-<dead_belowdot> <dead_breve> <A> : "Ặ" # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-<dead_grave> <dead_breve> <A> : "Ằ" # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-<dead_hook> <dead_breve> <A> : "Ẳ" # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-<dead_tilde> <dead_breve> <A> : "Ẵ" # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-
-XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
-<dead_acute> <dead_circumflex> <a> : "ấ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <a> : "ậ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <a> : "ầ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <a> : "ẩ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <a> : "ẫ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <A> : "Ấ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <A> : "Ậ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <A> : "Ầ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <A> : "Ẩ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <A> : "Ẫ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <e> : "ế" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <e> : "ệ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <e> : "ề" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <e> : "ể" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <e> : "ễ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <E> : "Ề" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <E> : "Ể" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <E> : "Ễ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <o> : "ố" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <o> : "ộ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <o> : "ồ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <o> : "ổ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <o> : "ỗ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-<dead_acute> <dead_circumflex> <O> : "Ố" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-<dead_belowdot> <dead_circumflex> <O> : "Ộ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-<dead_grave> <dead_circumflex> <O> : "Ồ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-<dead_hook> <dead_circumflex> <O> : "Ổ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-<dead_tilde> <dead_circumflex> <O> : "Ỗ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-
-XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
-<dead_macron> <dead_diaeresis> <a> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-<dead_macron> <dead_diaeresis> <A> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-
-XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
- <dead_abovedot> <a> : "ȧ" # LATIN SMALL LETTER A WITH DOT ABOVE
-<dead_macron> <dead_abovedot> <a> : "ǡ" # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
- <dead_abovedot> <A> : "Ȧ" # LATIN CAPITAL LETTER A WITH DOT ABOVE
-<dead_macron> <dead_abovedot> <A> : "Ǡ" # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-
-XCOMM Sequences with COMBINING HOOK ABOVE / <dead_hook>
-<dead_hook> <a> : "ả" # LATIN SMALL LETTER A WITH HOOK ABOVE
-<dead_hook> <A> : "Ả" # LATIN CAPITAL LETTER A WITH HOOK ABOVE
-<dead_hook> <e> : "ẻ" # LATIN SMALL LETTER E WITH HOOK ABOVE
-<dead_hook> <E> : "Ẻ" # LATIN CAPITAL LETTER E WITH HOOK ABOVE
-<dead_hook> <i> : "ỉ" # LATIN SMALL LETTER I WITH HOOK ABOVE
-<dead_hook> <I> : "Ỉ" # LATIN CAPITAL LETTER I WITH HOOK ABOVE
-<dead_hook> <o> : "ỏ" # LATIN SMALL LETTER O WITH HOOK ABOVE
-<dead_hook> <O> : "Ỏ" # LATIN CAPITAL LETTER O WITH HOOK ABOVE
-<dead_hook> <u> : "ủ" # LATIN SMALL LETTER U WITH HOOK ABOVE
-<dead_hook> <U> : "Ủ" # LATIN CAPITAL LETTER U WITH HOOK ABOVE
-<dead_hook> <y> : "ỷ" # LATIN SMALL LETTER Y WITH HOOK ABOVE
-<dead_hook> <Y> : "Ỷ" # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-
-XCOMM Sequences with COMBINING HORN / <dead_horn>
- <dead_horn> <o> : "ơ" # LATIN SMALL LETTER O WITH HORN
-<dead_acute> <dead_horn> <o> : "ớ" # LATIN SMALL LETTER O WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <o> : "ợ" # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <o> : "ỡ" # LATIN SMALL LETTER O WITH HORN AND TILDE
- <dead_horn> <O> : "Ơ" # LATIN CAPITAL LETTER O WITH HORN
-<dead_acute> <dead_horn> <O> : "Ớ" # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <O> : "Ợ" # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <O> : "Ờ" # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <O> : "Ở" # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <O> : "Ỡ" # LATIN CAPITAL LETTER O WITH HORN AND TILDE
- <dead_horn> <u> : "ư" # LATIN SMALL LETTER U WITH HORN
-<dead_acute> <dead_horn> <u> : "ứ" # LATIN SMALL LETTER U WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <u> : "ự" # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <u> : "ừ" # LATIN SMALL LETTER U WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <u> : "ử" # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <u> : "ữ" # LATIN SMALL LETTER U WITH HORN AND TILDE
- <dead_horn> <U> : "Ư" # LATIN CAPITAL LETTER U WITH HORN
-<dead_acute> <dead_horn> <U> : "Ứ" # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-<dead_belowdot> <dead_horn> <U> : "Ự" # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-<dead_grave> <dead_horn> <U> : "Ừ" # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-<dead_hook> <dead_horn> <U> : "Ử" # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-<dead_tilde> <dead_horn> <U> : "Ữ" # LATIN CAPITAL LETTER U WITH HORN AND TILDE
-
-XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
-<dead_macron> <dead_ogonek> <o> : "ǭ" # LATIN SMALL LETTER O WITH OGONEK AND MACRON
-<dead_macron> <dead_ogonek> <O> : "Ǭ" # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-
-XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
-<dead_acute> <dead_abovering> <a> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-<dead_acute> <dead_abovering> <A> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-
-XCOMM Additional sequences from Annex 5 for the reportoire of the MES-2
-XCOMM (Multilingual European Subset No. 2 in ISO/IEC 10646, Collection 282)
-<dead_hook> <f> : "ƒ" # LATIN SMALL LETTER F WITH HOOK
-<Multi_key> <f> <i> : "fi" # LATIN SMALL LIGATURE FI
-<Multi_key> <f> <l> : "fl" # LATIN SMALL LIGATURE FL
-<Multi_key> <i> <j> : "ij" # LATIN SMALL LIGATURE IJ
-<Multi_key> <I> <J> : "IJ" # LATIN CAPITAL LIGATURE IJ
-<dead_abovedot> <l> : "ŀ" # LATIN SMALL LETTER L WITH MIDDLE DOT
-<dead_abovedot> <L> : "Ŀ" # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-<Multi_key> <apostrophe> <space> <n> : "ʼn" # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-<dead_hook> <r> : "ɼ" # LATIN SMALL LETTER R WITH LONG LEG
-<Multi_key> <f> <s> : "ſ" # LATIN SMALL LETTER LONG S
-<dead_abovedot> <Multi_key> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-<Multi_key> <dead_abovedot> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-<dead_belowcomma> <s> : "ș" # LATIN SMALL LETTER S WITH COMMA BELOW
-<dead_belowcomma> <S> : "Ș" # LATIN CAPITAL LETTER S WITH COMMA BELOW
-<dead_belowcomma> <t> : "ț" # LATIN SMALL LETTER T WITH COMMA BELOW
-<dead_belowcomma> <T> : "Ț" # LATIN CAPITAL LETTER T WITH COMMA BELOW
+XCOMM
+XCOMM Official compose sequences for Finland based on SFS 5966 standard
+XCOMM
+XCOMM This compose sequence map implements all the functionality of Annex 3
+XCOMM and Annex 4 of the standard and additionally defines the sequences
+XCOMM provided in en_US.UTF-8/Compose. SFS 5966 sequences override any
+XCOMM conflicting rules from en_US.UTF-8/Compose.
+XCOMM
+XCOMM Annex 1 of the standard is implemented in the keymap symbols/fi
+XCOMM
+XCOMM Complete rewrite by Marko Myllynen
+XCOMM Original version by Troy Korjuslommi
+XCOMM
+
+XCOMM Use en_US.UTF-8/Compose as the base compose sequence definition set
+include "X11_LOCALEDATADIR/en_US.UTF-8/Compose"
+
+XCOMM Define all the sequences of the standard overriding any sequence
+XCOMM from en_US.UTF-8/Compose if such a sequence was provided already
+
+XCOMM Sequences from Annex 3
+
+XCOMM Sequences with COMBINING ACUTE ACCENT / <dead_acute>
+<dead_acute> <space> : "´" # ACUTE ACCENT
+<dead_acute> <a> : "á" # LATIN CAPITAL LETTER A WITH ACUTE
+<dead_acute> <A> : "Á" # LATIN CAPITAL LETTER A WITH ACUTE
+<dead_acute> <c> : "ć" # LATIN SMALL LETTER C WITH ACUTE
+<dead_acute> <C> : "Ć" # LATIN CAPITAL LETTER C WITH ACUTE
+<dead_acute> <e> : "é" # LATIN SMALL LETTER E WITH ACUTE
+<dead_acute> <E> : "É" # LATIN CAPITAL LETTER E WITH ACUTE
+<dead_acute> <i> : "í" # LATIN SMALL LETTER I WITH ACUTE
+<dead_acute> <I> : "Í" # LATIN CAPITAL LETTER I WITH ACUTE
+<dead_acute> <l> : "ĺ" # LATIN SMALL LETTER L WITH ACUTE
+<dead_acute> <L> : "Ĺ" # LATIN CAPITAL LETTER L WITH ACUTE
+<dead_acute> <n> : "ń" # LATIN SMALL LETTER N WITH ACUTE
+<dead_acute> <N> : "Ń" # LATIN CAPITAL LETTER N WITH ACUTE
+<dead_acute> <o> : "ó" # LATIN SMALL LETTER O WITH ACUTE
+<dead_acute> <O> : "Ó" # LATIN CAPITAL LETTER O WITH ACUTE
+<dead_acute> <r> : "ŕ" # LATIN SMALL LETTER R WITH ACUTE
+<dead_acute> <R> : "Ŕ" # LATIN CAPITAL LETTER R WITH ACUTE
+<dead_acute> <s> : "ś" # LATIN SMALL LETTER S WITH ACUTE
+<dead_acute> <S> : "Ś" # LATIN CAPITAL LETTER S WITH ACUTE
+<dead_acute> <u> : "ú" # LATIN SMALL LETTER U WITH ACUTE
+<dead_acute> <U> : "Ú" # LATIN CAPITAL LETTER U WITH ACUTE
+<dead_acute> <w> : "ẃ" # LATIN SMALL LETTER W WITH ACUTE
+<dead_acute> <W> : "Ẃ" # LATIN CAPITAL LETTER W WITH ACUTE
+<dead_acute> <y> : "ý" # LATIN SMALL LETTER Y WITH ACUTE
+<dead_acute> <Y> : "Ý" # LATIN CAPITAL LETTER Y WITH ACUTE
+<dead_acute> <z> : "ź" # LATIN SMALL LETTER Z WITH ACUTE
+<dead_acute> <Z> : "Ź" # LATIN CAPITAL LETTER Z WITH ACUTE
+<dead_acute> <ae> : "ǽ" # LATIN SMALL LETTER AE WITH ACUTE
+<dead_acute> <AE> : "Ǽ" # LATIN CAPITAL LETTER AE WITH ACUTE
+<dead_acute> <oslash> : "ǿ" # LATIN SMALL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <Oslash> : "Ǿ" # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+<dead_acute> <aring> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <Aring> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+
+XCOMM Sequences with COMBINING BREVE / <dead_breve>
+<dead_breve> <space> : "˘" # BREVE
+<dead_breve> <a> : "ă" # LATIN SMALL LETTER A WITH BREVE
+<dead_breve> <A> : "Ă" # LATIN CAPITAL LETTER A WITH BREVE
+<dead_breve> <e> : "ĕ" # LATIN SMALL LETTER E WITH BREVE
+<dead_breve> <E> : "Ĕ" # LATIN CAPITAL LETTER E WITH BREVE
+<dead_breve> <g> : "ğ" # LATIN SMALL LETTER G WITH BREVE
+<dead_breve> <G> : "Ğ" # LATIN CAPITAL LETTER G WITH BREVE
+<dead_breve> <i> : "ĭ" # LATIN SMALL LETTER I WITH BREVE
+<dead_breve> <I> : "Ĭ" # LATIN CAPITAL LETTER I WITH BREVE
+<dead_breve> <o> : "ŏ" # LATIN SMALL LETTER O WITH BREVE
+<dead_breve> <O> : "Ŏ" # LATIN CAPITAL LETTER O WITH BREVE
+<dead_breve> <u> : "ŭ" # LATIN SMALL LETTER U WITH BREVE
+<dead_breve> <U> : "Ŭ" # LATIN CAPITAL LETTER U WITH BREVE
+
+XCOMM Sequences with COMBINING CARON / <dead_caron>
+<dead_caron> <space> : "ˇ" # CARON
+<dead_caron> <a> : "ǎ" # LATIN SMALL LETTER A WITH CARON
+<dead_caron> <A> : "Ǎ" # LATIN CAPITAL LETTER A WITH CARON
+<dead_caron> <c> : "č" # LATIN SMALL LETTER C WITH CARON
+<dead_caron> <C> : "Č" # LATIN CAPITAL LETTER C WITH CARON
+<dead_caron> <d> : "ď" # LATIN SMALL LETTER D WITH CARON
+<dead_caron> <D> : "Ď" # LATIN CAPITAL LETTER D WITH CARON
+<dead_caron> <e> : "ě" # LATIN SMALL LETTER E WITH CARON
+<dead_caron> <E> : "Ě" # LATIN CAPITAL LETTER E WITH CARON
+<dead_caron> <g> : "ǧ" # LATIN SMALL LETTER G WITH CARON
+<dead_caron> <G> : "Ǧ" # LATIN CAPITAL LETTER G WITH CARON
+<dead_caron> <h> : "ȟ" # LATIN SMALL LETTER H WITH CARON
+<dead_caron> <H> : "Ȟ" # LATIN CAPITAL LETTER H WITH CARON
+<dead_caron> <i> : "ǐ" # LATIN SMALL LETTER I WITH CARON
+<dead_caron> <I> : "Ǐ" # LATIN CAPITAL LETTER I WITH CARON
+<dead_caron> <k> : "ǩ" # LATIN SMALL LETTER K WITH CARON
+<dead_caron> <K> : "Ǩ" # LATIN CAPITAL LETTER K WITH CARON
+<dead_caron> <l> : "ľ" # LATIN SMALL LETTER L WITH CARON
+<dead_caron> <L> : "Ľ" # LATIN CAPITAL LETTER L WITH CARON
+<dead_caron> <n> : "ň" # LATIN SMALL LETTER N WITH CARON
+<dead_caron> <N> : "Ň" # LATIN CAPITAL LETTER N WITH CARON
+<dead_caron> <o> : "ǒ" # LATIN SMALL LETTER O WITH CARON
+<dead_caron> <O> : "Ǒ" # LATIN CAPITAL LETTER O WITH CARON
+<dead_caron> <r> : "ř" # LATIN SMALL LETTER R WITH CARON
+<dead_caron> <R> : "Ř" # LATIN CAPITAL LETTER R WITH CARON
+<dead_caron> <s> : "š" # LATIN SMALL LETTER S WITH CARON
+<dead_caron> <S> : "Š" # LATIN CAPITAL LETTER S WITH CARON
+<dead_caron> <t> : "ť" # LATIN SMALL LETTER T WITH CARON
+<dead_caron> <T> : "Ť" # LATIN CAPITAL LETTER T WITH CARON
+<dead_caron> <u> : "ǔ" # LATIN SMALL LETTER U WITH CARON
+<dead_caron> <U> : "Ǔ" # LATIN CAPITAL LETTER U WITH CARON
+<dead_caron> <z> : "ž" # LATIN SMALL LETTER Z WITH CARON
+<dead_caron> <Z> : "Ž" # LATIN CAPITAL LETTER Z WITH CARON
+<dead_caron> <ezh> : "ǯ" # LATIN SMALL LETTER EZH WITH CARON
+<dead_caron> <EZH> : "Ǯ" # LATIN CAPITAL LETTER EZH WITH CARON
+
+XCOMM Sequences with COMBINING CEDILLA / <dead_cedilla>
+<dead_cedilla> <space> : "¸" # CEDILLA
+<dead_cedilla> <c> : "ç" # LATIN SMALL LETTER C WITH CEDILLA
+<dead_cedilla> <C> : "Ç" # LATIN CAPITAL LETTER C WITH CEDILLA
+<dead_cedilla> <g> : "ģ" # LATIN SMALL LETTER G WITH CEDILLA
+<dead_cedilla> <G> : "Ģ" # LATIN CAPITAL LETTER G WITH CEDILLA
+<dead_cedilla> <k> : "ķ" # LATIN SMALL LETTER K WITH CEDILLA
+<dead_cedilla> <K> : "Ķ" # LATIN CAPITAL LETTER K WITH CEDILLA
+<dead_cedilla> <l> : "ļ" # LATIN SMALL LETTER L WITH CEDILLA
+<dead_cedilla> <L> : "Ļ" # LATIN CAPITAL LETTER L WITH CEDILLA
+<dead_cedilla> <n> : "ņ" # LATIN SMALL LETTER N WITH CEDILLA
+<dead_cedilla> <N> : "Ņ" # LATIN CAPITAL LETTER N WITH CEDILLA
+<dead_cedilla> <r> : "ŗ" # LATIN SMALL LETTER R WITH CEDILLA
+<dead_cedilla> <R> : "Ŗ" # LATIN CAPITAL LETTER R WITH CEDILLA
+<dead_cedilla> <s> : "ş" # LATIN SMALL LETTER S WITH CEDILLA
+<dead_cedilla> <S> : "Ş" # LATIN CAPITAL LETTER S WITH CEDILLA
+<dead_cedilla> <t> : "ţ" # LATIN SMALL LETTER T WITH CEDILLA
+<dead_cedilla> <T> : "Ţ" # LATIN CAPITAL LETTER T WITH CEDILLA
+
+XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
+<dead_circumflex> <space> : "^" # CIRCUMFLEX
+<dead_circumflex> <a> : "â" # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<dead_circumflex> <A> : "Â" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<dead_circumflex> <c> : "ĉ" # LATIN SMALL LETTER C WITH CIRCUMFLEX
+<dead_circumflex> <C> : "Ĉ" # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+<dead_circumflex> <e> : "ê" # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<dead_circumflex> <E> : "Ê" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<dead_circumflex> <g> : "ĝ" # LATIN SMALL LETTER G WITH CIRCUMFLEX
+<dead_circumflex> <G> : "Ĝ" # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+<dead_circumflex> <h> : "ĥ" # LATIN SMALL LETTER H WITH CIRCUMFLEX
+<dead_circumflex> <H> : "Ĥ" # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+<dead_circumflex> <i> : "î" # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<dead_circumflex> <I> : "Î" # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<dead_circumflex> <j> : "ĵ" # LATIN SMALL LETTER J WITH CIRCUMFLEX
+<dead_circumflex> <J> : "Ĵ" # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+<dead_circumflex> <o> : "ô" # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<dead_circumflex> <O> : "Ô" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<dead_circumflex> <s> : "ŝ" # LATIN SMALL LETTER S WITH CIRCUMFLEX
+<dead_circumflex> <S> : "Ŝ" # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+<dead_circumflex> <u> : "û" # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<dead_circumflex> <U> : "Û" # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<dead_circumflex> <w> : "ŵ" # LATIN SMALL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <W> : "Ŵ" # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+<dead_circumflex> <y> : "ŷ" # LATIN SMALL LETTER Y WITH CIRCUMFLEX
+<dead_circumflex> <Y> : "Ŷ" # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+
+XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
+<dead_diaeresis> <space> : "¨" # DIAERESIS
+<dead_diaeresis> <a> : "ä" # LATIN SMALL LETTER A WITH DIAERESIS
+<dead_diaeresis> <A> : "Ä" # LATIN CAPITAL LETTER A WITH DIAERESIS
+<dead_diaeresis> <e> : "ë" # LATIN SMALL LETTER E WITH DIAERESIS
+<dead_diaeresis> <E> : "Ë" # LATIN CAPITAL LETTER E WITH DIAERESIS
+<dead_diaeresis> <i> : "ï" # LATIN SMALL LETTER I WITH DIAERESIS
+<dead_diaeresis> <I> : "Ï" # LATIN CAPITAL LETTER I WITH DIAERESIS
+<dead_diaeresis> <o> : "ö" # LATIN SMALL LETTER O WITH DIAERESIS
+<dead_diaeresis> <O> : "Ö" # LATIN CAPITAL LETTER O WITH DIAERESIS
+<dead_diaeresis> <u> : "ü" # LATIN SMALL LETTER U WITH DIAERESIS
+<dead_diaeresis> <U> : "Ü" # LATIN CAPITAL LETTER U WITH DIAERESIS
+<dead_diaeresis> <w> : "ẅ" # LATIN SMALL LETTER W WITH DIAERESIS
+<dead_diaeresis> <W> : "Ẅ" # LATIN CAPITAL LETTER W WITH DIAERESIS
+<dead_diaeresis> <y> : "ÿ" # LATIN SMALL LETTER Y WITH DIAERESIS
+<dead_diaeresis> <Y> : "Ÿ" # LATIN CAPITAL LETTER Y WITH DIAERESIS
+
+XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
+<dead_abovedot> <space> : "˙" # DOT ABOVE
+<dead_abovedot> <b> : "ḃ" # LATIN SMALL LETTER B WITH DOT ABOVE
+<dead_abovedot> <B> : "Ḃ" # LATIN CAPITAL LETTER B WITH DOT ABOVE
+<dead_abovedot> <c> : "ċ" # LATIN SMALL LETTER C WITH DOT ABOVE
+<dead_abovedot> <C> : "Ċ" # LATIN CAPITAL LETTER C WITH DOT ABOVE
+<dead_abovedot> <d> : "ḋ" # LATIN SMALL LETTER D WITH DOT ABOVE
+<dead_abovedot> <D> : "Ḋ" # LATIN CAPITAL LETTER D WITH DOT ABOVE
+<dead_abovedot> <e> : "ė" # LATIN SMALL LETTER E WITH DOT ABOVE
+<dead_abovedot> <E> : "Ė" # LATIN CAPITAL LETTER E WITH DOT ABOVE
+<dead_abovedot> <f> : "ḟ" # LATIN SMALL LETTER F WITH DOT ABOVE
+<dead_abovedot> <F> : "Ḟ" # LATIN CAPITAL LETTER F WITH DOT ABOVE
+<dead_abovedot> <g> : "ġ" # LATIN SMALL LETTER G WITH DOT ABOVE
+<dead_abovedot> <G> : "Ġ" # LATIN CAPITAL LETTER G WITH DOT ABOVE
+<dead_abovedot> <I> : "İ" # LATIN CAPITAL LETTER I WITH DOT ABOVE
+<dead_abovedot> <m> : "ṁ" # LATIN SMALL LETTER M WITH DOT ABOVE
+<dead_abovedot> <M> : "Ṁ" # LATIN CAPITAL LETTER M WITH DOT ABOVE
+<dead_abovedot> <p> : "ṗ" # LATIN SMALL LETTER P WITH DOT ABOVE
+<dead_abovedot> <P> : "Ṗ" # LATIN CAPITAL LETTER P WITH DOT ABOVE
+<dead_abovedot> <s> : "ṡ" # LATIN SMALL LETTER S WITH DOT ABOVE
+<dead_abovedot> <S> : "Ṡ" # LATIN CAPITAL LETTER S WITH DOT ABOVE
+<dead_abovedot> <t> : "ṫ" # LATIN SMALL LETTER T WITH DOT ABOVE
+<dead_abovedot> <T> : "Ṫ" # LATIN CAPITAL LETTER T WITH DOT ABOVE
+<dead_abovedot> <z> : "ż" # LATIN SMALL LETTER Z WITH DOT ABOVE
+<dead_abovedot> <Z> : "Ż" # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+
+XCOMM Sequences with COMBINING DOT BELOW / <dead_belowdot>
+XCOMM <dead_belowdot> <space> : " " # DOT BELOW
+<dead_belowdot> <a> : "ạ" # LATIN SMALL LETTER A WITH DOT BELOW
+<dead_belowdot> <A> : "Ạ" # LATIN CAPITAL LETTER A WITH DOT BELOW
+<dead_belowdot> <e> : "ẹ" # LATIN SMALL LETTER E WITH DOT BELOW
+<dead_belowdot> <E> : "Ẹ" # LATIN CAPITAL LETTER E WITH DOT BELOW
+<dead_belowdot> <i> : "ị" # LATIN SMALL LETTER I WITH DOT BELOW
+<dead_belowdot> <I> : "Ị" # LATIN CAPITAL LETTER I WITH DOT BELOW
+<dead_belowdot> <o> : "ọ" # LATIN SMALL LETTER O WITH DOT BELOW
+<dead_belowdot> <O> : "Ọ" # LATIN CAPITAL LETTER O WITH DOT BELOW
+<dead_belowdot> <u> : "ụ" # LATIN SMALL LETTER U WITH DOT BELOW
+<dead_belowdot> <U> : "Ụ" # LATIN CAPITAL LETTER U WITH DOT BELOW
+<dead_belowdot> <y> : "ỵ" # LATIN SMALL LETTER Y WITH DOT BELOW
+<dead_belowdot> <Y> : "Ỵ" # LATIN CAPITAL LETTER Y WITH DOT BELOW
+
+XCOMM Sequences with COMBINING DOUBLE ACUTE ACCENT / <dead_doubleacute>
+<dead_doubleacute> <space> : "˝" # DOUBLE ACUTE ACCENT
+<dead_doubleacute> <o> : "ő" # LATIN SMALL LETTER O WITH DOUBLE ACUTE
+<dead_doubleacute> <O> : "Ő" # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+<dead_doubleacute> <u> : "ű" # LATIN SMALL LETTER U WITH DOUBLE ACUTE
+<dead_doubleacute> <U> : "Ű" # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+
+XCOMM Sequences with COMBINING GRAVE ACCENT / <dead_grave>
+<dead_grave> <space> : "`" # GRAVE ACCENT
+<dead_grave> <a> : "à" # LATIN SMALL LETTER A WITH GRAVE
+<dead_grave> <A> : "À" # LATIN CAPITAL LETTER A WITH GRAVE
+<dead_grave> <e> : "è" # LATIN SMALL LETTER E WITH GRAVE
+<dead_grave> <E> : "È" # LATIN CAPITAL LETTER E WITH GRAVE
+<dead_grave> <i> : "ì" # LATIN SMALL LETTER I WITH GRAVE
+<dead_grave> <I> : "Ì" # LATIN CAPITAL LETTER I WITH GRAVE
+<dead_grave> <o> : "ò" # LATIN SMALL LETTER O WITH GRAVE
+<dead_grave> <O> : "Ò" # LATIN CAPITAL LETTER O WITH GRAVE
+<dead_grave> <u> : "ù" # LATIN SMALL LETTER U WITH GRAVE
+<dead_grave> <U> : "Ù" # LATIN CAPITAL LETTER U WITH GRAVE
+<dead_grave> <w> : "ẁ" # LATIN SMALL LETTER W WITH GRAVE
+<dead_grave> <W> : "Ẁ" # LATIN CAPITAL LETTER W WITH GRAVE
+<dead_grave> <y> : "ỳ" # LATIN SMALL LETTER Y WITH GRAVE
+<dead_grave> <Y> : "Ỳ" # LATIN CAPITAL LETTER Y WITH GRAVE
+
+XCOMM Sequences with COMBINING MACRON / <dead_macron>
+<dead_macron> <space> : "¯" # MACRON
+<dead_macron> <a> : "ā" # LATIN SMALL LETTER A WITH MACRON
+<dead_macron> <A> : "Ā" # LATIN CAPITAL LETTER A WITH MACRON
+<dead_macron> <e> : "ē" # LATIN SMALL LETTER E WITH MACRON
+<dead_macron> <E> : "Ē" # LATIN CAPITAL LETTER E WITH MACRON
+<dead_macron> <i> : "ī" # LATIN SMALL LETTER I WITH MACRON
+<dead_macron> <I> : "Ī" # LATIN CAPITAL LETTER I WITH MACRON
+<dead_macron> <o> : "ō" # LATIN SMALL LETTER O WITH MACRON
+<dead_macron> <O> : "Ō" # LATIN CAPITAL LETTER O WITH MACRON
+<dead_macron> <u> : "ū" # LATIN SMALL LETTER U WITH MACRON
+<dead_macron> <U> : "Ū" # LATIN CAPITAL LETTER U WITH MACRON
+<dead_macron> <ae> : "ǣ" # LATIN SMALL LETTER AE WITH MACRON
+<dead_macron> <AE> : "Ǣ" # LATIN CAPITAL LETTER AE WITH MACRON
+<dead_macron> <adiaeresis> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <Adiaeresis> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+
+XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
+<dead_ogonek> <space> : "˛" # OGONEK
+<dead_ogonek> <a> : "ą" # LATIN SMALL LETTER A WITH OGONEK
+<dead_ogonek> <A> : "Ą" # LATIN CAPITAL LETTER A WITH OGONEK
+<dead_ogonek> <e> : "ę" # LATIN SMALL LETTER E WITH OGONEK
+<dead_ogonek> <E> : "Ę" # LATIN CAPITAL LETTER E WITH OGONEK
+<dead_ogonek> <i> : "į" # LATIN SMALL LETTER I WITH OGONEK
+<dead_ogonek> <I> : "Į" # LATIN CAPITAL LETTER I WITH OGONEK
+<dead_ogonek> <o> : "ǫ" # LATIN SMALL LETTER O WITH OGONEK
+<dead_ogonek> <O> : "Ǫ" # LATIN CAPITAL LETTER O WITH OGONEK
+<dead_ogonek> <u> : "ų" # LATIN SMALL LETTER U WITH OGONEK
+<dead_ogonek> <U> : "Ų" # LATIN CAPITAL LETTER U WITH OGONEK
+
+XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
+<dead_abovering> <space> : "°" # RING ABOVE
+<dead_abovering> <a> : "å" # LATIN SMALL LETTER A WITH RING ABOVE
+<dead_abovering> <A> : "Å" # LATIN CAPITAL LETTER A WITH RING ABOVE
+<dead_abovering> <u> : "ů" # LATIN SMALL LETTER U WITH RING ABOVE
+<dead_abovering> <U> : "Ů" # LATIN CAPITAL LETTER U WITH RING ABOVE
+
+XCOMM Sequences with COMBINING TILDE / <dead_tilde>
+<dead_tilde> <space> : "~" # TILDE
+<dead_tilde> <a> : "ã" # LATIN SMALL LETTER A WITH TILDE
+<dead_tilde> <A> : "Ã" # LATIN CAPITAL LETTER A WITH TILDE
+<dead_tilde> <e> : "ẽ" # LATIN SMALL LETTER E WITH TILDE
+<dead_tilde> <E> : "Ẽ" # LATIN CAPITAL LETTER E WITH TILDE
+<dead_tilde> <i> : "ĩ" # LATIN SMALL LETTER I WITH TILDE
+<dead_tilde> <I> : "Ĩ" # LATIN CAPITAL LETTER I WITH TILDE
+<dead_tilde> <n> : "ñ" # LATIN SMALL LETTER N WITH TILDE
+<dead_tilde> <N> : "Ñ" # LATIN CAPITAL LETTER N WITH TILDE
+<dead_tilde> <o> : "õ" # LATIN SMALL LETTER O WITH TILDE
+<dead_tilde> <O> : "Õ" # LATIN CAPITAL LETTER O WITH TILDE
+<dead_tilde> <u> : "ũ" # LATIN SMALL LETTER U WITH TILDE
+<dead_tilde> <U> : "Ũ" # LATIN CAPITAL LETTER U WITH TILDE
+<dead_tilde> <y> : "ỹ" # LATIN SMALL LETTER Y WITH TILDE
+<dead_tilde> <Y> : "Ỹ" # LATIN CAPITAL LETTER Y WITH TILDE
+
+XCOMM Sequences with AUXILIARY STROKE / <dead_stroke>
+<dead_stroke> <d> : "đ" # LATIN SMALL LETTER D WITH STROKE
+<dead_stroke> <D> : "Đ" # LATIN CAPITAL LETTER D WITH STROKE
+<dead_stroke> <g> : "ǥ" # LATIN SMALL LETTER G WITH STROKE
+<dead_stroke> <G> : "Ǥ" # LATIN CAPITAL LETTER G WITH STROKE
+<dead_stroke> <h> : "ħ" # LATIN SMALL LETTER H WITH STROKE
+<dead_stroke> <H> : "Ħ" # LATIN CAPITAL LETTER H WITH STROKE
+<dead_stroke> <l> : "ł" # LATIN SMALL LETTER L WITH STROKE
+<dead_stroke> <L> : "Ł" # LATIN CAPITAL LETTER L WITH STROKE
+<dead_stroke> <o> : "ø" # LATIN SMALL LETTER O WITH STROKE
+<dead_stroke> <O> : "Ø" # LATIN CAPITAL LETTER O WITH STROKE
+<dead_stroke> <t> : "ŧ" # LATIN SMALL LETTER T WITH STROKE
+<dead_stroke> <T> : "Ŧ" # LATIN CAPITAL LETTER T WITH STROKE
+
+XCOMM Sequences from Annex 4
+
+XCOMM Sequences with COMBINING BREVE / <dead_breve>
+<dead_acute> <dead_breve> <a> : "ắ" # LATIN SMALL LETTER A WITH BREVE AND ACUTE
+<dead_belowdot> <dead_breve> <a> : "ặ" # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+<dead_grave> <dead_breve> <a> : "ằ" # LATIN SMALL LETTER A WITH BREVE AND GRAVE
+<dead_hook> <dead_breve> <a> : "ẳ" # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_tilde> <dead_breve> <a> : "ẵ" # LATIN SMALL LETTER A WITH BREVE AND TILDE
+<dead_acute> <dead_breve> <A> : "Ắ" # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+<dead_belowdot> <dead_breve> <A> : "Ặ" # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+<dead_grave> <dead_breve> <A> : "Ằ" # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+<dead_hook> <dead_breve> <A> : "Ẳ" # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+<dead_tilde> <dead_breve> <A> : "Ẵ" # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+
+XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / <dead_circumflex>
+<dead_acute> <dead_circumflex> <a> : "ấ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <a> : "ậ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <a> : "ầ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <a> : "ẩ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <a> : "ẫ" # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <A> : "Ấ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <A> : "Ậ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <A> : "Ầ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <A> : "Ẩ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <A> : "Ẫ" # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <e> : "ế" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <e> : "ệ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <e> : "ề" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <e> : "ể" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <e> : "ễ" # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <E> : "Ệ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <E> : "Ề" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <E> : "Ể" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <E> : "Ễ" # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <o> : "ố" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <o> : "ộ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <o> : "ồ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <o> : "ổ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <o> : "ỗ" # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+<dead_acute> <dead_circumflex> <O> : "Ố" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+<dead_belowdot> <dead_circumflex> <O> : "Ộ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+<dead_grave> <dead_circumflex> <O> : "Ồ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+<dead_hook> <dead_circumflex> <O> : "Ổ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+<dead_tilde> <dead_circumflex> <O> : "Ỗ" # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+
+XCOMM Sequences with COMBINING DIAERESIS / <dead_diaeresis>
+<dead_macron> <dead_diaeresis> <a> : "ǟ" # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+<dead_macron> <dead_diaeresis> <A> : "Ǟ" # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+
+XCOMM Sequences with COMBINING DOT ABOVE / <dead_abovedot>
+ <dead_abovedot> <a> : "ȧ" # LATIN SMALL LETTER A WITH DOT ABOVE
+<dead_macron> <dead_abovedot> <a> : "ǡ" # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ <dead_abovedot> <A> : "Ȧ" # LATIN CAPITAL LETTER A WITH DOT ABOVE
+<dead_macron> <dead_abovedot> <A> : "Ǡ" # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+
+XCOMM Sequences with COMBINING HOOK ABOVE / <dead_hook>
+<dead_hook> <a> : "ả" # LATIN SMALL LETTER A WITH HOOK ABOVE
+<dead_hook> <A> : "Ả" # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+<dead_hook> <e> : "ẻ" # LATIN SMALL LETTER E WITH HOOK ABOVE
+<dead_hook> <E> : "Ẻ" # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+<dead_hook> <i> : "ỉ" # LATIN SMALL LETTER I WITH HOOK ABOVE
+<dead_hook> <I> : "Ỉ" # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+<dead_hook> <o> : "ỏ" # LATIN SMALL LETTER O WITH HOOK ABOVE
+<dead_hook> <O> : "Ỏ" # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+<dead_hook> <u> : "ủ" # LATIN SMALL LETTER U WITH HOOK ABOVE
+<dead_hook> <U> : "Ủ" # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+<dead_hook> <y> : "ỷ" # LATIN SMALL LETTER Y WITH HOOK ABOVE
+<dead_hook> <Y> : "Ỷ" # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+
+XCOMM Sequences with COMBINING HORN / <dead_horn>
+ <dead_horn> <o> : "ơ" # LATIN SMALL LETTER O WITH HORN
+<dead_acute> <dead_horn> <o> : "ớ" # LATIN SMALL LETTER O WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <o> : "ợ" # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <o> : "ờ" # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <o> : "ỡ" # LATIN SMALL LETTER O WITH HORN AND TILDE
+ <dead_horn> <O> : "Ơ" # LATIN CAPITAL LETTER O WITH HORN
+<dead_acute> <dead_horn> <O> : "Ớ" # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <O> : "Ợ" # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <O> : "Ờ" # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <O> : "Ở" # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <O> : "Ỡ" # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ <dead_horn> <u> : "ư" # LATIN SMALL LETTER U WITH HORN
+<dead_acute> <dead_horn> <u> : "ứ" # LATIN SMALL LETTER U WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <u> : "ự" # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <u> : "ừ" # LATIN SMALL LETTER U WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <u> : "ử" # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <u> : "ữ" # LATIN SMALL LETTER U WITH HORN AND TILDE
+ <dead_horn> <U> : "Ư" # LATIN CAPITAL LETTER U WITH HORN
+<dead_acute> <dead_horn> <U> : "Ứ" # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+<dead_belowdot> <dead_horn> <U> : "Ự" # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+<dead_grave> <dead_horn> <U> : "Ừ" # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+<dead_hook> <dead_horn> <U> : "Ử" # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+<dead_tilde> <dead_horn> <U> : "Ữ" # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+
+XCOMM Sequences with COMBINING OGONEK / <dead_ogonek>
+<dead_macron> <dead_ogonek> <o> : "ǭ" # LATIN SMALL LETTER O WITH OGONEK AND MACRON
+<dead_macron> <dead_ogonek> <O> : "Ǭ" # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+
+XCOMM Sequences with COMBINING RING ABOVE / <dead_abovering>
+<dead_acute> <dead_abovering> <a> : "ǻ" # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+<dead_acute> <dead_abovering> <A> : "Ǻ" # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+
+XCOMM Additional sequences from Annex 5 for the reportoire of the MES-2
+XCOMM (Multilingual European Subset No. 2 in ISO/IEC 10646, Collection 282)
+<dead_hook> <f> : "ƒ" # LATIN SMALL LETTER F WITH HOOK
+<Multi_key> <f> <i> : "fi" # LATIN SMALL LIGATURE FI
+<Multi_key> <f> <l> : "fl" # LATIN SMALL LIGATURE FL
+<Multi_key> <i> <j> : "ij" # LATIN SMALL LIGATURE IJ
+<Multi_key> <I> <J> : "IJ" # LATIN CAPITAL LIGATURE IJ
+<dead_abovedot> <l> : "ŀ" # LATIN SMALL LETTER L WITH MIDDLE DOT
+<dead_abovedot> <L> : "Ŀ" # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+<Multi_key> <apostrophe> <space> <n> : "ʼn" # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+<dead_hook> <r> : "ɼ" # LATIN SMALL LETTER R WITH LONG LEG
+<Multi_key> <f> <s> : "ſ" # LATIN SMALL LETTER LONG S
+<dead_abovedot> <Multi_key> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<Multi_key> <dead_abovedot> <f> <s> : "ẛ" # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+<dead_belowcomma> <s> : "ș" # LATIN SMALL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <S> : "Ș" # LATIN CAPITAL LETTER S WITH COMMA BELOW
+<dead_belowcomma> <t> : "ț" # LATIN SMALL LETTER T WITH COMMA BELOW
+<dead_belowcomma> <T> : "Ț" # LATIN CAPITAL LETTER T WITH COMMA BELOW
diff --git a/libX11/nls/pt_BR.UTF-8/Compose.pre b/libX11/nls/pt_BR.UTF-8/Compose.pre
index 641c96999..b6d7c8acc 100644
--- a/libX11/nls/pt_BR.UTF-8/Compose.pre
+++ b/libX11/nls/pt_BR.UTF-8/Compose.pre
@@ -1028,10 +1028,10 @@ XCOMM group 1: cluster jamos made of three basic jamos
<Multi_key> <macron> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
<Multi_key> <underscore> <dead_ogonek> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
<Multi_key> <underscore> <semicolon> <o> : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
-<dead_caron> <U01b7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
-<Multi_key> <c> <U01b7> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
-<dead_caron> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
-<Multi_key> <c> <U0292> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<dead_caron> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<Multi_key> <c> <EZH> : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON
+<dead_caron> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
+<Multi_key> <c> <ezh> : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON
<dead_caron> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
<Multi_key> <c> <j> : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON
<dead_acute> <G> : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
diff --git a/libX11/src/xlibi18n/imKStoUCS.c b/libX11/src/xlibi18n/imKStoUCS.c
index 5cfce420d..640b3516a 100644
--- a/libX11/src/xlibi18n/imKStoUCS.c
+++ b/libX11/src/xlibi18n/imKStoUCS.c
@@ -143,7 +143,7 @@ static unsigned short const keysym_to_unicode_aa1_afe[] = {
0x2105, 0x0000, 0x0000, 0x2012, 0x2039, 0x2024, 0x203a, 0x0000, /* 0x0ab8-0x0abf */
0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, /* 0x0ac0-0x0ac7 */
0x0000, 0x2122, 0x2120, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25ad, /* 0x0ac8-0x0acf */
- 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, /* 0x0ad0-0x0ad7 */
+ 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x2030, 0x2032, 0x2033, /* 0x0ad0-0x0ad7 */
0x0000, 0x271d, 0x0000, 0x220e, 0x25c2, 0x2023, 0x25cf, 0x25ac, /* 0x0ad8-0x0adf */
0x25e6, 0x25ab, 0x25ae, 0x25b5, 0x25bf, 0x2606, 0x2022, 0x25aa, /* 0x0ae0-0x0ae7 */
0x25b4, 0x25be, 0x261a, 0x261b, 0x2663, 0x2666, 0x2665, 0x0000, /* 0x0ae8-0x0aef */
diff --git a/libxcb/src/xcb_util.c b/libxcb/src/xcb_util.c
index 7173db3f7..f17aa3c84 100644
--- a/libxcb/src/xcb_util.c
+++ b/libxcb/src/xcb_util.c
@@ -235,6 +235,11 @@ static int _xcb_open(const char *host, char *protocol, const int display)
fd = _xcb_open_unix(protocol, file);
free(file);
+ if (fd < 0 && !protocol && *host == '\0') {
+ unsigned short port = X_TCP_PORT + display;
+ fd = _xcb_open_tcp(host, protocol, port);
+ }
+
return fd;
#endif /* !_WIN32 */
return -1; /* if control reaches here then something has gone wrong */
diff --git a/mesalib/docs/news.html b/mesalib/docs/news.html
index 472f98bae..271fbdd1f 100644
--- a/mesalib/docs/news.html
+++ b/mesalib/docs/news.html
@@ -11,6 +11,13 @@
<H1>News</H1>
+<h2>February 16, 2012</h2>
+
+<p>
+<a href="relnotes-8.0.1.html">Mesa 8.0.1</a> is released. This is a bug fix
+release. See the release notes for more information about the release.
+</p>
+
<h2>February 9, 2012</h2>
<p>
diff --git a/mesalib/docs/relnotes.html b/mesalib/docs/relnotes.html
index 1dd5442d0..d5c944add 100644
--- a/mesalib/docs/relnotes.html
+++ b/mesalib/docs/relnotes.html
@@ -13,6 +13,7 @@ The release notes summarize what's new or changed in each Mesa release.
</p>
<UL>
+<LI><A HREF="relnotes-8.0.1.html">8.0.1 release notes</A>
<LI><A HREF="relnotes-8.0.html">8.0 release notes</A>
<LI><A HREF="relnotes-7.11.html">7.11 release notes</A>
<LI><A HREF="relnotes-7.10.3.html">7.10.3 release notes</A>
diff --git a/mesalib/docs/repository.html b/mesalib/docs/repository.html
index 954bd0d42..bdd2b577b 100644
--- a/mesalib/docs/repository.html
+++ b/mesalib/docs/repository.html
@@ -26,7 +26,7 @@ You may access the repository either as an
<p>
You may also
-<a href="http://gitweb.freedesktop.org/?p=mesa/mesa.git"
+<a href="http://cgit.freedesktop.org/mesa/mesa/"
target="_parent">browse the main Mesa git repository</a> and the
<a href="http://cgit.freedesktop.org/mesa/demos"
target="_parent">Mesa demos and tests git repository</a>.
diff --git a/mesalib/src/gallium/auxiliary/util/u_simple_screen.h b/mesalib/src/gallium/auxiliary/util/u_simple_screen.h
deleted file mode 100644
index d81ecee7e..000000000
--- a/mesalib/src/gallium/auxiliary/util/u_simple_screen.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2009 VMware, Inc.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#ifndef U_SIMPLE_SCREEN_H
-#define U_SIMPLE_SCREEN_H
-
-#include "pipe/p_format.h"
-
-struct pipe_screen;
-struct pipe_fence_handle;
-struct pipe_surface;
-struct pipe_resource;
-
-/**
- * Gallium3D drivers are (meant to be!) independent of both GL and the
- * window system. The window system provides a buffer manager and a
- * set of additional hooks for things like command buffer submission,
- * etc.
- *
- * There clearly has to be some agreement between the window system
- * driver and the hardware driver about the format of command buffers,
- * etc.
- */
-struct pipe_winsys
-{
- void (*destroy)( struct pipe_winsys *ws );
-
- /** Returns name of this winsys interface */
- const char *(*get_name)( struct pipe_winsys *ws );
-
- /**
- * Do any special operations to ensure frontbuffer contents are
- * displayed, eg copy fake frontbuffer.
- */
- void (*flush_frontbuffer)( struct pipe_winsys *ws,
- struct pipe_resource *resource,
- unsigned level, unsigned layer,
- void *context_private );
-
-
- /**
- * Buffer management. Buffer attributes are mostly fixed over its lifetime.
- *
- * Remember that gallium gets to choose the interface it needs, and the
- * window systems must then implement that interface (rather than the
- * other way around...).
- *
- * usage is a bitmask of PIPE_BIND_*.
- * All possible usages must be present.
- *
- * alignment indicates the client's alignment requirements, eg for
- * SSE instructions.
- */
- struct pipe_resource *(*buffer_create)( struct pipe_winsys *ws,
- unsigned alignment,
- unsigned usage,
- unsigned size );
-
- /**
- * Create a buffer that wraps user-space data.
- *
- * Effectively this schedules a delayed call to buffer_create
- * followed by an upload of the data at *some point in the future*,
- * or perhaps never. Basically the allocate/upload is delayed
- * until the buffer is actually passed to hardware.
- *
- * The intention is to provide a quick way to turn regular data
- * into a buffer, and secondly to avoid a copy operation if that
- * data subsequently turns out to be only accessed by the CPU.
- *
- * Common example is OpenGL vertex buffers that are subsequently
- * processed either by software TNL in the driver or by passing to
- * hardware.
- *
- * XXX: What happens if the delayed call to buffer_create() fails?
- *
- * Note that ptr may be accessed at any time upto the time when the
- * buffer is destroyed, so the data must not be freed before then.
- */
- struct pipe_resource *(*user_buffer_create)(struct pipe_winsys *ws,
- void *ptr,
- unsigned bytes);
-
- /**
- * Allocate storage for a display target surface.
- *
- * Often surfaces which are meant to be blitted to the front screen (i.e.,
- * display targets) must be allocated with special characteristics, memory
- * pools, or obtained directly from the windowing system.
- *
- * This callback is invoked by the pipe_screen when creating a texture marked
- * with the PIPE_BIND_DISPLAY_TARGET flag to get the underlying
- * buffer storage.
- */
- struct pipe_resource *(*surface_buffer_create)(struct pipe_winsys *ws,
- unsigned width, unsigned height,
- enum pipe_format format,
- unsigned usage,
- unsigned tex_usage,
- unsigned *stride);
-
-
- /**
- * Map the entire data store of a buffer object into the client's address.
- * flags is bitmask of PIPE_BUFFER_USAGE_CPU_READ/WRITE flags.
- */
- void *(*buffer_map)( struct pipe_winsys *ws,
- struct pipe_resource *buf,
- unsigned usage );
-
- void (*buffer_unmap)( struct pipe_winsys *ws,
- struct pipe_resource *buf );
-
- void (*buffer_destroy)( struct pipe_resource *buf );
-
-
- /** Set ptr = fence, with reference counting */
- void (*fence_reference)( struct pipe_winsys *ws,
- struct pipe_fence_handle **ptr,
- struct pipe_fence_handle *fence );
-
- /**
- * Checks whether the fence has been signalled.
- * \param flags driver-specific meaning
- * \return zero on success.
- */
- int (*fence_signalled)( struct pipe_winsys *ws,
- struct pipe_fence_handle *fence,
- unsigned flag );
-
- /**
- * Wait for the fence to finish.
- * \param flags driver-specific meaning
- * \return zero on success.
- */
- int (*fence_finish)( struct pipe_winsys *ws,
- struct pipe_fence_handle *fence,
- unsigned flags,
- uint64_t timeout );
-
-};
-
-/**
- * The following function initializes a simple passthrough screen.
- *
- * All the relevant screen function pointers will forwarded to the
- * winsys.
- */
-void u_simple_screen_init(struct pipe_screen *screen);
-
-/**
- * Returns the name of the winsys associated with this screen.
- */
-const char* u_simple_screen_winsys_name(struct pipe_screen *screen);
-
-#endif
diff --git a/mesalib/src/mapi/glapi/glapi_priv.h b/mesalib/src/mapi/glapi/glapi_priv.h
index 3ab553a2b..b6600c5fc 100644
--- a/mesalib/src/mapi/glapi/glapi_priv.h
+++ b/mesalib/src/mapi/glapi/glapi_priv.h
@@ -38,6 +38,16 @@
#include "GL/gl.h"
#include "GL/glext.h"
+/* The define of GL_COVERAGE_SAMPLES_NV in gl2ext.h is guarded by a different
+ * extension (GL_NV_coverage_sample) than in glext.h
+ * (GL_NV_multisample_coverage). Just undefine it to avoid spurious compiler
+ * warnings.
+ */
+#undef GL_COVERAGE_SAMPLES_NV
+
+#include "GLES2/gl2platform.h"
+#include "GLES2/gl2ext.h"
+
#ifndef GL_OES_fixed_point
typedef int GLfixed;
typedef int GLclampx;
diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c
index 0cf1028c4..6c8495ddb 100644
--- a/mesalib/src/mesa/drivers/common/meta.c
+++ b/mesalib/src/mesa/drivers/common/meta.c
@@ -3244,7 +3244,7 @@ decompress_texture_image(struct gl_context *ctx,
struct gl_texture_image *texImage,
GLuint slice,
GLenum destFormat, GLenum destType,
- GLvoid *dest, GLint destRowLength)
+ GLvoid *dest)
{
struct decompress_state *decompress = &ctx->Meta->Decompress;
struct gl_texture_object *texObj = texImage->TexObject;
@@ -3274,7 +3274,7 @@ decompress_texture_image(struct gl_context *ctx,
fboDrawSave = ctx->DrawBuffer->Name;
fboReadSave = ctx->ReadBuffer->Name;
- _mesa_meta_begin(ctx, MESA_META_ALL);
+ _mesa_meta_begin(ctx, MESA_META_ALL & ~MESA_META_PIXEL_STORE);
/* Create/bind FBO/renderbuffer */
if (decompress->FBO == 0) {
@@ -3292,7 +3292,7 @@ decompress_texture_image(struct gl_context *ctx,
}
/* alloc dest surface */
- if (width != decompress->Width || height != decompress->Height) {
+ if (width > decompress->Width || height > decompress->Height) {
_mesa_RenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA,
width, height);
decompress->Width = width;
@@ -3409,7 +3409,6 @@ decompress_texture_image(struct gl_context *ctx,
_mesa_PixelTransferf(GL_BLUE_SCALE, 0.0f);
}
- ctx->Pack.RowLength = destRowLength;
_mesa_ReadPixels(0, 0, width, height, destFormat, destType, dest);
}
@@ -3450,8 +3449,7 @@ _mesa_meta_GetTexImage(struct gl_context *ctx,
const GLuint slice = 0; /* only 2D compressed textures for now */
/* Need to unlock the texture here to prevent deadlock... */
_mesa_unlock_texture(ctx, texObj);
- decompress_texture_image(ctx, texImage, slice, format, type, pixels,
- ctx->Pack.RowLength);
+ decompress_texture_image(ctx, texImage, slice, format, type, pixels);
/* ... and relock it */
_mesa_lock_texture(ctx, texObj);
}
diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c
index 846da35e9..7042312a8 100644
--- a/mesalib/src/mesa/main/attrib.c
+++ b/mesalib/src/mesa/main/attrib.c
@@ -122,7 +122,6 @@ struct gl_enable_attrib
GLboolean SampleAlphaToCoverage; /* GL_ARB_multisample */
GLboolean SampleAlphaToOne; /* GL_ARB_multisample */
GLboolean SampleCoverage; /* GL_ARB_multisample */
- GLboolean SampleCoverageInvert; /* GL_ARB_multisample */
GLboolean RasterPositionUnclipped; /* GL_IBM_rasterpos_clip */
GLbitfield Texture[MAX_TEXTURE_UNITS];
@@ -314,7 +313,6 @@ _mesa_PushAttrib(GLbitfield mask)
attr->SampleAlphaToCoverage = ctx->Multisample.SampleAlphaToCoverage;
attr->SampleAlphaToOne = ctx->Multisample.SampleAlphaToOne;
attr->SampleCoverage = ctx->Multisample.SampleCoverage;
- attr->SampleCoverageInvert = ctx->Multisample.SampleCoverageInvert;
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
attr->Texture[i] = ctx->Texture.Unit[i].Enabled;
attr->TexGen[i] = ctx->Texture.Unit[i].TexGenEnabled;
@@ -608,9 +606,6 @@ pop_enable_group(struct gl_context *ctx, const struct gl_enable_attrib *enable)
TEST_AND_UPDATE(ctx->Multisample.SampleCoverage,
enable->SampleCoverage,
GL_SAMPLE_COVERAGE_ARB);
- TEST_AND_UPDATE(ctx->Multisample.SampleCoverageInvert,
- enable->SampleCoverageInvert,
- GL_SAMPLE_COVERAGE_INVERT_ARB);
/* GL_ARB_vertex_program, GL_NV_vertex_program */
TEST_AND_UPDATE(ctx->VertexProgram.Enabled,
enable->VertexProgram,
@@ -622,8 +617,6 @@ pop_enable_group(struct gl_context *ctx, const struct gl_enable_attrib *enable)
enable->VertexProgramTwoSide,
GL_VERTEX_PROGRAM_TWO_SIDE_ARB);
-#undef TEST_AND_UPDATE
-
/* texture unit enables */
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
const GLbitfield enabled = enable->Texture[i];
@@ -1275,6 +1268,23 @@ _mesa_PopAttrib(void)
{
const struct gl_multisample_attrib *ms;
ms = (const struct gl_multisample_attrib *) attr->data;
+
+ TEST_AND_UPDATE(ctx->Multisample.Enabled,
+ ms->Enabled,
+ GL_MULTISAMPLE);
+
+ TEST_AND_UPDATE(ctx->Multisample.SampleCoverage,
+ ms->SampleCoverage,
+ GL_SAMPLE_COVERAGE);
+
+ TEST_AND_UPDATE(ctx->Multisample.SampleAlphaToCoverage,
+ ms->SampleAlphaToCoverage,
+ GL_SAMPLE_ALPHA_TO_COVERAGE);
+
+ TEST_AND_UPDATE(ctx->Multisample.SampleAlphaToOne,
+ ms->SampleAlphaToOne,
+ GL_SAMPLE_ALPHA_TO_ONE);
+
_mesa_SampleCoverageARB(ms->SampleCoverageValue,
ms->SampleCoverageInvert);
}
diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c
index 987d687b9..6ee062d0b 100644
--- a/mesalib/src/mesa/main/fbobject.c
+++ b/mesalib/src/mesa/main/fbobject.c
@@ -1758,11 +1758,8 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer)
if (bindDrawBuf) {
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
- /* check if old read/draw buffers were render-to-texture */
- if (!bindReadBuf)
- check_end_texture_render(ctx, oldReadFb);
-
- if (oldDrawFb != oldReadFb)
+ /* check if old framebuffer had any texture attachments */
+ if (oldDrawFb)
check_end_texture_render(ctx, oldDrawFb);
/* check if newly bound framebuffer has any texture attachments */
@@ -2026,7 +2023,7 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
BUFFER_STENCIL);
} else if (attachment == GL_STENCIL_ATTACHMENT &&
texObj == fb->Attachment[BUFFER_DEPTH].Texture) {
- /* As above, but with depth and stencil juxtasposed. */
+ /* As above, but with depth and stencil juxtaposed. */
reuse_framebuffer_texture_attachment(fb, BUFFER_STENCIL,
BUFFER_DEPTH);
} else {
@@ -2269,7 +2266,7 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
ASSERT_OUTSIDE_BEGIN_END(ctx);
- /* The error differs in GL andd GLES. */
+ /* The error differs in GL and GLES. */
err = ctx->API == API_OPENGL ? GL_INVALID_OPERATION : GL_INVALID_ENUM;
buffer = get_framebuffer_target(ctx, target);
diff --git a/mesalib/src/mesa/main/format_pack.c b/mesalib/src/mesa/main/format_pack.c
index ea1d95ee9..ff08ac561 100644
--- a/mesalib/src/mesa/main/format_pack.c
+++ b/mesalib/src/mesa/main/format_pack.c
@@ -42,6 +42,14 @@
#include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
+/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */
+struct z32f_x24s8
+{
+ float z;
+ uint32_t x24s8;
+};
+
+
typedef void (*pack_ubyte_rgba_row_func)(GLuint n,
const GLubyte src[][4], void *dst);
@@ -2372,10 +2380,10 @@ _mesa_pack_float_z_row(gl_format format, GLuint n,
break;
case MESA_FORMAT_Z32_FLOAT_X24S8:
{
- GLfloat *d = ((GLfloat *) dst);
+ struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
GLuint i;
for (i = 0; i < n; i++) {
- d[i * 2] = src[i];
+ d[i].z = src[i];
}
}
break;
@@ -2445,13 +2453,13 @@ _mesa_pack_uint_z_row(gl_format format, GLuint n,
break;
case MESA_FORMAT_Z32_FLOAT_X24S8:
{
- GLfloat *d = ((GLfloat *) dst);
+ struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
GLuint i;
for (i = 0; i < n; i++) {
- d[i * 2] = src[i] * scale;
- assert(d[i * 2] >= 0.0f);
- assert(d[i * 2] <= 1.0f);
+ d[i].z = src[i] * scale;
+ assert(d[i].z >= 0.0f);
+ assert(d[i].z <= 1.0f);
}
}
break;
@@ -2495,10 +2503,10 @@ _mesa_pack_ubyte_stencil_row(gl_format format, GLuint n,
break;
case MESA_FORMAT_Z32_FLOAT_X24S8:
{
- GLuint *d = dst;
+ struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
GLuint i;
for (i = 0; i < n; i++) {
- d[i * 2 + 1] = src[i];
+ d[i].x24s8 = src[i];
}
}
break;
@@ -2530,6 +2538,18 @@ _mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n,
}
}
break;
+ case MESA_FORMAT_Z32_FLOAT_X24S8:
+ {
+ const GLdouble scale = 1.0 / (GLdouble) 0xffffff;
+ struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
+ GLint i;
+ for (i = 0; i < n; i++) {
+ GLfloat z = (src[i] >> 8) * scale;
+ d[i].z = z;
+ d[i].x24s8 = src[i];
+ }
+ }
+ break;
default:
_mesa_problem(NULL, "bad format %s in _mesa_pack_ubyte_s_row",
_mesa_get_format_name(format));
diff --git a/mesalib/src/mesa/main/format_unpack.c b/mesalib/src/mesa/main/format_unpack.c
index a484979e2..b00e01236 100644
--- a/mesalib/src/mesa/main/format_unpack.c
+++ b/mesalib/src/mesa/main/format_unpack.c
@@ -29,6 +29,13 @@
#include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
+/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */
+struct z32f_x24s8
+{
+ float z;
+ uint32_t x24s8;
+};
+
/* Expand 1, 2, 3, 4, 5, 6-bit values to fill 8 bits */
@@ -2825,10 +2832,10 @@ unpack_float_z_Z32F(GLuint n, const void *src, GLfloat *dst)
static void
unpack_float_z_Z32X24S8(GLuint n, const void *src, GLfloat *dst)
{
- const GLfloat *s = ((const GLfloat *) src);
+ const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
GLuint i;
for (i = 0; i < n; i++) {
- dst[i] = s[i * 2];
+ dst[i] = s[i].z;
}
}
@@ -2929,11 +2936,6 @@ unpack_uint_z_Z32_FLOAT(const void *src, GLuint *dst, GLuint n)
static void
unpack_uint_z_Z32_FLOAT_X24S8(const void *src, GLuint *dst, GLuint n)
{
- struct z32f_x24s8 {
- float z;
- uint32_t x24s8;
- };
-
const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
GLuint i;
@@ -3015,10 +3017,10 @@ static void
unpack_ubyte_s_Z32_FLOAT_X24S8(const void *src, GLubyte *dst, GLuint n)
{
GLuint i;
- const GLuint *src32 = src;
+ const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
for (i = 0; i < n; i++)
- dst[i] = src32[i * 2 + 1] & 0xff;
+ dst[i] = s[i].x24s8 & 0xff;
}
void
diff --git a/mesalib/src/mesa/main/image.c b/mesalib/src/mesa/main/image.c
index 750db9444..b6c2645e9 100644
--- a/mesalib/src/mesa/main/image.c
+++ b/mesalib/src/mesa/main/image.c
@@ -428,6 +428,15 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
}
return GL_NO_ERROR;
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ if (!ctx->Extensions.EXT_packed_float) {
+ return GL_INVALID_ENUM;
+ }
+ if (format != GL_RGB) {
+ return GL_INVALID_OPERATION;
+ }
+ return GL_NO_ERROR;
+
default:
; /* fall-through */
}
diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h
index 5ef97c86c..9200f3fc4 100644
--- a/mesalib/src/mesa/main/mtypes.h
+++ b/mesalib/src/mesa/main/mtypes.h
@@ -2483,7 +2483,7 @@ struct gl_shared_state
struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS];
/** Fallback texture used when a bound texture is incomplete */
- struct gl_texture_object *FallbackTex;
+ struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS];
/**
* \name Thread safety and statechange notification for texture
diff --git a/mesalib/src/mesa/main/shared.c b/mesalib/src/mesa/main/shared.c
index c07ce8238..226947638 100644
--- a/mesalib/src/mesa/main/shared.c
+++ b/mesalib/src/mesa/main/shared.c
@@ -307,9 +307,11 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
{
GLuint i;
- /* Free the dummy/fallback texture object */
- if (shared->FallbackTex)
- ctx->Driver.DeleteTexture(ctx, shared->FallbackTex);
+ /* Free the dummy/fallback texture objects */
+ for (i = 0; i < NUM_TEXTURE_TARGETS; i++) {
+ if (shared->FallbackTex[i])
+ ctx->Driver.DeleteTexture(ctx, shared->FallbackTex[i]);
+ }
/*
* Free display lists
diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c
index e4eb7f67d..9b6c6c896 100644
--- a/mesalib/src/mesa/main/teximage.c
+++ b/mesalib/src/mesa/main/teximage.c
@@ -1083,11 +1083,13 @@ _mesa_init_teximage_fields(struct gl_context *ctx,
GLint border, GLenum internalFormat,
gl_format format)
{
+ GLenum target;
ASSERT(img);
ASSERT(width >= 0);
ASSERT(height >= 0);
ASSERT(depth >= 0);
+ target = img->TexObject->Target;
img->_BaseFormat = _mesa_base_tex_format( ctx, internalFormat );
ASSERT(img->_BaseFormat > 0);
img->InternalFormat = internalFormat;
@@ -1099,26 +1101,72 @@ _mesa_init_teximage_fields(struct gl_context *ctx,
img->Width2 = width - 2 * border; /* == 1 << img->WidthLog2; */
img->WidthLog2 = _mesa_logbase2(img->Width2);
- if (height == 1) { /* 1-D texture */
- img->Height2 = 1;
+ switch(target) {
+ case GL_TEXTURE_1D:
+ case GL_TEXTURE_BUFFER:
+ case GL_PROXY_TEXTURE_1D:
+ if (height == 0)
+ img->Height2 = 0;
+ else
+ img->Height2 = 1;
img->HeightLog2 = 0;
- }
- else {
+ if (depth == 0)
+ img->Depth2 = 0;
+ else
+ img->Depth2 = 1;
+ img->DepthLog2 = 0;
+ break;
+ case GL_TEXTURE_1D_ARRAY:
+ case GL_PROXY_TEXTURE_1D_ARRAY:
+ img->Height2 = height; /* no border */
+ img->HeightLog2 = 0; /* not used */
+ if (depth == 0)
+ img->Depth2 = 0;
+ else
+ img->Depth2 = 1;
+ img->DepthLog2 = 0;
+ break;
+ case GL_TEXTURE_2D:
+ case GL_TEXTURE_RECTANGLE:
+ case GL_TEXTURE_CUBE_MAP:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+ case GL_TEXTURE_EXTERNAL_OES:
+ case GL_PROXY_TEXTURE_2D:
+ case GL_PROXY_TEXTURE_RECTANGLE:
+ case GL_PROXY_TEXTURE_CUBE_MAP:
img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */
img->HeightLog2 = _mesa_logbase2(img->Height2);
- }
-
- if (depth == 1) { /* 2-D texture */
- img->Depth2 = 1;
+ if (depth == 0)
+ img->Depth2 = 0;
+ else
+ img->Depth2 = 1;
img->DepthLog2 = 0;
- }
- else {
+ break;
+ case GL_TEXTURE_2D_ARRAY:
+ case GL_PROXY_TEXTURE_2D_ARRAY:
+ img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */
+ img->HeightLog2 = _mesa_logbase2(img->Height2);
+ img->Depth2 = depth; /* no border */
+ img->DepthLog2 = 0; /* not used */
+ break;
+ case GL_TEXTURE_3D:
+ case GL_PROXY_TEXTURE_3D:
+ img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */
+ img->HeightLog2 = _mesa_logbase2(img->Height2);
img->Depth2 = depth - 2 * border; /* == 1 << img->DepthLog2; */
img->DepthLog2 = _mesa_logbase2(img->Depth2);
+ break;
+ default:
+ _mesa_problem(NULL, "invalid target 0x%x in _mesa_init_teximage_fields()",
+ target);
}
img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2);
-
img->TexFormat = format;
}
@@ -1852,6 +1900,17 @@ subtexture_error_check2( struct gl_context *ctx, GLuint dimensions,
}
}
+ if (ctx->VersionMajor >= 3 || ctx->Extensions.EXT_texture_integer) {
+ /* both source and dest must be integer-valued, or neither */
+ if (_mesa_is_format_integer_color(destTex->TexFormat) !=
+ _mesa_is_integer_format(format)) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTexSubImage%dD(integer/non-integer format mismatch)",
+ dimensions);
+ return GL_TRUE;
+ }
+ }
+
return GL_FALSE;
}
diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c
index 1b61d3a63..590594826 100644
--- a/mesalib/src/mesa/main/texobj.c
+++ b/mesalib/src/mesa/main/texobj.c
@@ -759,59 +759,127 @@ _mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj,
/**
- * Return pointer to a default/fallback texture.
- * The texture is a 2D 8x8 RGBA texture with all texels = (0,0,0,1).
- * That's the value a sampler should get when sampling from an
+ * Return pointer to a default/fallback texture of the given type/target.
+ * The texture is an RGBA texture with all texels = (0,0,0,1).
+ * That's the value a GLSL sampler should get when sampling from an
* incomplete texture.
*/
struct gl_texture_object *
-_mesa_get_fallback_texture(struct gl_context *ctx)
+_mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
{
- if (!ctx->Shared->FallbackTex) {
+ if (!ctx->Shared->FallbackTex[tex]) {
/* create fallback texture now */
- static GLubyte texels[8 * 8][4];
+ const GLsizei width = 1, height = 1, depth = 1;
+ GLubyte texel[4];
struct gl_texture_object *texObj;
struct gl_texture_image *texImage;
gl_format texFormat;
- GLuint i;
-
- for (i = 0; i < 8 * 8; i++) {
- texels[i][0] =
- texels[i][1] =
- texels[i][2] = 0x0;
- texels[i][3] = 0xff;
+ GLuint dims, face, numFaces = 1;
+ GLenum target;
+
+ texel[0] =
+ texel[1] =
+ texel[2] = 0x0;
+ texel[3] = 0xff;
+
+ switch (tex) {
+ case TEXTURE_2D_ARRAY_INDEX:
+ dims = 3;
+ target = GL_TEXTURE_2D_ARRAY;
+ break;
+ case TEXTURE_1D_ARRAY_INDEX:
+ dims = 2;
+ target = GL_TEXTURE_1D_ARRAY;
+ break;
+ case TEXTURE_CUBE_INDEX:
+ dims = 2;
+ target = GL_TEXTURE_CUBE_MAP;
+ numFaces = 6;
+ break;
+ case TEXTURE_3D_INDEX:
+ dims = 3;
+ target = GL_TEXTURE_3D;
+ break;
+ case TEXTURE_RECT_INDEX:
+ dims = 2;
+ target = GL_TEXTURE_RECTANGLE;
+ break;
+ case TEXTURE_2D_INDEX:
+ dims = 2;
+ target = GL_TEXTURE_2D;
+ break;
+ case TEXTURE_1D_INDEX:
+ dims = 1;
+ target = GL_TEXTURE_1D;
+ break;
+ case TEXTURE_BUFFER_INDEX:
+ case TEXTURE_EXTERNAL_INDEX:
+ default:
+ /* no-op */
+ return NULL;
}
/* create texture object */
- texObj = ctx->Driver.NewTextureObject(ctx, 0, GL_TEXTURE_2D);
+ texObj = ctx->Driver.NewTextureObject(ctx, 0, target);
+ if (!texObj)
+ return NULL;
+
assert(texObj->RefCount == 1);
texObj->Sampler.MinFilter = GL_NEAREST;
texObj->Sampler.MagFilter = GL_NEAREST;
- /* create level[0] texture image */
- texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, 0);
-
texFormat = ctx->Driver.ChooseTextureFormat(ctx, GL_RGBA, GL_RGBA,
GL_UNSIGNED_BYTE);
- /* init the image fields */
- _mesa_init_teximage_fields(ctx, texImage,
- 8, 8, 1, 0, GL_RGBA, texFormat);
+ /* need a loop here just for cube maps */
+ for (face = 0; face < numFaces; face++) {
+ GLenum faceTarget;
- ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
-
- /* set image data */
- ctx->Driver.TexImage2D(ctx, texImage, GL_RGBA,
- 8, 8, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, texels,
- &ctx->DefaultPacking);
+ if (target == GL_TEXTURE_CUBE_MAP)
+ faceTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
+ else
+ faceTarget = target;
+
+ /* initialize level[0] texture image */
+ texImage = _mesa_get_tex_image(ctx, texObj, faceTarget, 0);
+
+ _mesa_init_teximage_fields(ctx, texImage,
+ width,
+ (dims > 1) ? height : 1,
+ (dims > 2) ? depth : 1,
+ 0, /* border */
+ GL_RGBA, texFormat);
+
+ switch (dims) {
+ case 1:
+ ctx->Driver.TexImage1D(ctx, texImage, GL_RGBA,
+ width, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, texel,
+ &ctx->DefaultPacking);
+ break;
+ case 2:
+ ctx->Driver.TexImage2D(ctx, texImage, GL_RGBA,
+ width, height, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, texel,
+ &ctx->DefaultPacking);
+ break;
+ case 3:
+ ctx->Driver.TexImage3D(ctx, texImage, GL_RGBA,
+ width, height, depth, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, texel,
+ &ctx->DefaultPacking);
+ break;
+ default:
+ _mesa_problem(ctx, "bad dims in _mesa_get_fallback_texture()");
+ }
+ }
_mesa_test_texobj_completeness(ctx, texObj);
assert(texObj->_Complete);
- ctx->Shared->FallbackTex = texObj;
+ ctx->Shared->FallbackTex[tex] = texObj;
}
- return ctx->Shared->FallbackTex;
+ return ctx->Shared->FallbackTex[tex];
}
diff --git a/mesalib/src/mesa/main/texobj.h b/mesalib/src/mesa/main/texobj.h
index 9ca7a4c9e..03dfbe304 100644
--- a/mesalib/src/mesa/main/texobj.h
+++ b/mesalib/src/mesa/main/texobj.h
@@ -34,8 +34,8 @@
#include "compiler.h"
#include "glheader.h"
+#include "mtypes.h"
-struct gl_context;
/**
* \name Internal functions
@@ -89,7 +89,7 @@ _mesa_dirty_texobj(struct gl_context *ctx, struct gl_texture_object *texObj,
GLboolean invalidate_state);
extern struct gl_texture_object *
-_mesa_get_fallback_texture(struct gl_context *ctx);
+_mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex);
extern void
_mesa_unlock_context_textures( struct gl_context *ctx );
diff --git a/mesalib/src/mesa/main/texstate.c b/mesalib/src/mesa/main/texstate.c
index cc49916a9..187ec9c36 100644
--- a/mesalib/src/mesa/main/texstate.c
+++ b/mesalib/src/mesa/main/texstate.c
@@ -586,9 +586,15 @@ update_texture_state( struct gl_context *ctx )
* object, but there isn't one (or it's incomplete). Use the
* fallback texture.
*/
- struct gl_texture_object *texObj = _mesa_get_fallback_texture(ctx);
- texUnit->_ReallyEnabled = 1 << TEXTURE_2D_INDEX;
+ struct gl_texture_object *texObj;
+ gl_texture_index texTarget;
+
+ assert(_mesa_bitcount(enabledTargets) == 1);
+
+ texTarget = (gl_texture_index) (ffs(enabledTargets) - 1);
+ texObj = _mesa_get_fallback_texture(ctx, texTarget);
_mesa_reference_texobj(&texUnit->_Current, texObj);
+ texUnit->_ReallyEnabled = 1 << texTarget;
}
else {
/* fixed-function: texture unit is really disabled */
diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c
index 77c1d7d9b..39d3a27e0 100644
--- a/mesalib/src/mesa/main/varray.c
+++ b/mesalib/src/mesa/main/varray.c
@@ -185,6 +185,7 @@ update_array(struct gl_context *ctx,
(type == GL_UNSIGNED_INT_2_10_10_10_REV ||
type == GL_INT_2_10_10_10_REV) && size != 4) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s(size=%d)", func, size);
+ return;
}
ASSERT(size <= 4);
@@ -482,6 +483,7 @@ _mesa_VertexAttribIPointer(GLuint index, GLint size, GLenum type,
void GLAPIENTRY
_mesa_EnableVertexAttribArrayARB(GLuint index)
{
+ struct gl_array_object *arrayObj;
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END(ctx);
@@ -491,18 +493,24 @@ _mesa_EnableVertexAttribArrayARB(GLuint index)
return;
}
- ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.ArrayObj->VertexAttrib));
+ arrayObj = ctx->Array.ArrayObj;
+
+ ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(arrayObj->VertexAttrib));
- FLUSH_VERTICES(ctx, _NEW_ARRAY);
- ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_TRUE;
- ctx->Array.ArrayObj->_Enabled |= VERT_BIT_GENERIC(index);
- ctx->Array.NewState |= VERT_BIT_GENERIC(index);
+ if (!arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) {
+ /* was disabled, now being enabled */
+ FLUSH_VERTICES(ctx, _NEW_ARRAY);
+ arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_TRUE;
+ arrayObj->_Enabled |= VERT_BIT_GENERIC(index);
+ ctx->Array.NewState |= VERT_BIT_GENERIC(index);
+ }
}
void GLAPIENTRY
_mesa_DisableVertexAttribArrayARB(GLuint index)
{
+ struct gl_array_object *arrayObj;
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END(ctx);
@@ -512,12 +520,17 @@ _mesa_DisableVertexAttribArrayARB(GLuint index)
return;
}
- ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(ctx->Array.ArrayObj->VertexAttrib));
+ arrayObj = ctx->Array.ArrayObj;
+
+ ASSERT(VERT_ATTRIB_GENERIC(index) < Elements(arrayObj->VertexAttrib));
- FLUSH_VERTICES(ctx, _NEW_ARRAY);
- ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_FALSE;
- ctx->Array.ArrayObj->_Enabled &= ~VERT_BIT_GENERIC(index);
- ctx->Array.NewState |= VERT_BIT_GENERIC(index);
+ if (arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled) {
+ /* was enabled, now being disabled */
+ FLUSH_VERTICES(ctx, _NEW_ARRAY);
+ arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(index)].Enabled = GL_FALSE;
+ arrayObj->_Enabled &= ~VERT_BIT_GENERIC(index);
+ ctx->Array.NewState |= VERT_BIT_GENERIC(index);
+ }
}
@@ -1087,11 +1100,12 @@ _mesa_PrimitiveRestartIndex(GLuint index)
return;
}
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
- ctx->Array.RestartIndex = index;
+ if (ctx->Array.RestartIndex != index) {
+ FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+ ctx->Array.RestartIndex = index;
+ }
}
diff --git a/mesalib/src/mesa/main/version.h b/mesalib/src/mesa/main/version.h
index 35bf53392..94a9855d9 100644
--- a/mesalib/src/mesa/main/version.h
+++ b/mesalib/src/mesa/main/version.h
@@ -35,7 +35,7 @@ struct gl_context;
#define MESA_MAJOR 8
#define MESA_MINOR 1
#define MESA_PATCH 0
-#define MESA_VERSION_STRING "8.0-devel"
+#define MESA_VERSION_STRING "8.1-devel"
/* To make version comparison easy */
#define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/mesalib/src/mesa/state_tracker/st_atom_sampler.c b/mesalib/src/mesa/state_tracker/st_atom_sampler.c
index ee69fc390..dc0c789c5 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_sampler.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_sampler.c
@@ -35,6 +35,7 @@
#include "main/macros.h"
#include "main/mtypes.h"
#include "main/samplerobj.h"
+#include "main/texobj.h"
#include "st_context.h"
#include "st_cb_texture.h"
@@ -132,7 +133,7 @@ convert_sampler(struct st_context *st,
texobj = ctx->Texture.Unit[texUnit]._Current;
if (!texobj) {
- texobj = st_get_default_texture(st);
+ texobj = _mesa_get_fallback_texture(ctx, TEXTURE_2D_INDEX);
}
msamp = _mesa_get_samplerobj(ctx, texUnit);
diff --git a/mesalib/src/mesa/state_tracker/st_atom_texture.c b/mesalib/src/mesa/state_tracker/st_atom_texture.c
index e8941da8d..f27a320a5 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_texture.c
@@ -35,6 +35,7 @@
#include "main/macros.h"
#include "main/mtypes.h"
#include "main/samplerobj.h"
+#include "main/texobj.h"
#include "program/prog_instruction.h"
#include "st_context.h"
@@ -137,7 +138,7 @@ check_sampler_swizzle(struct pipe_sampler_view *sv,
}
-static INLINE struct pipe_sampler_view *
+static struct pipe_sampler_view *
st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
struct st_texture_object *stObj,
const struct gl_sampler_object *samp,
@@ -164,7 +165,7 @@ st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
}
-static INLINE struct pipe_sampler_view *
+static struct pipe_sampler_view *
st_get_texture_sampler_view_from_stobj(struct st_texture_object *stObj,
struct pipe_context *pipe,
const struct gl_sampler_object *samp,
@@ -201,7 +202,7 @@ update_single_texture(struct st_context *st,
texObj = ctx->Texture.Unit[texUnit]._Current;
if (!texObj) {
- texObj = st_get_default_texture(st);
+ texObj = _mesa_get_fallback_texture(ctx, TEXTURE_2D_INDEX);
samp = &texObj->Sampler;
}
stObj = st_texture_object(texObj);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_clear.c b/mesalib/src/mesa/state_tracker/st_cb_clear.c
index a8365a708..193583372 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_clear.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_clear.c
@@ -388,10 +388,7 @@ check_clear_depth_stencil_with_quad(struct gl_context *ctx, struct gl_renderbuff
GLboolean maskStencil
= (ctx->Stencil.WriteMask[0] & stencilMax) != stencilMax;
- assert(rb->Format == MESA_FORMAT_S8 ||
- rb->Format == MESA_FORMAT_Z24_S8 ||
- rb->Format == MESA_FORMAT_S8_Z24 ||
- rb->Format == MESA_FORMAT_Z32_FLOAT_X24S8);
+ assert(_mesa_get_format_bits(rb->Format, GL_STENCIL_BITS) > 0);
if (ctx->Scissor.Enabled &&
(ctx->Scissor.X != 0 ||
@@ -444,10 +441,7 @@ check_clear_stencil_with_quad(struct gl_context *ctx, struct gl_renderbuffer *rb
const GLboolean maskStencil
= (ctx->Stencil.WriteMask[0] & stencilMax) != stencilMax;
- assert(rb->Format == MESA_FORMAT_S8 ||
- rb->Format == MESA_FORMAT_Z24_S8 ||
- rb->Format == MESA_FORMAT_S8_Z24 ||
- rb->Format == MESA_FORMAT_Z32_FLOAT_X24S8);
+ assert(_mesa_get_format_bits(rb->Format, GL_STENCIL_BITS) > 0);
if (maskStencil)
return GL_TRUE;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
index 386eed290..de4c189a8 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -33,6 +33,7 @@
#include "main/imports.h"
#include "main/image.h"
#include "main/bufferobj.h"
+#include "main/format_pack.h"
#include "main/macros.h"
#include "main/mfeatures.h"
#include "main/mtypes.h"
@@ -842,12 +843,14 @@ draw_stencil_pixels(struct gl_context *ctx, GLint x, GLint y,
y = ctx->DrawBuffer->Height - y - height;
}
- if(format != GL_DEPTH_STENCIL &&
- util_format_get_component_bits(strb->format,
- UTIL_FORMAT_COLORSPACE_ZS, 0) != 0)
+ if (format == GL_STENCIL_INDEX &&
+ _mesa_is_format_packed_depth_stencil(strb->Base.Format)) {
+ /* writing stencil to a combined depth+stencil buffer */
usage = PIPE_TRANSFER_READ_WRITE;
- else
+ }
+ else {
usage = PIPE_TRANSFER_WRITE;
+ }
pt = pipe_get_transfer(pipe, strb->texture,
strb->rtt_level, strb->rtt_face + strb->rtt_slice,
@@ -1209,8 +1212,7 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
}
}
- if (util_format_get_component_bits(rbDraw->format,
- UTIL_FORMAT_COLORSPACE_ZS, 0) != 0)
+ if (_mesa_is_format_packed_depth_stencil(rbDraw->Base.Format))
usage = PIPE_TRANSFER_READ_WRITE;
else
usage = PIPE_TRANSFER_WRITE;
@@ -1248,48 +1250,7 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy,
dst = drawMap + y * ptDraw->stride;
src = buffer + i * width;
- switch (ptDraw->resource->format) {
- case PIPE_FORMAT_Z24_UNORM_S8_UINT:
- {
- uint *dst4 = (uint *) dst;
- int j;
- assert(usage == PIPE_TRANSFER_READ_WRITE);
- for (j = 0; j < width; j++) {
- *dst4 = (*dst4 & 0xffffff) | (src[j] << 24);
- dst4++;
- }
- }
- break;
- case PIPE_FORMAT_S8_UINT_Z24_UNORM:
- {
- uint *dst4 = (uint *) dst;
- int j;
- assert(usage == PIPE_TRANSFER_READ_WRITE);
- for (j = 0; j < width; j++) {
- *dst4 = (*dst4 & 0xffffff00) | (src[j] & 0xff);
- dst4++;
- }
- }
- break;
- case PIPE_FORMAT_S8_UINT:
- assert(usage == PIPE_TRANSFER_WRITE);
- memcpy(dst, src, width);
- break;
- case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
- {
- uint *dst4 = (uint *) dst;
- int j;
- dst4++;
- assert(usage == PIPE_TRANSFER_READ_WRITE);
- for (j = 0; j < width; j++) {
- *dst4 = src[j] & 0xff;
- dst4 += 2;
- }
- }
- break;
- default:
- assert(0);
- }
+ _mesa_pack_ubyte_stencil_row(rbDraw->Base.Format, width, src, dst);
}
free(buffer);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
index 1cbc0d606..300c3f0eb 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
@@ -97,7 +97,6 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
strb->Base.Height = height;
strb->Base.Format = st_pipe_format_to_mesa_format(format);
strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
- strb->format = format;
strb->defined = GL_FALSE; /* undefined contents now */
@@ -106,10 +105,7 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
free(strb->data);
- assert(strb->format != PIPE_FORMAT_NONE);
-
- strb->stride = util_format_get_stride(strb->format, width);
- size = util_format_get_2d_size(strb->format, strb->stride, height);
+ size = _mesa_format_image_size(strb->Base.Format, width, height, 1);
strb->data = malloc(size);
@@ -142,7 +138,12 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
if (util_format_is_depth_or_stencil(format)) {
template.bind = PIPE_BIND_DEPTH_STENCIL;
}
+ else if (strb->Base.Name != 0) {
+ /* this is a user-created renderbuffer */
+ template.bind = PIPE_BIND_RENDER_TARGET;
+ }
else {
+ /* this is a window-system buffer */
template.bind = (PIPE_BIND_DISPLAY_TARGET |
PIPE_BIND_RENDER_TARGET);
}
@@ -152,7 +153,6 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
if (!strb->texture)
return FALSE;
- memset(&surf_tmpl, 0, sizeof(surf_tmpl));
u_surface_default_template(&surf_tmpl, strb->texture, template.bind);
strb->surface = pipe->create_surface(pipe,
strb->texture,
@@ -203,10 +203,10 @@ st_new_renderbuffer(struct gl_context *ctx, GLuint name)
{
struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer);
if (strb) {
+ assert(name != 0);
_mesa_init_renderbuffer(&strb->Base, name);
strb->Base.Delete = st_renderbuffer_delete;
strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
- strb->format = PIPE_FORMAT_NONE;
return &strb->Base;
}
return NULL;
@@ -233,7 +233,6 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
strb->Base.NumSamples = samples;
strb->Base.Format = st_pipe_format_to_mesa_format(format);
strb->Base._BaseFormat = _mesa_get_format_base_format(strb->Base.Format);
- strb->format = format;
strb->software = sw;
switch (format) {
@@ -297,8 +296,6 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
}
-
-
/**
* Called via ctx->Driver.BindFramebufferEXT().
*/
@@ -306,20 +303,7 @@ static void
st_bind_framebuffer(struct gl_context *ctx, GLenum target,
struct gl_framebuffer *fb, struct gl_framebuffer *fbread)
{
-
-}
-
-/**
- * Called by ctx->Driver.FramebufferRenderbuffer
- */
-static void
-st_framebuffer_renderbuffer(struct gl_context *ctx,
- struct gl_framebuffer *fb,
- GLenum attachment,
- struct gl_renderbuffer *rb)
-{
- /* XXX no need for derivation? */
- _mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb);
+ /* no-op */
}
@@ -380,9 +364,6 @@ st_render_texture(struct gl_context *ctx,
rb->Height = texImage->Height2;
rb->_BaseFormat = texImage->_BaseFormat;
rb->InternalFormat = texImage->InternalFormat;
- /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/
-
- /*printf("***** pipe texture %d x %d\n", pt->width0, pt->height0);*/
pipe_resource_reference( &strb->texture, pt );
@@ -392,7 +373,8 @@ st_render_texture(struct gl_context *ctx,
/* new surface for rendering into the texture */
memset(&surf_tmpl, 0, sizeof(surf_tmpl));
- surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format);
+ surf_tmpl.format = ctx->Color.sRGBEnabled
+ ? strb->texture->format : util_format_linear(strb->texture->format);
surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
surf_tmpl.u.tex.level = strb->rtt_level;
surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice;
@@ -401,15 +383,8 @@ st_render_texture(struct gl_context *ctx,
strb->texture,
&surf_tmpl);
- strb->format = pt->format;
-
strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
- /*
- printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p %d x %d\n",
- att->Texture, pt, strb->surface, rb->Width, rb->Height);
- */
-
/* Invalidate buffer state so that the pipe's framebuffer state
* gets updated.
* That's where the new renderbuffer (which we just created) gets
@@ -433,10 +408,6 @@ st_finish_render_texture(struct gl_context *ctx,
strb->rtt = NULL;
- /*
- printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface);
- */
-
/* restore previous framebuffer state */
st_invalidate_state(ctx, _NEW_BUFFERS);
}
@@ -647,12 +618,12 @@ st_MapRenderbuffer(struct gl_context *ctx,
if (strb->software) {
/* software-allocated renderbuffer (probably an accum buffer) */
- GLubyte *map = (GLubyte *) strb->data;
if (strb->data) {
- map += strb->stride * y;
- map += util_format_get_blocksize(strb->format) * x;
- *mapOut = map;
- *rowStrideOut = strb->stride;
+ GLint bpp = _mesa_get_format_bytes(strb->Base.Format);
+ GLint stride = _mesa_format_row_stride(strb->Base.Format,
+ strb->Base.Width);
+ *mapOut = (GLubyte *) strb->data + y * stride + x * bpp;
+ *rowStrideOut = stride;
}
else {
*mapOut = NULL;
@@ -730,14 +701,11 @@ void st_init_fbo_functions(struct dd_function_table *functions)
functions->NewFramebuffer = st_new_framebuffer;
functions->NewRenderbuffer = st_new_renderbuffer;
functions->BindFramebuffer = st_bind_framebuffer;
- functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer;
+ functions->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer;
functions->RenderTexture = st_render_texture;
functions->FinishRenderTexture = st_finish_render_texture;
functions->ValidateFramebuffer = st_validate_framebuffer;
#endif
- /* no longer needed by core Mesa, drivers handle resizes...
- functions->ResizeBuffers = st_resize_buffers;
- */
functions->DrawBuffers = st_DrawBuffers;
functions->ReadBuffer = st_ReadBuffer;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.h b/mesalib/src/mesa/state_tracker/st_cb_fbo.h
index 1be017314..506fd06d6 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_fbo.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.h
@@ -48,7 +48,6 @@ struct st_renderbuffer
struct gl_renderbuffer Base;
struct pipe_resource *texture;
struct pipe_surface *surface; /* temporary view into texture */
- enum pipe_format format; /** preferred format, or PIPE_FORMAT_NONE */
GLboolean defined; /**< defined contents? */
struct pipe_transfer *transfer; /**< only used when mapping the resource */
@@ -57,7 +56,6 @@ struct st_renderbuffer
* Used only when hardware accumulation buffers are not supported.
*/
boolean software;
- size_t stride;
void *data;
struct st_texture_object *rtt; /**< GL render to texture's texture */
diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.c b/mesalib/src/mesa/state_tracker/st_cb_texture.c
index 5cd9a4c94..74ae2d11d 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_texture.c
@@ -609,8 +609,7 @@ decompress_with_blit(struct gl_context * ctx,
struct pipe_context *pipe = st->pipe;
struct st_texture_image *stImage = st_texture_image(texImage);
struct st_texture_object *stObj = st_texture_object(texImage->TexObject);
- struct pipe_sampler_view *src_view =
- st_get_texture_sampler_view(stObj, pipe);
+ struct pipe_sampler_view *src_view;
const GLuint width = texImage->Width;
const GLuint height = texImage->Height;
struct pipe_surface *dst_surface;
@@ -632,8 +631,21 @@ decompress_with_blit(struct gl_context * ctx,
pipe->render_condition(pipe, NULL, 0);
}
- /* Choose the source mipmap level */
- src_view->u.tex.first_level = src_view->u.tex.last_level = texImage->Level;
+ /* Create sampler view that limits fetches to the source mipmap level */
+ {
+ struct pipe_sampler_view sv_temp;
+
+ u_sampler_view_default_template(&sv_temp, stObj->pt, stObj->pt->format);
+
+ sv_temp.u.tex.first_level =
+ sv_temp.u.tex.last_level = texImage->Level;
+
+ src_view = pipe->create_sampler_view(pipe, stObj->pt, &sv_temp);
+ if (!src_view) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage");
+ return;
+ }
+ }
/* blit/render/decompress */
util_blit_pixels_tex(st->blit,
@@ -661,7 +673,9 @@ decompress_with_blit(struct gl_context * ctx,
pixels = _mesa_map_pbo_dest(ctx, &ctx->Pack, pixels);
/* copy/pack data into user buffer */
- if (st_equal_formats(stImage->pt->format, format, type)) {
+ if (_mesa_format_matches_format_and_type(stImage->base.TexFormat,
+ format, type,
+ ctx->Pack.SwapBytes)) {
/* memcpy */
const uint bytesPerRow = width * util_format_get_blocksize(stImage->pt->format);
ubyte *map = pipe_transfer_map(pipe, tex_xfer);
@@ -702,6 +716,8 @@ decompress_with_blit(struct gl_context * ctx,
/* destroy the temp / dest surface */
util_destroy_rgba_surface(dst_texture, dst_surface);
+
+ pipe_sampler_view_reference(&src_view, NULL);
}
@@ -1337,57 +1353,6 @@ st_finalize_texture(struct gl_context *ctx,
/**
- * Returns pointer to a default/dummy texture.
- * This is typically used when the current shader has tex/sample instructions
- * but the user has not provided a (any) texture(s).
- */
-struct gl_texture_object *
-st_get_default_texture(struct st_context *st)
-{
- if (!st->default_texture) {
- static const GLenum target = GL_TEXTURE_2D;
- GLubyte pixels[16][16][4];
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImg;
- GLuint i, j;
-
- /* The ARB_fragment_program spec says (0,0,0,1) should be returned
- * when attempting to sample incomplete textures.
- */
- for (i = 0; i < 16; i++) {
- for (j = 0; j < 16; j++) {
- pixels[i][j][0] = 0;
- pixels[i][j][1] = 0;
- pixels[i][j][2] = 0;
- pixels[i][j][3] = 255;
- }
- }
-
- texObj = st->ctx->Driver.NewTextureObject(st->ctx, 0, target);
-
- texImg = _mesa_get_tex_image(st->ctx, texObj, target, 0);
-
- _mesa_init_teximage_fields(st->ctx, texImg,
- 16, 16, 1, 0, /* w, h, d, border */
- GL_RGBA, MESA_FORMAT_RGBA8888);
-
- _mesa_store_teximage2d(st->ctx, texImg,
- GL_RGBA, /* level, intformat */
- 16, 16, 1, /* w, h, d, border */
- GL_RGBA, GL_UNSIGNED_BYTE, pixels,
- &st->ctx->DefaultPacking);
-
- texObj->Sampler.MinFilter = GL_NEAREST;
- texObj->Sampler.MagFilter = GL_NEAREST;
- texObj->_Complete = GL_TRUE;
-
- st->default_texture = texObj;
- }
- return st->default_texture;
-}
-
-
-/**
* Called via ctx->Driver.AllocTextureStorage() to allocate texture memory
* for a whole mipmap stack.
*/
diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.h b/mesalib/src/mesa/state_tracker/st_cb_texture.h
index 81671b074..27956bcc2 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_texture.h
+++ b/mesalib/src/mesa/state_tracker/st_cb_texture.h
@@ -1,55 +1,51 @@
-/**************************************************************************
- *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-#ifndef ST_CB_TEXTURE_H
-#define ST_CB_TEXTURE_H
-
-
-#include "main/glheader.h"
-
-struct dd_function_table;
-struct gl_context;
-struct gl_texture_object;
-struct pipe_context;
-struct st_context;
-
-extern GLboolean
-st_finalize_texture(struct gl_context *ctx,
- struct pipe_context *pipe,
- struct gl_texture_object *tObj);
-
-
-extern struct gl_texture_object *
-st_get_default_texture(struct st_context *st);
-
-
-extern void
-st_init_texture_functions(struct dd_function_table *functions);
-
-
-#endif /* ST_CB_TEXTURE_H */
+/**************************************************************************
+ *
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+
+#ifndef ST_CB_TEXTURE_H
+#define ST_CB_TEXTURE_H
+
+
+#include "main/glheader.h"
+
+struct dd_function_table;
+struct gl_context;
+struct gl_texture_object;
+struct pipe_context;
+struct st_context;
+
+extern GLboolean
+st_finalize_texture(struct gl_context *ctx,
+ struct pipe_context *pipe,
+ struct gl_texture_object *tObj);
+
+
+extern void
+st_init_texture_functions(struct dd_function_table *functions);
+
+
+#endif /* ST_CB_TEXTURE_H */
diff --git a/mesalib/src/mesa/state_tracker/st_format.c b/mesalib/src/mesa/state_tracker/st_format.c
index 2fdbcd773..4265d14b4 100644
--- a/mesalib/src/mesa/state_tracker/st_format.c
+++ b/mesalib/src/mesa/state_tracker/st_format.c
@@ -1639,24 +1639,6 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLint internalFormat,
format, type, want_renderable);
}
-/**
- * Test if a gallium format is equivalent to a GL format/type.
- */
-GLboolean
-st_equal_formats(enum pipe_format pFormat, GLenum format, GLenum type)
-{
- switch (pFormat) {
- case PIPE_FORMAT_A8B8G8R8_UNORM:
- return format == GL_RGBA && type == GL_UNSIGNED_BYTE;
- case PIPE_FORMAT_A8R8G8B8_UNORM:
- return format == GL_BGRA && type == GL_UNSIGNED_BYTE;
- case PIPE_FORMAT_B5G6R5_UNORM:
- return format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5;
- /* XXX more combos... */
- default:
- return GL_FALSE;
- }
-}
GLboolean
st_sampler_compat_formats(enum pipe_format format1, enum pipe_format format2)
diff --git a/mesalib/src/mesa/state_tracker/st_format.h b/mesalib/src/mesa/state_tracker/st_format.h
index 1dea0d9a5..7cf92eb41 100644
--- a/mesalib/src/mesa/state_tracker/st_format.h
+++ b/mesalib/src/mesa/state_tracker/st_format.h
@@ -67,9 +67,6 @@ st_ChooseTextureFormat(struct gl_context * ctx, GLint internalFormat,
GLenum format, GLenum type);
-extern GLboolean
-st_equal_formats(enum pipe_format pFormat, GLenum format, GLenum type);
-
/* can we use a sampler view to translate these formats
only used to make TFP so far */
extern GLboolean
diff --git a/mesalib/src/mesa/state_tracker/st_gen_mipmap.c b/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
index d817a9c2b..d3496642f 100644
--- a/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/mesalib/src/mesa/state_tracker/st_gen_mipmap.c
@@ -75,10 +75,9 @@ st_render_mipmap(struct st_context *st,
{
struct pipe_context *pipe = st->pipe;
struct pipe_screen *screen = pipe->screen;
- struct pipe_sampler_view *psv = st_get_texture_sampler_view(stObj, pipe);
+ struct pipe_sampler_view *psv;
const uint face = _mesa_tex_target_to_face(target);
- assert(psv->texture == stObj->pt);
#if 0
assert(target != GL_TEXTURE_3D); /* implemented but untested */
#endif
@@ -86,11 +85,14 @@ st_render_mipmap(struct st_context *st,
/* check if we can render in the texture's format */
/* XXX should probably kill this and always use util_gen_mipmap
since this implements a sw fallback as well */
- if (!screen->is_format_supported(screen, psv->format, psv->texture->target,
+ if (!screen->is_format_supported(screen, stObj->pt->format,
+ stObj->pt->target,
0, PIPE_BIND_RENDER_TARGET)) {
return FALSE;
}
+ psv = st_create_texture_sampler_view(pipe, stObj->pt);
+
/* Disable conditional rendering. */
if (st->render_condition) {
pipe->render_condition(pipe, NULL, 0);
@@ -103,6 +105,8 @@ st_render_mipmap(struct st_context *st,
pipe->render_condition(pipe, st->render_condition, st->condition_mode);
}
+ pipe_sampler_view_reference(&psv, NULL);
+
return TRUE;
}
diff --git a/mesalib/src/mesa/state_tracker/st_manager.c b/mesalib/src/mesa/state_tracker/st_manager.c
index 7efc17305..d54b7ed62 100644
--- a/mesalib/src/mesa/state_tracker/st_manager.c
+++ b/mesalib/src/mesa/state_tracker/st_manager.c
@@ -805,9 +805,7 @@ st_manager_get_egl_image_surface(struct st_context *st,
if (!smapi->get_egl_image(smapi, eglimg, &stimg))
return NULL;
- memset(&surf_tmpl, 0, sizeof(surf_tmpl));
- surf_tmpl.format = stimg.texture->format;
- surf_tmpl.usage = usage;
+ u_surface_default_template(&surf_tmpl, stimg.texture, usage);
surf_tmpl.u.tex.level = stimg.level;
surf_tmpl.u.tex.first_layer = stimg.layer;
surf_tmpl.u.tex.last_layer = stimg.layer;
diff --git a/mesalib/src/mesa/state_tracker/st_texture.h b/mesalib/src/mesa/state_tracker/st_texture.h
index 3d2a6369c..62e975bb4 100644
--- a/mesalib/src/mesa/state_tracker/st_texture.h
+++ b/mesalib/src/mesa/state_tracker/st_texture.h
@@ -45,7 +45,7 @@ struct st_texture_image
{
struct gl_texture_image base;
- /** Used to store texture data that doesn't fit in the patent
+ /** Used to store texture data that doesn't fit in the parent
* object's mipmap buffer.
*/
GLubyte *TexData;
@@ -123,18 +123,6 @@ st_get_stobj_resource(struct st_texture_object *stObj)
static INLINE struct pipe_sampler_view *
-st_create_texture_sampler_view(struct pipe_context *pipe,
- struct pipe_resource *texture)
-{
- struct pipe_sampler_view templ;
-
- u_sampler_view_default_template(&templ, texture, texture->format);
-
- return pipe->create_sampler_view(pipe, texture, &templ);
-}
-
-
-static INLINE struct pipe_sampler_view *
st_create_texture_sampler_view_format(struct pipe_context *pipe,
struct pipe_resource *texture,
enum pipe_format format)
@@ -146,23 +134,16 @@ st_create_texture_sampler_view_format(struct pipe_context *pipe,
return pipe->create_sampler_view(pipe, texture, &templ);
}
-
static INLINE struct pipe_sampler_view *
-st_get_texture_sampler_view(struct st_texture_object *stObj,
- struct pipe_context *pipe)
+st_create_texture_sampler_view(struct pipe_context *pipe,
+ struct pipe_resource *texture)
{
- if (!stObj || !stObj->pt) {
- return NULL;
- }
-
- if (!stObj->sampler_view) {
- stObj->sampler_view = st_create_texture_sampler_view(pipe, stObj->pt);
- }
-
- return stObj->sampler_view;
+ return st_create_texture_sampler_view_format(pipe, texture,
+ texture->format);
}
+
extern struct pipe_resource *
st_texture_create(struct st_context *st,
enum pipe_texture_target target,
diff --git a/mesalib/src/mesa/swrast/s_fragprog.c b/mesalib/src/mesa/swrast/s_fragprog.c
index cd20d8e36..8d59371c8 100644
--- a/mesalib/src/mesa/swrast/s_fragprog.c
+++ b/mesalib/src/mesa/swrast/s_fragprog.c
@@ -40,7 +40,8 @@ GLboolean
_swrast_use_fragment_program(struct gl_context *ctx)
{
struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
- return fp && fp != ctx->FragmentProgram._TexEnvProgram;
+ return fp && !(fp == ctx->FragmentProgram._TexEnvProgram
+ && fp->Base.NumInstructions == 0);
}
/**
diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c
index d6b4d615c..06e36a677 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_array.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_array.c
@@ -708,6 +708,7 @@ vbo_exec_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count,
* Map GL_ELEMENT_ARRAY_BUFFER and print contents.
* For debugging.
*/
+#if 0
static void
dump_element_buffer(struct gl_context *ctx, GLenum type)
{
@@ -759,6 +760,7 @@ dump_element_buffer(struct gl_context *ctx, GLenum type)
ctx->Driver.UnmapBuffer(ctx, ctx->Array.ArrayObj->ElementArrayBufferObj);
}
+#endif
/**
@@ -857,6 +859,7 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
GLint basevertex)
{
static GLuint warnCount = 0;
+ GLboolean index_bounds_valid = GL_TRUE;
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
@@ -869,6 +872,26 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
type, indices, basevertex ))
return;
+ if ((int) end + basevertex < 0 ||
+ start + basevertex >= ctx->Array.ArrayObj->_MaxElement) {
+ /* The application requested we draw using a range of indices that's
+ * outside the bounds of the current VBO. This is invalid and appears
+ * to give undefined results. The safest thing to do is to simply
+ * ignore the range, in case the application botched their range tracking
+ * but did provide valid indices. Also issue a warning indicating that
+ * the application is broken.
+ */
+ if (warnCount++ < 10) {
+ _mesa_warning(ctx, "glDrawRangeElements(start %u, end %u, "
+ "basevertex %d, count %d, type 0x%x, indices=%p):\n"
+ "\trange is outside VBO bounds (max=%u); ignoring.\n"
+ "\tThis should be fixed in the application.",
+ start, end, basevertex, count, type, indices,
+ ctx->Array.ArrayObj->_MaxElement - 1);
+ }
+ index_bounds_valid = GL_FALSE;
+ }
+
/* NOTE: It's important that 'end' is a reasonable value.
* in _tnl_draw_prims(), we use end to determine how many vertices
* to transform. If it's too large, we can unnecessarily split prims
@@ -885,62 +908,6 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
end = MIN2(end, 0xffff);
}
- if (end >= ctx->Array.ArrayObj->_MaxElement) {
- /* the max element is out of bounds of one or more enabled arrays */
- warnCount++;
-
- if (warnCount < 10) {
- _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, count %d, "
- "type 0x%x, indices=%p)\n"
- "\tend is out of bounds (max=%u) "
- "Element Buffer %u (size %d)\n"
- "\tThis should probably be fixed in the application.",
- start, end, count, type, indices,
- ctx->Array.ArrayObj->_MaxElement - 1,
- ctx->Array.ArrayObj->ElementArrayBufferObj->Name,
- (int) ctx->Array.ArrayObj->ElementArrayBufferObj->Size);
- }
-
- if (0)
- dump_element_buffer(ctx, type);
-
- if (0)
- _mesa_print_arrays(ctx);
-
- /* 'end' was out of bounds, but now let's check the actual array
- * indexes to see if any of them are out of bounds.
- */
- if (0) {
- GLuint max = _mesa_max_buffer_index(ctx, count, type, indices,
- ctx->Array.ArrayObj->ElementArrayBufferObj);
- if (max >= ctx->Array.ArrayObj->_MaxElement) {
- if (warnCount < 10) {
- _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, "
- "count %d, type 0x%x, indices=%p)\n"
- "\tindex=%u is out of bounds (max=%u) "
- "Element Buffer %u (size %d)\n"
- "\tSkipping the glDrawRangeElements() call",
- start, end, count, type, indices, max,
- ctx->Array.ArrayObj->_MaxElement - 1,
- ctx->Array.ArrayObj->ElementArrayBufferObj->Name,
- (int) ctx->Array.ArrayObj->ElementArrayBufferObj->Size);
- }
- }
- /* XXX we could also find the min index and compare to 'start'
- * to see if start is correct. But it's more likely to get the
- * upper bound wrong.
- */
- }
-
- /* Set 'end' to the max possible legal value */
- assert(ctx->Array.ArrayObj->_MaxElement >= 1);
- end = ctx->Array.ArrayObj->_MaxElement - 1;
-
- if (end < start) {
- return;
- }
- }
-
if (0) {
printf("glDraw[Range]Elements{,BaseVertex}"
"(start %u, end %u, type 0x%x, count %d) ElemBuf %u, "
@@ -950,13 +917,17 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
basevertex);
}
+ if ((int) start + basevertex < 0 ||
+ end + basevertex >= ctx->Array.ArrayObj->_MaxElement)
+ index_bounds_valid = GL_FALSE;
+
#if 0
check_draw_elements_data(ctx, count, type, indices);
#else
(void) check_draw_elements_data;
#endif
- vbo_validated_drawrangeelements(ctx, mode, GL_TRUE, start, end,
+ vbo_validated_drawrangeelements(ctx, mode, index_bounds_valid, start, end,
count, type, indices, basevertex, 1);
}
diff --git a/pixman/configure.ac b/pixman/configure.ac
index 2eded7056..f39f43739 100644
--- a/pixman/configure.ac
+++ b/pixman/configure.ac
@@ -259,14 +259,14 @@ PIXMAN_CHECK_CFLAG([-fvisibility=hidden], [dnl
#error Have -fvisibility but it is ignored and generates a warning
#endif
#else
-error Need GCC 4.0 for visibility
+#error Need GCC 4.0 for visibility
#endif
])
PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl
#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
#else
-error Need Sun Studio 8 for visibility
+#error Need Sun Studio 8 for visibility
#endif
])
@@ -292,7 +292,7 @@ xserver_save_CFLAGS=$CFLAGS
CFLAGS="$MMX_CFLAGS $CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
-error "Need GCC >= 3.4 for MMX intrinsics"
+#error "Need GCC >= 3.4 for MMX intrinsics"
#endif
#include <mmintrin.h>
int main () {
@@ -407,6 +407,7 @@ case $host_os in
;;
esac
+AC_SUBST(IWMMXT_CFLAGS)
AC_SUBST(MMX_CFLAGS)
AC_SUBST(MMX_LDFLAGS)
AC_SUBST(SSE2_CFLAGS)
@@ -426,7 +427,7 @@ xserver_save_CFLAGS=$CFLAGS
CFLAGS="$VMX_CFLAGS $CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#if defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4))
-error "Need GCC >= 3.4 for sane altivec support"
+#error "Need GCC >= 3.4 for sane altivec support"
#endif
#include <altivec.h>
int main () {
@@ -551,7 +552,7 @@ have_iwmmxt_intrinsics=no
AC_MSG_CHECKING(whether to use ARM IWMMXT intrinsics)
xserver_save_CFLAGS=$CFLAGS
CFLAGS="$IWMMXT_CFLAGS $CFLAGS"
-AC_COMPILE_IFELSE([
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#ifndef __arm__
#error "IWMMXT is only available on ARM"
#endif
@@ -562,11 +563,11 @@ AC_COMPILE_IFELSE([
int main () {
union {
__m64 v;
- [char c[8];]
+ char c[8];
} a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} };
int b = 4;
__m64 c = _mm_srli_si64 (a.v, b);
-}], have_iwmmxt_intrinsics=yes)
+}]])], have_iwmmxt_intrinsics=yes)
CFLAGS=$xserver_save_CFLAGS
AC_ARG_ENABLE(arm-iwmmxt,
@@ -855,7 +856,14 @@ AC_SUBST(TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR)
dnl ==================
dnl libpng
-PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no)
+AC_ARG_ENABLE(libpng, AS_HELP_STRING([--enable-libpng], [Build support for libpng (default: auto)]),
+ [have_libpng=$enableval], [have_libpng=auto])
+
+case x$have_libpng in
+ xyes) PKG_CHECK_MODULES(PNG, [libpng]) ;;
+ xno) ;;
+ *) PKG_CHECK_MODULES(PNG, [libpng], have_libpng=yes, have_libpng=no) ;;
+esac
if test x$have_libpng = xyes; then
AC_DEFINE([HAVE_LIBPNG], [1], [Whether we have libpng])
diff --git a/pixman/pixman/pixman-mmx.c b/pixman/pixman/pixman-mmx.c
index 937ce8fae..09b20773c 100644
--- a/pixman/pixman/pixman-mmx.c
+++ b/pixman/pixman/pixman-mmx.c
@@ -56,6 +56,37 @@ _mm_empty (void)
}
#endif
+#ifdef USE_X86_MMX
+/* We have to compile with -msse to use xmmintrin.h, but that causes SSE
+ * instructions to be generated that we don't want. Just duplicate the
+ * functions we want to use. */
+extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_mulhi_pu16 (__m64 __A, __m64 __B)
+{
+ asm("pmulhuw %1, %0\n\t"
+ : "+y" (__A)
+ : "y" (__B)
+ );
+ return __A;
+}
+
+extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+_mm_shuffle_pi16 (__m64 __A, int8_t const __N)
+{
+ __m64 ret;
+
+ asm("pshufw %2, %1, %0\n\t"
+ : "=y" (ret)
+ : "y" (__A), "K" (__N)
+ );
+
+ return ret;
+}
+#endif
+
+#define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
+ (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
+
/* Notes about writing mmx code
*
* give memory operands as the second operand. If you give it as the
@@ -125,9 +156,7 @@ typedef struct
mmxdatafield mmx_mask_2;
mmxdatafield mmx_mask_3;
mmxdatafield mmx_full_alpha;
- mmxdatafield mmx_ffff0000ffff0000;
- mmxdatafield mmx_0000ffff00000000;
- mmxdatafield mmx_000000000000ffff;
+ mmxdatafield mmx_4x0101;
} mmx_data_t;
#if defined(_MSC_VER)
@@ -152,9 +181,7 @@ static const mmx_data_t c =
MMXDATA_INIT (.mmx_mask_2, 0xffff0000ffffffff),
MMXDATA_INIT (.mmx_mask_3, 0x0000ffffffffffff),
MMXDATA_INIT (.mmx_full_alpha, 0x00ff000000000000),
- MMXDATA_INIT (.mmx_ffff0000ffff0000, 0xffff0000ffff0000),
- MMXDATA_INIT (.mmx_0000ffff00000000, 0x0000ffff00000000),
- MMXDATA_INIT (.mmx_000000000000ffff, 0x000000000000ffff),
+ MMXDATA_INIT (.mmx_4x0101, 0x0101010101010101),
};
#ifdef USE_CVT_INTRINSICS
@@ -218,8 +245,7 @@ pix_multiply (__m64 a, __m64 b)
res = _mm_mullo_pi16 (a, b);
res = _mm_adds_pu16 (res, MC (4x0080));
- res = _mm_adds_pu16 (res, _mm_srli_pi16 (res, 8));
- res = _mm_srli_pi16 (res, 8);
+ res = _mm_mulhi_pu16 (res, MC (4x0101));
return res;
}
@@ -233,52 +259,19 @@ pix_add (__m64 a, __m64 b)
static force_inline __m64
expand_alpha (__m64 pixel)
{
- __m64 t1, t2;
-
- t1 = shift (pixel, -48);
- t2 = shift (t1, 16);
- t1 = _mm_or_si64 (t1, t2);
- t2 = shift (t1, 32);
- t1 = _mm_or_si64 (t1, t2);
-
- return t1;
+ return _mm_shuffle_pi16(pixel, _MM_SHUFFLE (3, 3, 3, 3));
}
static force_inline __m64
expand_alpha_rev (__m64 pixel)
{
- __m64 t1, t2;
-
- /* move alpha to low 16 bits and zero the rest */
- t1 = shift (pixel, 48);
- t1 = shift (t1, -48);
-
- t2 = shift (t1, 16);
- t1 = _mm_or_si64 (t1, t2);
- t2 = shift (t1, 32);
- t1 = _mm_or_si64 (t1, t2);
-
- return t1;
+ return _mm_shuffle_pi16(pixel, _MM_SHUFFLE (0, 0, 0, 0));
}
static force_inline __m64
invert_colors (__m64 pixel)
{
- __m64 x, y, z;
-
- x = y = z = pixel;
-
- x = _mm_and_si64 (x, MC (ffff0000ffff0000));
- y = _mm_and_si64 (y, MC (000000000000ffff));
- z = _mm_and_si64 (z, MC (0000ffff00000000));
-
- y = shift (y, 32);
- z = shift (z, -32);
-
- x = _mm_or_si64 (x, y);
- x = _mm_or_si64 (x, z);
-
- return x;
+ return _mm_shuffle_pi16(pixel, _MM_SHUFFLE (3, 0, 1, 2));
}
static force_inline __m64
@@ -471,7 +464,7 @@ pix_add_mul (__m64 x, __m64 a, __m64 y, __m64 b)
#define pix_add_mul(x, a, y, b) \
( x = pix_multiply (x, a), \
- y = pix_multiply (y, a), \
+ y = pix_multiply (y, b), \
pix_add (x, y) )
#endif
@@ -1360,7 +1353,7 @@ mmx_composite_over_n_8888_8888_ca (pixman_implementation_t *imp,
twidth -= 2;
}
- while (twidth)
+ if (twidth)
{
uint32_t m = *(uint32_t *)p;
@@ -1901,14 +1894,14 @@ pixman_fill_mmx (uint32_t *bits,
byte_line += stride;
w = byte_width;
- while (w >= 1 && ((unsigned long)d & 1))
+ if (w >= 1 && ((unsigned long)d & 1))
{
*(uint8_t *)d = (xor & 0xff);
w--;
d++;
}
- while (w >= 2 && ((unsigned long)d & 3))
+ if (w >= 2 && ((unsigned long)d & 3))
{
*(uint16_t *)d = xor;
w -= 2;
@@ -1961,13 +1954,13 @@ pixman_fill_mmx (uint32_t *bits,
w -= 4;
d += 4;
}
- while (w >= 2)
+ if (w >= 2)
{
*(uint16_t *)d = xor;
w -= 2;
d += 2;
}
- while (w >= 1)
+ if (w >= 1)
{
*(uint8_t *)d = (xor & 0xff);
w--;
@@ -2925,7 +2918,7 @@ pixman_blt_mmx (uint32_t *src_bits,
dst_bytes += dst_stride;
w = byte_width;
- while (w >= 1 && ((unsigned long)d & 1))
+ if (w >= 1 && ((unsigned long)d & 1))
{
*(uint8_t *)d = *(uint8_t *)s;
w -= 1;
@@ -2933,7 +2926,7 @@ pixman_blt_mmx (uint32_t *src_bits,
d += 1;
}
- while (w >= 2 && ((unsigned long)d & 3))
+ if (w >= 2 && ((unsigned long)d & 3))
{
*(uint16_t *)d = *(uint16_t *)s;
w -= 2;
@@ -3036,7 +3029,7 @@ mmx_composite_copy_area (pixman_implementation_t *imp,
src_x, src_y, dest_x, dest_y, width, height);
}
-#if 0
+#ifdef USE_ARM_IWMMXT
static void
mmx_composite_over_x888_8_8888 (pixman_implementation_t *imp,
pixman_composite_info_t *info)
@@ -3123,9 +3116,9 @@ static const pixman_fast_path_t mmx_fast_paths[] =
PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, mmx_composite_over_8888_n_8888 ),
PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, a8b8g8r8, mmx_composite_over_8888_n_8888 ),
PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, x8b8g8r8, mmx_composite_over_8888_n_8888 ),
-#if 0
+#ifdef USE_ARM_IWMMXT
/* FIXME: This code is commented out since it's apparently
- * not actually faster than the generic code.
+ * not actually faster than the generic code on x86.
*/
PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, x8r8g8b8, mmx_composite_over_x888_8_8888 ),
PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, a8r8g8b8, mmx_composite_over_x888_8_8888 ),
diff --git a/pixman/pixman/pixman-sse2.c b/pixman/pixman/pixman-sse2.c
index 8adf54199..e217ca339 100644
--- a/pixman/pixman/pixman-sse2.c
+++ b/pixman/pixman/pixman-sse2.c
@@ -3291,7 +3291,7 @@ pixman_fill_sse2 (uint32_t *bits,
byte_line += stride;
w = byte_width;
- while (w >= 1 && ((unsigned long)d & 1))
+ if (w >= 1 && ((unsigned long)d & 1))
{
*(uint8_t *)d = data;
w -= 1;
diff --git a/xorg-server/Xi/exevents.c b/xorg-server/Xi/exevents.c
index 1ecc3ba5a..f390f6739 100644
--- a/xorg-server/Xi/exevents.c
+++ b/xorg-server/Xi/exevents.c
@@ -671,7 +671,7 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
if (from->touch)
{
- TouchPointInfoPtr tmp;
+ TouchClassPtr t, f;
if (!to->touch)
{
classes = to->unused_classes;
@@ -692,17 +692,22 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
} else
classes->touch = NULL;
}
- tmp = to->touch->touches;
- memcpy(to->touch, from->touch, sizeof(TouchClassRec));
- to->touch->touches = tmp;
- to->touch->sourceid = from->id;
- } else if (to->touch)
- {
- ClassesPtr classes;
- classes = to->unused_classes;
- classes->touch = to->touch;
- to->touch = NULL;
+
+
+ t = to->touch;
+ f = from->touch;
+ t->sourceid = f->sourceid;
+ t->max_touches = f->max_touches;
+ t->mode = f->mode;
+ t->buttonsDown = f->buttonsDown;
+ t->state = f->state;
+ t->motionMask = f->motionMask;
+ /* to->touches and to->num_touches are separate on the master,
+ * don't copy */
}
+ /* Don't remove touch class if from->touch is non-existent. The to device
+ * may have an active touch grab, so we need to keep the touch class record
+ * around. */
}
/**
@@ -1164,6 +1169,7 @@ TouchPuntToNextOwner(DeviceIntPtr dev, TouchPointInfoPtr ti,
{
EmitTouchEnd(dev, ti, 0, 0);
TouchEndTouch(dev, ti);
+ return;
}
if (ti->listeners[0].state == LISTENER_EARLY_ACCEPT)
@@ -2215,7 +2221,7 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
if (BitIsOn(mouse->button->down, i))
- SetBit(&xi2event[1], i);
+ SetBit(&xi2event[1], mouse->button->map[i]);
if (dev->key)
{
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index 7678aa1f2..6ea4ba010 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -360,6 +360,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
if (i >= lastSlave->valuator->numAxes)
{
pDev->last.valuators[i] = 0;
+ valuator_mask_set_double(pDev->last.scroll, i, 0);
}
else
{
@@ -367,6 +368,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i,
pDev->valuator->axes + i, 0, 0);
pDev->last.valuators[i] = val;
+ valuator_mask_set_double(pDev->last.scroll, i, val);
}
}
}
diff --git a/xorg-server/hw/xquartz/GL/capabilities.c b/xorg-server/hw/xquartz/GL/capabilities.c
index dd3f855f4..b718a4156 100644
--- a/xorg-server/hw/xquartz/GL/capabilities.c
+++ b/xorg-server/hw/xquartz/GL/capabilities.c
@@ -23,17 +23,20 @@
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
+
+#define Cursor Mac_Cursor
+#define BOOL Mac_BOOL
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <OpenGL/glext.h>
#include <ApplicationServices/ApplicationServices.h>
+#undef Cursor
+#undef BOOL
#include "capabilities.h"
-#define Cursor X_Cursor
#include "os.h"
-#undef Cursor
static void handleBufferModes(struct glCapabilitiesConfig *c, GLint bufferModes) {
if(bufferModes & kCGLStereoscopicBit) {
diff --git a/xorg-server/xkeyboard-config/symbols/no b/xorg-server/xkeyboard-config/symbols/no
index 21e317f8b..53c83da62 100644
--- a/xorg-server/xkeyboard-config/symbols/no
+++ b/xorg-server/xkeyboard-config/symbols/no
@@ -64,7 +64,7 @@ xkb_symbols "dvorak" {
key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
key <AE02> { [ 2, quotedbl, at, twosuperior ] };
key <AE03> { [ 3, numbersign, sterling, threesuperior ] };
- key <AE04> { [ 4, dollar, currency,onequarter ] };
+ key <AE04> { [ 4, currency, dollar,onequarter ] };
key <AE05> { [ 5, percent, onehalf, onehalf ] };
key <AE06> { [ 6, ampersand, threequarters, threequarters ] };
key <AE07> { [ 7, slash, braceleft, division ] };
diff --git a/xorg-server/xkeyboard-config/symbols/ru b/xorg-server/xkeyboard-config/symbols/ru
index 408e40806..a3dabefdf 100644
--- a/xorg-server/xkeyboard-config/symbols/ru
+++ b/xorg-server/xkeyboard-config/symbols/ru
@@ -273,13 +273,13 @@ xkb_symbols "cv" {
key.type[group1]="FOUR_LEVEL";
key <AD03> { [ Cyrillic_u, Cyrillic_U,
- 0x010004f3, 0x010004f2 ] };
+ U04F3, U04F2 ] };
key <AD05> { [ Cyrillic_ie, Cyrillic_IE,
- 0x01000115, 0x01000114 ] };
+ U04D7, U04D6 ] };
key <AC04> { [ Cyrillic_a, Cyrillic_A,
- abreve, Abreve ] };
+ U04D1, U04D0 ] };
key <AB03> { [ Cyrillic_es, Cyrillic_ES,
- ccedilla, Ccedilla ] };
+ U04AB, U04AA ] };
include "level3(ralt_switch)"
};