diff options
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)" }; |